jbrowse-plugin-graphgenomeviewer 6.0.2 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{GbzBaseSyntenyAdapter-MB7NQPOZ.js → GbzBaseSyntenyAdapter-2BKLBC4F.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-MB7NQPOZ.js.map → GbzBaseSyntenyAdapter-2BKLBC4F.js.map} +1 -1
- package/dist/chunks/{GraphGenomeView-QAJUST4R.js → GraphGenomeView-QC2QC4KU.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-CLI6V424.js → GraphTrackSettingsDialog-PPKPBVLS.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-2ZCJVTOZ.js → LinearGraphDisplay-OSAPH6XH.js} +2 -2
- package/dist/chunks/{MinigraphBubbleAdapter-5AQXW2NH.js → MinigraphBubbleAdapter-3UAIVFCB.js} +2 -2
- package/dist/chunks/{RgfaTabixAdapter-P3RQBV2A.js → RgfaTabixAdapter-THL7HZG6.js} +2 -2
- package/dist/chunks/{bandage-layout-3AR6BCUD-7PXT4PRO.js → bandage-layout-3AR6BCUD-77FHETNY.js} +1 -1
- package/dist/chunks/{bandage-layout-3AR6BCUD-7PXT4PRO.js.map → bandage-layout-3AR6BCUD-77FHETNY.js.map} +1 -1
- package/dist/chunks/{chunk-3TODQETZ.js → chunk-BD6T6PQA.js} +2 -2
- package/dist/chunks/{chunk-XEY4OTQ5.js → chunk-CNQYRKZ3.js} +1 -1
- package/dist/chunks/{chunk-XEY4OTQ5.js.map → chunk-CNQYRKZ3.js.map} +1 -1
- package/dist/chunks/{chunk-Y5WX5MAD.js → chunk-DKNKJWYF.js} +2 -2
- package/dist/chunks/{chunk-5TCH4S5W.js → chunk-FSGQSCPI.js} +2 -2
- package/dist/chunks/{chunk-5TCH4S5W.js.map → chunk-FSGQSCPI.js.map} +1 -1
- package/dist/chunks/{chunk-KTZHBWBF.js → chunk-IKKD4EOI.js} +2 -2
- package/dist/chunks/{chunk-KTZHBWBF.js.map → chunk-IKKD4EOI.js.map} +1 -1
- package/dist/chunks/{chunk-XYYKXQ73.js → chunk-JE3RBATE.js} +2 -2
- package/dist/chunks/{chunk-XYYKXQ73.js.map → chunk-JE3RBATE.js.map} +1 -1
- package/dist/chunks/{chunk-X7R52TDL.js → chunk-LRBVMAUV.js} +1 -1
- package/dist/chunks/{chunk-X7R52TDL.js.map → chunk-LRBVMAUV.js.map} +1 -1
- package/dist/chunks/{chunk-TIMQMQZE.js → chunk-OPJLYB4S.js} +1 -1
- package/dist/chunks/{chunk-TIMQMQZE.js.map → chunk-OPJLYB4S.js.map} +1 -1
- package/dist/chunks/{chunk-6YAGPYAT.js → chunk-S2YZT446.js} +1 -1
- package/dist/chunks/{chunk-6YAGPYAT.js.map → chunk-S2YZT446.js.map} +1 -1
- package/dist/chunks/{chunk-NRYLVZMG.js → chunk-XNL7PBQZ.js} +2 -2
- package/dist/chunks/{chunk-NRYLVZMG.js.map → chunk-XNL7PBQZ.js.map} +3 -3
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +5 -5
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
- package/package.json +2 -2
- package/src/GraphGenomeView/components/SettingsMenu.tsx +1 -1
- package/src/GraphGenomeView/model.test.ts +18 -0
- package/src/GraphGenomeView/pane/launchActions.ts +1 -1
- package/src/GraphGenomeView/pane/loadActions.ts +11 -10
- package/src/GraphGenomeView/pane/renderingActions.ts +5 -0
- package/src/version.ts +1 -1
- /package/dist/chunks/{GraphGenomeView-QAJUST4R.js.map → GraphGenomeView-QC2QC4KU.js.map} +0 -0
- /package/dist/chunks/{GraphTrackSettingsDialog-CLI6V424.js.map → GraphTrackSettingsDialog-PPKPBVLS.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-2ZCJVTOZ.js.map → LinearGraphDisplay-OSAPH6XH.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-5AQXW2NH.js.map → MinigraphBubbleAdapter-3UAIVFCB.js.map} +0 -0
- /package/dist/chunks/{RgfaTabixAdapter-P3RQBV2A.js.map → RgfaTabixAdapter-THL7HZG6.js.map} +0 -0
- /package/dist/chunks/{chunk-3TODQETZ.js.map → chunk-BD6T6PQA.js.map} +0 -0
- /package/dist/chunks/{chunk-Y5WX5MAD.js.map → chunk-DKNKJWYF.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{B as Kt,C as Be,D as ce,E as jt,F as Vt,G as yt,H as ao,I as io,J as Qt,K as Zt,N as lo,O as co,V as fo,W as bt,a as le,g as Qn,h as we,i as Zn,j as Jn,k as gt,l as q,n as eo,o as to,p as et,q as xt,r as tt,s as De,t as no,u as oo,v as so,z as ro}from"./chunk-5TCH4S5W.js";import{d as ho}from"./chunk-TIMQMQZE.js";import{c as Vn}from"./chunk-6YAGPYAT.js";import{a as mt,b as Fe,c as P,d as Ze,e as ye,f as Ut,g as be,j as Je}from"./chunk-XEY4OTQ5.js";import{a as ut,c as jn,d as pt}from"./chunk-X7R52TDL.js";import{a as ht}from"./chunk-TYJTJGPO.js";import{a as Kn,b as Qe}from"./chunk-FY3BTKY4.js";var po=Kn((tf,uo)=>{uo.exports=JBrowseExports["@mui/material/SvgIcon"]});var ja=Kn((Yd,es)=>{es.exports=JBrowseExports.mobx});var te=Qe(po(),1);function B(e,t,n,s){return(s<<24|n<<16|t<<8|e)>>>0}function Jt(e){return e&255}function en(e){return e>>>8&255}function tn(e){return e>>>16&255}function nn(e){return e>>>24&255}function ne(e){return`rgba(${Jt(e)},${en(e)},${tn(e)},${nn(e)/255})`}function mo(e,t){return`rgba(${Math.round(e[0]*255)},${Math.round(e[1]*255)},${Math.round(e[2]*255)},${t})`}function qe(e,t){return B(Jt(e),en(e),tn(e),Math.round(nn(e)*t))}function wt(e,t){return B(Math.min(255,Math.round(Jt(e)*t)),Math.min(255,Math.round(en(e)*t)),Math.min(255,Math.round(tn(e)*t)),nn(e))}var go=new WeakMap;function Mt(e,t,n,s,o,r,a=!1){let{scaleX:i,scaleY:l}=n,c=go.get(e);if(c?.graph===t&&c.scaleX===i&&c.scaleY===l&&c.deletions===s&&c.routes===r&&c.stranded===a&&c.version===o)return c.curves;let d=new Map;for(let f=0;f<t.edges.length;f++){let h=t.edges[f],p=e[h.from],u=e[h.to];if(p?.length&&u?.length){let m=s?.get(f),g=m&&r?.[f];d.set(f,g?so(p,u,g,a?xt(h):void 0):oo(p,u,no(h,a),0,0,n,m?ro(e,m):[]))}}return go.set(e,{graph:t,scaleX:i,scaleY:l,deletions:s,routes:r,stranded:a,version:o,curves:d}),d}var Gr=4;function nt(e){let t=new Map;function n(s,o){let r=t.get(s);r?r.push(o):t.set(s,[o])}for(let s of e.edges)n(s.from,s.to),n(s.to,s.from);return t}function Yr({nodeId:e,nodeById:t,neighbors:n}){let s=new Set([e]),o=[e],r=1/0,a=-1/0;for(let i=0;i<Gr&&o.length>0;i++){let l=[];for(let c of o){let d=n.get(c);if(d){for(let f of d)if(!s.has(f)){s.add(f);let h=t.get(f);h&&P(h)?(r=Math.min(r,h.stable.start+h.length),a=Math.max(a,h.stable.start)):l.push(f)}}}o=l}return r===1/0?void 0:{start:Math.min(r,a),end:Math.max(r,a)}}function zr({nodeId:e,nodeById:t,neighbors:n}){let s=t.get(e);return s===void 0?void 0:P(s)?{start:s.stable.start,end:s.stable.start+s.length}:Yr({nodeId:e,nodeById:t,neighbors:n})}function xo(e){let t=new Map(e.nodes.map(o=>[o.id,o])),n=nt(e),s=new Map;for(let o of e.nodes){let r=zr({nodeId:o.id,nodeById:t,neighbors:n});r&&s.set(o.id,(r.start+r.end)/2)}return s}var Ur=B(119,119,119,217),yo=B(136,136,136,217),Kr=B(24,24,28,240),jr=2.2,ln=B(160,160,160,255),Xe=.18,Et=ne(qe(ln,Xe)),Vr=11,Qr=1.2,bo=4,on=1e-6,Zr=7,Jr=3,ea=3,ta=1.5,wo=3,na=.5,oa=.45,sn=12,sa=1e-6,fe=new Float64Array(64),Me=new Float64Array(64),ve=new Float64Array(64);function ra(e,t,n,s){let o=e.length*sn+1;fe.length<o&&(fe=new Float64Array(o),Me=new Float64Array(o),ve=new Float64Array(o));let r=e[e.length-1];fe[0]=r.x1,Me[0]=r.y1,ve[0]=0;let a=1,i=0;for(let l=e.length-1;l>=0&&i<s;l--){let c=e[l];for(let d=1;d<=sn&&i<s;d++){let f=1-(d/sn)**2,h=1-f,p=h*h*h,u=3*h*h*f,m=3*h*f*f,g=f*f*f,x=p*c.x0+u*c.cx0+m*c.cx1+g*c.x1,w=p*c.y0+u*c.cy0+m*c.cy1+g*c.y1;i+=Math.hypot(x-fe[a-1],(w-Me[a-1])*n)*t,fe[a]=x,Me[a]=w,ve[a]=i,a++}}return a}function Mo(e,t){let n=1;for(;n<e-1&&ve[n]<t;)n++;let s=ve[n-1],o=ve[n],r=o>s?Math.min(1,Math.max(0,(t-s)/(o-s))):0;return{x:fe[n-1]+(fe[n]-fe[n-1])*r,y:Me[n-1]+(Me[n]-Me[n-1])*r}}function aa({curves:e,edgeHalfWidth:t,nodeHalfWidth:n,scale:s,yToX:o,color:r,fromSegments:a,toSegments:i}){let l=Zr+Jr*t,c=ra(e,s,o,n+wo*l),d=ve[c-1],f=d<sa,h=Math.min(n,d),p=f?Math.min(1,ia(a,s,o)/l):1;if(f?p<na:d<wo*l)return;let u=Mo(c,h),m=Mo(c,h+l*p),g=u.x-m.x,x=(u.y-m.y)*o,w=e[e.length-1];return{x:u.x,y:u.y,angle:Math.hypot(g,x)>0?Math.atan2(x,g):_o(w,o,ca(w,i)),length:l*p,halfWidth:(ea+ta*t)*p,color:r}}function ia(e,t,n){let s=0;for(let o=1;o<e.length;o++)s+=Math.hypot(e[o].x-e[o-1].x,(e[o].y-e[o-1].y)*n);return s*t}function la(e,t,n,s,o){if(s)return xt(e).from==="start";let r=a=>Math.hypot(a.x-n.x0,(a.y-n.y0)*o);return r(t[0])<r(t.at(-1))}function ca(e,t){if(t.length<2)return;let n=t[0],s=t[t.length-1];return Math.hypot(e.x1-n.x,e.y1-n.y)<=Math.hypot(e.x1-s.x,e.y1-s.y)?{from:n,to:t[1]}:{from:s,to:t[t.length-2]}}function rn(e,t=1){let n=t===1?e:e.map(o=>({x:o.x,y:o.y*t})),s=[];for(let o=0;o<n.length;o++){let r=0,a=0;if(o===0){let i=n[1].x-n[0].x,l=n[1].y-n[0].y,c=Math.hypot(i,l);c>0&&(r=-l/c,a=i/c)}else if(o===n.length-1){let i=n[o].x-n[o-1].x,l=n[o].y-n[o-1].y,c=Math.hypot(i,l);c>0&&(r=-l/c,a=i/c)}else{let i=n[o].x-n[o-1].x,l=n[o].y-n[o-1].y,c=Math.hypot(i,l),d=n[o+1].x-n[o].x,f=n[o+1].y-n[o].y,h=Math.hypot(d,f);if(c>0&&h>0){let p=-l/c,u=i/c,m=-f/h,g=d/h;r=(p+m)/2,a=(u+g)/2;let x=p*r+u*a;x>.1&&(r/=x,a/=x)}else c>0?(r=-l/c,a=i/c):h>0&&(r=-f/h,a=d/h)}s.push({nx:r,ny:a})}return s}function vo(e,t,n,s=1){return e.map((o,r)=>({x:o.x+t[r].nx*n,y:o.y+t[r].ny*n/s}))}function vt(e,t,n,s){return B(Math.round(e*255),Math.round(t*255),Math.round(n*255),Math.round(s*255))}function Ee(e,t,n){let s=(1-Math.abs(2*n-1))*t,o=s*(1-Math.abs(e/60%2-1)),r=n-s/2,a=0,i=0,l=0;return e<60?(a=s,i=o):e<120?(a=o,i=s):e<180?(i=s,l=o):e<240?(i=o,l=s):e<300?(a=o,l=s):(a=s,l=o),[a+r,i+r,l+r]}var fa=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],da=[[237,137,44],[158,42,122]],ha=[[220,50,50],[50,120,220]];function an(e,t){let n=Math.max(0,Math.min(1,t))*(e.length-1),s=Math.min(e.length-2,Math.floor(n)),o=n-s,r=e[s],a=e[s+1];return B(Math.round(r[0]+(a[0]-r[0])*o),Math.round(r[1]+(a[1]-r[1])*o),Math.round(r[2]+(a[2]-r[2])*o),255)}function ua(e,t){let[n,s,o]=Ee(ao(e),Qt,Zt);return vt(n,s,o,t)}var Re=300,pa=.7,ma=.5,No=[60,65,72],Rt=B(...No,255),St=`rgb(${No.join(", ")})`;function ga(e,t){let n=xo(e);if(t&&t.end>t.start)return{start:t.start,span:t.end-t.start,midpoints:n};let s=1/0,o=-1/0;for(let r of n.values())s=Math.min(s,r),o=Math.max(o,r);return{start:s===1/0?0:s,span:o>s?o-s:1,midpoints:n}}function Nt(e){let t=1/0,n=-1/0,s=1/0,o=-1/0,r=0;for(let a of e.nodes)a.stable!==void 0&&a.stable.rank>r&&(r=a.stable.rank),a.depth<t&&(t=a.depth),a.depth>n&&(n=a.depth),a.length<s&&(s=a.length),a.length>o&&(o=a.length);return{minDepth:t,maxDepth:n,minLength:s,maxLength:o,maxRank:r,nodeCount:e.nodes.length}}function _t(e,t,n,s){switch(n){case"random":return ua(e.id,1);case"depth":return an(fa,s.maxDepth>s.minDepth?(e.depth-s.minDepth)/(s.maxDepth-s.minDepth):.5);case"node-length":return an(ha,s.maxLength>s.minLength?(e.length-s.minLength)/(s.maxLength-s.minLength):.5);case"stable-rank":return e.stable===void 0?B(160,160,160,255):e.stable.rank===0?B(52,152,219,255):an(da,s.maxRank>1?(e.stable.rank-1)/(s.maxRank-1):0);case"reference-position":{let o=s.referenceRamp,r=o?.midpoints.get(e.id);if(o===void 0||r===void 0)return B(160,160,160,255);if(e.stable!==void 0&&e.stable.rank>0)return Rt;let a=Math.max(0,Math.min(1,(r-o.start)/o.span)),[i,l,c]=Ee(a*Re,pa,ma);return vt(i,l,c,1)}case"grey":return B(160,160,160,255);case"rainbow":{let o=s.nodeCount>1?t/s.nodeCount*360:0,[r,a,i]=Ee(o,.75,.5);return vt(r,a,i,1)}default:return B(52,152,219,255)}}function _o(e,t=1,n){let s=[[e.cx1,e.cy1],[e.cx0,e.cy0],[e.x0,e.y0]];for(let[o,r]of s){let a=e.x1-o,i=(e.y1-r)*t;if(Math.hypot(a,i)>0)return Math.atan2(i,a)}return n?Math.atan2((n.to.y-n.from.y)*t,n.to.x-n.from.x):0}function xa(e,t){let n=!1;for(let s=0;s<e.length-1&&!n;s++){let o=e[s],r=e[s+1];n=Math.max(o.x,r.x)>=t.minX&&Math.min(o.x,r.x)<=t.maxX&&Math.max(o.y,r.y)>=t.minY&&Math.min(o.y,r.y)<=t.maxY}return n}function Eo(e,t){for(let n of e){let s=Math.min(n.x0,n.cx0,n.cx1,n.x1),o=Math.max(n.x0,n.cx0,n.cx1,n.x1),r=Math.min(n.y0,n.cy0,n.cy1,n.y1),a=Math.max(n.y0,n.cy0,n.cy1,n.y1);if(o>=t.minX&&s<=t.maxX&&a>=t.minY&&r<=t.maxY)return!0}return!1}var Ro=new WeakMap;function ya(e){let t=Ro.get(e);if(!t){let n=[],s=new Map,o=e.paths??[];for(let r=0;r<o.length;r++){let[a,i,l]=Ee(io(r,o.length),Qt,Zt);n.push(vt(a,i,l,.85)),s.has(o[r].name)||s.set(o[r].name,r)}t={pathColorByIndex:n,pathIndexByName:s},Ro.set(e,t)}return t}var So=new WeakMap,ba=new Map;function wa(e){let t=So.get(e);if(!t){t=new Map;for(let[n,s]of(e.paths??[]).entries())for(let o of new Set(s.nodeIds)){let r=t.get(o);r?r.push(n):t.set(o,[n])}So.set(e,t)}return t}function Ma(e){let{nodePositions:t,graph:n,nodeById:s,colorScheme:o,contigThickness:r,connectorThickness:a,drawPaths:i,nodeWidth:l="uniform",highlight:c,axis:d,linearLayout:f,viewportBounds:h,referenceRamp:p,deletions:u,deletionRoutes:m,stranded:g,hiddenEdges:x,version:w=0}=e,N=l==="depth"?fo(n):0,S=d.scaleX,R=tt(d),M=Mt(t,n,d,u,w,m,g),v=[],I=new Map,$=[],W=new Map,D=[],pe=new Map,_e={...Nt(n),referenceRamp:p},re=new Map;if(o==="rainbow")for(let T=0;T<n.nodes.length;T++)re.set(n.nodes[T].id,T);let G=n.paths?.length??0,{pathColorByIndex:K,pathIndexByName:z}=ya(n),U=T=>K[z.get(T)??-1]??yo,Ae=i&&G>1?wa(n):ba,ze=S>(f?1:oa);for(let T=0;T<n.edges.length;T++){let F=n.edges[T],V=t[F.from],ae=t[F.to],Q=M.get(T);if(!V?.length||!ae?.length||!Q||x?.has(T))continue;let Le=F.pathIds?.length??0,Ue=u?.get(T)!==void 0,Ke=c?.edgeIndexes.has(T)??!1,Ie=a/2*(Ue?jr:1),Ce=i&&Le>0,me=Ue?Kr:Ur,Z=!c||Ke?me:qe(me,Xe),je=s.get(F.to),Te=(je?bt(je,r,l,N):r)/2,Oe=(xe,$e,Y,ie)=>{let ee=xe===0&&$e===0?Q:et(Q,xe,$e);if(h&&!Eo(ee,h))return;if(Ue)for(let Gt of to(ee,Vr/S))D.push({curves:Gt,thickness:Ie,color:Y});else D.push({curves:ee,thickness:Ie,color:Y});let dt=ze&&ie!==void 0?aa({curves:ee,edgeHalfWidth:a/2,nodeHalfWidth:Te,scale:S,yToX:R,color:ie,fromSegments:V,toSegments:ae}):void 0;dt&&$.push(dt)},ge=D.length,Pe=$.length,J=c&&Ke&&!Ce?c.walks:void 0;if(J){let xe=s.get(F.from),$e=xe?bt(xe,r,l,N):r,Y=Math.max($e/J.length,bo),ie=rn(V,R),{nx:ee,ny:dt}=(la(F,V,Q[0],g,R)?ie[0]:ie.at(-1))??{nx:0,ny:0},Gt=1/Math.max(S,on);J.forEach((Yt,Wr)=>{if(!Yt.edgeIndexes.has(T))return;let zt=(Wr-(J.length-1)/2)*Y*Gt,Un=zt===0?Q:et(Q,ee*zt,dt*zt/R);h&&!Eo(Un,h)||D.push({curves:Un,thickness:Y/2,color:Yt.colors.get(F.from)??Yt.colors.get(F.to)??me})})}else if(!Ce)Oe(0,0,Z,Z);else{let xe=De(V,ae,Le,d),$e=Math.floor((Le-1)/2);for(let Y=0;Y<Le;Y++){let ie=xe[Y],ee=U(F.pathIds[Y]);Oe(ie.x,ie.y,c&&!c.names.has(F.pathIds[Y])?qe(ee,Xe):ee,Y===$e?Z:void 0)}}let Ve=D.length-ge;Ve>0&&pe.set(T,{start:ge,count:Ve});let ft=$.length-Pe;ft>0&&W.set(T,{start:Pe,count:ft})}for(let[T,F]of Object.entries(t)){let V=s.get(T);if(!V||h&&!xa(F,h))continue;let ae=c!==void 0&&!c.nodeIds.has(T),Q=ae?ln:_t(V,re.get(T)??0,o,_e),Le=ae?qe(Q,Xe):Q,ct=bt(V,r,l,N),Ue=ct/2,Ke=v.length,Ie=Ae.get(T),Ce=ct/G,me=F.length>=2,Z=c&&!ae&&!Ie?.length?c.walks:void 0;if(me&&Z){let Te=Math.max(ct/Z.length,bo),Oe=rn(F,R),ge=1/Math.max(S,on);Z.forEach((Pe,J)=>{let Ve=Pe.colors.get(T);if(Ve===void 0)return;let ft=(J-(Z.length-1)/2)*Te*ge;v.push({points:Z.length===1?F:vo(F,Oe,ft,R),thickness:Te/2,color:Ve})})}else if(me&&Ie?.length&&Ce>=Qr){let Te=rn(F,R),Oe=1/Math.max(S,on);for(let ge of Ie){let Pe=(ge-(G-1)/2)*Ce*Oe,J=K[ge]??yo;v.push({points:vo(F,Te,Pe,R),thickness:Ce/2,color:ae?qe(J,Xe):J})}}else me&&v.push({points:F,thickness:Ue,color:Le});let je=v.length-Ke;je>0&&I.set(T,{start:Ke,count:je})}return{nodeStrokes:v,nodeStrokeRuns:I,arrows:$,arrowRuns:W,edgeCurves:D,edgeCurveRuns:pe}}function At(e){return`hsl(${e}, 70%, 50%)`}function cn(e,t){let n=(e-t.start)/(t.end-t.start);return Math.max(0,Math.min(1,n))*Re}var va=30;function Ao({start:e,bp:t,reversed:n},s){let o=cn(e,s),r=cn(e+t,s);if(r-o<1)return[(o+r)/2];let a=Math.ceil((r-o)/va);return Array.from({length:a+1},(i,l)=>cn(e+t*(n?a-l:l)/a,s))}var fn=Array.from({length:7},(e,t)=>({offset:t/6,color:At(t/6*Re)})),Lo=`linear-gradient(to right, ${fn.map(e=>`${e.color} ${e.offset*100}%`).join(", ")})`;function A(e,t={},...n){return{tag:e,attrs:t,children:n.filter(s=>!!s||s==="")}}function Io(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function Ea(e){return Io(e).replaceAll('"',""")}function Ra(e){if(typeof e=="string")return Io(e);let t=Object.entries(e.attrs).filter(([,n])=>n!==void 0).map(([n,s])=>` ${n}="${Ea(String(s))}"`).join("");return`<${e.tag}${t}>${e.children.map(Ra).join("")}</${e.tag}>`}var Sa="#daa520",Na=1,_a=2,Aa=4;function Mf(e,t,n,s=o=>o){let o=r=>{let a=t(r)*2;return n?.nodeIds.has(r)?Math.max(a,n.walks.length*Aa):a};return e.flatMap(r=>r.exonsByNode.map(({nodeId:a,d:i})=>({key:`${r.gene.name}-${r.gene.start}-${a}`,d:s(i),inner:o(a)+2*Na})))}function vf(e,t){if(e.length===0)return;let n=(s,o,r)=>A("path",{d:s.d,fill:"none",stroke:o,"stroke-width":r,"stroke-linecap":"round","stroke-linejoin":"round","vector-effect":t.transform?"non-scaling-stroke":void 0});return A("g",{},A("mask",{id:t.id,maskUnits:"userSpaceOnUse",x:0,y:0,width:t.width,height:t.height},A("g",{transform:t.transform},...e.map(s=>n(s,"#fff",s.inner+2*_a)),...e.map(s=>n(s,"#000",s.inner)))),A("rect",{width:t.width,height:t.height,fill:Sa,mask:`url(#${t.id})`}))}var La=50;function Co(e,t){return t>0?Math.max(1,e/t):La}function Ia(e){let t=new Set,n=1/0,s=-1/0;for(let o of e)t.add(o.minY),n=Math.min(n,o.minY),s=Math.max(s,o.minY);return t.size>1?(s-n)/(t.size-1):void 0}function Ca(e,t,n){let s=Co(t,e.length);return{x:s,y:n>0?Co(n,e.length):Ia(e)??s}}function To(e,t,n,s){return e===void 0?Ca(t,n,s):typeof e=="number"?{x:e,y:e}:e}function Ta(e,t,n){let s=e.get(t);s||(s=new Map,e.set(t,s));let o=s.get(n);return o||(o=[],s.set(n,o)),o}function Oo(e,t,n,s,o,r,a){let i=Math.floor(n/t.x),l=Math.floor(o/t.x),c=Math.floor(s/t.y),d=Math.floor(r/t.y);for(let f=i;f<=l;f++)for(let h=c;h<=d;h++)Ta(e,f,h).push(a)}function Po(e,t,n,s,o,r){let a=Math.floor((n-o)/t.x),i=Math.floor((n+o)/t.x),l=Math.floor((s-r)/t.y),c=Math.floor((s+r)/t.y),d=[],f=new Set;for(let h=a;h<=i;h++){let p=e.get(h);if(p)for(let u=l;u<=c;u++){let m=p.get(u);if(m)for(let g of m)f.has(g)||(f.add(g),d.push(g))}}return d}var $o=class{constructor(e,t){this.cells=new Map;let n=[],s=0,o=0;for(let[r,a]of Object.entries(e))for(let i=0;i<a.length-1;i++){let l=a[i],c=a[i+1],d=Math.min(l.x,c.x),f=Math.min(l.y,c.y),h=Math.max(l.x,c.x),p=Math.max(l.y,c.y);s+=h-d,o+=p-f,n.push({entry:{nodeId:r,segmentIdx:i},minX:d,minY:f,maxX:h,maxY:p})}this.cellSize=To(t,n,s,o);for(let r of n)Oo(this.cells,this.cellSize,r.minX,r.minY,r.maxX,r.maxY,r.entry)}query(e,t,n,s=n){return Po(this.cells,this.cellSize,e,t,n,s)}},Fo=class{constructor(e,t,n,s,o,r,a=0,i,l=!1){this.cells=new Map,this.edgeCurves=Mt(e,t,s,r,a,i,l);let c=[],d=0,f=0;for(let h=0;h<t.edges.length;h++){let p=t.edges[h],u=e[p.from],m=e[p.to],g=this.edgeCurves.get(h);if(u?.length&&m?.length&&g){let{minX:x,minY:w,maxX:N,maxY:S}=eo(g),R=p.pathIds?.length??0;if(n&&R>0){let M=0,v=0;for(let I of De(u,m,R,s))M=Math.max(M,Math.abs(I.x)),v=Math.max(v,Math.abs(I.y));x-=M,w-=v,N+=M,S+=v}d+=N-x,f+=S-w,c.push({ei:h,minX:x,minY:w,maxX:N,maxY:S})}}this.cellSize=To(o,c,d,f);for(let h of c)Oo(this.cells,this.cellSize,h.minX,h.minY,h.maxX,h.maxY,h.ei)}getCurves(e){return this.edgeCurves.get(e)}query(e,t,n,s=n){return Po(this.cells,this.cellSize,e,t,n,s)}};function Xo(e,t,n,s,o,r){let a=o-n,i=r-s,l=a*a+i*i;if(l===0)return Math.hypot(e-n,t-s);let c=Math.max(0,Math.min(1,((e-n)*a+(t-s)*i)/l));return Math.hypot(e-(n+c*a),t-(s+c*i))}function Oa(e,t,n,s,o,r,a,i,l,c){let d=1/0,f=20,h=n,p=s;for(let u=1;u<=f;u++){let m=u/f,g=1-m,x=g*g*g*n+3*g*g*m*o+3*g*m*m*a+m*m*m*l,w=g*g*g*s+3*g*g*m*r+3*g*m*m*i+m*m*m*c;d=Math.min(d,Xo(e,t,h,p,x,w)),h=x,p=w}return d}function Pa(e,t,n){return Oa(e,t,n.x0,n.y0,n.cx0,n.cy0,n.cx1,n.cy1,n.x1,n.y1)}function Do(e,t,n,s=1){let o=1/0;for(let r of n){let a=Pa(e,t,s===1?r:{x0:r.x0,y0:r.y0*s,cx0:r.cx0,cy0:r.cy0*s,cx1:r.cx1,cy1:r.cy1*s,x1:r.x1,y1:r.y1*s});a<o&&(o=a)}return o}var Bo=new WeakMap;function ko(e,t){let n=Bo.get(e);if(n?.version===t)return n.index;let s=new $o(e);return Bo.set(e,{version:t,index:s}),s}var qo=new WeakMap;function $a(e,t,n,s,o,r,a,i=!1){let l=qo.get(e);if(l?.graph===t&&l.drawPaths===n&&l.scaleX===s.scaleX&&l.scaleY===s.scaleY&&l.version===o&&l.deletions===r&&l.routes===a&&l.stranded===i)return l.index;let c=new Fo(e,t,n,s,void 0,r,o,a,i);return qo.set(e,{graph:t,drawPaths:n,scaleX:s.scaleX,scaleY:s.scaleY,version:o,index:c,deletions:r,routes:a,stranded:i}),c}var Fa=5;function Cf(e,t,n,s,o=0,r){let a=tt(s),i=ko(e,o),l=p=>Math.max(Fa,p)/s.scaleX,c=l(r?.maxHalfWidthPx??0),d=i.query(t,n,c,c/a),f=null,h=1/0;for(let{nodeId:p,segmentIdx:u}of d){let m=e[p],g=Xo(t,n*a,m[u].x,m[u].y*a,m[u+1].x,m[u+1].y*a);g<h&&g<l(r?.halfWidthPx(p)??0)&&(h=g,f=p)}return f}function Da(e,t,n){let s=t.x-e.x,o=t.y-e.y,r=0,a=1;for(let[i,l]of[[-s,e.x-n.x0],[s,n.x1-e.x],[-o,e.y-n.y0],[o,n.y1-e.y]])if(i===0){if(l<0)return!1}else i<0?r=Math.max(r,l/i):a=Math.min(a,l/i);return r<=a}function Ho(e,t,n=0){let s=ko(e,n),o=r=>({x:r.x*t.scaleX+t.translateX,y:r.y*t.scaleY+t.translateY});return r=>{let a=new Set,i=s.query(((r.x0+r.x1)/2-t.translateX)/t.scaleX,((r.y0+r.y1)/2-t.translateY)/t.scaleY,Math.abs((r.x1-r.x0)/2/t.scaleX),Math.abs((r.y1-r.y0)/2/t.scaleY));for(let{nodeId:l,segmentIdx:c}of i){let d=e[l];!a.has(l)&&Da(o(d[c]),o(d[c+1]),r)&&a.add(l)}return a}}function Tf(e,t,n,s,o,r,a=0,i,l,c,d=!1){let f=tt(o),h=10/o.scaleX,p=$a(e,t,r,o,a,i,c,d),u=p.query(n,s,h,h/f),m=null,g=h;for(let x of u){let w=t.edges[x],N=e[w.from],S=e[w.to];if(!N?.length||!S?.length||l?.has(x))continue;let R=w.pathIds?.length??0,M=p.getCurves(x);if(!M)continue;let v;if(!r||R===0)v=Do(n,s*f,M,f);else{let I=1/0;for(let $ of De(N,S,R,o)){let W=$.x===0&&$.y===0?M:et(M,$.x,$.y),D=Do(n,s*f,W,f);D<I&&(I=D)}v=I}v<g&&(g=v,m=x)}return m}var Wo=3.4,dn=6,Ba=8,qa=18,Xa=2,ka=Qn+Zn;function Go(e){let t=e.gene.end-e.gene.start;if(e.covered>=.98)return;let[n,s]=t>=1e6?[1e6,"Mb"]:t>=1e3?[1e3,"kb"]:[1,"bp"],o=r=>+(r/n).toFixed(n===1?0:1);return`${o(e.covered*t)} of ${o(t)} ${s}`}function Yo(e,t,n,s){let o=n/2;return zo(e,r=>r.gene.end-r.gene.start).map(r=>{let{x:a,y:i}=t(r.at),l=Go(r);return{item:r,x:a,y:i+n+qa,text:l?`${r.gene.name} \xB7 ${l}`:r.gene.name,fallback:l?`${r.gene.name} \u2026`:void 0,stack:Xa,fits:c=>[...s({x0:c.x0-o,x1:c.x1+o,y0:c.y0-o,y1:c.y1+o})].every(d=>r.nodeIds.has(d))}})}function zo(e,t){return[...e].sort((n,s)=>t(s)-t(n))}function Ha(e){let{paneWidth:t,canvasHeight:n,translateX:s,translateY:o}=e,{scaleX:r,scaleY:a}=e.axisScale,i={width:t,height:n},l=M=>({x:M.x*r+s,y:M.y*a+o}),c=e.drawnRowLabels.map(({label:M,y:v})=>Kt(M,v*a+o)),d=e.referenceStripZonePx??0;d>0&&c.push({x0:0,x1:t,y0:0,y1:d}),e.legendSize.width>0&&c.push({x0:t-dn-e.legendSize.width,x1:t,y0:0,y1:d+dn+e.legendSize.height}),e.poppedFrom&&c.push({x0:0,x1:60+e.poppedFrom.label.length*we*1.2,y0:0,y1:44});let f=Jn(i,c),h=e.drawnRowLabels.length>0,p=h?Math.min(...e.drawnRowLabels.map(M=>M.y)):1/0,u=e.contigThickness*Wo,m=zo(e.bubbleHalos,M=>M.members),g=gt(m.map(M=>{let{x:v,y:I}=l({x:M.labelAt.x,y:Math.min(M.labelAt.y,p)}),$=I-u/2-6;return{item:M,x:v,y:h?Math.max($,ka):$,text:M.label}}),i,f),x=gt(Yo(e.genePins,l,e.contigThickness,Ho(e.nodePositions??{},{scaleX:r,scaleY:a,translateX:s,translateY:o},e.positionsVersion)),i,f),w=e.nodePositions&&e.labelsNodeSizes?jt({nodePositions:e.nodePositions,nodeLengths:e.nodeLengths,deletions:e.showDeletionEdges?e.deletions:[],deletionRoutes:e.deletionRoutes,stranded:e.stranded,alleleDeletions:e.alleleDeletions,axis:e.axisScale,translateX:s,translateY:o,width:t,height:n,version:e.positionsVersion}):{deletions:[],nodes:[]},N=yt(w.deletions,f),S=gt(m.flatMap(M=>M.routes.map(v=>{let{x:I,y:$}=l(v.at);return{item:{halo:M,route:v},x:I,y:$+4,text:v.text,stack:Ba}})),i,f),R=yt(w.nodes,f,Vt(t,n));return{bubbles:g,genes:x,routes:S,sizes:[...N,...R]}}function _d(e){return Fe(e)?Uo(e):void 0}function Uo(e){return{sample:ut(e.stable.refName),haplotype:jn(e.stable.refName),refName:pt(e.stable.refName),start:e.stable.start,end:e.stable.start+e.length}}function Wa(e,t){let n=[...e].sort((r,a)=>r.start-a.start),s,o;for(let r of n)o=o&&r.start-o.end<=t?{start:o.start,end:Math.max(o.end,r.end)}:{start:r.start,end:r.end},(!s||o.end-o.start>s.end-s.start)&&(s=o);return s}function Ga(e){return`${e.haplotype??e.sample}\0${e.refName}`}function Ad(e,{maxGap:t=1/0}={}){let n=new Map;for(let o of e.nodes)if(Fe(o)){let r=Uo(o),a=Ga(r),i=n.get(a);i?(i.spans.push({start:r.start,end:r.end}),i.rank=Math.min(i.rank,o.stable.rank)):n.set(a,{sample:r.sample,haplotype:r.haplotype,refName:r.refName,rank:o.stable.rank,spans:[{start:r.start,end:r.end}]})}let s=new Map;for(let o of n.values()){let r=Wa(o.spans,t);if(r){let a={sample:o.sample,haplotype:o.haplotype,refName:o.refName,start:r.start,end:r.end,rank:o.rank,nodeCount:o.spans.length},i=o.haplotype??o.sample,l=s.get(i);(!l||a.nodeCount>l.nodeCount)&&s.set(i,a)}}return[...s.values()].sort((o,r)=>+(o.rank!==0)-+(r.rank!==0)||o.sample.localeCompare(r.sample)||(o.haplotype??"").localeCompare(r.haplotype??""))}function Ya(e,t){return(t.haplotype===void 0?void 0:e(t.haplotype))??e(t.sample)}function Ld(e,t){return e.flatMap(n=>{let s=Ya(t,n);return s===void 0?[]:[{...n,sample:s}]})}function Id(e){return`${e.refName}:${e.start+1}-${e.end}`}function hn(e){return`${e.refName}:${(e.start+1).toLocaleString()}-${e.end.toLocaleString()}`}var Ko=Qe(ht(),1),jo=(0,te.createSvgIcon)((0,Ko.jsx)("path",{d:"M9.01 14H2v2h7.01v3L13 15l-3.99-4zm5.98-1v-3H22V8h-7.01V5L11 9z"}),"CompareArrows");var Vo=Qe(ht(),1),Qo=(0,te.createSvgIcon)((0,Vo.jsx)("path",{d:"M17 5h-2V3h2zm-2 16h2v-2.59L19.59 21 21 19.59 18.41 17H21v-2h-6zm4-12h2V7h-2zm0 4h2v-2h-2zm-8 8h2v-2h-2zM7 5h2V3H7zM3 17h2v-2H3zm2 4v-2H3c0 1.1.9 2 2 2M19 3v2h2c0-1.1-.9-2-2-2m-8 2h2V3h-2zM3 9h2V7H3zm4 12h2v-2H7zm-4-8h2v-2H3zm0-8h2V3c-1.1 0-2 .9-2 2"}),"HighlightAlt");var Zo=Qe(ht(),1),un=(0,te.createSvgIcon)((0,Zo.jsx)("path",{d:"M3 16h5v-2H3zm6.5 0h5v-2h-5zm6.5 0h5v-2h-5zM3 20h2v-2H3zm4 0h2v-2H7zm4 0h2v-2h-2zm4 0h2v-2h-2zm4 0h2v-2h-2zM3 12h8v-2H3zm10 0h8v-2h-8zM3 4v4h18V4z"}),"LineStyle");var za="Linear genome view",Ua="Linear synteny view",Ka="No synteny track in this session aligns these assemblies";function Jo({label:e,icon:t,entries:n,entryLabel:s,onSelect:o,disabledHelpText:r,nameTheOnlyEntry:a=!0}){let[i]=n,l=r?[{label:e,icon:t,disabled:!0,disabledHelpText:r,onClick:()=>{}}]:[];return n.length===0?l:n.length===1&&i?[{label:a?`${e} \u2014 ${s(i)}`:e,icon:t,onClick:o(i)}]:[{label:e,icon:t,type:"subMenu",subMenu:n.map(c=>({label:s(c),onClick:o(c)}))}]}function Hd({contributors:e,syntenyTracks:t,onShowLinear:n,onShowSynteny:s}){let o=t[0]?.coverage??e.length;return[...Jo({label:za,icon:un,entries:e,entryLabel:r=>`${r.sample} ${hn(r)}`,onSelect:r=>()=>{n({location:r,assembly:r.sample})}}),...e.length>=2?Jo({label:`${Ua} (${o} assemblies)`,icon:jo,entries:t,entryLabel:r=>r.coverage<o?`${r.name} (${r.coverage} of ${o})`:r.name,nameTheOnlyEntry:!1,disabledHelpText:Ka,onSelect:r=>()=>{s(r.trackId)}}):[]]}function Wd({own:e,reference:t,highlight:n,onShowLinear:s,onHighlight:o}){let r=[e?{label:`Open in ${e.assembly} \u2014 ${hn(e.location)}`,target:e}:void 0,t&&t.assembly!==e?.assembly?{label:`Open in ${t.assembly} \u2014 around this node`,target:t}:void 0].filter(a=>a!==void 0);return[...o&&n?[{label:`Highlight in ${n.assembly}`,icon:Qo,onClick:()=>{o(n)}}]:[],...r.map(({label:a,target:i})=>({label:a,icon:un,onClick:()=>{s(i)}}))]}function pn(e){return e.id.endsWith("-")?"-":"+"}function mn(e,t){return t===pn(e)?e.id:`-${e.id}`}function Va(e,t){let n=e.map(()=>{}),s=0,o=0;for(;o<e.length&&e[o]!==void 0;o++)n[o]=s,s+=e[o];let r=t;for(let a=e.length-1;a>o&&e[a]!==void 0;a--)r-=e[a],n[a]=r;return n}function Qa(e,t){let n=e.path.map(()=>[]);if(e.cs===void 0)return n;let s=Va(t,e.pathLength),o=(i,l=!1)=>{for(let c=0;c<s.length;c++){let d=s[c],f=t[c];if(d!==void 0&&f!==void 0&&d<=i&&(i<d+f||l&&i===d+f))return{s:c,local:i-d,room:d+f-i}}},r=(i,l)=>{let c=n[i],d=c.at(-1);l.type==="substitution"&&d?.type==="substitution"&&d.pos+d.seq.length===l.pos?d.seq+=l.seq:c.push(l)},a=e.pathStart;for(let i of Vn(e.cs))if(i.op==="match")a+=i.length;else if(i.op==="substitution"){let l=o(a);l&&r(l.s,{type:"substitution",pos:l.local,seq:i.seq}),a+=1}else if(i.op==="insertion"){let l=o(a,a===e.pathEnd);l&&r(l.s,{type:"insertion",pos:l.local,seq:i.seq})}else{let l=i.length;for(;l>0;){let c=o(a),d=c?Math.min(l,c.room):l;c&&r(c.s,{type:"deletion",pos:c.local,length:d}),a+=d,l-=d}}return n}function ts(e,t,n){let s=new Map(e.nodes.map(r=>[r.name,r])),o=[];for(let r of t){let a=r.path.map(d=>s.get(d.name)),i=a.flatMap((d,f)=>d?[f]:[]),l=i[0],c=i.at(-1);if(l!==void 0&&c!==void 0){let d=Qa(r,a.map(p=>p?.length)),f=i.map(p=>mn(a[p],r.path[p].strand)),h=a[c].length;o.push({id:n+o.length,name:r.name,type:"read",sourceTrackID:1,sequence:f,sequenceNew:i.map((p,u)=>({nodeName:f[u],mismatches:d[p]})),firstNodeOffset:l===0?r.pathStart:0,finalNodeCoverLength:c===r.path.length-1?h-(r.pathLength-r.pathEnd):h,mapping_quality:r.mappingQuality===255?0:r.mappingQuality,is_secondary:r.secondary,is_reverse:r.strand==="-"})}}return o}var Za=["#6baed6","#4292c6","#2171b5","#08519c"],Ja=["#fb6a4a","#ef3b2c","#cb181d","#a50f15"];function ns(e){let t=e.is_reverse?Ja:Za;return t[e.id%t.length]}function gn(){return{rectangles:[],curves:[],corners:[],verticalRectangles:[],featureRectangles:[]}}var rt=!1,os=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f"];function bs(e){return{mergeNodesFlag:e.mergeNodes??!0,showReads:e.showReads??!0,coarsenedReadView:e.coarsenedReadView??!1,ignoreStrand:e.ignoreStrand??!1,nodeWidthOption:e.nodeWidthOption??"normal",charWidth:e.charWidth??8.401,trackWidth:e.trackWidth??15,mappingQualityCutoff:e.mappingQualityCutoff??0,focusReadNames:e.focusReadNames??null,showExonsFlag:e.showExons??!1,trackColor:e.trackColor??(t=>os[t.id%os.length]),trackAlpha:e.trackAlpha??(()=>1)}}var C=bs({}),Mn=null,y=[],b=[],E=[],L=new Map,We=[],_=[],Se=[],En=[],Rn=[],j=-1,X=gn(),vn={minX:0,maxX:0,minY:0,maxY:0},ot,Lt=new Map;function ws(e,t,n=[],s={}){if(C=bs(s),Mn=s.bed??null,X=gn(),Se=[],En=[],Rn=[],We=[],vn={minX:0,maxX:0,minY:0,maxY:0},ot=void 0,Lt=new Map,e.length===0||t.length===0)return;let o=xn(e);y=[],o.forEach((l,c)=>{y[c+1]=l}),b=xn(t);let r=n.length>0;E=xn(Xi(n));for(let l=b.length-1;l>=0;l-=1){let c=b[l];if(c.type===void 0&&(c.type="haplotype"),c.hidden===!0){b.splice(l,1);continue}c.indexOfFirstBase!==void 0&&(ot=c.name)}if(b.length===0)return;ti(0),L=as(),ke(b),C.showReads&&E.length>0&&ke(E),ys(),C.mergeNodesFlag&&(is(),bn(),C.showReads&&E.length>0&&yn(),qi(),L=as(),ys(),ke(b),C.showReads&&E.length>0&&ke(E)),is(),vi(),rt&&console.log(`${y.length} nodes.`),bn(),j=cs(),Ei(),bn(),j=cs();let a=C.showReads&&C.coarsenedReadView&&!r;if(a){let l=ot===void 0?-1:b.findIndex(f=>f.name===ot),c=l===-1?0:l,d=b.filter((f,h)=>h!==c);if(d.length>0){let f=ps(d,"haplotype");f.length>0&&(b=[b[c]],E=f)}}Oi(),_i(),C.showExonsFlag&&Mn!==null&&Ti();let i=C.showReads&&C.coarsenedReadView&&E.length>0&&!a;return C.showReads&&E.length>0?(ni(),yn(),ke(E),i&&(E=ps(E,"read"),yn(),ke(E)),si(),b=b.concat(E)):y.forEach(l=>{l&&(l.incomingReads=[],l.outgoingReads=[],l.internalReads=[])}),Si(),Fi(),rt&&(console.log("Tracks:"),console.log(b),console.log("Nodes:"),console.log(y),console.log("Lane assignment:"),console.log(Se)),gi(),{nodes:y,tracks:b,reads:E,nodeMap:L,shapes:X,bounds:vn,maxOrder:j,trackForRuler:ot,coarsenedEdgeMeta:Lt}}function He(e,t="plain"){return C.trackColor(e,t)}function ei(e){return C.trackAlpha(e)}function xn(e){return structuredClone(e)}function H(e){let t=String(e);return t.length>=1&&t.startsWith("-")}function O(e){return H(e)?String(e).substring(1):e}function de(e){return H(e)?e:`-${e}`}function Ms(e){return H(e)?O(e):de(e)}function It(e){return(e||1/e)>=0}function ti(e){let t=new Set,n=b[e].sequence;for(let s=0;s<n.length;s+=1){let o=n[s];if(H(o)){let r=O(o),a=n.indexOf(r);(a===-1||a>s)&&t.add(r)}}for(let s of b){n=s.sequence;for(let o=0;o<n.length;o+=1){let r=n[o];H(r)?t.has(O(r))&&(n[o]=O(r)):t.has(r)&&(n[o]=de(r))}}y.forEach(s=>{s&&t.has(s.name)&&(s.seq=s.seq.split("").reverse().join(""))})}function ni(){We=[];for(let t=0;t<=j;t+=1)We[t]=[];let e=new Map;y.forEach(t=>{t.y!==void 0&&ss(e,t.order,t.y+t.contentHeight)}),b.forEach(t=>{t.type==="haplotype"&&t.path.forEach(n=>{ss(e,n.order,(n.y??0)+t.width)})}),y.forEach((t,n)=>{t.order>=0&&t.y===void 0&&(t.y=(e.get(t.order)??0)+25,t.contentHeight=0,We[t.order].push(n))})}function ss(e,t,n){let s=e.get(t);s===void 0?e.set(t,n):e.set(t,Math.max(s,n))}var Ct=7;function oi(){y.forEach(e=>{e&&(e.incomingReads=[],e.outgoingReads=[],e.internalReads=[])}),E.forEach((e,t)=>{if((e.width===void 0||e.width===0)&&(e.width=Ct),e.path.length===1){let n=e.path[0].node;n!==null&&y[n].internalReads.push(t)}else e.path.forEach((n,s)=>{if(s===0){let o=e.path[0].node;o!==null&&y[o].outgoingReads.push([t,s])}else{let o=n.node;o!==null&&y[o].incomingReads.push([t,s])}})})}function si(){hi(),oi();let e=y.slice();e.sort(Tt);let t=new Map;for(let a=0;a<E.length;a++){let i=E[a].sourceTrackID,l=t.get(i);l===void 0?t.set(i,[a]):l.push(a)}let n=Array.from(t.keys()).sort((a,i)=>a-i),s=n.length>1?Ct:0;e.forEach(a=>{if(a)for(let i of n)ri(t.get(i),a,s)});let o=di(),r=[];E.forEach((a,i)=>{let l=a.path.length,c=new Array(l),d;for(let p=0;p<l;p++){p===0?c[p]=void 0:c[p]=d??a.path[0];let u=a.path[p];u.node!==null&&u.node&&(d=u)}let f=new Array(l),h;for(let p=l-1;p>=0;p--){p===l-1?f[p]=void 0:f[p]=h??a.path[l-1];let u=a.path[p];u.node!==null&&u.node&&(h=u)}a.path.forEach((p,u)=>{if(p.y===void 0){let m=c[u],g=f[u],x=!!(g&&m&&g.isForward!==void 0&&m.isForward!==void 0&&(m.order>g.order||g.order===m.order&&g.isForward===m.isForward));p.betweenCycleReverseTraversal=x,r.push({readIndex:i,pathIndex:u,previousY:m?.y,previousNode:m?.node})}})}),r.sort(ii),r.forEach(a=>{let i=E[a.readIndex],l=i.path[a.pathIndex];l.y=o[l.order],o[l.order]+=i.width}),rt&&(console.log("Reads:"),console.log(E))}function ri(e,t,n){let s=new Set(e),o=t.incomingReads.filter(([u])=>s.has(u)),r=t.outgoingReads.filter(([u])=>s.has(u)),a=t.internalReads.filter(u=>s.has(u));o.length===0&&r.length===0&&a.length===0&&(n=0);let i=t.y+t.contentHeight+n*2,l=o.map(u=>{let[m,g]=u,x=E[m].path,w=g+1,N;for(let S=1;S<=g;S++){let R=x[g-S]?.y;if(R!==void 0){w=S,N=R;break}}return{entry:u,decisionStep:w,y:N}});l.sort(ai),o=l.map(u=>u.entry);let c=i,d=new Map;o.forEach(u=>{let m=E[u[0]];m.path[u[1]].y=c,rs(d,m,u[1],c,t),c+=m.width});let f=c;r.sort(li);let h=new Map;c=i,r.forEach(u=>{let m=E[u[0]],g=m.firstNodeOffset??0;m.path[u[1]].y=c,h.set(c,g);let x=d.get(c);x===void 0||x+1<=g?(c+=m.width,f=Math.max(f,c)):(d.set(c,0),o.forEach(w=>{let N=E[w[0]],S=N.path[w[1]];S.y!==void 0&&S.y>=c&&(S.y+=m.width,rs(d,N,w[1],S.y,t))}),c+=m.width,f+=m.width)}),a.sort(fi),a.forEach(u=>{let m=E[u],g=m.firstNodeOffset??0,x=m.finalNodeCoverLength??0;for(c=i;g<(d.get(c)??-1/0)+2||x>(h.get(c)??1/0)-3;)c+=m.width||Ct;m.path[0].y=c,d.set(c,x),f=Math.max(f,c)});let p=f-t.y-t.contentHeight;t.contentHeight+=p,Ci(t,p)}function ai(e,t){return e.decisionStep!==t.decisionStep?e.decisionStep-t.decisionStep:e.y===void 0||t.y===void 0?(e.y===void 0?0:1)-(t.y===void 0?0:1):e.y-t.y}function rs(e,t,n,s,o){n===t.path.length-1?e.set(s,t.finalNodeCoverLength??0):e.set(s,o.sequenceLength)}function ii(e,t){let n=E[e.readIndex],s=E[t.readIndex],o=n.path[e.pathIndex],r=s.path[t.pathIndex];if(o.order!==r.order)return o.order-r.order;if(n.sourceTrackID!==s.sourceTrackID)return n.sourceTrackID-s.sourceTrackID;if(e.previousNode&&t.previousNode){let l=y[e.previousNode],c=y[t.previousNode];if(l&&c&&l.order!==c.order)return l.order-c.order}let a=e.previousY??0,i=t.previousY??0;return o.betweenCycleReverseTraversal&&r.betweenCycleReverseTraversal?i-a:a-i}function li([e,t],[n,s]){let o=E[e],r=E[n],a,i,l=o.path.length-1,c=r.path.length-1;for(;!a&&l>=0;)a=o.path[l]?.y,l-=1;for(;!i&&c>=0;)i=r.path[c]?.y,c-=1;if(a&&i)return a-i;let d=o.path[t]?.node,f=r.path[s]?.node,h=d!=null?y[d]:null,p=f!=null?y[f]:null;for(;h!=null&&p!=null&&h===p;){if(t<o.path.length-1){for(t+=1;o.path[t]?.node===null;)t+=1;let m=o.path[t]?.node;h=m!=null?y[m]:null}else h=null;if(s<r.path.length-1){for(s+=1;r.path[s]?.node===null;)s+=1;let m=r.path[s]?.node;p=m!=null?y[m]:null}else p=null}if(h!=null)return p!=null?Tt(h,p):1;if(p!=null)return-1;let u=(o.firstNodeOffset??0)-(r.firstNodeOffset??0);return u!==0?u:(o.finalNodeCoverLength??0)-(r.finalNodeCoverLength??0)}function ci(e,t){if(e.path===void 0||t.path===void 0)return(e.path===void 0?0:1)-(t.path===void 0?0:1);let n=e.path,s=t.path,o=0,r=0;for(;o<n.length&&r<s.length;){let a=n[o],i=s[r],l=a.order,c=i.order;if(l===c&&a.node&&i.node)return(i.y??0)-(a.y??0);l<c?o+=1:(l>c||(o+=1),r+=1)}return 0}function fi(e,t){let n=E[e],s=E[t],o=n.firstNodeOffset??0,r=s.firstNodeOffset??0;if(o<r)return-1;if(o>r)return 1;let a=n.finalNodeCoverLength??0,i=s.finalNodeCoverLength??0;return a<i?-1:a>i?1:0}function di(){let e=[];for(let t=0;t<=j;t+=1)e.push(0);return y.forEach(t=>{t.y!==void 0&&(e[t.order]=Math.max(e[t.order],t.y+t.contentHeight+20))}),b.forEach(t=>{t.path.forEach(n=>{e[n.order]=Math.max(e[n.order],(n.y??0)+t.width)})}),e}function hi(){E.forEach(e=>{let t=Math.abs(e.indexSequence[0]),n=It(e.indexSequence[0]),s=y[t],o,r;e.path=[],e.path.push({order:s.order,isForward:n,node:t});for(let a=1;a<e.sequence.length;a+=1)if(o=s,r=n,t=Math.abs(e.indexSequence[a]),n=It(e.indexSequence[a]),s=y[t],s.order>o.order){r||e.path.push({order:o.order,isForward:!0,node:null});for(let i=o.order+1;i<s.order;i+=1)e.path.push({order:i,isForward:!0,node:null});n?e.path.push({order:s.order,isForward:!0,node:t}):(e.path.push({order:s.order,isForward:!0,node:null}),e.path.push({order:s.order,isForward:!1,node:t}))}else if(s.order<o.order){r&&e.path.push({order:o.order,isForward:!1,node:null});for(let i=o.order-1;i>s.order;i-=1)e.path.push({order:i,isForward:!1,node:null});n?(e.path.push({order:s.order,isForward:!1,node:null}),e.path.push({order:s.order,isForward:!0,node:t})):e.path.push({order:s.order,isForward:!1,node:t})}else n!==r?e.path.push({order:s.order,isForward:n,node:t}):(e.path.push({order:s.order,isForward:!n,node:null}),e.path.push({order:s.order,isForward:n,node:t}))})}function yn(){E.forEach(e=>{let t=0;for(;t<e.sequence.length&&e.sequence[t].startsWith("-");)t+=1;if(t===e.sequence.length){e.is_reverse=!0,e.sequence=e.sequence.reverse();for(let a=0;a<e.sequence.length;a+=1)e.sequence[a]=O(e.sequence[a]);let n=e.sequenceNew??[];n.reverse(),e.sequenceNew=n;for(let a of n)a.nodeName=O(a.nodeName),ui(a.mismatches,oe(a.nodeName).sequenceLength);let s=e.firstNodeOffset??0,o=oe(e.sequence[0]).sequenceLength;e.firstNodeOffset=o-(e.finalNodeCoverLength??0);let r=oe(e.sequence[e.sequence.length-1]).sequenceLength;e.finalNodeCoverLength=r-s}})}function ui(e,t){e.forEach(n=>{n.type==="insertion"?n.pos=t-n.pos:n.type==="deletion"?n.pos=t-n.pos-(n.length??0):n.type==="substitution"&&(n.pos=t-n.pos-(n.seq?.length??0)),n.seq!==void 0&&(n.seq=vs(n.seq).split("").reverse().join(""))})}var pi={A:"T",T:"A",C:"G",G:"C"};function vs(e){let t="";for(let n=e.length-1;n>=0;n-=1)t+=pi[e.charAt(n)]??"N";return t}function ke(e){e.forEach(t=>{t.indexSequence=[],t.sequence.forEach(n=>{let s=n,o=L.get(O(s)),r=y[o]?.switched??!1;r&&(s=Ms(s));let a=L.get(O(s));if(a===0)throw new Error("Node "+O(s)+" has prohibited index 0");H(s)!==r?t.indexSequence.push(-a):t.indexSequence.push(a)})})}var mi=20;function gi(){let e={minX:99,maxX:-99,minY:99,maxY:-99};y.forEach(t=>{t&&(t.x!==void 0&&(e.minX=Math.min(e.minX,t.x),e.maxX=Math.max(e.maxX,t.x+mi+t.pixelWidth)),t.y!==void 0&&(e.minY=Math.min(e.minY,t.y-10),e.maxY=Math.max(e.maxY,t.y+t.contentHeight+10)))}),b.forEach(t=>{t.path.forEach(n=>{let s=n.y??0;e.maxY=Math.max(e.maxY,s+t.width),e.minY=Math.min(e.minY,s)})}),vn=e}function oe(e){let t=L.get(O(e)),n=t===void 0?void 0:y[t];if(n===void 0)throw new Error(`Unknown node ${e}`);return n}function as(){return L=new Map,y.forEach((e,t)=>{e&&L.set(e.name,t)}),L}function is(){let e=y.map(()=>new Set),t=y.map(()=>new Set),n=s=>{for(let o=0;o<s.indexSequence.length-1;o+=1){let r=Math.abs(s.indexSequence[o]),a=Math.abs(s.indexSequence[o+1]);e[r].add(a),t[a].add(r)}};b.forEach(n),C.showReads&&E.length>0&&E.forEach(n),y.forEach((s,o)=>{s&&(s.successors=Array.from(e[o]),s.predecessors=Array.from(t[o]))})}function ls(e){let t=0,n=0,s=0;e.forEach(o=>{let r=Math.abs(o);if(o<0){_[r]===void 0&&(_[r]=n);let a=_[r];a<s&&(s=a),t=a,n=a-1}else{_[r]===void 0&&(_[r]=t);let a=_[r];t=a+1,n=a}}),s<0&&Sn(-s)}function xi(e){let t=0,n=0;for(;t<e.length&&_[Math.abs(e[t])]===void 0;)t+=1;if(t>=e.length)return null;let s=e[t],o,r;s>=0?(o=_[s]-1,r=-1):(o=_[-s]+1,r=1);for(let a=t-1;a>=0;a-=1){let i=Math.abs(e[a]);_[i]===void 0&&(_[i]=o,n=Math.min(n,o),o+=r)}return n<0&&Sn(-n),t}var yi=-1;function bi(e){let t=[];for(let n of e)t.push(n??yi);return t}function bn(){let e,t,n,s,o=0,r=C.showReads&&E.length>0?b.concat(E):b,a={stamp:new Int32Array(y.length),generation:0};_=new Array(y.length).fill(void 0),y.forEach(l=>{l&&(l.order=void 0)}),ls(b[0].indexSequence);for(let l=1;l<r.length;l+=1){if(rt&&console.log(`generating order for track ${l+1}`),n=xi(r[l].indexSequence),n===null){r[l].type==="haplotype"?ls(r[l].indexSequence):(r.splice(l,1),E.splice(l-b.length,1),l-=1);continue}for(e=Mi(r[l].indexSequence);n<e.length;){for(s=n,n+=1;n<e.length&&_[e[n]]===void 0;)n+=1;if(n<e.length){t=_[e[s]]+1;for(let c=s+1;c<n;c+=1)_[e[c]]=t,t+=1;if(_[e[n]]>_[e[s]])_[e[n]]<t&&fs(e[n],e[n-1],t);else if(r[l].indexSequence[n]>=0&&!wi(e[n],e[s],a))fs(e[n],e[n-1],t);else if(r[l].indexSequence[s]<0||y[e[s+1]].degree<2&&_[e[n]]<_[e[s]]){t=_[e[s]]-1;for(let c=s+1;c<n;c+=1)_[e[c]]=t,o=Math.min(o,t),t-=1}}else if(r[l].indexSequence[s]>=0){t=_[e[s]]+1;for(let c=s+1;c<e.length;c+=1){let d=e[c];_[d]===void 0&&(_[d]=t,t+=1)}}else{t=_[e[s]]-1;for(let c=s+1;c<e.length;c+=1){let d=e[c];_[d]===void 0&&(_[d]=t,o=Math.min(o,t),t-=1)}}}}o<0&&Sn(-o);let i=bi(_);_=i,i.forEach((l,c)=>{let d=y[c];d!==void 0&&(d.order=l)})}function wi(e,t,n){n.generation+=1;let{stamp:s,generation:o}=n,r=[e];for(s[e]=o;r.length>0;){let a=r.pop();if(a===t)return!0;for(let i of y[a].successors)s[i]!==o&&(s[i]=o,r.push(i))}return!1}function cs(){let e=-1;return _.forEach(t=>{t!==void 0&&t>e&&(e=t)}),e}function Mi(e){return e.map(t=>Math.abs(t))}function Sn(e){_.forEach((t,n)=>{t!==void 0&&(_[n]=t+e)})}function fs(e,t,n){let s=new Map,o=[[e,n]],r=0;for(;r<o.length;){let[a,i]=o[r];r+=1;let l=_[a];l!==void 0&&l<i&&(!s.has(a)||s.get(a)<i)&&(s.set(a,i),y[a].successors.forEach(c=>{_[c]>l&&c!==t&&o.push([c,i+1])}),a!==e&&y[a].predecessors.forEach(c=>{_[c]>l&&c!==t&&o.push([c,i+1])}))}s.forEach((a,i)=>{_[i]=a})}function vi(){y.forEach(e=>{e.tracks=[]}),b.forEach(e=>{e.indexSequence.forEach(t=>{y[Math.abs(t)].tracks.push(e.id)})}),y.forEach(e=>{e.tracks!==void 0&&(e.degree=e.tracks.length)})}function Ei(){let e=b[0],t=b.slice(1,b.length);if(C.showReads&&E.length>0&&(t=t.concat(E)),Ri(t,e),C.showReads&&E.length>0){for(let n=0;n<E.length;n++)if(E[n]!==t[n+b.length-1])throw new Error("Read inequality")}}function Ri(e,t){let n=new Map,s=t?new Set(t.sequence):null;for(let o of e){let r=o.sequence;for(let a=0;a<r.length;a+=1){let i=O(r[a]),l=oe(i);if(s&&!s.has(i)){let c=a>0?oe(r[a-1]).order:void 0,d=a<r.length-1?oe(r[a+1]).order:void 0;(c===void 0||c<l.order)&&(d===void 0||l.order<d)&&ds(n,i,H(r[a])?1:-1),(c===void 0||c>l.order)&&(d===void 0||l.order>d)&&ds(n,i,H(r[a])?-1:1)}}}for(let o of e)o.sequence.forEach((r,a)=>{let i=n.get(O(r));i!==void 0&&i>0&&(o.sequence[a]=Ms(r),o.indexSequence[a]=-o.indexSequence[a])});n.forEach((o,r)=>{if(o>0){let a=oe(r);a.seq=vs(a.seq),a.switched=!0}})}function ds(e,t,n){e.set(t,(e.get(t)??0)+n)}function Si(){let e=0,t=20,n=-1,s=y.slice();s.sort(Tt);let o=Ni();s.forEach(r=>{r.order>=0&&(r.order>n&&(n=r.order,e=t+10*o[r.order]),r.x=e,t=Math.max(t,e+40+r.pixelWidth))})}function Ni(){let e=[],t=[],n=[],s=[];for(let o=0;o<=j;o+=1)e.push(0),t.push(0),n.push(0);b.forEach(o=>{for(let r=1;r<o.path.length;r+=1){let a=o.path[r],i=o.path[r-1];if(a.order===i.order)a.isForward?e[a.order]=e[a.order]+1:t[a.order]=t[a.order]+1;else{let l=Math.abs((a.y??0)-(i.y??0));n[a.order]=Math.max(l/17.5,n[a.order])}}}),s.push(Math.max(0,e[0]-1));for(let o=1;o<=j;o+=1)s.push(Math.max(Math.max(0,e[o]-1)+Math.max(0,t[o-1]-1),n[o]));return s}function _i(){let e,t,n,s,o,r,a=[],i=[];for(let l=0;l<=j;l+=1){Se[l]=[],i[l]=new Map,a[l]=[];for(let c=0;c<b.length;c+=1)a[l][c]=null}b.forEach((l,c)=>{t=Math.abs(l.indexSequence[0]),n=It(l.indexSequence[0]),s=y[t],l.path=[],l.path.push({order:s.order,lane:null,isForward:n,node:t}),k(s.order,t,c,0,a,i),e=1;for(let d=1;d<l.sequence.length;d+=1)if(o=s,r=n,t=Math.abs(l.indexSequence[d]),n=It(l.indexSequence[d]),s=y[t],s.order>o.order){r||(l.path.push({order:o.order,lane:null,isForward:!0,node:null}),k(o.order,null,c,e,a,i),e+=1);for(let f=o.order+1;f<s.order;f+=1)l.path.push({order:f,lane:null,isForward:!0,node:null}),k(f,null,c,e,a,i),e+=1;n?(l.path.push({order:s.order,lane:null,isForward:!0,node:t}),k(s.order,t,c,e,a,i),e+=1):(l.path.push({order:s.order,lane:null,isForward:!0,node:null}),k(s.order,null,c,e,a,i),e+=1,l.path.push({order:s.order,lane:null,isForward:!1,node:t}),k(s.order,t,c,e,a,i),e+=1)}else if(s.order<o.order){r&&(l.path.push({order:o.order,lane:null,isForward:!1,node:null}),k(o.order,null,c,e,a,i),e+=1);for(let f=o.order-1;f>s.order;f-=1)l.path.push({order:f,lane:null,isForward:!1,node:null}),k(f,null,c,e,a,i),e+=1;n?(l.path.push({order:s.order,lane:null,isForward:!1,node:null}),k(s.order,null,c,e,a,i),e+=1,l.path.push({order:s.order,lane:null,isForward:!0,node:t}),k(s.order,t,c,e,a,i),e+=1):(l.path.push({order:s.order,lane:null,isForward:!1,node:t}),k(s.order,t,c,e,a,i),e+=1)}else n!==r?(l.path.push({order:s.order,lane:null,isForward:n,node:t}),k(s.order,t,c,e,a,i),e+=1):(l.path.push({order:s.order,lane:null,isForward:!n,node:null}),k(s.order,null,c,e,a,i),e+=1,l.path.push({order:s.order,lane:null,isForward:n,node:t}),k(s.order,t,c,e,a,i),e+=1)});for(let l=0;l<=j;l+=1)Li(Se[l],l)}function k(e,t,n,s,o,r){let a={trackID:n,segmentID:s,compareToFromSame:o[e][n]??null},i=t===null?void 0:r[e].get(t);if(i===void 0){let l={type:"single",node:t,tracks:[a]};Se[e].push(l),t!==null&&r[e].set(t,l)}else i.type="multiple",i.tracks.push(a);o[e][n]=a}function Ai(e,t){let n;e.forEach(s=>{s.idealLane=0,s.tracks.forEach(o=>{if(o.segmentID===0)o.idealLane=o.trackID,o.idealY=null;else if(b[o.trackID].path[o.segmentID-1].order===t-1)o.idealLane=b[o.trackID].path[o.segmentID-1].lane??void 0,o.idealY=b[o.trackID].path[o.segmentID-1].y;else if(o.segmentID<b[o.trackID].path.length-1&&b[o.trackID].path[o.segmentID+1].order===t-1)o.idealLane=b[o.trackID].path[o.segmentID+1].lane??void 0,o.idealY=b[o.trackID].path[o.segmentID+1].y;else{for(n=o.segmentID-1;n>=0&&b[o.trackID].path[n].order!==t-1;)n-=1;n<0?(o.idealLane=o.trackID,o.idealY=null):(o.idealLane=b[o.trackID].path[n].lane??void 0,o.idealY=b[o.trackID].path[n].y)}s.idealLane+=o.idealLane}),s.idealLane/=s.tracks.length})}function Li(e,t){let n=0,s=new Set,o=20,r=!1,a=-1;Ai(e,t),e.sort(us),e.forEach(i=>{i.node!==null?(y[i.node].topLane=n,r&&(o-=10),y[i.node].y=o,y[i.node].contentHeight=0,r=!1):(r?o-=25:o>20&&(o-=10),r=!0),i.tracks.sort(us),i.tracks.forEach(l=>{l.lane=n,l.trackID===a&&i.node===null&&r&&(o+=10),b[l.trackID].path[l.segmentID].lane=n,b[l.trackID].path[l.segmentID].y=o,l.idealY!=null&&s.add(l.idealY-o),n+=1,o+=b[l.trackID].width,i.node!==null&&(y[i.node].contentHeight+=b[l.trackID].width),a=l.trackID}),o+=25}),Ii(e,s)}function Ii(e,t){let n=0,s=Number.MAX_SAFE_INTEGER;t.forEach(o=>{hs(e,o)<s&&(s=hs(e,o),n=o)}),e.forEach(o=>{o.node!==null&&(y[o.node].y+=n),o.tracks.forEach(r=>{let a=b[r.trackID].path[r.segmentID];a.y=a.y+n})})}function Ci(e,t){e.order<0||Se[e.order]===void 0||(Se[e.order].forEach(n=>{if(n.node!==null){let s=y[n.node];s!==e&&s.y>e.y&&(s.y+=t,n.tracks.forEach(o=>{let r=b[o.trackID].path[o.segmentID];r.y=r.y+t}))}else n.tracks.forEach(s=>{let o=b[s.trackID].path[s.segmentID];o.y>=e.y&&(o.y=o.y+t)})}),We[e.order].length>0&&We[e.order].forEach(n=>{y[n]!==e&&y[n].y>e.y&&(y[n].y+=t)}))}function hs(e,t){let n=0;return e.forEach(s=>{s.tracks.forEach(o=>{o.idealY!=null&&b[o.trackID].type!=="read"&&(n+=Math.abs(o.idealY-t-b[o.trackID].path[o.segmentID].y)*b[o.trackID].width)})}),n}function us(e,t){return e.idealLane!==void 0?t.idealLane!==void 0?e.idealLane<t.idealLane?-1:e.idealLane>t.idealLane?1:0:-1:t.idealLane!==void 0?1:0}function Tt(e,t){if(!e)return t?-1:0;if(!t)return 1;if(e.order!==void 0){if(t.order!==void 0){if(e.order<t.order)return-1;if(e.order>t.order)return 1;if(e.y!==void 0&&t.y!==void 0){if(e.y<t.y)return-1;if(e.y>t.y)return 1}return 0}return-1}return t.order!==void 0?1:0}function Ti(){let e,t,n={};Mn.forEach(s=>{let o=0;for(;o<b.length&&b[o].name!==s.track;)o+=1;o<b.length&&(e=0,b[o].path.forEach(r=>{r.node!==null&&(n={},t=e+y[r.node].sequenceLength-1,e>=s.start&&e<=s.end&&(n.start=0),e<s.start&&t>=s.start&&(n.start=s.start-e),t<=s.end&&t>=s.start&&(n.end=t-e,t<s.end&&(n.continue=!0)),t>s.end&&e<=s.end&&(n.end=s.end-e),n.start!==void 0&&(n.type=s.type,n.name=s.name,r.features===void 0&&(r.features=[]),r.features.push(n)),e=t+1)}))})}function Oi(){let e=!0,t=4,n=C.trackWidth;b.forEach(s=>{s.freq!==void 0?s.width=Math.round((Math.log(s.freq)+1)*t):(s.width=n,s.type!==void 0&&s.type==="read"&&(s.width=t)),s.width!==t&&(e=!1)}),e&&b.forEach(s=>{s.freq!==void 0&&(s.width=n)})}function Pi(e){let t=e.path[0],n=y[t.node],s=e.firstNodeOffset??0;return Nn(n,t.isForward?s:n.sequenceLength-s)}function $i(e){let t=e.path[e.path.length-1],n=y[t.node],s=e.finalNodeCoverLength??0;return Nn(n,t.isForward?s:n.sequenceLength-s)}function Es(e,t){return t>e.sequenceLength?null:Nn(e,t)}function Nn(e,t){let[n,s]=Bi(e);if(e.sequenceLength===0)return n;let o=Math.min(Math.max(t,0),e.sequenceLength);return n+o/e.sequenceLength*(s-n)}function Fi(){let e,t,n,s,o,r,a,i,l;for(let f=0;f<=j;f+=1)En.push(0),Rn.push(0);let c=[],d=[];y.forEach(f=>{f.x!==void 0&&(c[f.order]=f.x,d[f.order]===void 0?d[f.order]=f.x+f.pixelWidth:d[f.order]=Math.max(d[f.order],f.x+f.pixelWidth))}),b.sort(ci),b.forEach(f=>{a="plain",o=He(f,a),r=ei(f);let h=a,p=()=>(h!==a&&(h=a,o=He(f,a)),o);n=f.path[0].y,f.type!=="read"?f.sequence[0].startsWith("-")?e=d[f.path[0].order]+20:e=c[f.path[0].order]-20:e=Pi(f);for(let u=0;u<f.path.length;u+=1)f.path[u].y===n?f.path[u].features!==void 0&&(l=u>0&&f.path[u-1].order===f.path[u].order,i=ms(f.path[u],c[f.path[u].order],d[f.path[u].order],a,f,e,n,o,l),a=i.highlight,e=i.xStart):(f.path[u-1].isForward?t=d[f.path[u-1].order]:t=c[f.path[u-1].order],t!==e&&(o=p(),X.rectangles.push({xStart:Math.min(e,t),yStart:n,xEnd:Math.max(e,t),yEnd:n+f.width-1,color:o,alpha:r,id:f.id,name:f.name,type:f.type})),f.path[u].order-1===f.path[u-1].order?(e=t,t=c[f.path[u].order],s=f.path[u].y,o=p(),X.curves.push({xStart:e,yStart:n,xEnd:t+1,yEnd:s,width:f.width,color:o,alpha:r,laneChange:Math.abs(f.path[u].lane-f.path[u-1].lane),id:f.id,name:f.name,type:f.type,nodeStart:f.path[u-1]?.node,nodeEnd:f.path[u]?.node}),e=t,n=s):f.path[u].order+1===f.path[u-1].order?(e=t,t=d[f.path[u].order],s=f.path[u].y,o=p(),X.curves.push({xStart:e+1,yStart:n,xEnd:t,yEnd:s,width:f.width,color:o,alpha:r,laneChange:Math.abs(f.path[u].lane-f.path[u-1].lane),id:f.id,name:f.name,type:f.type,nodeStart:f.path[u-1]?.node,nodeEnd:f.path[u]?.node}),e=t,n=s):f.path[u-1].isForward?(s=f.path[u].y,xs(1,t,n,s,f.width,o,f.id,f.path[u].order,f.type,f.name),e=d[f.path[u].order],n=f.path[u].y):(s=f.path[u].y,xs(-1,t,n,s,f.width,o,f.id,f.path[u].order,f.type,f.name),e=c[f.path[u].order],n=f.path[u].y),f.path[u].features!==void 0&&(l=f.path[u-1].order===f.path[u].order,i=ms(f.path[u],c[f.path[u].order],d[f.path[u].order],a,f,e,n,o,l),a=i.highlight,e=i.xStart));f.type!=="read"?f.path[f.path.length-1].isForward?t=d[f.path[f.path.length-1].order]+20:t=c[f.path[f.path.length-1].order]-20:t=$i(f),X.rectangles.push({xStart:Math.min(e,t),yStart:n,xEnd:Math.max(e,t),yEnd:n+f.width-1,color:o,alpha:r,id:f.id,name:f.name,type:f.type})})}var Di=1e9;function ps(e,t){Lt=new Map;let n=new Map,s=C.ignoreStrand;for(let h of e){let p=h.indexSequence;if(!(!p||p.length<2))for(let u=0;u<p.length-1;u+=1){let m=p[u],g=p[u+1],x=Math.abs(m),w=Math.abs(g),N=y[x],S=y[w];if(!N||!S)continue;let R;if(s){let v=`${m}>${g}`,I=`${-g}>${-m}`;R=v<I?v:I}else R=`${m}>${g}`;let M=n.get(R);M===void 0?n.set(R,{sSigned:m,dSigned:g,sName:m<0?`-${N.name}`:N.name,dName:g<0?`-${S.name}`:S.name,count:1,sourceTrackID:h.sourceTrackID}):M.count+=1}}let o=0;for(let h of n.values())h.count>o&&(o=h.count);let r=Ct,a=60,i=h=>o<=1?r:r+(a-r)*Math.sqrt(h/o),l=[],c=0;for(let h of n.values()){let p=Di+c,u=`${h.count.toLocaleString()} ${t}${h.count===1?"":"s"}: Node ${h.sName} \u2192 Node ${h.dName}`;Lt.set(p,{count:h.count,label:u});let m=y[Math.abs(h.sSigned)]?.sequenceLength??0;l.push({id:p,sourceTrackID:h.sourceTrackID,type:"read",name:u,sequence:[h.sName,h.dName],indexSequence:[],path:[],width:i(h.count),firstNodeOffset:m,finalNodeCoverLength:0,sequenceNew:[{nodeName:h.sName,mismatches:[]},{nodeName:h.dName,mismatches:[]}],mapping_quality:0,is_secondary:!1,sample_name:null,read_group:null,score:h.count}),c+=1}let d="?",f=0;for(let h of y){if(!h)continue;let p=h.contentHeight;p>f&&(f=p,d=h.name)}return rt&&console.log(`[coarsened] ${t}s_in=${e.length} edges_out=${l.length} tallestNodeBeforePlace=${d}(${f.toFixed(1)})`),l}function ms(e,t,n,s,o,r,a,i,l){let c=s,d,f,h,p;t-=8,n+=8;let u=y[e.node].sequenceLength;return e.features.sort((m,g)=>m.start-g.start),e.features.forEach(m=>{c!==m.type&&(d=He(o,c),e.isForward?(h=t+Math.round(m.start*(n-t+1)/u),l&&h<t+8&&(p=t+Math.round((m.end+1)*(n-t+1)/u)-1,f=He(o,m.type),X.featureRectangles.push({xStart:h,yStart:a,xEnd:p,yEnd:a+o.width-1,color:f,id:o.id,name:o.name,type:o.type})),h>r+1&&X.featureRectangles.push({xStart:r,yStart:a,xEnd:h-1,yEnd:a+o.width-1,color:d,id:o.id,name:o.name,type:o.type})):(h=n-Math.round(m.start*(n-t+1)/u),l&&h>n-8&&(p=n-Math.round((m.end+1)*(n-t+1)/u)-1,f=He(o,m.type),X.featureRectangles.push({xStart:p,yStart:a,xEnd:h,yEnd:a+o.width-1,color:f,id:o.id,name:o.name,type:o.type})),r>h+1&&X.featureRectangles.push({xStart:h+1,yStart:a,xEnd:r,yEnd:a+o.width-1,color:d,id:o.id,name:o.name,type:o.type})),r=h,c=m.type),(m.end<u-1||m.continue===void 0)&&(d=He(o,c),e.isForward?(p=t+Math.round((m.end+1)*(n-t+1)/u)-1,X.featureRectangles.push({xStart:r,yStart:a,xEnd:p,yEnd:a+o.width-1,color:d,id:o.id,name:o.name,type:o.type})):(p=n-Math.round((m.end+1)*(n-t+1)/u)-1,X.featureRectangles.push({xStart:p,yStart:a,xEnd:r,yEnd:a+o.width-1,color:d,id:o.id,name:o.name,type:o.type})),r=p+1,c="plain")}),{xStart:r,highlight:c}}var gs=7;function xs(e,t,n,s,o,r,a,i,l,c){let d=e===1?Rn:En,f=10*d[i],h=t+e*(f+5),p=gs,u=Math.min(gs,o),m=Math.min(n,s),g=Math.max(n,s),x=e===1?t:h-1,w=e===1?h:t,N=v=>{X.verticalRectangles.push({xStart:x,yStart:v,xEnd:w,yEnd:v+o-1,color:r,id:a,name:c,type:l})};N(n),X.verticalRectangles.push({xStart:e===1?h+p:h-p-u,yStart:m+o+p-1,xEnd:e===1?h+p+u-1:h-p-1,yEnd:g-p+1,color:r,id:a,name:c,type:l}),N(s);let S=h+e*p,R=h+e*(p+u),M=`M ${h} ${g}`;M+=` Q ${S} ${g} ${S} ${g-p}`,M+=` H ${R}`,M+=` Q ${R} ${g+o} ${h} ${g+o}`,M+=" Z ",X.corners.push({path:M,color:r,id:a,type:l}),M=`M ${h} ${m}`,M+=` Q ${R} ${m} ${R} ${m+o+p}`,M+=` H ${S}`,M+=` Q ${S} ${m+o} ${h} ${m+o}`,M+=" Z ",X.corners.push({path:M,color:r,id:a,type:l}),d[i]+=1}function Bi(e){let t=e.x-4,n=e.x+e.pixelWidth+4;return[t,n]}function ys(){switch(y.forEach(e=>{e.sequenceLength===void 0&&(e.sequenceLength=e.seq.length)}),C.nodeWidthOption){case"compressed":y.forEach(e=>{e.width=1+Math.log(e.sequenceLength)/Math.log(2),e.pixelWidth=Math.round((e.width-1)*8.401)});break;case"small":y.forEach(e=>{e.width=e.sequenceLength/100,e.pixelWidth=Math.round((e.width-1)*8.401)});break;case"fixed":y.forEach(e=>{e.width=10,e.pixelWidth=Math.round(e.width*8.401)});break;case"normal":{let e=C.charWidth;y.forEach(t=>{t.width=t.sequenceLength;let n=t.seq?.length??1;t.pixelWidth=Math.round(e*n)});break}default:throw new Error(`${C.nodeWidthOption} not implemented`)}}function qi(){let e,t,n=Array.from(y,()=>new Set),s=Array.from(y,()=>new Set),o;C.showReads&&E.length>0?o=b.concat(E):o=b,o.forEach(i=>{for(let l=0;l<i.sequence.length;l+=1)H(i.sequence[l])?(e=O(i.sequence[l]),l>0?(t=i.sequence[l-1],H(t)?s[L.get(e)].add(O(t)):(s[L.get(e)].add(t),s[L.get(e)].add(de(t)))):i.type==="haplotype"&&s[L.get(e)].add("None"),l<i.sequence.length-1?(t=i.sequence[l+1],H(t)?n[L.get(e)].add(O(t)):(n[L.get(e)].add(t),n[L.get(e)].add(de(t)))):i.type==="haplotype"&&n[L.get(e)].add("None")):(l>0?(e=i.sequence[l-1],n[L.get(i.sequence[l])].add(e),H(e)&&n[L.get(i.sequence[l])].add(O(e))):i.type==="haplotype"&&n[L.get(i.sequence[l])].add("None"),l<i.sequence.length-1?(e=i.sequence[l+1],s[L.get(i.sequence[l])].add(e),H(e)&&s[L.get(i.sequence[l])].add(O(e))):i.type==="haplotype"&&s[L.get(i.sequence[l])].add("None"))});let r=n.map(i=>Array.from(i)),a=s.map(i=>Array.from(i));if(C.showReads&&E.length>0){let i=y.slice();i.sort(Tt);let l=new Map,c=new Map,d=h=>{let p=l.get(h);if(p===void 0)throw new Error(`No merge offset recorded for node ${h}`);return p},f=h=>{let p=c.get(h);if(p===void 0)throw new Error(`No merge origin recorded for node ${h}`);return p};i.forEach(h=>{let p=st(L.get(h.name),r,a);if(p){let u=d(p)+oe(p).sequenceLength;l.set(h.name,u),l.set(de(h.name),u),c.set(h.name,f(p)),c.set(de(h.name),f(p))}else l.set(h.name,0),l.set(de(h.name),0),c.set(h.name,h.name),c.set(de(h.name),h.name)}),E.forEach(h=>{let p=h.sequenceNew??[];h.firstNodeOffset=(h.firstNodeOffset??0)+d(h.sequence[0]),h.finalNodeCoverLength=(h.finalNodeCoverLength??0)+d(h.sequence[h.sequence.length-1]);for(let u=h.sequence.length-1;u>=0;u-=1){let m=O(h.sequence[u]),g=st(L.get(m),r,a);if(g&&wn(L.get(g),r,a))if(u>0){h.sequence.splice(u,1);let x=oe(g).sequenceLength;p[u].mismatches.forEach(w=>{w.pos+=x}),p[u-1].mismatches=p[u-1].mismatches.concat(p[u].mismatches),p.splice(u,1)}else{h.sequence[0]=f(h.sequence[0]);let x=p[0],w=d(x.nodeName);x.mismatches.forEach(N=>{N.pos+=w}),x.nodeName=f(x.nodeName)}}})}for(let i=0;i<y.length;i+=1)if(wn(i,r,a)&&!st(i,r,a)){let l=i;for(;wn(l,r,a);)l=L.get(O(a[l][0])),y[i].sequenceLength+=y[l].sequenceLength,y[i].seq+=y[l].seq}b.forEach(i=>{for(let l=i.sequence.length-1;l>=0;l-=1){e=O(i.sequence[l]);let c=L.get(e);st(c,r,a)&&i.sequence.splice(l,1)}});for(let i=y.length-1;i>=0;i-=1)st(i,r,a)&&y.splice(i,1)}function st(e,t,n){if(t[e].length!==1||t[e][0]==="None")return!1;let s=O(t[e][0]),o=L.get(s);return n[o].length!==1||n[o][0]==="None"?!1:s}function wn(e,t,n){if(n[e].length!==1||n[e][0]==="None")return!1;let s=O(n[e][0]),o=L.get(s);return!(t[o].length!==1||t[o][0]==="None")}function Xi(e){let t=C.focusReadNames?new Set(C.focusReadNames):null;return e.filter(n=>n.is_secondary!==!0&&(n.mapping_quality??0)>=C.mappingQualityCutoff&&(t===null||n.name!==void 0&&t.has(n.name)))}function ki(e,t){let n=new Map;for(let s of e){let o=t(s),r=n.get(o);r===void 0?n.set(o,[s]):r.push(s)}return n}function Hi(e,t){return e.xStart<t.xStart?1:e.xStart>t.xStart?-1:e.yStart>t.yStart?1:e.yStart<t.yStart?-1:0}function Rs(e,t){let n=ki(e.filter(r=>r.type===t),r=>`${r.nodeStart},${r.nodeEnd}`);n.forEach(r=>{let a=.3,i=.4/r.length;r.length<=5&&(a=.5,i=0),r.sort(Hi),r.forEach(l=>{let c,d;l.yStart<l.yEnd?(c=l.xStart+(l.xEnd-l.xStart)*(1-a),a+=i,d=l.xStart+(l.xEnd-l.xStart)*(1-a)):(c=l.xStart+(l.xEnd-l.xStart)*a,a+=i,d=l.xStart+(l.xEnd-l.xStart)*a);let f=`M ${l.xStart} ${l.yStart}`;f+=` C ${c} ${l.yStart} ${c} ${l.yEnd} ${l.xEnd} ${l.yEnd}`,f+=` V ${l.yEnd+l.width}`,f+=` C ${d} ${l.yEnd+l.width} ${d} ${l.yStart+l.width} ${l.xStart} ${l.yStart+l.width}`,f+=" Z",l.path=f})});let s=Array.from(n.keys());s.sort(function(r,a){let i=r.split(",").map(Number),l=a.split(",").map(Number),c=i[0]??0,d=i[1]??0,f=l[0]??0,h=l[1]??0;return c<f?-1:c>f?1:d<h?-1:d>h?1:0});let o=[];for(let r of s){let a=n.get(r);a!==void 0&&o.push(...a)}return o}function Ss(e){let t=`M ${e.x-9} ${e.y} Q ${e.x-9} ${e.y-9} ${e.x} ${e.y-9}`,n=e.x,s=e.y-9;return e.width>1&&(n+=e.pixelWidth,t+=` L ${n} ${s}`),t+=` Q ${n+9} ${s} ${n+9} ${s+9}`,n+=9,s+=9,e.contentHeight>0&&(s+=e.contentHeight-0,t+=` L ${n} ${s}`),t+=` Q ${n} ${s+9} ${n-9} ${s+9}`,n-=9,s+=9,e.width>1&&(n-=e.pixelWidth,t+=` L ${n} ${s}`),t+=` Q ${n-9} ${s} ${n-9} ${s-9}`,n-=9,s-=9,e.contentHeight>0&&(s-=e.contentHeight-0,t+=` L ${n} ${s}`),t}function Wi(e){let t=new Map;for(let[n,s]of e.pathVisits??[])for(let o of s){let r=`${o.path} ${n}`,a=t.get(r);a?a.push(o.strand):t.set(r,[o.strand])}return t}function Gi(e){let t=new Map(e.nodes.map(r=>[r.id,r])),n=Wi(e),s=(e.paths??[]).map((r,a)=>({path:r,index:a})),o=s.findIndex(r=>le(r.path.name).name===e.referencePath);return o>0&&s.unshift(...s.splice(o,1)),s.flatMap(({path:r,index:a})=>{let i=le(r.name).name,l=new Map,c=r.nodeIds.flatMap(d=>{let f=t.get(d);if(!f)return[];let h=l.get(f.name)??0;l.set(f.name,h+1);let p=n.get(`${i} ${f.name}`)?.[h]??pn(f);return[mn(f,p)]});return c.length>0?[{id:a,name:r.name,sequence:c,sourceTrackID:0,type:"haplotype"}]:[]})}function Yi(e){return e.nodes.map(t=>({name:t.id,seq:"",sequenceLength:Math.max(1,t.length)}))}function Ge(e){return(e.paths?.length??0)>0}var zi=600,Ui=3,Ki=15;function ji(e){return Math.max(Ui,Math.min(Ki,Math.floor(zi/Math.max(1,e))))}function Ns(e){let t=e.paths??[],n=Gi(e),s=e.reads?ts(e,e.reads,t.length):[],o=s.length>0?co:lo,r=t.map((i,l)=>o(l,t.length)),a=ws(Yi(e),n,s,{nodeWidthOption:"compressed",trackWidth:ji(n.length),trackColor:i=>i.type==="read"?ns(i):r[i.id]});return a?{layout:a,pathColors:r}:void 0}function _n(e){let t=[];return e.nodes.forEach(n=>{n.order>=0&&t.push(n)}),t}function _s(e,t,n,s){let o=e.y+e.contentHeight/2-t;return[{x:n,y:o},{x:s,y:o}]}function As(e,t){return{minY:e.bounds.minY-t,maxY:e.bounds.maxY-t}}function Ls(e){let t=Ge(e)?Ns(e):void 0;if(!t)return;let{layout:n,pathColors:s}=t,o=n.bounds.minY,r={};for(let l of _n(n))r[l.name]=_s(l,o,l.x,l.x+l.pixelWidth);let{minY:a,maxY:i}=As(n,o);return{nodePositions:r,tubeMap:{layout:n,yOffset:o,pathColors:s},extent:{minX:n.bounds.minX,maxX:n.bounds.maxX,minY:a,maxY:i}}}function Vi(e,t){let n=new Map(e.nodes.map(i=>[i.id,i])),s=new Map;for(let i of _n(t)){let l=s.get(i.order);l?l.push(i):s.set(i.order,[i])}let o=[],r=-1/0;for(let i of[...s.keys()].sort((l,c)=>l-c)){let l=s.get(i),c=1/0,d=-1/0;for(let f of l){let h=n.get(f.name);h&&P(h)&&(c=Math.min(c,h.stable.start),d=Math.max(d,h.stable.start+f.sequenceLength))}c===1/0&&(c=d=r),c<r&&(c=r,d=Math.max(r,d)),r=Math.max(r,d),o.push({order:i,x0:Math.min(...l.map(f=>f.x)),x1:Math.max(...l.map(f=>f.x+f.pixelWidth)),bp0:c,bp1:d})}let a=o.find(i=>i.bp0!==-1/0);for(let i of o)i.bp0===-1/0&&(i.bp0=i.bp1=a?.bp0??0);return o}function Qi(e){return e.nodes.some(P)&&Ge(e)}function Is(e){let t=Qi(e)?Ns(e):void 0;if(!t)return;let{layout:n,pathColors:s}=t,o=Vi(e,n),r=new Map(o.map(l=>[l.order,l])),a=n.bounds.minY,i={};for(let l of _n(n)){let c=r.get(l.order);i[l.name]=_s(l,a,c.bp0,c.bp1)}return{nodePositions:i,tubeMap:{layout:n,yOffset:a,columns:o,pathColors:s},referenceAxis:!0,pixelRows:!0,extent:As(n,a)}}function Ot(e){let t=e.split("#"),n=t.length>=2?Number(t[1]):Number.NaN;return{sample:t[0]??e,haplotype:Number.isFinite(n)?n:void 0}}function Zi(e,t,n,s){let o=[],r=[],a=[e];for(s.add(e);a.length>0;){let i=a.pop(),l=t.get(i);if(l){o.push(l);for(let c of n.get(i)??[]){let d=t.get(c);d&&(d.stable.rank===mt?r.push(d):s.has(c)||(s.add(c),a.push(c)))}}}return{members:o,anchors:r}}function Ji(e){if(new Set(e.map(i=>i.stable.refName)).size!==1||e.length<2)return;let n=[...e].sort((i,l)=>i.stable.start-l.stable.start),s=n[0],o=n.at(-1),r=s.stable.start+s.length,a=o.stable.start;return a>=r?{start:r,end:a,entry:s}:void 0}function el(e,t,n){let s=new Map(e.map(a=>[a.id,a])),o=new Map,r=[];for(let a of n.get(t.id)??[])s.has(a)&&(o.set(a,0),r.push(a));if(r.length===0)for(let a of e)o.set(a.id,0),r.push(a.id);for(let a of r){let i=o.get(a)+s.get(a).length;for(let l of n.get(a)??[])if(s.has(l)){let c=o.get(l);(c===void 0||i<c)&&(o.set(l,i),r.push(l))}}return o}function tl(e,t,n){let s=el(e,t,n),o=[...e].sort((l,c)=>s.get(l.id)-s.get(c.id)),r=new Map(o.map((l,c)=>[l.id,c])),a=new Map(e.map(l=>[l.id,l])),i=new Map;for(let[l,c]of o.entries()){let d=0;for(let f of n.get(c.id)??[]){let h=a.get(f);h&&r.get(f)<l&&(d=Math.max(d,i.get(f)+h.length))}i.set(c.id,d)}return{offsets:i,ordered:o}}function Cs(e){let t=new Map(e.nodes.filter(Fe).map(r=>[r.id,r])),n=nt(e),s=new Set,o=[];for(let r of t.values())if(r.stable.rank!==mt&&!s.has(r.id)){let{members:a,anchors:i}=Zi(r.id,t,n,s),l=Ji(i);if(l){let{offsets:c,ordered:d}=tl(a,l.entry,n);o.push({start:l.start,refSpan:l.end-l.start,nodeIds:d.map(f=>f.id),nodeOffsets:d.map(f=>c.get(f.id)),pathLength:d.reduce((f,h)=>Math.max(f,c.get(h.id)+h.length),0)})}}return o.sort((r,a)=>r.start-a.start)}var nl=1,ol=.015;function Pt({graph:e,span:t,rowY:n,positions:s}){let o=t*ol,r=Cs(e),a=new Map(e.nodes.map(d=>[d.id,d])),i=[];for(let d of r){let f=d.refSpan-d.pathLength;f>=nl&&i.push({nodeIds:d.nodeIds,bp:f});let h=Math.max(d.refSpan,o),p=d.pathLength>0?h/d.pathLength:0;d.nodeIds.forEach((u,m)=>{let g=a.get(u);if(g){let x=d.nodeOffsets[m],w=h/d.nodeIds.length,N=R=>d.start+R*p,S=n(g);s[u]=p?[{x:N(x),y:S},{x:N(x+g.length),y:S}]:[{x:d.start+m*w,y:S},{x:d.start+(m+1)*w,y:S}]}})}let l=nt(e),c=Object.keys(s);for(let d of c){let f=s[d].at(-1).x;for(let h of l.get(d)??[]){let p=a.get(h);if(p&&!(h in s)){let u=n(p);s[h]=[{x:f,y:u},{x:f+o,y:u}],c.push(h)}}}return i}function sl(e,t){let n=new Map;for(let o of e.nodes)if(Ze(o)){let{sample:r}=Ot(o.stable.refName);n.set(r,(n.get(r)??0)+o.length)}let s=new Map(t.map((o,r)=>[o,r]));return[...n.keys()].sort((o,r)=>(s.get(o)??1/0)-(s.get(r)??1/0)||n.get(r)-n.get(o)||o.localeCompare(r))}function Ts(e,t,n=[]){let s=ye(e),o=sl(e,n);if(s.length===0||o.length===0)return;let r=Je(s,t),a=new Map(o.map((h,p)=>[h,p+1])),i=be(s),l=o.length+1,c=Pt({graph:e,span:r,rowY:h=>{let p=h.stable;return((p?a.get(Ot(p.refName).sample):void 0)??l)*q},positions:i}),f=[{label:Ot(s[0].stable.refName).sample,y:0},...o.map(h=>({label:h,y:a.get(h)*q}))];return{nodePositions:i,rowLabels:f,sampleRows:o,referenceAxis:!0,pixelRows:!0,alleleDeletions:c}}function rl(e){let t=new Set;for(let n of e.nodes)n.stable&&t.add(n.stable.rank);return new Map([...t].sort((n,s)=>n-s).map((n,s)=>[n,s]))}function Os(e,t){let n=ye(e);if(n.length===0)return;let s=Je(n,t),o=rl(e),r=be(n),a=Pt({graph:e,span:s,rowY:l=>(l.stable?o.get(l.stable.rank)??o.size:o.size)*q,positions:r}),i=[...o].map(([l,c])=>({label:l===0?"Reference (rank 0)":`Rank ${l}`,y:c*q}));return{nodePositions:r,rowLabels:i,referenceAxis:!0,pixelRows:!0,alleleDeletions:a}}var al=12,An=q;function Ps(e){return 10+8*Math.log2(1+e.length)}function he(e,t){return e<t?-1:e>t?1:0}function Fs(e,t){return he(e.at,t.at)||he(e.side,t.side)||he(e.hops,t.hops)}var $s={at:1/0,side:0,hops:0};function il(e){let t=new Map(e.nodes.map(s=>[s.id,s])),n=fl(e);return e.nodes.map(s=>s.id).sort((s,o)=>Fs(n.get(s)??$s,n.get(o)??$s)||he(t.get(s).name,t.get(o).name)||he(s,o))}function ll(e,t){let n=new Set(e.nodes.map(d=>d.id)),s=new Map(t.map(d=>[d.id,d.stable.start])),o=new Map,r=new Map;t.forEach((d,f)=>{r.set(d.id,t[f-1]?.id),o.set(d.id,t[f+1]?.id)});let a=t[0]?.id,i=(d,f)=>{let h=o.get(d);o.set(d,f),r.set(f,d),o.set(f,h),h!==void 0&&r.set(h,f)},l=(d,f)=>{let h=r.get(d);h===void 0?(a=f,r.set(f,void 0),o.set(f,d),r.set(d,f)):i(h,f)};for(let d of e.paths??[]){let f=0,h=0,p;for(let x of d.nodeIds){let w=s.get(x);w!==void 0&&(p!==void 0&&w!==p&&(w>p?f++:h++),p=w)}let u=h>f?[...d.nodeIds].reverse():d.nodeIds,m,g=new Set;for(let x of u)if(o.has(x)){if(m===void 0)for(let w of g)l(x,w);m=x}else n.has(x)&&(m===void 0?g.add(x):(i(m,x),m=x))}let c=[];for(let d=a;d!==void 0;d=o.get(d))c.push(d);return c}function cl(e,t){let n=[...t.entries()].sort(([a,i],[l,c])=>Fs(i,c)||he(a,l)).map(([a])=>a),s=n.length;for(let a of n){let i=t.get(a);for(let l of e.get(a)??[])t.has(l)||(t.set(l,{at:i.at,side:1,hops:i.hops+1}),n.push(l))}let o=new Set(n.slice(s)),r=new Set;for(let a of o){if(r.has(a))continue;let{at:i}=t.get(a),l=[a];r.add(a);let c=!0;for(let d of l){let{hops:f}=t.get(d),h=!0,p=!1;for(let u of e.get(d)??[]){let m=t.get(u);m.at===i&&o.has(u)?(h&&=m.hops<=f,r.has(u)||(r.add(u),l.push(u))):m.at!==i&&(p||=m.at<i,c&&=m.at<i)}c&&=!h||p}if(c)for(let d of l){let f=t.get(d);t.set(d,{...f,side:-1,hops:-f.hops})}}}function fl(e){let t=new Set(e.nodes.map(r=>r.id)),n=new Map;for(let r of e.edges)!t.has(r.from)||!t.has(r.to)||((n.get(r.from)??n.set(r.from,[]).get(r.from)).push(r.to),(n.get(r.to)??n.set(r.to,[]).get(r.to)).push(r.from));let s=e.nodes.filter(P).sort((r,a)=>he(r.stable.start,a.stable.start)||he(r.name,a.name)),o=new Map;return ll(e,s).forEach((r,a)=>{o.set(r,{at:a,side:0,hops:0})}),cl(n,o),o}function dl(e){let t=new Map(e.nodes.map(f=>[f.id,f])),n=il(e),s=new Map(n.map((f,h)=>[f,h])),o=f=>P(t.get(f)),r=new Map(n.map(f=>[f,[]])),a=new Map(n.map(f=>[f,[]])),i=(f,h)=>{r.get(h).push(f),a.get(f).push(h)};for(let f of e.edges)f.from===f.to||!s.has(f.from)||!s.has(f.to)||(s.get(f.from)<s.get(f.to)?i(f.from,f.to):i(f.to,f.from));let l=n.filter(o);for(let f=1;f<l.length;f++)i(l[f-1],l[f]);let c=new Map;for(let f of n){let h=0;for(let p of r.get(f))h=Math.max(h,c.get(p)+1);c.set(f,h)}for(let f=n.length-1;f>=0;f--){let h=n[f],p=a.get(h);if(o(h)||p.length===0)continue;let u=1/0;for(let x of p)u=Math.min(u,c.get(x));let m=c.get(h),g=Math.max(m,u-1);c.set(h,Math.floor((m+g)/2))}let d=[];for(let f of n)(d[c.get(f)]??=[]).push(f);return{layers:d,layerOf:c,preds:r}}function Ds(e){if(!e.nodes.some(P))return;let t=new Map(e.nodes.map(f=>[f.id,f])),n=f=>P(t.get(f)),{layers:s,layerOf:o,preds:r}=dl(e),a=s.map(f=>{let h=0;for(let p of f)h=Math.max(h,Ps(t.get(p)));return h}),i=[],l=0;for(let f=0;f<s.length;f++)i[f]=l,l+=a[f]+al;let c=new Map;for(let f of s){let h=[];for(let u of f){if(n(u)){c.set(u,0);continue}let m=r.get(u).filter(x=>c.has(x)),g=0;for(let x of m)g+=c.get(x)/m.length;h.push({id:u,ideal:g===0?An:g})}h.sort((u,m)=>u.ideal-m.ideal);let p=new Set([0]);for(let{id:u,ideal:m}of h){let g=Math.round(m/An);g===0&&(g=m>=0?1:-1);for(let x=1;p.has(g);x++)p.has(g+x)?p.has(g-x)||(g-=x):g+=x;p.add(g),c.set(u,g*An)}}let d={};for(let f of e.nodes){let h=o.get(f.id),p=Ps(f),u=i[h]+a[h]/2,m=c.get(f.id);d[f.id]=[{x:u-p/2,y:m},{x:u+p/2,y:m}]}return{nodePositions:d,referenceAxis:!1,pixelRows:!0}}function Bs(e){return e.sample??ut(e.name)}function hl(e){return e.haplotype!==void 0&&e.sample!==void 0?`${e.sample}#${e.haplotype}`:Bs(e)}function ul(e,t){let n=[],s;for(let o of e){s!==void 0&&o.start!==void 0&&o.start>s&&n.push(o.start-s),n.push(...o.nodeIds);let r=o.nodeIds.reduce((a,i)=>a+(t.get(i)??0),0);s=o.start===void 0?void 0:o.start+r}return n}function pl(e,t){let n=[],s;for(let o of e){if(o.start===void 0||s!==void 0&&o.start<s)return;s!==void 0&&o.start>s&&n.push({start:s,end:o.start});let r=o.start;for(let a of o.nodeIds){let i=t.get(a)??0;n.push({start:r,end:r+i}),r+=i}s=r}return n}function ml(e,t,n,s=!0){if(!n||!s)return{ids:e,complete:!0,from:-1,to:-1};let o=-1,r=-1,a=-1/0,i=1/0;if(e.forEach((c,d)=>{let f=typeof c=="string"?t.get(c):void 0;f&&(f.end<=n.start&&f.end>a&&(a=f.end,o=d),f.start>=n.end&&f.start<i&&(i=f.start,r=d))}),o<0||r<0)return{ids:e,complete:!1,from:-1,to:-1};let l=e.slice(Math.min(o,r)+1,Math.max(o,r));return{ids:o<r?l:l.reverse(),complete:!0,from:o,to:r}}function Ah(e,t){return t?e.filter(n=>t.includes(n.sample)).sort((n,s)=>t.indexOf(n.sample)-t.indexOf(s.sample)||n.label.localeCompare(s.label)):e}function qs(e,t,n){let s=e.paths??[],o=g=>le(g.name).name===e.referencePath,r=s.some(o)?s.filter(o).sort((g,x)=>(g.start??0)-(x.start??0)):s.slice(0,1),a=r[0],i=s.filter(g=>!r.includes(g));if(!a||i.length===0)return;let l=new Map;for(let g of i)l.set(g.name,[...l.get(g.name)??[],g]);let c=new Map(e.nodes.map(g=>[g.id,g.length])),d=a.start??0,f=t&&t.end>t.start?t:void 0,h=new Map;for(let g of r){let x=g.start??0;for(let w of g.nodeIds){let N=c.get(w)??0;h.has(w)||h.set(w,{start:x,end:x+N}),x+=N}}let p=f===void 0||[...h.values()].some(g=>g.end<=f.start)&&[...h.values()].some(g=>g.start>=f.end),u=g=>{let x=g[0],w=[...g].sort((G,K)=>(G.start??0)-(K.start??0)),{ids:N,complete:S,from:R,to:M}=ml(ul(w,c),h,f,p),v=pl(w,c),I=x.contig??pt(le(x.name).name),$=v?.length?R<0?{contig:I,start:v[0].start,reversed:!1}:R<M?{contig:I,start:v[R].end,reversed:!1}:{contig:I,start:v[R].start,reversed:!0}:void 0,W=[],D=0,pe=0,_e=0,re=0;for(let G of N){if(typeof G=="number"){W.push({start:D,bp:G,onReference:!1,gap:!0}),D+=G,_e+=G,re=0;continue}let K=c.get(G)??0,z=h.get(G),U=W.at(-1),Ae=U?.referenceStart,ze=z&&Ae!==void 0&&re>=0&&Ae+U.bp===z.start,T=z&&Ae!==void 0&&re<=0&&z.end===Ae;!z&&U&&!U.onReference&&!U.gap?U.bp+=K:ze||T?(U.bp+=K,ze||(U.referenceStart=z.start,U.reversed=!0),re=ze?1:-1):(W.push({start:D,bp:K,onReference:z!==void 0,referenceStart:z?.start}),re=0),D+=K,z||(pe+=K)}return{name:x.name,label:hl(x),sample:Bs(x),haplotype:x.haplotype,bp:D,offReferenceBp:pe,gapBp:_e,complete:S,runs:W,axis:$}};return{origin:f?f.start:d,unit:n,reference:u(r),rows:[...l.values()].map(u).sort((g,x)=>Number(x.complete)-Number(g.complete)||x.bp-g.bp||g.label.localeCompare(x.label))}}var gl=1.3;function xl(e){let t=e.reference.bp;for(let n of e.rows)t=Math.max(t,n.bp);return{maxX:e.origin+t*gl,maxY:e.rows.length*q}}function Xs(e,t){let n=ye(e),s=qs(e,t);if(n.length===0||!s)return;let o=t?n.filter(i=>Ut(i,t)):n,r=be(o.length>0?o:n),a=[{label:s.reference.label,y:0},...s.rows.map((i,l)=>({label:i.label,y:(l+1)*q}))];return{nodePositions:r,rowLabels:a,referenceAxis:!0,pixelRows:!0,extent:xl(s)}}var Gs="Force-directed layout",Ne=e=>e.nodes.some(P),ks=e=>Ne(e)&&(e.paths?.length??0)>1,Hs=e=>Ne(e)&&Ge(e),Ws=e=>Ne(e)&&e.nodes.some(Ze),$t=[{value:"auto",label:"Anchored",description:"x is reference bp, one row per stable rank. Needs rGFA tags or a reference path.",run:Os,cutMargins:!0,wholeWalks:!1,available:Ne,drawsLocally:Ne,drawsNodes:!0},{value:"samplerows",label:"Sample rows",description:"x is reference bp, one row per contributing assembly. Needs rGFA tags or a reference path.",run:Ts,cutMargins:!0,wholeWalks:!1,available:Ws,drawsLocally:Ws,drawsNodes:!0},{value:"walkrows",label:"Walk rows",description:"x is each walk's own bp: one bar per haplotype, blue on the reference's path and purple off it, so a repeat expansion reads as bar length, and each bar boxes its haplotype's own genes where the session has them. Needs W or P lines.",run:Xs,cutMargins:!1,wholeWalks:!0,available:ks,drawsLocally:ks,drawsNodes:!1},{value:"ordered",label:"Ordered",description:"x is reference order, not bp: every node gets room, bubbles read as lenses. Needs rGFA tags or a reference path.",run:Ds,cutMargins:!1,wholeWalks:!1,available:Ne,drawsLocally:Ne,drawsNodes:!0},{value:"tubemap",label:"Tube map",description:"sequenceTubeMap: every path a coloured tube through boxed nodes, columns in node order and node widths log-scaled. Needs P or W lines.",run:Ls,cutMargins:!1,wholeWalks:!1,available:Ge,drawsLocally:Ge,drawsNodes:!1},{value:"tubemapref",label:"Tube map on reference",description:"The tube map with each column at the reference bp it covers, so the tubes line up with the tracks around them. Needs P or W lines and a reference path.",run:Is,cutMargins:!0,wholeWalks:!1,available:Hs,drawsLocally:Hs,drawsNodes:!1},{value:"force",label:Gs,description:"OGDF FMMM, via the external Bandage engine.",run:()=>{},cutMargins:!1,wholeWalks:!1,available:()=>!0,drawsLocally:()=>!1,drawsNodes:!0}],yl=$t.map(e=>e.value);function bl(e,t){return!Ys(e).drawsLocally(t)}function Ys(e){return $t.find(t=>t.value===e)??$t[0]}var Ks=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],Cn=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"rainbow",label:"Rainbow"}],zs=["blue","red","purple","green"],wl=e=>Ks.some(t=>t.value===e),Ml=e=>Cn.some(t=>t.value===e);function vl(e,t,n,s=!0){let{field:o,scheme:r}=e.color??{},a=wl(o)?o:s?"progress":"walk",i=t?"grey":zs[n%zs.length],l=Ml(r)?r==="rainbow"&&a!=="reference"?i:r:i;return{field:a,scheme:l}}var js=.5,El=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4,Rl=e=>e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055;function Us(e){let[t,n,s]=[1,3,5].map(i=>El(Number.parseInt(e.slice(i,i+2),16)/255)),o=Math.cbrt(.4122214708*t+.5363325363*n+.0514459929*s),r=Math.cbrt(.2119034982*t+.6806995451*n+.1073969566*s),a=Math.cbrt(.0883024619*t+.2817188376*n+.6299787005*s);return[.2104542553*o+.793617785*r-.0040720468*a,1.9779984951*o-2.428592205*r+.4505937099*a,.0259040371*o+.7827717662*r-.808675766*a]}function Sl([e,t,n]){let s=(e+.3963377774*t+.2158037573*n)**3,o=(e-.1055613458*t-.0638541728*n)**3,r=(e-.0894841775*t-1.291485548*n)**3;return[4.0767416621*s-3.3077115913*o+.2309699292*r,-1.2684380046*s+2.6097574011*o-.3413193965*r,-.0041960863*s-.7034186147*o+1.707614701*r].map(a=>Rl(Math.max(0,Math.min(1,a)))*255)}function Tn(e,t){let n=Math.max(0,Math.min(1,t)),s=Cn.find(a=>a.value===e);if(!s||!("ends"in s))return Ee(n*Re,.7,.5).map(a=>a*255);let o=Us(s.ends[0]),r=Us(s.ends[1]);return Sl(o.map((a,i)=>a+(r[i]-a)*n))}function Ln(e,t){let[n,s,o]=Tn(e,t).map(Math.round);return`rgb(${n}, ${s}, ${o})`}function In(e,t){let[n,s,o]=Tn(e,t).map(Math.round);return B(n,s,o,255)}function Nl({field:e,scheme:t},n){return e==="walk"?In(t,js):n===void 0?Vs:In(t,n)}var Vs=Rt;function Qs({field:e,scheme:t}){return e==="walk"?[{offset:0,color:Ln(t,js)}]:Array.from({length:7},(n,s)=>({offset:s/6,color:Ln(t,s/6)}))}function _l(e){let t=Qs(e);return t.length===1?t[0].color:`linear-gradient(to right, ${t.map(n=>`${n.color} ${n.offset*100}%`).join(", ")})`}var Ft=8,On=34,Dt=12,Al=60;function Ll({count:e,bounds:t,pixelRows:n,width:s,room:o,columns:r}){function a(l){let c=Math.ceil(e/l),d=Math.floor((s-(l-1)*Ft)/l),f=(o-c*On-(c-1)*Ft)/c,h=(d-2*Dt)/t.w,p=t.h>0?(f-2*Dt)/t.h:1/0,u=n?h:Math.min(h,p),m=n?t.h:t.h*u,g=Math.floor(Math.max(Al,Math.min(m+2*Dt,f)));return{columns:l,width:d,height:g,scale:u,total:c*(g+On)+(c-1)*Ft}}if(r!==void 0)return a(Math.max(1,Math.min(e,Math.round(r))));let i=a(1);for(let l=2;l<=e;l++){let c=a(l);c.scale>i.scale&&(i=c)}return i}function Il(e){let t=typeof e=="string"?{field:e}:e??{};return{field:t.field==="walk"||t.field==="sample"?t.field:"",domain:[...t.domain??[]],...t.columns===void 0?{}:{columns:t.columns}}}function Zs(e,t){let n=new Map(t.map((o,r)=>[o,r])),s=o=>n.get(o)??t.length;return e.map((o,r)=>({name:o,i:r})).sort((o,r)=>s(o.name)-s(r.name)||o.i-r.i).map(({name:o})=>o)}function Cl(e,t,n=[]){let s=Zs(e,n),o={columns:void 0,count:e.length,cells:e.map(c=>s.indexOf(c))};if(t==="walk")return o;let r=e.map(c=>{let[d,f,h]=c.split("#"),p=Number(f);return h!==void 0&&Number.isInteger(p)&&p>=0?{sample:d,column:Math.max(0,p-1)}:void 0}),a=Zs([...new Set(r.flatMap(c=>c?[c.sample]:[]))],n),i=Math.max(1,...r.map(c=>c?c.column+1:1)),l=r.map(c=>c?a.indexOf(c.sample)*i+c.column:-1);return l.includes(-1)||new Set(l).size<l.length?o:{columns:i,count:a.length*i,cells:l}}var Tl=10;function Ol(e,t){let n=e.end-e.start,s=e.longestAlleleLength-e.shortestAlleleLength;return t.find(o=>s<=Tl*(o.end-o.start)&&(n===0?o.start<=e.start&&e.start<=o.end:Math.min(e.end,o.end)-Math.max(e.start,o.start)>=n/2))}var Pl=40;function ue(e){return e>=1e4?`${(e/1e3).toFixed(0)} kb`:e>=1e3?`${(e/1e3).toFixed(1)} kb`:`${e} bp`}function $l(e,t){let n=ue(e),s=ue(t),o=s.slice(s.indexOf(" "));return n.endsWith(o)?`${n.slice(0,-o.length)}\u2013${s}`:`${n}\u2013${s}`}function Js(e){return e>=ho?"\u22652.1B routes":e>=1e5?`${(e/1e3).toFixed(0)}k routes`:`${e} routes`}function Fl(e,t=[]){let n=Dl(e,t);return e.partial?{...n,label:`${n.label}, partial`}:n}function Dl(e,t){let n=e.end-e.start,{shortestAlleleLength:s,longestAlleleLength:o,pathCount:r,segmentCount:a,inversion:i}=e,l=$l(s,o);if(a>=Pl)return{kind:"superbubble",label:`${l} superbubble, ${a} segments, ${Js(r)}${i?", inv":""}`};if(i)return{kind:"inversion",label:`${ue(o)} inv`};let c=o!==s?Ol(e,t):void 0;if(c){let f=c.name?` (${c.name})`:"";return{kind:"repeat",label:`${l} repeat array${f}, ${Js(r)}`}}let d=r>2?`, ${r} alleles`:"";return s===o&&s===n?n<=1?{kind:"snp",label:"SNP"}:{kind:"substitution",label:`${ue(n)} sub`}:n===0||s===n?{kind:"insertion",label:`\u2264${ue(o-n)} ins${d}`}:o===n?{kind:"deletion",label:`${ue(n-s)} del${d}`}:{kind:"complex",label:`${ue(n)} ref \u2192 ${l}, ${r} alleles`}}var Bl={snp:"#5b6b7a",substitution:"#5b6b7a",insertion:"#2f8fd6",deletion:"#c94040",inversion:"#e07b00",repeat:"#8e3fbf",superbubble:"#8e3fbf",complex:"#8e3fbf"},ql={snp:"SNP",substitution:"substitution",insertion:"insertion",deletion:"deletion",inversion:"inversion",repeat:"repeat array",superbubble:"superbubble",complex:"site"};function Xl(e){return e.segments.split(",").filter(Boolean)}var $n="#2f8fd6",Fn="#8e3fbf",Dn="#bdbdbd",at="#1c1c22",Bn=12,qn=4,kl=3;function Ye(e){return`${(e/1e3).toFixed(e<1e4?1:0)} kb`}function er(e,t){return t?` \u2248 ${Math.round(e/t)} units`:""}function tr(e,t,n,s){let{bp:o,gapBp:r,complete:a}=e;if(!t)return`${Ye(o)}${er(o,n)}`;let i=o-t.bp,l=i===0?"":` (${i>0?"+":"\u2212"}${Ye(Math.abs(i))})`,c=r>0?` \xB7 ${Ye(r)} outside the cut`:"",d=s?` \xB7 called ${Ye(s.bp)}${s.spanningReads===0?" \xB7 no spanning read":""}`:"";return`${Ye(o)}${er(o,n)}${l}${c}${a?"":" \xB7 partial walk"}${d}`}function nr(e,t,n){let s=t+6;return s+e.length*we<n?{x:s,anchor:"start",halo:!1}:{x:t-6,anchor:"end",halo:!0}}function or(e,t,n){if(t*n<kl)return[];let s=[];for(let o=t;o<e;o+=t)s.push(o);return s}function sr(e,t){if(e.gap)return{fill:Dn};if(!t)return{fill:e.onReference?$n:Fn};if(e.referenceStart===void 0)return{fill:St};let n=Ao({...e,start:e.referenceStart},t);return n.length===1?{fill:At(n[0])}:{stops:n.map(At)}}function it(e,t,n){return e.reversed?{start:e.start-n,end:e.start-t}:{start:t-e.start,end:n-e.start}}function Hl(e,t){return e.reversed?{start:e.start-t,end:e.start}:{start:e.start,end:e.start+t}}function Wl(e,t){let n=new Map;for(let s of e){let o=t.get(s.name);if(!s.axis||!o)continue;let r=s.axis,a=({start:i,end:l})=>({start:Math.max(0,i),end:Math.min(s.bp,l)});n.set(s.name,o.map(i=>({name:i.name,...a(it(r,i.start,i.end)),exons:i.exons.map(l=>a(it(r,l.start,l.end))).filter(l=>l.end>l.start)})).filter(i=>i.end>i.start).sort((i,l)=>i.start-l.start))}return n}var Gl=9,Yl=5.2,zl=8,rr=(e,t)=>Math.min(2,(e-t)/2-1);function Bt(e,t){return rr(e,t)>=1}function ar(e,t,n,{rowPx:s=q,barPx:o=Bn}={}){if(!Bt(s,o))return[];let r=rr(s,o),a=e.map(c=>{let d=t(c.start);return{g:c,x:d,w:Math.max(2,t(c.end)-d)}}),i=[],l=new Set((o>=zl?[...a]:[]).sort((c,d)=>c.w-d.w).filter(({g:c,x:d,w:f})=>{let h=c.name.length*Yl/2,p=[d+f/2-h,d+f/2+h];return 2*h>f+6||i.some(([u,m])=>p[0]<m+2&&p[1]>u-2)?!1:(i.push(p),!0)}));return a.map(c=>({name:c.g.name,x:c.x,y:n-o/2-r,w:c.w,h:o+2*r,exons:c.g.exons.map(d=>({x:t(d.start),w:Math.max(1,t(d.end)-t(d.start))})),label:l.has(c)?{x:c.x+c.w/2,y:n+3,size:Gl}:void 0}))}var Pn=e=>`${e} row${e===1?"":"s"}`;function Ul(e,t={}){let n=[{swatch:t.ramp?{kind:"bar",fill:t.rampCss??Lo,ramp:!0}:{kind:"bar",fill:$n},label:`on ${e.reference.label}'s path`},{swatch:{kind:"bar",fill:t.ramp?St:Fn},label:`off ${e.reference.label}'s path`}];return[e.reference,...e.rows].some(s=>s.gapBp>0)&&n.push({swatch:{kind:"gap",fill:Dn},label:"walked outside the cut"}),t.genes?.crowded?n.push({swatch:{kind:"gene"},label:"genes left out: too many rows to box them in",note:!0}):t.genes&&(n.push({swatch:{kind:"gene"},label:"genes, each row's own annotation"}),t.genes.untracked&&n.push({swatch:{kind:"gene"},label:`no gene track for ${Pn(t.genes.untracked)}`,note:!0}),t.genes.unplaced&&n.push({swatch:{kind:"gene"},label:`no contig coordinates for ${Pn(t.genes.unplaced)}`,note:!0}),t.genes.unread&&n.push({swatch:{kind:"gene"},label:`genes not read for the last ${Pn(t.genes.unread)}`,note:!0})),n}var Kl="#111",jl="#9e9e9e",ir="#c62828";function Vl(e,t,n,s="walk-key"){let o=0,r=e.flatMap((a,i)=>{let l=`${s}-ramp-${i}`,c=!a.note&&a.swatch.kind==="bar"&&a.swatch.ramp?A("linearGradient",{id:l},...fn.map(h=>A("stop",{offset:h.offset,"stop-color":h.color}))):void 0,d=a.note?void 0:a.swatch.kind==="gene"?A("rect",{x:o,y:5,width:18,height:8,fill:"none",stroke:at,"stroke-width":1.5}):A("rect",{x:o,y:a.swatch.kind==="gap"?7:5,width:18,height:a.swatch.kind==="gap"?qn:8,rx:2,fill:c?`url(#${l})`:a.swatch.fill}),f=A("text",{x:a.note?o:o+23,y:13,"font-style":a.note?"italic":void 0,fill:a.note?"#666":void 0},a.label);return o+=(a.note?0:23)+a.label.length*we+16,[c,d,f].filter(h=>h!==void 0)});return{width:o,tree:A("g",{transform:`translate(${t} ${n})`,"font-family":"Helvetica, Arial, sans-serif","font-size":11},...r)}}function lr(e,t){let n=1/t,s=[],o=[],r=()=>{if(o.length!==0){if(o.length===1)s.push(o[0]);else{let i=0,l=0;for(let f of o)f.onReference?i+=f.bp:l+=f.bp;let c=i>=l,d=o.find(f=>f.onReference===c);s.push({start:o[0].start,bp:i+l,onReference:c,referenceStart:c?d.referenceStart:void 0,...d.reversed?{reversed:!0}:{}})}o=[]}},a=0;for(let i of e){if(i.gap||i.bp>=n){r(),a=0,s.push(i);continue}o.push(i),a+=i.bp,a>=n&&(r(),a=0)}return r(),s}function Ql(e,t,n){return A("g",{class:"row-gene","data-testid":"graph-walk-gene"},A("title",{},e.name),...e.exons.map(s=>A("rect",{x:s.x,y:t-n/2,width:s.w,height:n,fill:at,opacity:.35})),A("rect",{x:e.x,y:e.y,width:e.w,height:e.h,fill:"none",stroke:at,"stroke-width":1.5}),e.label&&A("text",{x:e.label.x,y:e.label.y,"font-family":"sans-serif","font-size":e.label.size,"font-weight":600,"text-anchor":"middle",fill:at,stroke:"white","stroke-width":2.5,"paint-order":"stroke"},e.name))}function Zl(e,t,n={}){let s=u=>u*t.scaleX+t.translateX,o=t.rowPx??q,r=t.barPx??Bn,a=u=>u*o*t.scaleY+t.translateY,{origin:i,unit:l,reference:c,rows:d}=e,f=u=>s(i+u),h=n.idPrefix??"walkrow",p=(u,m)=>{let g=a(m);if(g<-r||g>t.height+r)return;let x=lr(u.runs,t.scaleX).flatMap(v=>{let I=sr(v,n.ramp),$=v.gap?Math.min(qn,r):r,W=`${h}-${m}-${v.start}`,D=A("rect",{x:f(v.start),y:g-$/2,width:Math.max(1,v.bp*t.scaleX),height:$,fill:"stops"in I?`url(#${W})`:I.fill});return"stops"in I?[A("linearGradient",{id:W},...I.stops.map((pe,_e)=>A("stop",{offset:_e/(I.stops.length-1),"stop-color":pe}))),D]:[D]}),w=l?or(u.bp,l,t.scaleX).map(v=>A("line",{x1:f(v),x2:f(v),y1:g-r/2,y2:g+r/2,stroke:"white","stroke-width":1})):[],{call:N}=u,S=tr(u,m===0?void 0:c,l,N),R=nr(S,f(u.bp),t.width),M=t.readouts??!0;return A("g",{"data-testid":m===0?"graph-walk-reference":"graph-walk-row"},...x,...w,...ar(n.rowGenes?.get(u.name)??[],f,g,{rowPx:o,barPx:r}).map(v=>Ql(v,g,r)),N&&A("rect",{"data-testid":"graph-walk-call",x:f(N.bp)-1,y:g-r/2-3,width:2,height:r+6,fill:N.spanningReads===0?jl:Kl}),M&&A("text",{x:R.x,y:g+4,"font-family":"sans-serif","font-size":11,fill:N?.agrees===!1?ir:"#333",stroke:R.halo?"white":void 0,"stroke-width":R.halo?3:void 0,"paint-order":"stroke","text-anchor":R.anchor},S))};return A("g",{},...[c,...d].map(p))}var lt=6,dr=260,Jl=11,ec=3,hr=12,tc=1.3,nc="#111",cr=3;function oc(e,t,n){let s=e.pathVisits?.get(n.name)??[],o=[];for(let r of t){let a=r.axis;if(!a)continue;let i=le(r.name).name;for(let l of s){if(l.path!==i)continue;let{start:c,end:d}=it(a,l.start,l.start+n.length);d>0&&c<r.bp&&o.push({row:r.name,start:c,bp:d-c})}}return o}var fr=new WeakMap;function sc(e,t){let n=fr.get(e);if(n||(n=new Map,fr.set(e,n)),n.has(t))return n.get(t);let s=new Map(e.nodes.map(a=>[a.id,a.length])),o=(e.paths??[]).filter(a=>a.name===t),r;if(o.every(a=>a.start!==void 0)){r={ids:[],starts:[],ends:[]};for(let a of[...o].sort((i,l)=>i.start-l.start)){let i=a.start;for(let l of a.nodeIds){let c=s.get(l)??0;r.ids.push(l),r.starts.push(i),r.ends.push(i+c),i+=c}}}return n.set(t,r),r}function rc(e,t,n,s){let o=t.axis,r=o&&sc(e,t.name);if(!o||!r||n<0||n>t.bp)return;let a=o.reversed?o.start-n:o.start+n,i=.5/s,l=o.reversed?{start:o.start-t.bp,end:o.start}:{start:o.start,end:o.start+t.bp},c=Math.max(a-i,l.start),d=Math.min(a+i,l.end),f=0,h=r.starts.length;for(;f<h;){let g=f+h>>1;r.ends[g]<=c?f=g+1:h=g}let p,u=-1,m=!1;for(let g=f;g<r.starts.length&&r.starts[g]<d;g++){let x=r.ends[g]-r.starts[g],w=r.starts[g]<=a&&a<r.ends[g];(x>u||x===u&&w&&!m)&&(u=x,p=r.ids[g],m=w)}return p}function ac(e,t){let n=t.maxHeight??dr,s=t.labelPx??Math.max(...[e.reference,...e.rows].map(p=>p.label.length))*we+16,o=e.rows.length+1,r=Math.max(ec,Math.min(q,Math.floor((n-2*lt)/o))),a=r>=hr,i=r>=14,l=Math.max(2,Math.round(r*.6)),c=Math.max(e.reference.bp,...e.rows.map(p=>p.bp),1),d=a?s:lt,h=Math.max(1,t.width-d-lt)/(c*(i?tc:1));return{scaleX:h,scaleY:1,translateX:d-e.origin*h,translateY:lt+r/2,width:t.width,height:o*r+2*lt,rowPx:r,barPx:l,readouts:i,labelled:a,boxesGenes:Bt(r,l)}}function ic(e,t,n,s){let o=Math.round((s-t.translateY)/t.rowPx),r=[e.reference,...e.rows][o],a=(n-t.translateX)/t.scaleX-e.origin;return r&&o>=0&&a>=0&&a<=r.bp?{index:o,row:r,offset:a}:void 0}function lc(e,t,n){let s=new Map([e.reference,...e.rows].map((r,a)=>[r.name,a])),o=r=>(e.origin+r)*t.scaleX+t.translateX;return A("g",{"data-testid":"graph-walk-marks"},...n.flatMap(r=>{let a=s.get(r.row);if(a===void 0)return[];let i=a*t.rowPx+t.translateY,l=o(r.start),c=Math.max(2,r.bp*t.scaleX),d=f=>A("rect",{x:l,y:f,width:c,height:cr,fill:nc});return[d(i-t.barPx/2-cr-1),d(i+t.barPx/2+1)]}))}function cc(e,t,n=new Set){return A("g",{"font-family":"sans-serif","font-size":Jl,fill:"#333"},...(t.labelled?[e.reference,...e.rows]:[]).map((s,o)=>A("text",{x:6,y:o*t.rowPx+t.translateY+4,"font-weight":n.has(s.name)?600:void 0},s.label)))}function fc(e,t,n){if(t?.size)return e.boxesGenes?n:{untracked:0,unread:0,...n,crowded:!0}}var mr=2,qt=8192;function gr(){return typeof devicePixelRatio>"u"?1:Math.min(devicePixelRatio,mr)}var ur=!1;function pr(e,t,n){let s=Math.round(e*t);return s>qt?(ur||(ur=!0,console.warn(`Canvas ${n} ${s}px exceeds the safe limit ${qt}px and was clamped`)),qt):s}function Xn(e,t,n){let s=gr(),o=pr(t,s,"width"),r=pr(n,s,"height");(e.width!==o||e.height!==r)&&(e.width=o,e.height=r);let a=`${t}px`,i=`${n}px`;e.style.width!==a&&(e.style.width=a),e.style.height!==i&&(e.style.height=i)}var bp=class{constructor(e){this.transform=null,this.batch=null,this.nodeHighlights=new Map,this.highlightedEdge=null,this.highlightFactor=1;let t=e.getContext("2d");if(!t)throw new Error("Canvas 2D context not available");this.canvas=e,this.ctx=t}setErrorHandler(e){}releaseOffscreenTargets(){}resize(e,t){Xn(this.canvas,e,t)}uploadGeometry(e){this.batch=e,this.highlightedEdge=null}setNodeHighlights(e){this.nodeHighlights=e}setEdgeHighlight(e,t){this.highlightedEdge=e,this.highlightFactor=t}updateTransform(e){this.transform=e}render(e){if(!this.transform)return;let n=this.ctx,{width:s,height:o}=n.canvas;e[3]<1&&n.clearRect(0,0,s,o),n.fillStyle=mo([e[0],e[1],e[2]],e[3]),n.fillRect(0,0,s,o);let r=this.batch;r&&(n.lineCap="round",n.lineJoin="round",this.renderEdges(r),this.renderNodes(r),this.renderArrows(r))}renderEdges(e){let t=this.transform,n=this.ctx,s=this.highlightedEdge===null?void 0:e.edgeCurveRuns.get(this.highlightedEdge);for(let{color:o,items:r}of kn(e.edgeCurves,(a,i)=>({color:Xt(s,i)?wt(a.color,this.highlightFactor):a.color,weight:a.thickness,last:Xt(s,i)}))){n.strokeStyle=ne(o),n.lineWidth=r[0].thickness*2*t.dpr,n.beginPath();for(let a of r){let i=a.curves[0];n.moveTo(i.x0*t.scaleX+t.translateX,i.y0*t.scaleY+t.translateY);for(let l of a.curves)n.bezierCurveTo(l.cx0*t.scaleX+t.translateX,l.cy0*t.scaleY+t.translateY,l.cx1*t.scaleX+t.translateX,l.cy1*t.scaleY+t.translateY,l.x1*t.scaleX+t.translateX,l.y1*t.scaleY+t.translateY)}n.stroke()}}renderNodes(e){let t=this.transform,n=this.ctx,s=new Map;for(let[o,r]of this.nodeHighlights){let a=e.nodeStrokeRuns.get(o);if(a)for(let i=a.start;i<a.start+a.count;i++)s.set(i,r)}for(let{color:o,items:r}of kn(e.nodeStrokes,(a,i)=>{let l=s.get(i);return{color:l===void 0?a.color:wt(a.color,l),weight:a.thickness,last:l!==void 0}})){n.strokeStyle=ne(o),n.lineWidth=r[0].thickness*2*t.dpr,n.beginPath();for(let a of r){let i=a.points[0];n.moveTo(i.x*t.scaleX+t.translateX,i.y*t.scaleY+t.translateY);for(let l=1,c=a.points.length;l<c;l++){let d=a.points[l];n.lineTo(d.x*t.scaleX+t.translateX,d.y*t.scaleY+t.translateY)}}n.stroke()}}renderArrows(e){let t=this.transform,n=this.ctx,s=this.highlightedEdge===null?void 0:e.arrowRuns.get(this.highlightedEdge);for(let{color:o,items:r}of kn(e.arrows,(a,i)=>({color:Xt(s,i)?wt(a.color,this.highlightFactor):a.color,weight:0,last:Xt(s,i)}))){n.fillStyle=ne(o),n.beginPath();for(let a of r){let[i,l,c,d]=hc(a,t);n.moveTo(i.x,i.y),n.lineTo(l.x,l.y),n.lineTo(c.x,c.y),n.lineTo(d.x,d.y),n.closePath()}n.fill()}}dispose(){this.batch=null,this.nodeHighlights=new Map,this.highlightedEdge=null}},dc=.25;function hc(e,t){let n=Math.cos(e.angle),s=Math.sin(e.angle),o=e.x*t.scaleX+t.translateX,r=e.y*t.scaleY+t.translateY,a=e.length*t.dpr,i=e.halfWidth*t.dpr,l=o-n*a,c=r-s*a,d=a*(1-dc);return[{x:o,y:r},{x:l-s*i,y:c+n*i},{x:o-n*d,y:r-s*d},{x:l+s*i,y:c-n*i}]}function Xt(e,t){return e!==void 0&&t>=e.start&&t<e.start+e.count}function kn(e,t){let n=new Map,s=new Map;for(let o=0,r=e.length;o<r;o++){let a=e[o],{color:i,weight:l,last:c}=t(a,o),d=c?s:n,f=`${i}:${l}`,h=d.get(f);h?h.items.push(a):d.set(f,{color:i,items:[a]})}return[...n.values(),...s.values()]}function Hn(e,t,n){let s=Math.round(t),o=Math.round(n);return`${e?`${e}:`:""}${Be(s)}-${Be(o)} (${ce(o-s)})`}function uc(e,t){let{field:n}=e.encoding,s=e.range?Hn(e.range.contig,e.range.start,e.range.end):void 0,o=n==="progress"?s:n==="reference"&&t?Hn(t.name,t.start,t.end):void 0,r=e.range?e.range.end-e.range.start:e.bp,a=r-e.bp;return{delta:e.referenceBp===void 0||r===e.referenceBp?"":` ${r>e.referenceBp?"+":"\u2212"}${ce(Math.abs(r-e.referenceBp))}`,outside:a>0?`, ${ce(a)} outside the cut`:"",reversed:e.reversedBp>0?`, ${ce(e.reversedBp)} reversed`:"",shades:n!=="walk",scale:o,hover:o===s?void 0:s}}function pc(e,t,n){let s=e.progress.get(t),o=e.range;if(s===void 0||!o)return;let r=Math.round(o.start+s*(o.end-o.start)-n/2);return`${o.contig}:${Be(r)}-${Be(r+n)}`}function mc(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),s=new Map;t.nodes.forEach(o=>{let r=n.get(o.name);if(o.order>=0&&r&&P(r)){let{refName:a,start:i}=r.stable;(s.get(a)??s.set(a,[]).get(a)).push({bp0:i,bp1:i+o.sequenceLength,x0:o.x,x1:o.x+o.pixelWidth})}});for(let o of s.values())o.sort((r,a)=>r.bp0-a.bp0);return s}function kt(e,t,n=!1){let s=0,o=e.length-1;for(;s<o;){let i=s+o>>1,l=e[i].bp1;(n?l<t:l<=t)?s=i+1:o=i}let r=e[s];if(t<=r.bp0)return r.x0;let a=r.bp1-r.bp0;return a>0?r.x0+(Math.min(t,r.bp1)-r.bp0)/a*(r.x1-r.x0):r.x0}function Ht(e,t,n){let s=kt(e,t),o=kt(e,n,!0);return{x0:Math.min(s,o),x1:Math.max(s,o)}}function gc(e){let t;for(let n of e.values())(!t||n.length>t.length)&&(t=n);return t}var xr=5,xc=10,yc=110,bc=3;function yr(e){return e?"#b0b0b8":"#55555c"}function wc(e){let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<=1?1:n<=2?2:n<=5?5:10)*t}function br(e){let t=[];for(let n of e)t.every(s=>Math.abs(n.at-s.at)>=(n.width+s.width)/2+xc)&&t.push(n);return t.map(({text:n,at:s})=>({text:n,at:s}))}function Mc(e,t,n,s){let o=e[0],r=e.at(-1);if(!o||!r)return;let a=t(o.x0),i=t(r.x1),l=r.bp1-o.bp0;if(i<=a||l<=0)return;let c=wc(l/(i-a)*yc),d=[],f=[];for(let h=Math.ceil(o.bp0/c)*c;h<=r.bp1;h+=c){let p=Math.round(t(kt(e,h)))+.5;if(p>=0&&p<=n){d.push(p);let u=h.toLocaleString("en-US");f.push({text:u,at:p,width:s(u)})}}return{spans:[{x0:a,x1:i}],ticks:d,labels:br(f)}}function vc(e,t,n,s){let o=e.map(u=>({box:u,s0:t(u.x0),s1:t(u.x1)})).filter(({s0:u,s1:m})=>m>=0&&u<=n),r=o[0],a=o.at(-1);if(!r||!a)return;let i=(u,m)=>({text:u,at:m,width:s(u)}),l=(u,m)=>i(u.toLocaleString("en-US"),m),c=[],d=[],f=[],h=[];for(let{box:u,s0:m,s1:g}of o){c.push({x0:m,x1:g}),d.push(Math.round(m)+.5),g-m>=bc&&d.push(Math.round(g)+.5);let x=i(ce(u.bp1-u.bp0),(m+g)/2);x.width<=g-m&&f.push(x),u!==r.box&&h.push(l(u.bp0,m))}let p=[l(r.box.bp0,r.s0),l(a.box.bp1,a.s1)];return{spans:c,ticks:d,labels:br([...p,...f,...h])}}function wr(e,t,n,s,o=!1){return(o?Mc:vc)(e,t,n,s)}function Ec(e,t,n,s,o=!1){let{x:r,width:a,darkMode:i}=n;e.font="10px sans-serif";let l=wr(t,r,a,f=>e.measureText(f).width,o);if(!l)return;let c=yr(i),d=s+.5;e.strokeStyle=c,e.fillStyle=c,e.lineWidth=1,e.textAlign="center",e.textBaseline="top",e.beginPath();for(let{x0:f,x1:h}of l.spans)e.moveTo(Math.max(0,f),d),e.lineTo(Math.min(a,h),d);for(let f of l.ticks)e.moveTo(f,s),e.lineTo(f,s+xr);e.stroke();for(let{text:f,at:h}of l.labels)e.fillText(f,h,s+xr+2)}function Rc(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),s=[];return t.nodes.forEach(o=>{let r=n.get(o.name);o.order>=0&&r&&P(r)&&s.push({node:o.name,bp0:r.stable.start,bp1:r.stable.start+o.sequenceLength,x0:o.x,x1:o.x+o.pixelWidth})}),s}function Sc(e,t,n,s){let o=[];for(let r of e){let a=n(r.x0),i=n(r.x1);i>=0&&a<=s&&o.push({node:r.node,top0:t(r.bp0),top1:t(r.bp1),bottom0:a,bottom1:i})}return o}var Nc=3;function _c(e,t,n,s){if(t<=0||s<0||s>t)return;let o=s/t,r,a=Nc;for(let i of e){let l=i.top0+(i.bottom0-i.top0)*o,c=i.top1+(i.bottom1-i.top1)*o,d=Math.max(0,Math.min(l,c)-n,n-Math.max(l,c));d<a&&(a=d,r=i.node)}return r}function Mr(e,t,n){e.moveTo(t.top0,0),e.lineTo(t.top1,0),e.lineTo(t.bottom1,n),e.lineTo(t.bottom0,n),e.closePath()}function vr(e,t,n){e.moveTo(t.top0,0),e.lineTo(t.bottom0,n),e.moveTo(t.top1,0),e.lineTo(t.bottom1,n)}function Ac(e,t,n,{highlightNode:s,darkMode:o}){if(n<=0||t.length===0)return;let r=o?"255,255,255":"0,0,0";e.beginPath();for(let i of t)Mr(e,i,n);e.fillStyle=`rgba(${r},0.07)`,e.fill(),e.beginPath();for(let i of t)vr(e,i,n);e.strokeStyle=`rgba(${r},0.35)`,e.lineWidth=.5,e.stroke();let a=t.find(i=>i.node===s);a&&(e.beginPath(),Mr(e,a,n),e.fillStyle="rgba(255,192,203,0.5)",e.fill(),e.beginPath(),vr(e,a,n),e.strokeStyle="#ff0000",e.lineWidth=1,e.stroke())}function Lc(e,t){let n=[],s=e.sequenceNew??[];return s.forEach((o,r)=>{let a=t.nodeMap.get(O(o.nodeName)),i=a===void 0?void 0:t.nodes[a],l=r;for(;l<e.path.length&&e.path[l].node!==a;)l+=1;let c=e.path[l]?.y;if(i&&c!==void 0){let d={readId:e.id,y:c,height:e.width,nodeY:i.y},f=h=>Es(i,h);for(let h of o.mismatches){let p=f(h.pos);if(p!==null){if(h.type==="insertion"){let u=r===0&&h.pos===e.firstNodeOffset||r===s.length-1&&h.pos===e.finalNodeCoverLength;n.push({...d,kind:"insertion",x:p,seq:h.seq,softClip:u})}else if(h.type==="deletion"&&h.length!==void 0){let u=f(h.pos+h.length);u!==null&&n.push({...d,kind:"deletion",x0:p,x1:u})}else if(h.type==="substitution"&&h.seq!==void 0){let u=f(h.pos+h.seq.length);u!==null&&n.push({...d,kind:"substitution",x0:p,x1:u,seq:h.seq})}}}}}),n}function Er(e){return e.reads.flatMap(t=>Lc(t,e))}function Gn(e){let t=e.trim().split(/[\s,]+/),n=[],s=0,o=()=>Number(t[s++]);for(;s<t.length;){let r=t[s++];r==="M"||r==="L"?n.push({op:r,x:o(),y:o()}):r==="H"?n.push({op:r,x:o()}):r==="V"?n.push({op:r,y:o()}):r==="Q"?n.push({op:r,x1:o(),y1:o(),x:o(),y:o()}):r==="C"?n.push({op:r,x1:o(),y1:o(),x2:o(),y2:o(),x:o(),y:o()}):r==="Z"&&n.push({op:r})}return n}function Ar(e){let t=1/0,n=-1/0;for(let s of e)"x"in s&&(t=Math.min(t,s.x),n=Math.max(n,s.x)),"x1"in s&&(t=Math.min(t,s.x1),n=Math.max(n,s.x1));return{x0:t,x1:n}}function Rr(e,t,n,s){let o=Gn(e);return{commands:o,color:t,track:s,alpha:n,...Ar(o)}}function Sr(e,t){let{shapes:n}=e,s=i=>t==="haplotype"?i.id:void 0,o=[...n.rectangles,...n.verticalRectangles].filter(i=>i.type===t).map(i=>({color:i.color,track:s(i),alpha:i.alpha??1,x0:i.xStart,x1:i.xEnd+1,y0:i.yStart,y1:i.yEnd+1})),r=Rs(n.curves,t).map(i=>Rr(i.path,i.color,i.alpha??1,s(i))),a=n.corners.filter(i=>i.type===t).map(i=>Rr(i.path,i.color,1,s(i)));return{rects:o,shapes:[...r,...a]}}function Ic(e){let t=[];return e.nodes.forEach(n=>{if(n.order>=0){let s=Gn(Ss(n));t.push({name:n.name,commands:s,...Ar(s)})}}),{bounds:e.bounds,layers:[Sr(e,"haplotype"),Sr(e,"read")],nodes:t,mismatches:Er(e).filter(n=>n.kind!=="insertion"||!n.softClip)}}function Nr(e,t,n,s){let o=0,r=0;for(let a of t)switch(a.op){case"M":o=a.x,r=a.y,e.moveTo(n(o),s(r));break;case"L":o=a.x,r=a.y,e.lineTo(n(o),s(r));break;case"H":o=a.x,e.lineTo(n(o),s(r));break;case"V":r=a.y,e.lineTo(n(o),s(r));break;case"Q":o=a.x,r=a.y,e.quadraticCurveTo(n(a.x1),s(a.y1),n(o),s(r));break;case"C":o=a.x,r=a.y,e.bezierCurveTo(n(a.x1),s(a.y1),n(a.x2),s(a.y2),n(o),s(r));break;case"Z":e.closePath();break}}function _r(e,t,n,s,o){let r=new Map;for(let a of t)if(n(a)){let i=`${s(a)}|${a.alpha}`,l=r.get(i);l?l.push(a):r.set(i,[a])}for(let a of r.values()){e.fillStyle=s(a[0]),e.globalAlpha=a[0].alpha,e.beginPath();for(let i of a)o(i);e.fill()}e.globalAlpha=1}var Cc=12,Tc=.15;function Oc(e){return Math.max(Tc,Math.min(1,e/Cc))}var Pc=.55;function $c(e,t,n){let{x:s,y:o,width:r}=n,a=d=>s(d.x1)>=0&&s(d.x0)<=r,i=d=>d.track!==void 0&&n.tubeColors?.[d.track]||d.color;for(let d of t.layers)_r(e,d.rects,a,i,f=>{let h=s(f.x0),p=o(f.y0);e.rect(h,p,s(f.x1)-h,o(f.y1)-p)}),_r(e,d.shapes,a,i,f=>{Nr(e,f.commands,s,o)});let l=n.darkMode?"#d0d0d0":"#000000",c=n.darkMode?"rgba(40,40,40,0.4)":"rgba(255,255,255,0.4)";e.lineWidth=2*Math.max(.25,Math.min(1,n.yScale));for(let d of t.nodes)if(a(d)){let f=d.name===n.highlightNode;e.beginPath(),Nr(e,d.commands,s,o);let h=f?void 0:n.nodeColors?.get(d.name);e.fillStyle=f?"rgba(255,192,203,0.5)":h??c,e.strokeStyle=f?"#ff0000":l,e.globalAlpha=h?Pc:1,e.fill(),e.globalAlpha=f?1:Oc(s(d.x1)-s(d.x0)),e.stroke(),e.globalAlpha=1}Dc(e,t.mismatches,n)}var Lr=12,Fc=6;function Ir(e){return Lr*e>=Fc}function Wn(e,{x:t,width:n}){let[s,o]=e.kind==="insertion"?[e.x,e.x]:[e.x0,e.x1];return t(o)>=0&&t(s)<=n}function Dc(e,t,n){let{x:s,y:o,yScale:r,darkMode:a}=n;if(!Ir(r)||t.length===0)return;let i=Lr*r;e.fillStyle="grey",e.beginPath();for(let l of t)if(l.kind==="deletion"&&Wn(l,n)){let c=s(l.x0),d=o(l.y);e.rect(c,d,s(l.x1)-c,o(l.y+l.height)-d)}e.fill(),e.font=`${i}px monospace`,e.textBaseline="alphabetic",e.fillStyle=a?"#ffffff":"#000000";for(let l of t)Wn(l,n)&&(l.kind==="substitution"?e.fillText(l.seq,s(l.x0)+1,o(l.y+l.height)):l.kind==="insertion"&&e.fillText("*",s(l.x)-3,o(l.y+l.height)))}function Bc(e,t){let n=[];for(let s of t){let o=e.get(s.refName),r=o?.[0],a=o?.at(-1);if(!o||!r||!a)continue;let i=Math.max(s.start,r.bp0),l=Math.min(s.end,a.bp1);l<=i||n.push({gene:s,...Ht(o,i,l),exons:s.exons.filter(c=>c.end>i&&c.start<l).map(c=>Ht(o,Math.max(c.start,i),Math.min(c.end,l)))})}return n}var Yn=22,qc=4,Wt=8,Xc="11px sans-serif",kc=8;function Hc(e){let t=e.flatMap(o=>[{x:o.x0,step:1},{x:o.x1,step:-1}]).sort((o,r)=>o.x-r.x||o.step-r.step),n=0,s=0;for(let{step:o}of t)n+=o,s=Math.max(s,n);return Math.min(qc,s)}function Wc(e,t,n,s,o=0){let{x:r,width:a,darkMode:i}=n,l=Math.max(1,Math.floor((s-o)/Yn)),c=[],d=i?"#e0e0e6":"#1c1c22";e.font=Xc,e.textAlign="center",e.textBaseline="alphabetic",e.fillStyle=d,e.strokeStyle=d,e.lineWidth=1;let f=t.map(h=>({g:h,s0:r(h.x0),s1:r(h.x1)})).filter(({s0:h,s1:p})=>p>=0&&h<=a).sort((h,p)=>h.s0-p.s0);for(let{g:h,s0:p,s1:u}of f){let m=h.gene.strand>0?" \u2192":h.gene.strand<0?"\u2190 ":"",g=h.gene.strand<0?`${m}${h.gene.name}`:`${h.gene.name}${m}`,x=(Math.max(p,0)+Math.min(u,a))/2,w=e.measureText(g).width/2,N=Math.min(p,x-w),S=Math.max(u,x+w),R=c.findIndex(v=>v+kc<=N);R===-1&&(R=Math.min(c.length,l-1)),c[R]=Math.max(c[R]??-1/0,S);let M=s-R*Yn-Wt/2;e.beginPath(),e.moveTo(p,M+.5),e.lineTo(u,M+.5),e.stroke();for(let v of h.exons){let I=r(v.x0);e.fillRect(I,M-Wt/2,Math.max(1,r(v.x1)-I),Wt)}e.fillText(g,x,M-Wt/2-2)}}var se=12,$r=se+8,Fr=8,Cr=Fr+3,Gc=12;function Yc(e,{colorScheme:t,referenceRamp:n,walks:s}){let o={...Nt(e),referenceRamp:n},r=[];return e.nodes.forEach((a,i)=>{if(P(a)){let l=s?s.map(c=>{let d=c.colors.get(a.id);return d===void 0?Et:ne(d)}):[ne(_t(a,i,t,o))];r.push({node:a.id,bp0:a.stable.start,bp1:a.stable.start+a.length,colors:l,faded:l.includes(Et)})}}),r.sort((a,i)=>a.bp0-i.bp0)}function zn(e,t,n){let s=t*e.scale+e.translateX,o=n*e.scale+e.translateX;return s<o?[s,o]:[o,s]}var Tr=2;function Dr(e,t,n){let s=-t.translateX/t.scale,o=(n-t.translateX)/t.scale,r=Math.min(s,o),a=Math.max(s,o),i=0,l=0;for(let c of e)i+=Math.max(0,Math.min(c.bp1,r)-c.bp0),l+=Math.max(0,c.bp1-Math.max(c.bp0,a));return t.scale>=0?{left:Math.round(i),right:Math.round(l)}:{left:Math.round(l),right:Math.round(i)}}function zc(e,t,n,s){if(s<0||s>se+Tr)return;let o,r=Tr;for(let a of e){let[i,l]=zn(t,a.bp0,a.bp1),c=Math.max(0,i-n,n-l);c<=r&&(r=c,o=a.node)}return o}function Uc(e,t){let n=e?.[Math.floor(e.length/2)];return n?t(n):void 0}function Br(e,t,n,s){let o=e.map(c=>{let[d,f]=zn(t,c.bp0,c.bp1),h=Math.round(d*s);return{colors:c.colors,x0:d,px0:h,px1:Math.max(Math.round(f*s),h+1)}}).filter(c=>c.px1>0&&c.px0<n*s).sort((c,d)=>c.x0-d.x0),r=[],a=-1/0,i=[-1/0,-1/0];for(let{colors:c,px0:d,px1:f}of o){let h=Math.max(d,a);if(f>h){let p=i[0]<h?0:1;i[p]=f,r.push({colors:c,x0:h/s,x1:f/s,tier:p}),a=f}}return(r.length>0?r.at(-1).x1-r[0].x0:0)>=r.length*Gc?r:r.map(({tier:c,...d})=>d)}function Or(e,t,n,s){let o=n>0?t:t-Cr;e.clearRect(o,0,Cr,se);let r=t+n,a=r+n*Fr;e.beginPath(),e.moveTo(r,se/2),e.lineTo(a,0),e.lineTo(a,se),e.closePath(),e.fillStyle=s,e.fill()}function Pr(e,t,n){return Math.round(e*se*n/t)/n}function Kc(e,t,n,{width:s,lit:o,darkMode:r,dpr:a=1}){let i=r?"#ffffff":"#18181c";e.clearRect(0,0,s,$r);for(let c of Br(t,n,s,a)){let{tier:d}=c,f=d!==void 0&&c.colors.length===1,h=f?2:c.colors.length;c.colors.forEach((p,u)=>{let m=f?d:u,g=Pr(m,h,a);e.fillStyle=p,e.fillRect(c.x0,g,c.x1-c.x0,Pr(m+1,h,a)-g)})}let l=Dr(t,n,s);if(l.left>0&&Or(e,0,1,i),l.right>0&&Or(e,s,-1,i),o){let[c,d]=zn(n,o.start,o.end),f=Math.max(d-c,3),h=(c+d)/2-f/2;e.strokeStyle=i,e.lineWidth=1.5,e.strokeRect(h,.75,f,se-1.5),o.anchor&&(e.beginPath(),e.moveTo(h+f/2,se),e.lineTo(o.anchor.x,o.anchor.y),e.lineWidth=1,e.stroke())}}function jc(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),s=[];return t.nodes.forEach((o,r)=>{let a=n.get(o.name);if(o.order>=0&&a&&P(a)){let i=a.stable.start;s.push({bp0:i,bp1:i+o.sequenceLength,index:r,node:o})}}),s.sort((o,r)=>o.bp0-r.bp0)}function Vc(e,t,n){let s=0,o=e.length-1;for(;s<o;){let r=s+o+1>>1;e[r].bp0<=t?s=r:o=r-1}return[e[s],e[s-1]].find(r=>r&&n.has(r.index)&&r.bp0<=t&&t<=r.bp1)}function Xm(e,t,n){let s=jc(e,t),o=[];for(let r of t.tracks){let a=r.name?n.get(r.name):void 0;if(a?.length){let i=new Map;for(let l of r.path)l.node!==null&&l.y!==void 0&&!i.has(l.node)&&i.set(l.node,l.y);for(let l of a){let c=Vc(s,l.start,i);if(c){let{node:d,bp0:f,bp1:h}=c,p=u=>d.x+(Math.min(u,h)-f)/(h-f)*d.pixelWidth;o.push({x0:p(l.start),x1:p(l.end),y:i.get(c.index),height:r.width})}}}}return o}function Qc(e){return e?"rgba(255,255,255,0.9)":"rgba(0,0,0,0.8)"}function km(e,t,{x:n,y:s,width:o,darkMode:r}){if(t.length!==0){e.fillStyle=Qc(r),e.beginPath();for(let a of t){let i=n(a.x0),l=Math.max(n(a.x1),i+1);if(l>=0&&i<=o){let c=s(a.y);e.rect(i,c,l-i,s(a.y+a.height)-c)}}e.fill()}}function Zc(e,t){return Math.abs(t-e)<=.1*Math.max(e,t)}function Jc(e,t){let n=e.length,s=t.length,o=Array.from({length:n+1},()=>new Array(s+1).fill(0)),r=Array.from({length:n+1},()=>new Array(s+1).fill(!1));for(let i=n-1;i>=0;i--)for(let l=s-1;l>=0;l--){let c=Math.abs(e[i]-t[l])+o[i+1][l+1],d=n-i>s-l?o[i+1][l]:1/0,f=s-l>n-i?o[i][l+1]:1/0;o[i][l]=Math.min(c,d,f),r[i][l]=o[i][l]===c}let a=new Array(n).fill(void 0);for(let i=0,l=0;i<n&&l<s;)r[i][l]?a[i++]=l++:n-i>s-l?i++:l++;return a}function qr(e,t){return e.map((n,s)=>({item:n,i:s})).sort((n,s)=>t(n.item)-t(s.item))}var kr=e=>e.spanningReads!==0;function Xr(e,t){return{...t,agrees:e.complete&&kr(t)?Zc(e.bp,t.bp):void 0}}function ef(e,t){let n=new Map,s=new Set;e.forEach((i,l)=>{let c=t.find(d=>d.haplotype!==void 0&&d.haplotype===i.haplotype);c&&(s.add(c),n.set(l,Xr(i,c)))});let o=t.filter(i=>i.haplotype===void 0),r=qr(e,i=>i.bp),a=[[r.filter(i=>i.item.complete),o.filter(kr)],[r,o]];for(let[i,l]of a){let c=i.filter(f=>!n.has(f.i)),d=qr(l.filter(f=>!s.has(f)),f=>f.bp);Jc(c.map(f=>f.item.bp),d.map(f=>f.item.bp)).forEach((f,h)=>{if(f!==void 0){let p=c[h],u=d[f].item;s.add(u),n.set(p.i,Xr(p.item,u))}})}return n}function cg(e,t){if(!t)return e;let n=new Map,s=new Map;for(let o of e)s.set(o.sample,[...s.get(o.sample)??[],o]);for(let[o,r]of s){let a=t[o];if(a)for(let[i,l]of ef(r,a))n.set(r[i],l)}return e.map(o=>({...o,call:n.get(o)}))}var Hr=Qe(ht(),1),hg=(0,te.createSvgIcon)((0,Hr.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6"}),"Settings");export{te as a,ja as b,pn as c,Za as d,Ja as e,Wi as f,nt as g,zr as h,il as i,Ah as j,qs as k,xl as l,$t as m,yl as n,bl as o,Ys as p,ne as q,Et as r,St as s,ga as t,Nt as u,_t as v,Ma as w,Ks as x,Cn as y,vl as z,Nl as A,Vs as B,Qs as C,_l as D,Ft as E,On as F,Dt as G,Ll as H,Il as I,Cl as J,ue as K,Fl as L,Bl as M,ql as N,Xl as O,Lo as P,Ra as Q,at as R,Bn as S,qn as T,tr as U,Hl as V,Wl as W,Ul as X,ir as Y,Vl as Z,Zl as _,oc as $,rc as aa,ac as ba,ic as ca,lc as da,cc as ea,fc as fa,gr as ga,bp as ha,Sa as ia,Mf as ja,vf as ka,Hn as la,uc as ma,pc as na,Cf as oa,Ho as pa,Tf as qa,Wo as ra,dn as sa,Go as ta,Yo as ua,Ha as va,mc as wa,gc as xa,yr as ya,Ec as za,Rc as Aa,Sc as Ba,_c as Ca,Ac as Da,Ic as Ea,$c as Fa,Ir as Ga,Wn as Ha,Bc as Ia,Yn as Ja,Hc as Ka,Wc as La,$r as Ma,Yc as Na,Dr as Oa,zc as Pa,Uc as Qa,Kc as Ra,Xm as Sa,Qc as Ta,km as Ua,cg as Va,_d as Wa,Ad as Xa,Ya,Ld as Za,Id as _a,hn as $a,un as ab,Hd as bb,Wd as cb,hg as db};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{B as Kt,C as Be,D as ce,E as jt,F as Vt,G as yt,H as ao,I as io,J as Qt,K as Zt,N as lo,O as co,V as fo,W as bt,a as le,g as Qn,h as we,i as Zn,j as Jn,k as gt,l as q,n as eo,o as to,p as et,q as xt,r as tt,s as De,t as no,u as oo,v as so,z as ro}from"./chunk-FSGQSCPI.js";import{d as ho}from"./chunk-OPJLYB4S.js";import{c as Vn}from"./chunk-S2YZT446.js";import{a as mt,b as Fe,c as P,d as Ze,e as ye,f as Ut,g as be,j as Je}from"./chunk-CNQYRKZ3.js";import{a as ut,c as jn,d as pt}from"./chunk-LRBVMAUV.js";import{a as ht}from"./chunk-TYJTJGPO.js";import{a as Kn,b as Qe}from"./chunk-FY3BTKY4.js";var po=Kn((tf,uo)=>{uo.exports=JBrowseExports["@mui/material/SvgIcon"]});var ja=Kn((Yd,es)=>{es.exports=JBrowseExports.mobx});var te=Qe(po(),1);function B(e,t,n,s){return(s<<24|n<<16|t<<8|e)>>>0}function Jt(e){return e&255}function en(e){return e>>>8&255}function tn(e){return e>>>16&255}function nn(e){return e>>>24&255}function ne(e){return`rgba(${Jt(e)},${en(e)},${tn(e)},${nn(e)/255})`}function mo(e,t){return`rgba(${Math.round(e[0]*255)},${Math.round(e[1]*255)},${Math.round(e[2]*255)},${t})`}function qe(e,t){return B(Jt(e),en(e),tn(e),Math.round(nn(e)*t))}function wt(e,t){return B(Math.min(255,Math.round(Jt(e)*t)),Math.min(255,Math.round(en(e)*t)),Math.min(255,Math.round(tn(e)*t)),nn(e))}var go=new WeakMap;function Mt(e,t,n,s,o,r,a=!1){let{scaleX:i,scaleY:l}=n,c=go.get(e);if(c?.graph===t&&c.scaleX===i&&c.scaleY===l&&c.deletions===s&&c.routes===r&&c.stranded===a&&c.version===o)return c.curves;let d=new Map;for(let f=0;f<t.edges.length;f++){let h=t.edges[f],p=e[h.from],u=e[h.to];if(p?.length&&u?.length){let m=s?.get(f),g=m&&r?.[f];d.set(f,g?so(p,u,g,a?xt(h):void 0):oo(p,u,no(h,a),0,0,n,m?ro(e,m):[]))}}return go.set(e,{graph:t,scaleX:i,scaleY:l,deletions:s,routes:r,stranded:a,version:o,curves:d}),d}var Gr=4;function nt(e){let t=new Map;function n(s,o){let r=t.get(s);r?r.push(o):t.set(s,[o])}for(let s of e.edges)n(s.from,s.to),n(s.to,s.from);return t}function Yr({nodeId:e,nodeById:t,neighbors:n}){let s=new Set([e]),o=[e],r=1/0,a=-1/0;for(let i=0;i<Gr&&o.length>0;i++){let l=[];for(let c of o){let d=n.get(c);if(d){for(let f of d)if(!s.has(f)){s.add(f);let h=t.get(f);h&&P(h)?(r=Math.min(r,h.stable.start+h.length),a=Math.max(a,h.stable.start)):l.push(f)}}}o=l}return r===1/0?void 0:{start:Math.min(r,a),end:Math.max(r,a)}}function zr({nodeId:e,nodeById:t,neighbors:n}){let s=t.get(e);return s===void 0?void 0:P(s)?{start:s.stable.start,end:s.stable.start+s.length}:Yr({nodeId:e,nodeById:t,neighbors:n})}function xo(e){let t=new Map(e.nodes.map(o=>[o.id,o])),n=nt(e),s=new Map;for(let o of e.nodes){let r=zr({nodeId:o.id,nodeById:t,neighbors:n});r&&s.set(o.id,(r.start+r.end)/2)}return s}var Ur=B(119,119,119,217),yo=B(136,136,136,217),Kr=B(24,24,28,240),jr=2.2,ln=B(160,160,160,255),Xe=.18,Et=ne(qe(ln,Xe)),Vr=11,Qr=1.2,bo=4,on=1e-6,Zr=7,Jr=3,ea=3,ta=1.5,wo=3,na=.5,oa=.45,sn=12,sa=1e-6,fe=new Float64Array(64),Me=new Float64Array(64),ve=new Float64Array(64);function ra(e,t,n,s){let o=e.length*sn+1;fe.length<o&&(fe=new Float64Array(o),Me=new Float64Array(o),ve=new Float64Array(o));let r=e[e.length-1];fe[0]=r.x1,Me[0]=r.y1,ve[0]=0;let a=1,i=0;for(let l=e.length-1;l>=0&&i<s;l--){let c=e[l];for(let d=1;d<=sn&&i<s;d++){let f=1-(d/sn)**2,h=1-f,p=h*h*h,u=3*h*h*f,m=3*h*f*f,g=f*f*f,x=p*c.x0+u*c.cx0+m*c.cx1+g*c.x1,w=p*c.y0+u*c.cy0+m*c.cy1+g*c.y1;i+=Math.hypot(x-fe[a-1],(w-Me[a-1])*n)*t,fe[a]=x,Me[a]=w,ve[a]=i,a++}}return a}function Mo(e,t){let n=1;for(;n<e-1&&ve[n]<t;)n++;let s=ve[n-1],o=ve[n],r=o>s?Math.min(1,Math.max(0,(t-s)/(o-s))):0;return{x:fe[n-1]+(fe[n]-fe[n-1])*r,y:Me[n-1]+(Me[n]-Me[n-1])*r}}function aa({curves:e,edgeHalfWidth:t,nodeHalfWidth:n,scale:s,yToX:o,color:r,fromSegments:a,toSegments:i}){let l=Zr+Jr*t,c=ra(e,s,o,n+wo*l),d=ve[c-1],f=d<sa,h=Math.min(n,d),p=f?Math.min(1,ia(a,s,o)/l):1;if(f?p<na:d<wo*l)return;let u=Mo(c,h),m=Mo(c,h+l*p),g=u.x-m.x,x=(u.y-m.y)*o,w=e[e.length-1];return{x:u.x,y:u.y,angle:Math.hypot(g,x)>0?Math.atan2(x,g):_o(w,o,ca(w,i)),length:l*p,halfWidth:(ea+ta*t)*p,color:r}}function ia(e,t,n){let s=0;for(let o=1;o<e.length;o++)s+=Math.hypot(e[o].x-e[o-1].x,(e[o].y-e[o-1].y)*n);return s*t}function la(e,t,n,s,o){if(s)return xt(e).from==="start";let r=a=>Math.hypot(a.x-n.x0,(a.y-n.y0)*o);return r(t[0])<r(t.at(-1))}function ca(e,t){if(t.length<2)return;let n=t[0],s=t[t.length-1];return Math.hypot(e.x1-n.x,e.y1-n.y)<=Math.hypot(e.x1-s.x,e.y1-s.y)?{from:n,to:t[1]}:{from:s,to:t[t.length-2]}}function rn(e,t=1){let n=t===1?e:e.map(o=>({x:o.x,y:o.y*t})),s=[];for(let o=0;o<n.length;o++){let r=0,a=0;if(o===0){let i=n[1].x-n[0].x,l=n[1].y-n[0].y,c=Math.hypot(i,l);c>0&&(r=-l/c,a=i/c)}else if(o===n.length-1){let i=n[o].x-n[o-1].x,l=n[o].y-n[o-1].y,c=Math.hypot(i,l);c>0&&(r=-l/c,a=i/c)}else{let i=n[o].x-n[o-1].x,l=n[o].y-n[o-1].y,c=Math.hypot(i,l),d=n[o+1].x-n[o].x,f=n[o+1].y-n[o].y,h=Math.hypot(d,f);if(c>0&&h>0){let p=-l/c,u=i/c,m=-f/h,g=d/h;r=(p+m)/2,a=(u+g)/2;let x=p*r+u*a;x>.1&&(r/=x,a/=x)}else c>0?(r=-l/c,a=i/c):h>0&&(r=-f/h,a=d/h)}s.push({nx:r,ny:a})}return s}function vo(e,t,n,s=1){return e.map((o,r)=>({x:o.x+t[r].nx*n,y:o.y+t[r].ny*n/s}))}function vt(e,t,n,s){return B(Math.round(e*255),Math.round(t*255),Math.round(n*255),Math.round(s*255))}function Ee(e,t,n){let s=(1-Math.abs(2*n-1))*t,o=s*(1-Math.abs(e/60%2-1)),r=n-s/2,a=0,i=0,l=0;return e<60?(a=s,i=o):e<120?(a=o,i=s):e<180?(i=s,l=o):e<240?(i=o,l=s):e<300?(a=o,l=s):(a=s,l=o),[a+r,i+r,l+r]}var fa=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],da=[[237,137,44],[158,42,122]],ha=[[220,50,50],[50,120,220]];function an(e,t){let n=Math.max(0,Math.min(1,t))*(e.length-1),s=Math.min(e.length-2,Math.floor(n)),o=n-s,r=e[s],a=e[s+1];return B(Math.round(r[0]+(a[0]-r[0])*o),Math.round(r[1]+(a[1]-r[1])*o),Math.round(r[2]+(a[2]-r[2])*o),255)}function ua(e,t){let[n,s,o]=Ee(ao(e),Qt,Zt);return vt(n,s,o,t)}var Re=300,pa=.7,ma=.5,No=[60,65,72],Rt=B(...No,255),St=`rgb(${No.join(", ")})`;function ga(e,t){let n=xo(e);if(t&&t.end>t.start)return{start:t.start,span:t.end-t.start,midpoints:n};let s=1/0,o=-1/0;for(let r of n.values())s=Math.min(s,r),o=Math.max(o,r);return{start:s===1/0?0:s,span:o>s?o-s:1,midpoints:n}}function Nt(e){let t=1/0,n=-1/0,s=1/0,o=-1/0,r=0;for(let a of e.nodes)a.stable!==void 0&&a.stable.rank>r&&(r=a.stable.rank),a.depth<t&&(t=a.depth),a.depth>n&&(n=a.depth),a.length<s&&(s=a.length),a.length>o&&(o=a.length);return{minDepth:t,maxDepth:n,minLength:s,maxLength:o,maxRank:r,nodeCount:e.nodes.length}}function _t(e,t,n,s){switch(n){case"random":return ua(e.id,1);case"depth":return an(fa,s.maxDepth>s.minDepth?(e.depth-s.minDepth)/(s.maxDepth-s.minDepth):.5);case"node-length":return an(ha,s.maxLength>s.minLength?(e.length-s.minLength)/(s.maxLength-s.minLength):.5);case"stable-rank":return e.stable===void 0?B(160,160,160,255):e.stable.rank===0?B(52,152,219,255):an(da,s.maxRank>1?(e.stable.rank-1)/(s.maxRank-1):0);case"reference-position":{let o=s.referenceRamp,r=o?.midpoints.get(e.id);if(o===void 0||r===void 0)return B(160,160,160,255);if(e.stable!==void 0&&e.stable.rank>0)return Rt;let a=Math.max(0,Math.min(1,(r-o.start)/o.span)),[i,l,c]=Ee(a*Re,pa,ma);return vt(i,l,c,1)}case"grey":return B(160,160,160,255);case"rainbow":{let o=s.nodeCount>1?t/s.nodeCount*360:0,[r,a,i]=Ee(o,.75,.5);return vt(r,a,i,1)}default:return B(52,152,219,255)}}function _o(e,t=1,n){let s=[[e.cx1,e.cy1],[e.cx0,e.cy0],[e.x0,e.y0]];for(let[o,r]of s){let a=e.x1-o,i=(e.y1-r)*t;if(Math.hypot(a,i)>0)return Math.atan2(i,a)}return n?Math.atan2((n.to.y-n.from.y)*t,n.to.x-n.from.x):0}function xa(e,t){let n=!1;for(let s=0;s<e.length-1&&!n;s++){let o=e[s],r=e[s+1];n=Math.max(o.x,r.x)>=t.minX&&Math.min(o.x,r.x)<=t.maxX&&Math.max(o.y,r.y)>=t.minY&&Math.min(o.y,r.y)<=t.maxY}return n}function Eo(e,t){for(let n of e){let s=Math.min(n.x0,n.cx0,n.cx1,n.x1),o=Math.max(n.x0,n.cx0,n.cx1,n.x1),r=Math.min(n.y0,n.cy0,n.cy1,n.y1),a=Math.max(n.y0,n.cy0,n.cy1,n.y1);if(o>=t.minX&&s<=t.maxX&&a>=t.minY&&r<=t.maxY)return!0}return!1}var Ro=new WeakMap;function ya(e){let t=Ro.get(e);if(!t){let n=[],s=new Map,o=e.paths??[];for(let r=0;r<o.length;r++){let[a,i,l]=Ee(io(r,o.length),Qt,Zt);n.push(vt(a,i,l,.85)),s.has(o[r].name)||s.set(o[r].name,r)}t={pathColorByIndex:n,pathIndexByName:s},Ro.set(e,t)}return t}var So=new WeakMap,ba=new Map;function wa(e){let t=So.get(e);if(!t){t=new Map;for(let[n,s]of(e.paths??[]).entries())for(let o of new Set(s.nodeIds)){let r=t.get(o);r?r.push(n):t.set(o,[n])}So.set(e,t)}return t}function Ma(e){let{nodePositions:t,graph:n,nodeById:s,colorScheme:o,contigThickness:r,connectorThickness:a,drawPaths:i,nodeWidth:l="uniform",highlight:c,axis:d,linearLayout:f,viewportBounds:h,referenceRamp:p,deletions:u,deletionRoutes:m,stranded:g,hiddenEdges:x,version:w=0}=e,N=l==="depth"?fo(n):0,S=d.scaleX,R=tt(d),M=Mt(t,n,d,u,w,m,g),v=[],I=new Map,$=[],W=new Map,D=[],pe=new Map,_e={...Nt(n),referenceRamp:p},re=new Map;if(o==="rainbow")for(let T=0;T<n.nodes.length;T++)re.set(n.nodes[T].id,T);let G=n.paths?.length??0,{pathColorByIndex:K,pathIndexByName:z}=ya(n),U=T=>K[z.get(T)??-1]??yo,Ae=i&&G>1?wa(n):ba,ze=S>(f?1:oa);for(let T=0;T<n.edges.length;T++){let F=n.edges[T],V=t[F.from],ae=t[F.to],Q=M.get(T);if(!V?.length||!ae?.length||!Q||x?.has(T))continue;let Le=F.pathIds?.length??0,Ue=u?.get(T)!==void 0,Ke=c?.edgeIndexes.has(T)??!1,Ie=a/2*(Ue?jr:1),Ce=i&&Le>0,me=Ue?Kr:Ur,Z=!c||Ke?me:qe(me,Xe),je=s.get(F.to),Te=(je?bt(je,r,l,N):r)/2,Oe=(xe,$e,Y,ie)=>{let ee=xe===0&&$e===0?Q:et(Q,xe,$e);if(h&&!Eo(ee,h))return;if(Ue)for(let Gt of to(ee,Vr/S))D.push({curves:Gt,thickness:Ie,color:Y});else D.push({curves:ee,thickness:Ie,color:Y});let dt=ze&&ie!==void 0?aa({curves:ee,edgeHalfWidth:a/2,nodeHalfWidth:Te,scale:S,yToX:R,color:ie,fromSegments:V,toSegments:ae}):void 0;dt&&$.push(dt)},ge=D.length,Pe=$.length,J=c&&Ke&&!Ce?c.walks:void 0;if(J){let xe=s.get(F.from),$e=xe?bt(xe,r,l,N):r,Y=Math.max($e/J.length,bo),ie=rn(V,R),{nx:ee,ny:dt}=(la(F,V,Q[0],g,R)?ie[0]:ie.at(-1))??{nx:0,ny:0},Gt=1/Math.max(S,on);J.forEach((Yt,Wr)=>{if(!Yt.edgeIndexes.has(T))return;let zt=(Wr-(J.length-1)/2)*Y*Gt,Un=zt===0?Q:et(Q,ee*zt,dt*zt/R);h&&!Eo(Un,h)||D.push({curves:Un,thickness:Y/2,color:Yt.colors.get(F.from)??Yt.colors.get(F.to)??me})})}else if(!Ce)Oe(0,0,Z,Z);else{let xe=De(V,ae,Le,d),$e=Math.floor((Le-1)/2);for(let Y=0;Y<Le;Y++){let ie=xe[Y],ee=U(F.pathIds[Y]);Oe(ie.x,ie.y,c&&!c.names.has(F.pathIds[Y])?qe(ee,Xe):ee,Y===$e?Z:void 0)}}let Ve=D.length-ge;Ve>0&&pe.set(T,{start:ge,count:Ve});let ft=$.length-Pe;ft>0&&W.set(T,{start:Pe,count:ft})}for(let[T,F]of Object.entries(t)){let V=s.get(T);if(!V||h&&!xa(F,h))continue;let ae=c!==void 0&&!c.nodeIds.has(T),Q=ae?ln:_t(V,re.get(T)??0,o,_e),Le=ae?qe(Q,Xe):Q,ct=bt(V,r,l,N),Ue=ct/2,Ke=v.length,Ie=Ae.get(T),Ce=ct/G,me=F.length>=2,Z=c&&!ae&&!Ie?.length?c.walks:void 0;if(me&&Z){let Te=Math.max(ct/Z.length,bo),Oe=rn(F,R),ge=1/Math.max(S,on);Z.forEach((Pe,J)=>{let Ve=Pe.colors.get(T);if(Ve===void 0)return;let ft=(J-(Z.length-1)/2)*Te*ge;v.push({points:Z.length===1?F:vo(F,Oe,ft,R),thickness:Te/2,color:Ve})})}else if(me&&Ie?.length&&Ce>=Qr){let Te=rn(F,R),Oe=1/Math.max(S,on);for(let ge of Ie){let Pe=(ge-(G-1)/2)*Ce*Oe,J=K[ge]??yo;v.push({points:vo(F,Te,Pe,R),thickness:Ce/2,color:ae?qe(J,Xe):J})}}else me&&v.push({points:F,thickness:Ue,color:Le});let je=v.length-Ke;je>0&&I.set(T,{start:Ke,count:je})}return{nodeStrokes:v,nodeStrokeRuns:I,arrows:$,arrowRuns:W,edgeCurves:D,edgeCurveRuns:pe}}function At(e){return`hsl(${e}, 70%, 50%)`}function cn(e,t){let n=(e-t.start)/(t.end-t.start);return Math.max(0,Math.min(1,n))*Re}var va=30;function Ao({start:e,bp:t,reversed:n},s){let o=cn(e,s),r=cn(e+t,s);if(r-o<1)return[(o+r)/2];let a=Math.ceil((r-o)/va);return Array.from({length:a+1},(i,l)=>cn(e+t*(n?a-l:l)/a,s))}var fn=Array.from({length:7},(e,t)=>({offset:t/6,color:At(t/6*Re)})),Lo=`linear-gradient(to right, ${fn.map(e=>`${e.color} ${e.offset*100}%`).join(", ")})`;function A(e,t={},...n){return{tag:e,attrs:t,children:n.filter(s=>!!s||s==="")}}function Io(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function Ea(e){return Io(e).replaceAll('"',""")}function Ra(e){if(typeof e=="string")return Io(e);let t=Object.entries(e.attrs).filter(([,n])=>n!==void 0).map(([n,s])=>` ${n}="${Ea(String(s))}"`).join("");return`<${e.tag}${t}>${e.children.map(Ra).join("")}</${e.tag}>`}var Sa="#daa520",Na=1,_a=2,Aa=4;function Mf(e,t,n,s=o=>o){let o=r=>{let a=t(r)*2;return n?.nodeIds.has(r)?Math.max(a,n.walks.length*Aa):a};return e.flatMap(r=>r.exonsByNode.map(({nodeId:a,d:i})=>({key:`${r.gene.name}-${r.gene.start}-${a}`,d:s(i),inner:o(a)+2*Na})))}function vf(e,t){if(e.length===0)return;let n=(s,o,r)=>A("path",{d:s.d,fill:"none",stroke:o,"stroke-width":r,"stroke-linecap":"round","stroke-linejoin":"round","vector-effect":t.transform?"non-scaling-stroke":void 0});return A("g",{},A("mask",{id:t.id,maskUnits:"userSpaceOnUse",x:0,y:0,width:t.width,height:t.height},A("g",{transform:t.transform},...e.map(s=>n(s,"#fff",s.inner+2*_a)),...e.map(s=>n(s,"#000",s.inner)))),A("rect",{width:t.width,height:t.height,fill:Sa,mask:`url(#${t.id})`}))}var La=50;function Co(e,t){return t>0?Math.max(1,e/t):La}function Ia(e){let t=new Set,n=1/0,s=-1/0;for(let o of e)t.add(o.minY),n=Math.min(n,o.minY),s=Math.max(s,o.minY);return t.size>1?(s-n)/(t.size-1):void 0}function Ca(e,t,n){let s=Co(t,e.length);return{x:s,y:n>0?Co(n,e.length):Ia(e)??s}}function To(e,t,n,s){return e===void 0?Ca(t,n,s):typeof e=="number"?{x:e,y:e}:e}function Ta(e,t,n){let s=e.get(t);s||(s=new Map,e.set(t,s));let o=s.get(n);return o||(o=[],s.set(n,o)),o}function Oo(e,t,n,s,o,r,a){let i=Math.floor(n/t.x),l=Math.floor(o/t.x),c=Math.floor(s/t.y),d=Math.floor(r/t.y);for(let f=i;f<=l;f++)for(let h=c;h<=d;h++)Ta(e,f,h).push(a)}function Po(e,t,n,s,o,r){let a=Math.floor((n-o)/t.x),i=Math.floor((n+o)/t.x),l=Math.floor((s-r)/t.y),c=Math.floor((s+r)/t.y),d=[],f=new Set;for(let h=a;h<=i;h++){let p=e.get(h);if(p)for(let u=l;u<=c;u++){let m=p.get(u);if(m)for(let g of m)f.has(g)||(f.add(g),d.push(g))}}return d}var $o=class{constructor(e,t){this.cells=new Map;let n=[],s=0,o=0;for(let[r,a]of Object.entries(e))for(let i=0;i<a.length-1;i++){let l=a[i],c=a[i+1],d=Math.min(l.x,c.x),f=Math.min(l.y,c.y),h=Math.max(l.x,c.x),p=Math.max(l.y,c.y);s+=h-d,o+=p-f,n.push({entry:{nodeId:r,segmentIdx:i},minX:d,minY:f,maxX:h,maxY:p})}this.cellSize=To(t,n,s,o);for(let r of n)Oo(this.cells,this.cellSize,r.minX,r.minY,r.maxX,r.maxY,r.entry)}query(e,t,n,s=n){return Po(this.cells,this.cellSize,e,t,n,s)}},Fo=class{constructor(e,t,n,s,o,r,a=0,i,l=!1){this.cells=new Map,this.edgeCurves=Mt(e,t,s,r,a,i,l);let c=[],d=0,f=0;for(let h=0;h<t.edges.length;h++){let p=t.edges[h],u=e[p.from],m=e[p.to],g=this.edgeCurves.get(h);if(u?.length&&m?.length&&g){let{minX:x,minY:w,maxX:N,maxY:S}=eo(g),R=p.pathIds?.length??0;if(n&&R>0){let M=0,v=0;for(let I of De(u,m,R,s))M=Math.max(M,Math.abs(I.x)),v=Math.max(v,Math.abs(I.y));x-=M,w-=v,N+=M,S+=v}d+=N-x,f+=S-w,c.push({ei:h,minX:x,minY:w,maxX:N,maxY:S})}}this.cellSize=To(o,c,d,f);for(let h of c)Oo(this.cells,this.cellSize,h.minX,h.minY,h.maxX,h.maxY,h.ei)}getCurves(e){return this.edgeCurves.get(e)}query(e,t,n,s=n){return Po(this.cells,this.cellSize,e,t,n,s)}};function Xo(e,t,n,s,o,r){let a=o-n,i=r-s,l=a*a+i*i;if(l===0)return Math.hypot(e-n,t-s);let c=Math.max(0,Math.min(1,((e-n)*a+(t-s)*i)/l));return Math.hypot(e-(n+c*a),t-(s+c*i))}function Oa(e,t,n,s,o,r,a,i,l,c){let d=1/0,f=20,h=n,p=s;for(let u=1;u<=f;u++){let m=u/f,g=1-m,x=g*g*g*n+3*g*g*m*o+3*g*m*m*a+m*m*m*l,w=g*g*g*s+3*g*g*m*r+3*g*m*m*i+m*m*m*c;d=Math.min(d,Xo(e,t,h,p,x,w)),h=x,p=w}return d}function Pa(e,t,n){return Oa(e,t,n.x0,n.y0,n.cx0,n.cy0,n.cx1,n.cy1,n.x1,n.y1)}function Do(e,t,n,s=1){let o=1/0;for(let r of n){let a=Pa(e,t,s===1?r:{x0:r.x0,y0:r.y0*s,cx0:r.cx0,cy0:r.cy0*s,cx1:r.cx1,cy1:r.cy1*s,x1:r.x1,y1:r.y1*s});a<o&&(o=a)}return o}var Bo=new WeakMap;function ko(e,t){let n=Bo.get(e);if(n?.version===t)return n.index;let s=new $o(e);return Bo.set(e,{version:t,index:s}),s}var qo=new WeakMap;function $a(e,t,n,s,o,r,a,i=!1){let l=qo.get(e);if(l?.graph===t&&l.drawPaths===n&&l.scaleX===s.scaleX&&l.scaleY===s.scaleY&&l.version===o&&l.deletions===r&&l.routes===a&&l.stranded===i)return l.index;let c=new Fo(e,t,n,s,void 0,r,o,a,i);return qo.set(e,{graph:t,drawPaths:n,scaleX:s.scaleX,scaleY:s.scaleY,version:o,index:c,deletions:r,routes:a,stranded:i}),c}var Fa=5;function Cf(e,t,n,s,o=0,r){let a=tt(s),i=ko(e,o),l=p=>Math.max(Fa,p)/s.scaleX,c=l(r?.maxHalfWidthPx??0),d=i.query(t,n,c,c/a),f=null,h=1/0;for(let{nodeId:p,segmentIdx:u}of d){let m=e[p],g=Xo(t,n*a,m[u].x,m[u].y*a,m[u+1].x,m[u+1].y*a);g<h&&g<l(r?.halfWidthPx(p)??0)&&(h=g,f=p)}return f}function Da(e,t,n){let s=t.x-e.x,o=t.y-e.y,r=0,a=1;for(let[i,l]of[[-s,e.x-n.x0],[s,n.x1-e.x],[-o,e.y-n.y0],[o,n.y1-e.y]])if(i===0){if(l<0)return!1}else i<0?r=Math.max(r,l/i):a=Math.min(a,l/i);return r<=a}function Ho(e,t,n=0){let s=ko(e,n),o=r=>({x:r.x*t.scaleX+t.translateX,y:r.y*t.scaleY+t.translateY});return r=>{let a=new Set,i=s.query(((r.x0+r.x1)/2-t.translateX)/t.scaleX,((r.y0+r.y1)/2-t.translateY)/t.scaleY,Math.abs((r.x1-r.x0)/2/t.scaleX),Math.abs((r.y1-r.y0)/2/t.scaleY));for(let{nodeId:l,segmentIdx:c}of i){let d=e[l];!a.has(l)&&Da(o(d[c]),o(d[c+1]),r)&&a.add(l)}return a}}function Tf(e,t,n,s,o,r,a=0,i,l,c,d=!1){let f=tt(o),h=10/o.scaleX,p=$a(e,t,r,o,a,i,c,d),u=p.query(n,s,h,h/f),m=null,g=h;for(let x of u){let w=t.edges[x],N=e[w.from],S=e[w.to];if(!N?.length||!S?.length||l?.has(x))continue;let R=w.pathIds?.length??0,M=p.getCurves(x);if(!M)continue;let v;if(!r||R===0)v=Do(n,s*f,M,f);else{let I=1/0;for(let $ of De(N,S,R,o)){let W=$.x===0&&$.y===0?M:et(M,$.x,$.y),D=Do(n,s*f,W,f);D<I&&(I=D)}v=I}v<g&&(g=v,m=x)}return m}var Wo=3.4,dn=6,Ba=8,qa=18,Xa=2,ka=Qn+Zn;function Go(e){let t=e.gene.end-e.gene.start;if(e.covered>=.98)return;let[n,s]=t>=1e6?[1e6,"Mb"]:t>=1e3?[1e3,"kb"]:[1,"bp"],o=r=>+(r/n).toFixed(n===1?0:1);return`${o(e.covered*t)} of ${o(t)} ${s}`}function Yo(e,t,n,s){let o=n/2;return zo(e,r=>r.gene.end-r.gene.start).map(r=>{let{x:a,y:i}=t(r.at),l=Go(r);return{item:r,x:a,y:i+n+qa,text:l?`${r.gene.name} \xB7 ${l}`:r.gene.name,fallback:l?`${r.gene.name} \u2026`:void 0,stack:Xa,fits:c=>[...s({x0:c.x0-o,x1:c.x1+o,y0:c.y0-o,y1:c.y1+o})].every(d=>r.nodeIds.has(d))}})}function zo(e,t){return[...e].sort((n,s)=>t(s)-t(n))}function Ha(e){let{paneWidth:t,canvasHeight:n,translateX:s,translateY:o}=e,{scaleX:r,scaleY:a}=e.axisScale,i={width:t,height:n},l=M=>({x:M.x*r+s,y:M.y*a+o}),c=e.drawnRowLabels.map(({label:M,y:v})=>Kt(M,v*a+o)),d=e.referenceStripZonePx??0;d>0&&c.push({x0:0,x1:t,y0:0,y1:d}),e.legendSize.width>0&&c.push({x0:t-dn-e.legendSize.width,x1:t,y0:0,y1:d+dn+e.legendSize.height}),e.poppedFrom&&c.push({x0:0,x1:60+e.poppedFrom.label.length*we*1.2,y0:0,y1:44});let f=Jn(i,c),h=e.drawnRowLabels.length>0,p=h?Math.min(...e.drawnRowLabels.map(M=>M.y)):1/0,u=e.contigThickness*Wo,m=zo(e.bubbleHalos,M=>M.members),g=gt(m.map(M=>{let{x:v,y:I}=l({x:M.labelAt.x,y:Math.min(M.labelAt.y,p)}),$=I-u/2-6;return{item:M,x:v,y:h?Math.max($,ka):$,text:M.label}}),i,f),x=gt(Yo(e.genePins,l,e.contigThickness,Ho(e.nodePositions??{},{scaleX:r,scaleY:a,translateX:s,translateY:o},e.positionsVersion)),i,f),w=e.nodePositions&&e.labelsNodeSizes?jt({nodePositions:e.nodePositions,nodeLengths:e.nodeLengths,deletions:e.showDeletionEdges?e.deletions:[],deletionRoutes:e.deletionRoutes,stranded:e.stranded,alleleDeletions:e.alleleDeletions,axis:e.axisScale,translateX:s,translateY:o,width:t,height:n,version:e.positionsVersion}):{deletions:[],nodes:[]},N=yt(w.deletions,f),S=gt(m.flatMap(M=>M.routes.map(v=>{let{x:I,y:$}=l(v.at);return{item:{halo:M,route:v},x:I,y:$+4,text:v.text,stack:Ba}})),i,f),R=yt(w.nodes,f,Vt(t,n));return{bubbles:g,genes:x,routes:S,sizes:[...N,...R]}}function _d(e){return Fe(e)?Uo(e):void 0}function Uo(e){return{sample:ut(e.stable.refName),haplotype:jn(e.stable.refName),refName:pt(e.stable.refName),start:e.stable.start,end:e.stable.start+e.length}}function Wa(e,t){let n=[...e].sort((r,a)=>r.start-a.start),s,o;for(let r of n)o=o&&r.start-o.end<=t?{start:o.start,end:Math.max(o.end,r.end)}:{start:r.start,end:r.end},(!s||o.end-o.start>s.end-s.start)&&(s=o);return s}function Ga(e){return`${e.haplotype??e.sample}\0${e.refName}`}function Ad(e,{maxGap:t=1/0}={}){let n=new Map;for(let o of e.nodes)if(Fe(o)){let r=Uo(o),a=Ga(r),i=n.get(a);i?(i.spans.push({start:r.start,end:r.end}),i.rank=Math.min(i.rank,o.stable.rank)):n.set(a,{sample:r.sample,haplotype:r.haplotype,refName:r.refName,rank:o.stable.rank,spans:[{start:r.start,end:r.end}]})}let s=new Map;for(let o of n.values()){let r=Wa(o.spans,t);if(r){let a={sample:o.sample,haplotype:o.haplotype,refName:o.refName,start:r.start,end:r.end,rank:o.rank,nodeCount:o.spans.length},i=o.haplotype??o.sample,l=s.get(i);(!l||a.nodeCount>l.nodeCount)&&s.set(i,a)}}return[...s.values()].sort((o,r)=>+(o.rank!==0)-+(r.rank!==0)||o.sample.localeCompare(r.sample)||(o.haplotype??"").localeCompare(r.haplotype??""))}function Ya(e,t){return(t.haplotype===void 0?void 0:e(t.haplotype))??e(t.sample)}function Ld(e,t){return e.flatMap(n=>{let s=Ya(t,n);return s===void 0?[]:[{...n,sample:s}]})}function Id(e){return`${e.refName}:${e.start+1}-${e.end}`}function hn(e){return`${e.refName}:${(e.start+1).toLocaleString()}-${e.end.toLocaleString()}`}var Ko=Qe(ht(),1),jo=(0,te.createSvgIcon)((0,Ko.jsx)("path",{d:"M9.01 14H2v2h7.01v3L13 15l-3.99-4zm5.98-1v-3H22V8h-7.01V5L11 9z"}),"CompareArrows");var Vo=Qe(ht(),1),Qo=(0,te.createSvgIcon)((0,Vo.jsx)("path",{d:"M17 5h-2V3h2zm-2 16h2v-2.59L19.59 21 21 19.59 18.41 17H21v-2h-6zm4-12h2V7h-2zm0 4h2v-2h-2zm-8 8h2v-2h-2zM7 5h2V3H7zM3 17h2v-2H3zm2 4v-2H3c0 1.1.9 2 2 2M19 3v2h2c0-1.1-.9-2-2-2m-8 2h2V3h-2zM3 9h2V7H3zm4 12h2v-2H7zm-4-8h2v-2H3zm0-8h2V3c-1.1 0-2 .9-2 2"}),"HighlightAlt");var Zo=Qe(ht(),1),un=(0,te.createSvgIcon)((0,Zo.jsx)("path",{d:"M3 16h5v-2H3zm6.5 0h5v-2h-5zm6.5 0h5v-2h-5zM3 20h2v-2H3zm4 0h2v-2H7zm4 0h2v-2h-2zm4 0h2v-2h-2zm4 0h2v-2h-2zM3 12h8v-2H3zm10 0h8v-2h-8zM3 4v4h18V4z"}),"LineStyle");var za="Linear genome view",Ua="Linear synteny view",Ka="No synteny track in this session aligns these assemblies";function Jo({label:e,icon:t,entries:n,entryLabel:s,onSelect:o,disabledHelpText:r,nameTheOnlyEntry:a=!0}){let[i]=n,l=r?[{label:e,icon:t,disabled:!0,disabledHelpText:r,onClick:()=>{}}]:[];return n.length===0?l:n.length===1&&i?[{label:a?`${e} \u2014 ${s(i)}`:e,icon:t,onClick:o(i)}]:[{label:e,icon:t,type:"subMenu",subMenu:n.map(c=>({label:s(c),onClick:o(c)}))}]}function Hd({contributors:e,syntenyTracks:t,onShowLinear:n,onShowSynteny:s}){let o=t[0]?.coverage??e.length;return[...Jo({label:za,icon:un,entries:e,entryLabel:r=>`${r.sample} ${hn(r)}`,onSelect:r=>()=>{n({location:r,assembly:r.sample})}}),...e.length>=2?Jo({label:`${Ua} (${o} assemblies)`,icon:jo,entries:t,entryLabel:r=>r.coverage<o?`${r.name} (${r.coverage} of ${o})`:r.name,nameTheOnlyEntry:!1,disabledHelpText:Ka,onSelect:r=>()=>{s(r.trackId)}}):[]]}function Wd({own:e,reference:t,highlight:n,onShowLinear:s,onHighlight:o}){let r=[e?{label:`Open in ${e.assembly} \u2014 ${hn(e.location)}`,target:e}:void 0,t&&t.assembly!==e?.assembly?{label:`Open in ${t.assembly} \u2014 around this node`,target:t}:void 0].filter(a=>a!==void 0);return[...o&&n?[{label:`Highlight in ${n.assembly}`,icon:Qo,onClick:()=>{o(n)}}]:[],...r.map(({label:a,target:i})=>({label:a,icon:un,onClick:()=>{s(i)}}))]}function pn(e){return e.id.endsWith("-")?"-":"+"}function mn(e,t){return t===pn(e)?e.id:`-${e.id}`}function Va(e,t){let n=e.map(()=>{}),s=0,o=0;for(;o<e.length&&e[o]!==void 0;o++)n[o]=s,s+=e[o];let r=t;for(let a=e.length-1;a>o&&e[a]!==void 0;a--)r-=e[a],n[a]=r;return n}function Qa(e,t){let n=e.path.map(()=>[]);if(e.cs===void 0)return n;let s=Va(t,e.pathLength),o=(i,l=!1)=>{for(let c=0;c<s.length;c++){let d=s[c],f=t[c];if(d!==void 0&&f!==void 0&&d<=i&&(i<d+f||l&&i===d+f))return{s:c,local:i-d,room:d+f-i}}},r=(i,l)=>{let c=n[i],d=c.at(-1);l.type==="substitution"&&d?.type==="substitution"&&d.pos+d.seq.length===l.pos?d.seq+=l.seq:c.push(l)},a=e.pathStart;for(let i of Vn(e.cs))if(i.op==="match")a+=i.length;else if(i.op==="substitution"){let l=o(a);l&&r(l.s,{type:"substitution",pos:l.local,seq:i.seq}),a+=1}else if(i.op==="insertion"){let l=o(a,a===e.pathEnd);l&&r(l.s,{type:"insertion",pos:l.local,seq:i.seq})}else{let l=i.length;for(;l>0;){let c=o(a),d=c?Math.min(l,c.room):l;c&&r(c.s,{type:"deletion",pos:c.local,length:d}),a+=d,l-=d}}return n}function ts(e,t,n){let s=new Map(e.nodes.map(r=>[r.name,r])),o=[];for(let r of t){let a=r.path.map(d=>s.get(d.name)),i=a.flatMap((d,f)=>d?[f]:[]),l=i[0],c=i.at(-1);if(l!==void 0&&c!==void 0){let d=Qa(r,a.map(p=>p?.length)),f=i.map(p=>mn(a[p],r.path[p].strand)),h=a[c].length;o.push({id:n+o.length,name:r.name,type:"read",sourceTrackID:1,sequence:f,sequenceNew:i.map((p,u)=>({nodeName:f[u],mismatches:d[p]})),firstNodeOffset:l===0?r.pathStart:0,finalNodeCoverLength:c===r.path.length-1?h-(r.pathLength-r.pathEnd):h,mapping_quality:r.mappingQuality===255?0:r.mappingQuality,is_secondary:r.secondary,is_reverse:r.strand==="-"})}}return o}var Za=["#6baed6","#4292c6","#2171b5","#08519c"],Ja=["#fb6a4a","#ef3b2c","#cb181d","#a50f15"];function ns(e){let t=e.is_reverse?Ja:Za;return t[e.id%t.length]}function gn(){return{rectangles:[],curves:[],corners:[],verticalRectangles:[],featureRectangles:[]}}var rt=!1,os=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f"];function bs(e){return{mergeNodesFlag:e.mergeNodes??!0,showReads:e.showReads??!0,coarsenedReadView:e.coarsenedReadView??!1,ignoreStrand:e.ignoreStrand??!1,nodeWidthOption:e.nodeWidthOption??"normal",charWidth:e.charWidth??8.401,trackWidth:e.trackWidth??15,mappingQualityCutoff:e.mappingQualityCutoff??0,focusReadNames:e.focusReadNames??null,showExonsFlag:e.showExons??!1,trackColor:e.trackColor??(t=>os[t.id%os.length]),trackAlpha:e.trackAlpha??(()=>1)}}var C=bs({}),Mn=null,y=[],b=[],E=[],L=new Map,We=[],_=[],Se=[],En=[],Rn=[],j=-1,X=gn(),vn={minX:0,maxX:0,minY:0,maxY:0},ot,Lt=new Map;function ws(e,t,n=[],s={}){if(C=bs(s),Mn=s.bed??null,X=gn(),Se=[],En=[],Rn=[],We=[],vn={minX:0,maxX:0,minY:0,maxY:0},ot=void 0,Lt=new Map,e.length===0||t.length===0)return;let o=xn(e);y=[],o.forEach((l,c)=>{y[c+1]=l}),b=xn(t);let r=n.length>0;E=xn(Xi(n));for(let l=b.length-1;l>=0;l-=1){let c=b[l];if(c.type===void 0&&(c.type="haplotype"),c.hidden===!0){b.splice(l,1);continue}c.indexOfFirstBase!==void 0&&(ot=c.name)}if(b.length===0)return;ti(0),L=as(),ke(b),C.showReads&&E.length>0&&ke(E),ys(),C.mergeNodesFlag&&(is(),bn(),C.showReads&&E.length>0&&yn(),qi(),L=as(),ys(),ke(b),C.showReads&&E.length>0&&ke(E)),is(),vi(),rt&&console.log(`${y.length} nodes.`),bn(),j=cs(),Ei(),bn(),j=cs();let a=C.showReads&&C.coarsenedReadView&&!r;if(a){let l=ot===void 0?-1:b.findIndex(f=>f.name===ot),c=l===-1?0:l,d=b.filter((f,h)=>h!==c);if(d.length>0){let f=ps(d,"haplotype");f.length>0&&(b=[b[c]],E=f)}}Oi(),_i(),C.showExonsFlag&&Mn!==null&&Ti();let i=C.showReads&&C.coarsenedReadView&&E.length>0&&!a;return C.showReads&&E.length>0?(ni(),yn(),ke(E),i&&(E=ps(E,"read"),yn(),ke(E)),si(),b=b.concat(E)):y.forEach(l=>{l&&(l.incomingReads=[],l.outgoingReads=[],l.internalReads=[])}),Si(),Fi(),rt&&(console.log("Tracks:"),console.log(b),console.log("Nodes:"),console.log(y),console.log("Lane assignment:"),console.log(Se)),gi(),{nodes:y,tracks:b,reads:E,nodeMap:L,shapes:X,bounds:vn,maxOrder:j,trackForRuler:ot,coarsenedEdgeMeta:Lt}}function He(e,t="plain"){return C.trackColor(e,t)}function ei(e){return C.trackAlpha(e)}function xn(e){return structuredClone(e)}function H(e){let t=String(e);return t.length>=1&&t.startsWith("-")}function O(e){return H(e)?String(e).substring(1):e}function de(e){return H(e)?e:`-${e}`}function Ms(e){return H(e)?O(e):de(e)}function It(e){return(e||1/e)>=0}function ti(e){let t=new Set,n=b[e].sequence;for(let s=0;s<n.length;s+=1){let o=n[s];if(H(o)){let r=O(o),a=n.indexOf(r);(a===-1||a>s)&&t.add(r)}}for(let s of b){n=s.sequence;for(let o=0;o<n.length;o+=1){let r=n[o];H(r)?t.has(O(r))&&(n[o]=O(r)):t.has(r)&&(n[o]=de(r))}}y.forEach(s=>{s&&t.has(s.name)&&(s.seq=s.seq.split("").reverse().join(""))})}function ni(){We=[];for(let t=0;t<=j;t+=1)We[t]=[];let e=new Map;y.forEach(t=>{t.y!==void 0&&ss(e,t.order,t.y+t.contentHeight)}),b.forEach(t=>{t.type==="haplotype"&&t.path.forEach(n=>{ss(e,n.order,(n.y??0)+t.width)})}),y.forEach((t,n)=>{t.order>=0&&t.y===void 0&&(t.y=(e.get(t.order)??0)+25,t.contentHeight=0,We[t.order].push(n))})}function ss(e,t,n){let s=e.get(t);s===void 0?e.set(t,n):e.set(t,Math.max(s,n))}var Ct=7;function oi(){y.forEach(e=>{e&&(e.incomingReads=[],e.outgoingReads=[],e.internalReads=[])}),E.forEach((e,t)=>{if((e.width===void 0||e.width===0)&&(e.width=Ct),e.path.length===1){let n=e.path[0].node;n!==null&&y[n].internalReads.push(t)}else e.path.forEach((n,s)=>{if(s===0){let o=e.path[0].node;o!==null&&y[o].outgoingReads.push([t,s])}else{let o=n.node;o!==null&&y[o].incomingReads.push([t,s])}})})}function si(){hi(),oi();let e=y.slice();e.sort(Tt);let t=new Map;for(let a=0;a<E.length;a++){let i=E[a].sourceTrackID,l=t.get(i);l===void 0?t.set(i,[a]):l.push(a)}let n=Array.from(t.keys()).sort((a,i)=>a-i),s=n.length>1?Ct:0;e.forEach(a=>{if(a)for(let i of n)ri(t.get(i),a,s)});let o=di(),r=[];E.forEach((a,i)=>{let l=a.path.length,c=new Array(l),d;for(let p=0;p<l;p++){p===0?c[p]=void 0:c[p]=d??a.path[0];let u=a.path[p];u.node!==null&&u.node&&(d=u)}let f=new Array(l),h;for(let p=l-1;p>=0;p--){p===l-1?f[p]=void 0:f[p]=h??a.path[l-1];let u=a.path[p];u.node!==null&&u.node&&(h=u)}a.path.forEach((p,u)=>{if(p.y===void 0){let m=c[u],g=f[u],x=!!(g&&m&&g.isForward!==void 0&&m.isForward!==void 0&&(m.order>g.order||g.order===m.order&&g.isForward===m.isForward));p.betweenCycleReverseTraversal=x,r.push({readIndex:i,pathIndex:u,previousY:m?.y,previousNode:m?.node})}})}),r.sort(ii),r.forEach(a=>{let i=E[a.readIndex],l=i.path[a.pathIndex];l.y=o[l.order],o[l.order]+=i.width}),rt&&(console.log("Reads:"),console.log(E))}function ri(e,t,n){let s=new Set(e),o=t.incomingReads.filter(([u])=>s.has(u)),r=t.outgoingReads.filter(([u])=>s.has(u)),a=t.internalReads.filter(u=>s.has(u));o.length===0&&r.length===0&&a.length===0&&(n=0);let i=t.y+t.contentHeight+n*2,l=o.map(u=>{let[m,g]=u,x=E[m].path,w=g+1,N;for(let S=1;S<=g;S++){let R=x[g-S]?.y;if(R!==void 0){w=S,N=R;break}}return{entry:u,decisionStep:w,y:N}});l.sort(ai),o=l.map(u=>u.entry);let c=i,d=new Map;o.forEach(u=>{let m=E[u[0]];m.path[u[1]].y=c,rs(d,m,u[1],c,t),c+=m.width});let f=c;r.sort(li);let h=new Map;c=i,r.forEach(u=>{let m=E[u[0]],g=m.firstNodeOffset??0;m.path[u[1]].y=c,h.set(c,g);let x=d.get(c);x===void 0||x+1<=g?(c+=m.width,f=Math.max(f,c)):(d.set(c,0),o.forEach(w=>{let N=E[w[0]],S=N.path[w[1]];S.y!==void 0&&S.y>=c&&(S.y+=m.width,rs(d,N,w[1],S.y,t))}),c+=m.width,f+=m.width)}),a.sort(fi),a.forEach(u=>{let m=E[u],g=m.firstNodeOffset??0,x=m.finalNodeCoverLength??0;for(c=i;g<(d.get(c)??-1/0)+2||x>(h.get(c)??1/0)-3;)c+=m.width||Ct;m.path[0].y=c,d.set(c,x),f=Math.max(f,c)});let p=f-t.y-t.contentHeight;t.contentHeight+=p,Ci(t,p)}function ai(e,t){return e.decisionStep!==t.decisionStep?e.decisionStep-t.decisionStep:e.y===void 0||t.y===void 0?(e.y===void 0?0:1)-(t.y===void 0?0:1):e.y-t.y}function rs(e,t,n,s,o){n===t.path.length-1?e.set(s,t.finalNodeCoverLength??0):e.set(s,o.sequenceLength)}function ii(e,t){let n=E[e.readIndex],s=E[t.readIndex],o=n.path[e.pathIndex],r=s.path[t.pathIndex];if(o.order!==r.order)return o.order-r.order;if(n.sourceTrackID!==s.sourceTrackID)return n.sourceTrackID-s.sourceTrackID;if(e.previousNode&&t.previousNode){let l=y[e.previousNode],c=y[t.previousNode];if(l&&c&&l.order!==c.order)return l.order-c.order}let a=e.previousY??0,i=t.previousY??0;return o.betweenCycleReverseTraversal&&r.betweenCycleReverseTraversal?i-a:a-i}function li([e,t],[n,s]){let o=E[e],r=E[n],a,i,l=o.path.length-1,c=r.path.length-1;for(;!a&&l>=0;)a=o.path[l]?.y,l-=1;for(;!i&&c>=0;)i=r.path[c]?.y,c-=1;if(a&&i)return a-i;let d=o.path[t]?.node,f=r.path[s]?.node,h=d!=null?y[d]:null,p=f!=null?y[f]:null;for(;h!=null&&p!=null&&h===p;){if(t<o.path.length-1){for(t+=1;o.path[t]?.node===null;)t+=1;let m=o.path[t]?.node;h=m!=null?y[m]:null}else h=null;if(s<r.path.length-1){for(s+=1;r.path[s]?.node===null;)s+=1;let m=r.path[s]?.node;p=m!=null?y[m]:null}else p=null}if(h!=null)return p!=null?Tt(h,p):1;if(p!=null)return-1;let u=(o.firstNodeOffset??0)-(r.firstNodeOffset??0);return u!==0?u:(o.finalNodeCoverLength??0)-(r.finalNodeCoverLength??0)}function ci(e,t){if(e.path===void 0||t.path===void 0)return(e.path===void 0?0:1)-(t.path===void 0?0:1);let n=e.path,s=t.path,o=0,r=0;for(;o<n.length&&r<s.length;){let a=n[o],i=s[r],l=a.order,c=i.order;if(l===c&&a.node&&i.node)return(i.y??0)-(a.y??0);l<c?o+=1:(l>c||(o+=1),r+=1)}return 0}function fi(e,t){let n=E[e],s=E[t],o=n.firstNodeOffset??0,r=s.firstNodeOffset??0;if(o<r)return-1;if(o>r)return 1;let a=n.finalNodeCoverLength??0,i=s.finalNodeCoverLength??0;return a<i?-1:a>i?1:0}function di(){let e=[];for(let t=0;t<=j;t+=1)e.push(0);return y.forEach(t=>{t.y!==void 0&&(e[t.order]=Math.max(e[t.order],t.y+t.contentHeight+20))}),b.forEach(t=>{t.path.forEach(n=>{e[n.order]=Math.max(e[n.order],(n.y??0)+t.width)})}),e}function hi(){E.forEach(e=>{let t=Math.abs(e.indexSequence[0]),n=It(e.indexSequence[0]),s=y[t],o,r;e.path=[],e.path.push({order:s.order,isForward:n,node:t});for(let a=1;a<e.sequence.length;a+=1)if(o=s,r=n,t=Math.abs(e.indexSequence[a]),n=It(e.indexSequence[a]),s=y[t],s.order>o.order){r||e.path.push({order:o.order,isForward:!0,node:null});for(let i=o.order+1;i<s.order;i+=1)e.path.push({order:i,isForward:!0,node:null});n?e.path.push({order:s.order,isForward:!0,node:t}):(e.path.push({order:s.order,isForward:!0,node:null}),e.path.push({order:s.order,isForward:!1,node:t}))}else if(s.order<o.order){r&&e.path.push({order:o.order,isForward:!1,node:null});for(let i=o.order-1;i>s.order;i-=1)e.path.push({order:i,isForward:!1,node:null});n?(e.path.push({order:s.order,isForward:!1,node:null}),e.path.push({order:s.order,isForward:!0,node:t})):e.path.push({order:s.order,isForward:!1,node:t})}else n!==r?e.path.push({order:s.order,isForward:n,node:t}):(e.path.push({order:s.order,isForward:!n,node:null}),e.path.push({order:s.order,isForward:n,node:t}))})}function yn(){E.forEach(e=>{let t=0;for(;t<e.sequence.length&&e.sequence[t].startsWith("-");)t+=1;if(t===e.sequence.length){e.is_reverse=!0,e.sequence=e.sequence.reverse();for(let a=0;a<e.sequence.length;a+=1)e.sequence[a]=O(e.sequence[a]);let n=e.sequenceNew??[];n.reverse(),e.sequenceNew=n;for(let a of n)a.nodeName=O(a.nodeName),ui(a.mismatches,oe(a.nodeName).sequenceLength);let s=e.firstNodeOffset??0,o=oe(e.sequence[0]).sequenceLength;e.firstNodeOffset=o-(e.finalNodeCoverLength??0);let r=oe(e.sequence[e.sequence.length-1]).sequenceLength;e.finalNodeCoverLength=r-s}})}function ui(e,t){e.forEach(n=>{n.type==="insertion"?n.pos=t-n.pos:n.type==="deletion"?n.pos=t-n.pos-(n.length??0):n.type==="substitution"&&(n.pos=t-n.pos-(n.seq?.length??0)),n.seq!==void 0&&(n.seq=vs(n.seq).split("").reverse().join(""))})}var pi={A:"T",T:"A",C:"G",G:"C"};function vs(e){let t="";for(let n=e.length-1;n>=0;n-=1)t+=pi[e.charAt(n)]??"N";return t}function ke(e){e.forEach(t=>{t.indexSequence=[],t.sequence.forEach(n=>{let s=n,o=L.get(O(s)),r=y[o]?.switched??!1;r&&(s=Ms(s));let a=L.get(O(s));if(a===0)throw new Error("Node "+O(s)+" has prohibited index 0");H(s)!==r?t.indexSequence.push(-a):t.indexSequence.push(a)})})}var mi=20;function gi(){let e={minX:99,maxX:-99,minY:99,maxY:-99};y.forEach(t=>{t&&(t.x!==void 0&&(e.minX=Math.min(e.minX,t.x),e.maxX=Math.max(e.maxX,t.x+mi+t.pixelWidth)),t.y!==void 0&&(e.minY=Math.min(e.minY,t.y-10),e.maxY=Math.max(e.maxY,t.y+t.contentHeight+10)))}),b.forEach(t=>{t.path.forEach(n=>{let s=n.y??0;e.maxY=Math.max(e.maxY,s+t.width),e.minY=Math.min(e.minY,s)})}),vn=e}function oe(e){let t=L.get(O(e)),n=t===void 0?void 0:y[t];if(n===void 0)throw new Error(`Unknown node ${e}`);return n}function as(){return L=new Map,y.forEach((e,t)=>{e&&L.set(e.name,t)}),L}function is(){let e=y.map(()=>new Set),t=y.map(()=>new Set),n=s=>{for(let o=0;o<s.indexSequence.length-1;o+=1){let r=Math.abs(s.indexSequence[o]),a=Math.abs(s.indexSequence[o+1]);e[r].add(a),t[a].add(r)}};b.forEach(n),C.showReads&&E.length>0&&E.forEach(n),y.forEach((s,o)=>{s&&(s.successors=Array.from(e[o]),s.predecessors=Array.from(t[o]))})}function ls(e){let t=0,n=0,s=0;e.forEach(o=>{let r=Math.abs(o);if(o<0){_[r]===void 0&&(_[r]=n);let a=_[r];a<s&&(s=a),t=a,n=a-1}else{_[r]===void 0&&(_[r]=t);let a=_[r];t=a+1,n=a}}),s<0&&Sn(-s)}function xi(e){let t=0,n=0;for(;t<e.length&&_[Math.abs(e[t])]===void 0;)t+=1;if(t>=e.length)return null;let s=e[t],o,r;s>=0?(o=_[s]-1,r=-1):(o=_[-s]+1,r=1);for(let a=t-1;a>=0;a-=1){let i=Math.abs(e[a]);_[i]===void 0&&(_[i]=o,n=Math.min(n,o),o+=r)}return n<0&&Sn(-n),t}var yi=-1;function bi(e){let t=[];for(let n of e)t.push(n??yi);return t}function bn(){let e,t,n,s,o=0,r=C.showReads&&E.length>0?b.concat(E):b,a={stamp:new Int32Array(y.length),generation:0};_=new Array(y.length).fill(void 0),y.forEach(l=>{l&&(l.order=void 0)}),ls(b[0].indexSequence);for(let l=1;l<r.length;l+=1){if(rt&&console.log(`generating order for track ${l+1}`),n=xi(r[l].indexSequence),n===null){r[l].type==="haplotype"?ls(r[l].indexSequence):(r.splice(l,1),E.splice(l-b.length,1),l-=1);continue}for(e=Mi(r[l].indexSequence);n<e.length;){for(s=n,n+=1;n<e.length&&_[e[n]]===void 0;)n+=1;if(n<e.length){t=_[e[s]]+1;for(let c=s+1;c<n;c+=1)_[e[c]]=t,t+=1;if(_[e[n]]>_[e[s]])_[e[n]]<t&&fs(e[n],e[n-1],t);else if(r[l].indexSequence[n]>=0&&!wi(e[n],e[s],a))fs(e[n],e[n-1],t);else if(r[l].indexSequence[s]<0||y[e[s+1]].degree<2&&_[e[n]]<_[e[s]]){t=_[e[s]]-1;for(let c=s+1;c<n;c+=1)_[e[c]]=t,o=Math.min(o,t),t-=1}}else if(r[l].indexSequence[s]>=0){t=_[e[s]]+1;for(let c=s+1;c<e.length;c+=1){let d=e[c];_[d]===void 0&&(_[d]=t,t+=1)}}else{t=_[e[s]]-1;for(let c=s+1;c<e.length;c+=1){let d=e[c];_[d]===void 0&&(_[d]=t,o=Math.min(o,t),t-=1)}}}}o<0&&Sn(-o);let i=bi(_);_=i,i.forEach((l,c)=>{let d=y[c];d!==void 0&&(d.order=l)})}function wi(e,t,n){n.generation+=1;let{stamp:s,generation:o}=n,r=[e];for(s[e]=o;r.length>0;){let a=r.pop();if(a===t)return!0;for(let i of y[a].successors)s[i]!==o&&(s[i]=o,r.push(i))}return!1}function cs(){let e=-1;return _.forEach(t=>{t!==void 0&&t>e&&(e=t)}),e}function Mi(e){return e.map(t=>Math.abs(t))}function Sn(e){_.forEach((t,n)=>{t!==void 0&&(_[n]=t+e)})}function fs(e,t,n){let s=new Map,o=[[e,n]],r=0;for(;r<o.length;){let[a,i]=o[r];r+=1;let l=_[a];l!==void 0&&l<i&&(!s.has(a)||s.get(a)<i)&&(s.set(a,i),y[a].successors.forEach(c=>{_[c]>l&&c!==t&&o.push([c,i+1])}),a!==e&&y[a].predecessors.forEach(c=>{_[c]>l&&c!==t&&o.push([c,i+1])}))}s.forEach((a,i)=>{_[i]=a})}function vi(){y.forEach(e=>{e.tracks=[]}),b.forEach(e=>{e.indexSequence.forEach(t=>{y[Math.abs(t)].tracks.push(e.id)})}),y.forEach(e=>{e.tracks!==void 0&&(e.degree=e.tracks.length)})}function Ei(){let e=b[0],t=b.slice(1,b.length);if(C.showReads&&E.length>0&&(t=t.concat(E)),Ri(t,e),C.showReads&&E.length>0){for(let n=0;n<E.length;n++)if(E[n]!==t[n+b.length-1])throw new Error("Read inequality")}}function Ri(e,t){let n=new Map,s=t?new Set(t.sequence):null;for(let o of e){let r=o.sequence;for(let a=0;a<r.length;a+=1){let i=O(r[a]),l=oe(i);if(s&&!s.has(i)){let c=a>0?oe(r[a-1]).order:void 0,d=a<r.length-1?oe(r[a+1]).order:void 0;(c===void 0||c<l.order)&&(d===void 0||l.order<d)&&ds(n,i,H(r[a])?1:-1),(c===void 0||c>l.order)&&(d===void 0||l.order>d)&&ds(n,i,H(r[a])?-1:1)}}}for(let o of e)o.sequence.forEach((r,a)=>{let i=n.get(O(r));i!==void 0&&i>0&&(o.sequence[a]=Ms(r),o.indexSequence[a]=-o.indexSequence[a])});n.forEach((o,r)=>{if(o>0){let a=oe(r);a.seq=vs(a.seq),a.switched=!0}})}function ds(e,t,n){e.set(t,(e.get(t)??0)+n)}function Si(){let e=0,t=20,n=-1,s=y.slice();s.sort(Tt);let o=Ni();s.forEach(r=>{r.order>=0&&(r.order>n&&(n=r.order,e=t+10*o[r.order]),r.x=e,t=Math.max(t,e+40+r.pixelWidth))})}function Ni(){let e=[],t=[],n=[],s=[];for(let o=0;o<=j;o+=1)e.push(0),t.push(0),n.push(0);b.forEach(o=>{for(let r=1;r<o.path.length;r+=1){let a=o.path[r],i=o.path[r-1];if(a.order===i.order)a.isForward?e[a.order]=e[a.order]+1:t[a.order]=t[a.order]+1;else{let l=Math.abs((a.y??0)-(i.y??0));n[a.order]=Math.max(l/17.5,n[a.order])}}}),s.push(Math.max(0,e[0]-1));for(let o=1;o<=j;o+=1)s.push(Math.max(Math.max(0,e[o]-1)+Math.max(0,t[o-1]-1),n[o]));return s}function _i(){let e,t,n,s,o,r,a=[],i=[];for(let l=0;l<=j;l+=1){Se[l]=[],i[l]=new Map,a[l]=[];for(let c=0;c<b.length;c+=1)a[l][c]=null}b.forEach((l,c)=>{t=Math.abs(l.indexSequence[0]),n=It(l.indexSequence[0]),s=y[t],l.path=[],l.path.push({order:s.order,lane:null,isForward:n,node:t}),k(s.order,t,c,0,a,i),e=1;for(let d=1;d<l.sequence.length;d+=1)if(o=s,r=n,t=Math.abs(l.indexSequence[d]),n=It(l.indexSequence[d]),s=y[t],s.order>o.order){r||(l.path.push({order:o.order,lane:null,isForward:!0,node:null}),k(o.order,null,c,e,a,i),e+=1);for(let f=o.order+1;f<s.order;f+=1)l.path.push({order:f,lane:null,isForward:!0,node:null}),k(f,null,c,e,a,i),e+=1;n?(l.path.push({order:s.order,lane:null,isForward:!0,node:t}),k(s.order,t,c,e,a,i),e+=1):(l.path.push({order:s.order,lane:null,isForward:!0,node:null}),k(s.order,null,c,e,a,i),e+=1,l.path.push({order:s.order,lane:null,isForward:!1,node:t}),k(s.order,t,c,e,a,i),e+=1)}else if(s.order<o.order){r&&(l.path.push({order:o.order,lane:null,isForward:!1,node:null}),k(o.order,null,c,e,a,i),e+=1);for(let f=o.order-1;f>s.order;f-=1)l.path.push({order:f,lane:null,isForward:!1,node:null}),k(f,null,c,e,a,i),e+=1;n?(l.path.push({order:s.order,lane:null,isForward:!1,node:null}),k(s.order,null,c,e,a,i),e+=1,l.path.push({order:s.order,lane:null,isForward:!0,node:t}),k(s.order,t,c,e,a,i),e+=1):(l.path.push({order:s.order,lane:null,isForward:!1,node:t}),k(s.order,t,c,e,a,i),e+=1)}else n!==r?(l.path.push({order:s.order,lane:null,isForward:n,node:t}),k(s.order,t,c,e,a,i),e+=1):(l.path.push({order:s.order,lane:null,isForward:!n,node:null}),k(s.order,null,c,e,a,i),e+=1,l.path.push({order:s.order,lane:null,isForward:n,node:t}),k(s.order,t,c,e,a,i),e+=1)});for(let l=0;l<=j;l+=1)Li(Se[l],l)}function k(e,t,n,s,o,r){let a={trackID:n,segmentID:s,compareToFromSame:o[e][n]??null},i=t===null?void 0:r[e].get(t);if(i===void 0){let l={type:"single",node:t,tracks:[a]};Se[e].push(l),t!==null&&r[e].set(t,l)}else i.type="multiple",i.tracks.push(a);o[e][n]=a}function Ai(e,t){let n;e.forEach(s=>{s.idealLane=0,s.tracks.forEach(o=>{if(o.segmentID===0)o.idealLane=o.trackID,o.idealY=null;else if(b[o.trackID].path[o.segmentID-1].order===t-1)o.idealLane=b[o.trackID].path[o.segmentID-1].lane??void 0,o.idealY=b[o.trackID].path[o.segmentID-1].y;else if(o.segmentID<b[o.trackID].path.length-1&&b[o.trackID].path[o.segmentID+1].order===t-1)o.idealLane=b[o.trackID].path[o.segmentID+1].lane??void 0,o.idealY=b[o.trackID].path[o.segmentID+1].y;else{for(n=o.segmentID-1;n>=0&&b[o.trackID].path[n].order!==t-1;)n-=1;n<0?(o.idealLane=o.trackID,o.idealY=null):(o.idealLane=b[o.trackID].path[n].lane??void 0,o.idealY=b[o.trackID].path[n].y)}s.idealLane+=o.idealLane}),s.idealLane/=s.tracks.length})}function Li(e,t){let n=0,s=new Set,o=20,r=!1,a=-1;Ai(e,t),e.sort(us),e.forEach(i=>{i.node!==null?(y[i.node].topLane=n,r&&(o-=10),y[i.node].y=o,y[i.node].contentHeight=0,r=!1):(r?o-=25:o>20&&(o-=10),r=!0),i.tracks.sort(us),i.tracks.forEach(l=>{l.lane=n,l.trackID===a&&i.node===null&&r&&(o+=10),b[l.trackID].path[l.segmentID].lane=n,b[l.trackID].path[l.segmentID].y=o,l.idealY!=null&&s.add(l.idealY-o),n+=1,o+=b[l.trackID].width,i.node!==null&&(y[i.node].contentHeight+=b[l.trackID].width),a=l.trackID}),o+=25}),Ii(e,s)}function Ii(e,t){let n=0,s=Number.MAX_SAFE_INTEGER;t.forEach(o=>{hs(e,o)<s&&(s=hs(e,o),n=o)}),e.forEach(o=>{o.node!==null&&(y[o.node].y+=n),o.tracks.forEach(r=>{let a=b[r.trackID].path[r.segmentID];a.y=a.y+n})})}function Ci(e,t){e.order<0||Se[e.order]===void 0||(Se[e.order].forEach(n=>{if(n.node!==null){let s=y[n.node];s!==e&&s.y>e.y&&(s.y+=t,n.tracks.forEach(o=>{let r=b[o.trackID].path[o.segmentID];r.y=r.y+t}))}else n.tracks.forEach(s=>{let o=b[s.trackID].path[s.segmentID];o.y>=e.y&&(o.y=o.y+t)})}),We[e.order].length>0&&We[e.order].forEach(n=>{y[n]!==e&&y[n].y>e.y&&(y[n].y+=t)}))}function hs(e,t){let n=0;return e.forEach(s=>{s.tracks.forEach(o=>{o.idealY!=null&&b[o.trackID].type!=="read"&&(n+=Math.abs(o.idealY-t-b[o.trackID].path[o.segmentID].y)*b[o.trackID].width)})}),n}function us(e,t){return e.idealLane!==void 0?t.idealLane!==void 0?e.idealLane<t.idealLane?-1:e.idealLane>t.idealLane?1:0:-1:t.idealLane!==void 0?1:0}function Tt(e,t){if(!e)return t?-1:0;if(!t)return 1;if(e.order!==void 0){if(t.order!==void 0){if(e.order<t.order)return-1;if(e.order>t.order)return 1;if(e.y!==void 0&&t.y!==void 0){if(e.y<t.y)return-1;if(e.y>t.y)return 1}return 0}return-1}return t.order!==void 0?1:0}function Ti(){let e,t,n={};Mn.forEach(s=>{let o=0;for(;o<b.length&&b[o].name!==s.track;)o+=1;o<b.length&&(e=0,b[o].path.forEach(r=>{r.node!==null&&(n={},t=e+y[r.node].sequenceLength-1,e>=s.start&&e<=s.end&&(n.start=0),e<s.start&&t>=s.start&&(n.start=s.start-e),t<=s.end&&t>=s.start&&(n.end=t-e,t<s.end&&(n.continue=!0)),t>s.end&&e<=s.end&&(n.end=s.end-e),n.start!==void 0&&(n.type=s.type,n.name=s.name,r.features===void 0&&(r.features=[]),r.features.push(n)),e=t+1)}))})}function Oi(){let e=!0,t=4,n=C.trackWidth;b.forEach(s=>{s.freq!==void 0?s.width=Math.round((Math.log(s.freq)+1)*t):(s.width=n,s.type!==void 0&&s.type==="read"&&(s.width=t)),s.width!==t&&(e=!1)}),e&&b.forEach(s=>{s.freq!==void 0&&(s.width=n)})}function Pi(e){let t=e.path[0],n=y[t.node],s=e.firstNodeOffset??0;return Nn(n,t.isForward?s:n.sequenceLength-s)}function $i(e){let t=e.path[e.path.length-1],n=y[t.node],s=e.finalNodeCoverLength??0;return Nn(n,t.isForward?s:n.sequenceLength-s)}function Es(e,t){return t>e.sequenceLength?null:Nn(e,t)}function Nn(e,t){let[n,s]=Bi(e);if(e.sequenceLength===0)return n;let o=Math.min(Math.max(t,0),e.sequenceLength);return n+o/e.sequenceLength*(s-n)}function Fi(){let e,t,n,s,o,r,a,i,l;for(let f=0;f<=j;f+=1)En.push(0),Rn.push(0);let c=[],d=[];y.forEach(f=>{f.x!==void 0&&(c[f.order]=f.x,d[f.order]===void 0?d[f.order]=f.x+f.pixelWidth:d[f.order]=Math.max(d[f.order],f.x+f.pixelWidth))}),b.sort(ci),b.forEach(f=>{a="plain",o=He(f,a),r=ei(f);let h=a,p=()=>(h!==a&&(h=a,o=He(f,a)),o);n=f.path[0].y,f.type!=="read"?f.sequence[0].startsWith("-")?e=d[f.path[0].order]+20:e=c[f.path[0].order]-20:e=Pi(f);for(let u=0;u<f.path.length;u+=1)f.path[u].y===n?f.path[u].features!==void 0&&(l=u>0&&f.path[u-1].order===f.path[u].order,i=ms(f.path[u],c[f.path[u].order],d[f.path[u].order],a,f,e,n,o,l),a=i.highlight,e=i.xStart):(f.path[u-1].isForward?t=d[f.path[u-1].order]:t=c[f.path[u-1].order],t!==e&&(o=p(),X.rectangles.push({xStart:Math.min(e,t),yStart:n,xEnd:Math.max(e,t),yEnd:n+f.width-1,color:o,alpha:r,id:f.id,name:f.name,type:f.type})),f.path[u].order-1===f.path[u-1].order?(e=t,t=c[f.path[u].order],s=f.path[u].y,o=p(),X.curves.push({xStart:e,yStart:n,xEnd:t+1,yEnd:s,width:f.width,color:o,alpha:r,laneChange:Math.abs(f.path[u].lane-f.path[u-1].lane),id:f.id,name:f.name,type:f.type,nodeStart:f.path[u-1]?.node,nodeEnd:f.path[u]?.node}),e=t,n=s):f.path[u].order+1===f.path[u-1].order?(e=t,t=d[f.path[u].order],s=f.path[u].y,o=p(),X.curves.push({xStart:e+1,yStart:n,xEnd:t,yEnd:s,width:f.width,color:o,alpha:r,laneChange:Math.abs(f.path[u].lane-f.path[u-1].lane),id:f.id,name:f.name,type:f.type,nodeStart:f.path[u-1]?.node,nodeEnd:f.path[u]?.node}),e=t,n=s):f.path[u-1].isForward?(s=f.path[u].y,xs(1,t,n,s,f.width,o,f.id,f.path[u].order,f.type,f.name),e=d[f.path[u].order],n=f.path[u].y):(s=f.path[u].y,xs(-1,t,n,s,f.width,o,f.id,f.path[u].order,f.type,f.name),e=c[f.path[u].order],n=f.path[u].y),f.path[u].features!==void 0&&(l=f.path[u-1].order===f.path[u].order,i=ms(f.path[u],c[f.path[u].order],d[f.path[u].order],a,f,e,n,o,l),a=i.highlight,e=i.xStart));f.type!=="read"?f.path[f.path.length-1].isForward?t=d[f.path[f.path.length-1].order]+20:t=c[f.path[f.path.length-1].order]-20:t=$i(f),X.rectangles.push({xStart:Math.min(e,t),yStart:n,xEnd:Math.max(e,t),yEnd:n+f.width-1,color:o,alpha:r,id:f.id,name:f.name,type:f.type})})}var Di=1e9;function ps(e,t){Lt=new Map;let n=new Map,s=C.ignoreStrand;for(let h of e){let p=h.indexSequence;if(!(!p||p.length<2))for(let u=0;u<p.length-1;u+=1){let m=p[u],g=p[u+1],x=Math.abs(m),w=Math.abs(g),N=y[x],S=y[w];if(!N||!S)continue;let R;if(s){let v=`${m}>${g}`,I=`${-g}>${-m}`;R=v<I?v:I}else R=`${m}>${g}`;let M=n.get(R);M===void 0?n.set(R,{sSigned:m,dSigned:g,sName:m<0?`-${N.name}`:N.name,dName:g<0?`-${S.name}`:S.name,count:1,sourceTrackID:h.sourceTrackID}):M.count+=1}}let o=0;for(let h of n.values())h.count>o&&(o=h.count);let r=Ct,a=60,i=h=>o<=1?r:r+(a-r)*Math.sqrt(h/o),l=[],c=0;for(let h of n.values()){let p=Di+c,u=`${h.count.toLocaleString()} ${t}${h.count===1?"":"s"}: Node ${h.sName} \u2192 Node ${h.dName}`;Lt.set(p,{count:h.count,label:u});let m=y[Math.abs(h.sSigned)]?.sequenceLength??0;l.push({id:p,sourceTrackID:h.sourceTrackID,type:"read",name:u,sequence:[h.sName,h.dName],indexSequence:[],path:[],width:i(h.count),firstNodeOffset:m,finalNodeCoverLength:0,sequenceNew:[{nodeName:h.sName,mismatches:[]},{nodeName:h.dName,mismatches:[]}],mapping_quality:0,is_secondary:!1,sample_name:null,read_group:null,score:h.count}),c+=1}let d="?",f=0;for(let h of y){if(!h)continue;let p=h.contentHeight;p>f&&(f=p,d=h.name)}return rt&&console.log(`[coarsened] ${t}s_in=${e.length} edges_out=${l.length} tallestNodeBeforePlace=${d}(${f.toFixed(1)})`),l}function ms(e,t,n,s,o,r,a,i,l){let c=s,d,f,h,p;t-=8,n+=8;let u=y[e.node].sequenceLength;return e.features.sort((m,g)=>m.start-g.start),e.features.forEach(m=>{c!==m.type&&(d=He(o,c),e.isForward?(h=t+Math.round(m.start*(n-t+1)/u),l&&h<t+8&&(p=t+Math.round((m.end+1)*(n-t+1)/u)-1,f=He(o,m.type),X.featureRectangles.push({xStart:h,yStart:a,xEnd:p,yEnd:a+o.width-1,color:f,id:o.id,name:o.name,type:o.type})),h>r+1&&X.featureRectangles.push({xStart:r,yStart:a,xEnd:h-1,yEnd:a+o.width-1,color:d,id:o.id,name:o.name,type:o.type})):(h=n-Math.round(m.start*(n-t+1)/u),l&&h>n-8&&(p=n-Math.round((m.end+1)*(n-t+1)/u)-1,f=He(o,m.type),X.featureRectangles.push({xStart:p,yStart:a,xEnd:h,yEnd:a+o.width-1,color:f,id:o.id,name:o.name,type:o.type})),r>h+1&&X.featureRectangles.push({xStart:h+1,yStart:a,xEnd:r,yEnd:a+o.width-1,color:d,id:o.id,name:o.name,type:o.type})),r=h,c=m.type),(m.end<u-1||m.continue===void 0)&&(d=He(o,c),e.isForward?(p=t+Math.round((m.end+1)*(n-t+1)/u)-1,X.featureRectangles.push({xStart:r,yStart:a,xEnd:p,yEnd:a+o.width-1,color:d,id:o.id,name:o.name,type:o.type})):(p=n-Math.round((m.end+1)*(n-t+1)/u)-1,X.featureRectangles.push({xStart:p,yStart:a,xEnd:r,yEnd:a+o.width-1,color:d,id:o.id,name:o.name,type:o.type})),r=p+1,c="plain")}),{xStart:r,highlight:c}}var gs=7;function xs(e,t,n,s,o,r,a,i,l,c){let d=e===1?Rn:En,f=10*d[i],h=t+e*(f+5),p=gs,u=Math.min(gs,o),m=Math.min(n,s),g=Math.max(n,s),x=e===1?t:h-1,w=e===1?h:t,N=v=>{X.verticalRectangles.push({xStart:x,yStart:v,xEnd:w,yEnd:v+o-1,color:r,id:a,name:c,type:l})};N(n),X.verticalRectangles.push({xStart:e===1?h+p:h-p-u,yStart:m+o+p-1,xEnd:e===1?h+p+u-1:h-p-1,yEnd:g-p+1,color:r,id:a,name:c,type:l}),N(s);let S=h+e*p,R=h+e*(p+u),M=`M ${h} ${g}`;M+=` Q ${S} ${g} ${S} ${g-p}`,M+=` H ${R}`,M+=` Q ${R} ${g+o} ${h} ${g+o}`,M+=" Z ",X.corners.push({path:M,color:r,id:a,type:l}),M=`M ${h} ${m}`,M+=` Q ${R} ${m} ${R} ${m+o+p}`,M+=` H ${S}`,M+=` Q ${S} ${m+o} ${h} ${m+o}`,M+=" Z ",X.corners.push({path:M,color:r,id:a,type:l}),d[i]+=1}function Bi(e){let t=e.x-4,n=e.x+e.pixelWidth+4;return[t,n]}function ys(){switch(y.forEach(e=>{e.sequenceLength===void 0&&(e.sequenceLength=e.seq.length)}),C.nodeWidthOption){case"compressed":y.forEach(e=>{e.width=1+Math.log(e.sequenceLength)/Math.log(2),e.pixelWidth=Math.round((e.width-1)*8.401)});break;case"small":y.forEach(e=>{e.width=e.sequenceLength/100,e.pixelWidth=Math.round((e.width-1)*8.401)});break;case"fixed":y.forEach(e=>{e.width=10,e.pixelWidth=Math.round(e.width*8.401)});break;case"normal":{let e=C.charWidth;y.forEach(t=>{t.width=t.sequenceLength;let n=t.seq?.length??1;t.pixelWidth=Math.round(e*n)});break}default:throw new Error(`${C.nodeWidthOption} not implemented`)}}function qi(){let e,t,n=Array.from(y,()=>new Set),s=Array.from(y,()=>new Set),o;C.showReads&&E.length>0?o=b.concat(E):o=b,o.forEach(i=>{for(let l=0;l<i.sequence.length;l+=1)H(i.sequence[l])?(e=O(i.sequence[l]),l>0?(t=i.sequence[l-1],H(t)?s[L.get(e)].add(O(t)):(s[L.get(e)].add(t),s[L.get(e)].add(de(t)))):i.type==="haplotype"&&s[L.get(e)].add("None"),l<i.sequence.length-1?(t=i.sequence[l+1],H(t)?n[L.get(e)].add(O(t)):(n[L.get(e)].add(t),n[L.get(e)].add(de(t)))):i.type==="haplotype"&&n[L.get(e)].add("None")):(l>0?(e=i.sequence[l-1],n[L.get(i.sequence[l])].add(e),H(e)&&n[L.get(i.sequence[l])].add(O(e))):i.type==="haplotype"&&n[L.get(i.sequence[l])].add("None"),l<i.sequence.length-1?(e=i.sequence[l+1],s[L.get(i.sequence[l])].add(e),H(e)&&s[L.get(i.sequence[l])].add(O(e))):i.type==="haplotype"&&s[L.get(i.sequence[l])].add("None"))});let r=n.map(i=>Array.from(i)),a=s.map(i=>Array.from(i));if(C.showReads&&E.length>0){let i=y.slice();i.sort(Tt);let l=new Map,c=new Map,d=h=>{let p=l.get(h);if(p===void 0)throw new Error(`No merge offset recorded for node ${h}`);return p},f=h=>{let p=c.get(h);if(p===void 0)throw new Error(`No merge origin recorded for node ${h}`);return p};i.forEach(h=>{let p=st(L.get(h.name),r,a);if(p){let u=d(p)+oe(p).sequenceLength;l.set(h.name,u),l.set(de(h.name),u),c.set(h.name,f(p)),c.set(de(h.name),f(p))}else l.set(h.name,0),l.set(de(h.name),0),c.set(h.name,h.name),c.set(de(h.name),h.name)}),E.forEach(h=>{let p=h.sequenceNew??[];h.firstNodeOffset=(h.firstNodeOffset??0)+d(h.sequence[0]),h.finalNodeCoverLength=(h.finalNodeCoverLength??0)+d(h.sequence[h.sequence.length-1]);for(let u=h.sequence.length-1;u>=0;u-=1){let m=O(h.sequence[u]),g=st(L.get(m),r,a);if(g&&wn(L.get(g),r,a))if(u>0){h.sequence.splice(u,1);let x=oe(g).sequenceLength;p[u].mismatches.forEach(w=>{w.pos+=x}),p[u-1].mismatches=p[u-1].mismatches.concat(p[u].mismatches),p.splice(u,1)}else{h.sequence[0]=f(h.sequence[0]);let x=p[0],w=d(x.nodeName);x.mismatches.forEach(N=>{N.pos+=w}),x.nodeName=f(x.nodeName)}}})}for(let i=0;i<y.length;i+=1)if(wn(i,r,a)&&!st(i,r,a)){let l=i;for(;wn(l,r,a);)l=L.get(O(a[l][0])),y[i].sequenceLength+=y[l].sequenceLength,y[i].seq+=y[l].seq}b.forEach(i=>{for(let l=i.sequence.length-1;l>=0;l-=1){e=O(i.sequence[l]);let c=L.get(e);st(c,r,a)&&i.sequence.splice(l,1)}});for(let i=y.length-1;i>=0;i-=1)st(i,r,a)&&y.splice(i,1)}function st(e,t,n){if(t[e].length!==1||t[e][0]==="None")return!1;let s=O(t[e][0]),o=L.get(s);return n[o].length!==1||n[o][0]==="None"?!1:s}function wn(e,t,n){if(n[e].length!==1||n[e][0]==="None")return!1;let s=O(n[e][0]),o=L.get(s);return!(t[o].length!==1||t[o][0]==="None")}function Xi(e){let t=C.focusReadNames?new Set(C.focusReadNames):null;return e.filter(n=>n.is_secondary!==!0&&(n.mapping_quality??0)>=C.mappingQualityCutoff&&(t===null||n.name!==void 0&&t.has(n.name)))}function ki(e,t){let n=new Map;for(let s of e){let o=t(s),r=n.get(o);r===void 0?n.set(o,[s]):r.push(s)}return n}function Hi(e,t){return e.xStart<t.xStart?1:e.xStart>t.xStart?-1:e.yStart>t.yStart?1:e.yStart<t.yStart?-1:0}function Rs(e,t){let n=ki(e.filter(r=>r.type===t),r=>`${r.nodeStart},${r.nodeEnd}`);n.forEach(r=>{let a=.3,i=.4/r.length;r.length<=5&&(a=.5,i=0),r.sort(Hi),r.forEach(l=>{let c,d;l.yStart<l.yEnd?(c=l.xStart+(l.xEnd-l.xStart)*(1-a),a+=i,d=l.xStart+(l.xEnd-l.xStart)*(1-a)):(c=l.xStart+(l.xEnd-l.xStart)*a,a+=i,d=l.xStart+(l.xEnd-l.xStart)*a);let f=`M ${l.xStart} ${l.yStart}`;f+=` C ${c} ${l.yStart} ${c} ${l.yEnd} ${l.xEnd} ${l.yEnd}`,f+=` V ${l.yEnd+l.width}`,f+=` C ${d} ${l.yEnd+l.width} ${d} ${l.yStart+l.width} ${l.xStart} ${l.yStart+l.width}`,f+=" Z",l.path=f})});let s=Array.from(n.keys());s.sort(function(r,a){let i=r.split(",").map(Number),l=a.split(",").map(Number),c=i[0]??0,d=i[1]??0,f=l[0]??0,h=l[1]??0;return c<f?-1:c>f?1:d<h?-1:d>h?1:0});let o=[];for(let r of s){let a=n.get(r);a!==void 0&&o.push(...a)}return o}function Ss(e){let t=`M ${e.x-9} ${e.y} Q ${e.x-9} ${e.y-9} ${e.x} ${e.y-9}`,n=e.x,s=e.y-9;return e.width>1&&(n+=e.pixelWidth,t+=` L ${n} ${s}`),t+=` Q ${n+9} ${s} ${n+9} ${s+9}`,n+=9,s+=9,e.contentHeight>0&&(s+=e.contentHeight-0,t+=` L ${n} ${s}`),t+=` Q ${n} ${s+9} ${n-9} ${s+9}`,n-=9,s+=9,e.width>1&&(n-=e.pixelWidth,t+=` L ${n} ${s}`),t+=` Q ${n-9} ${s} ${n-9} ${s-9}`,n-=9,s-=9,e.contentHeight>0&&(s-=e.contentHeight-0,t+=` L ${n} ${s}`),t}function Wi(e){let t=new Map;for(let[n,s]of e.pathVisits??[])for(let o of s){let r=`${o.path} ${n}`,a=t.get(r);a?a.push(o.strand):t.set(r,[o.strand])}return t}function Gi(e){let t=new Map(e.nodes.map(r=>[r.id,r])),n=Wi(e),s=(e.paths??[]).map((r,a)=>({path:r,index:a})),o=s.findIndex(r=>le(r.path.name).name===e.referencePath);return o>0&&s.unshift(...s.splice(o,1)),s.flatMap(({path:r,index:a})=>{let i=le(r.name).name,l=new Map,c=r.nodeIds.flatMap(d=>{let f=t.get(d);if(!f)return[];let h=l.get(f.name)??0;l.set(f.name,h+1);let p=n.get(`${i} ${f.name}`)?.[h]??pn(f);return[mn(f,p)]});return c.length>0?[{id:a,name:r.name,sequence:c,sourceTrackID:0,type:"haplotype"}]:[]})}function Yi(e){return e.nodes.map(t=>({name:t.id,seq:"",sequenceLength:Math.max(1,t.length)}))}function Ge(e){return(e.paths?.length??0)>0}var zi=600,Ui=3,Ki=15;function ji(e){return Math.max(Ui,Math.min(Ki,Math.floor(zi/Math.max(1,e))))}function Ns(e){let t=e.paths??[],n=Gi(e),s=e.reads?ts(e,e.reads,t.length):[],o=s.length>0?co:lo,r=t.map((i,l)=>o(l,t.length)),a=ws(Yi(e),n,s,{nodeWidthOption:"compressed",trackWidth:ji(n.length),trackColor:i=>i.type==="read"?ns(i):r[i.id]});return a?{layout:a,pathColors:r}:void 0}function _n(e){let t=[];return e.nodes.forEach(n=>{n.order>=0&&t.push(n)}),t}function _s(e,t,n,s){let o=e.y+e.contentHeight/2-t;return[{x:n,y:o},{x:s,y:o}]}function As(e,t){return{minY:e.bounds.minY-t,maxY:e.bounds.maxY-t}}function Ls(e){let t=Ge(e)?Ns(e):void 0;if(!t)return;let{layout:n,pathColors:s}=t,o=n.bounds.minY,r={};for(let l of _n(n))r[l.name]=_s(l,o,l.x,l.x+l.pixelWidth);let{minY:a,maxY:i}=As(n,o);return{nodePositions:r,tubeMap:{layout:n,yOffset:o,pathColors:s},extent:{minX:n.bounds.minX,maxX:n.bounds.maxX,minY:a,maxY:i}}}function Vi(e,t){let n=new Map(e.nodes.map(i=>[i.id,i])),s=new Map;for(let i of _n(t)){let l=s.get(i.order);l?l.push(i):s.set(i.order,[i])}let o=[],r=-1/0;for(let i of[...s.keys()].sort((l,c)=>l-c)){let l=s.get(i),c=1/0,d=-1/0;for(let f of l){let h=n.get(f.name);h&&P(h)&&(c=Math.min(c,h.stable.start),d=Math.max(d,h.stable.start+f.sequenceLength))}c===1/0&&(c=d=r),c<r&&(c=r,d=Math.max(r,d)),r=Math.max(r,d),o.push({order:i,x0:Math.min(...l.map(f=>f.x)),x1:Math.max(...l.map(f=>f.x+f.pixelWidth)),bp0:c,bp1:d})}let a=o.find(i=>i.bp0!==-1/0);for(let i of o)i.bp0===-1/0&&(i.bp0=i.bp1=a?.bp0??0);return o}function Qi(e){return e.nodes.some(P)&&Ge(e)}function Is(e){let t=Qi(e)?Ns(e):void 0;if(!t)return;let{layout:n,pathColors:s}=t,o=Vi(e,n),r=new Map(o.map(l=>[l.order,l])),a=n.bounds.minY,i={};for(let l of _n(n)){let c=r.get(l.order);i[l.name]=_s(l,a,c.bp0,c.bp1)}return{nodePositions:i,tubeMap:{layout:n,yOffset:a,columns:o,pathColors:s},referenceAxis:!0,pixelRows:!0,extent:As(n,a)}}function Ot(e){let t=e.split("#"),n=t.length>=2?Number(t[1]):Number.NaN;return{sample:t[0]??e,haplotype:Number.isFinite(n)?n:void 0}}function Zi(e,t,n,s){let o=[],r=[],a=[e];for(s.add(e);a.length>0;){let i=a.pop(),l=t.get(i);if(l){o.push(l);for(let c of n.get(i)??[]){let d=t.get(c);d&&(d.stable.rank===mt?r.push(d):s.has(c)||(s.add(c),a.push(c)))}}}return{members:o,anchors:r}}function Ji(e){if(new Set(e.map(i=>i.stable.refName)).size!==1||e.length<2)return;let n=[...e].sort((i,l)=>i.stable.start-l.stable.start),s=n[0],o=n.at(-1),r=s.stable.start+s.length,a=o.stable.start;return a>=r?{start:r,end:a,entry:s}:void 0}function el(e,t,n){let s=new Map(e.map(a=>[a.id,a])),o=new Map,r=[];for(let a of n.get(t.id)??[])s.has(a)&&(o.set(a,0),r.push(a));if(r.length===0)for(let a of e)o.set(a.id,0),r.push(a.id);for(let a of r){let i=o.get(a)+s.get(a).length;for(let l of n.get(a)??[])if(s.has(l)){let c=o.get(l);(c===void 0||i<c)&&(o.set(l,i),r.push(l))}}return o}function tl(e,t,n){let s=el(e,t,n),o=[...e].sort((l,c)=>s.get(l.id)-s.get(c.id)),r=new Map(o.map((l,c)=>[l.id,c])),a=new Map(e.map(l=>[l.id,l])),i=new Map;for(let[l,c]of o.entries()){let d=0;for(let f of n.get(c.id)??[]){let h=a.get(f);h&&r.get(f)<l&&(d=Math.max(d,i.get(f)+h.length))}i.set(c.id,d)}return{offsets:i,ordered:o}}function Cs(e){let t=new Map(e.nodes.filter(Fe).map(r=>[r.id,r])),n=nt(e),s=new Set,o=[];for(let r of t.values())if(r.stable.rank!==mt&&!s.has(r.id)){let{members:a,anchors:i}=Zi(r.id,t,n,s),l=Ji(i);if(l){let{offsets:c,ordered:d}=tl(a,l.entry,n);o.push({start:l.start,refSpan:l.end-l.start,nodeIds:d.map(f=>f.id),nodeOffsets:d.map(f=>c.get(f.id)),pathLength:d.reduce((f,h)=>Math.max(f,c.get(h.id)+h.length),0)})}}return o.sort((r,a)=>r.start-a.start)}var nl=1,ol=.015;function Pt({graph:e,span:t,rowY:n,positions:s}){let o=t*ol,r=Cs(e),a=new Map(e.nodes.map(d=>[d.id,d])),i=[];for(let d of r){let f=d.refSpan-d.pathLength;f>=nl&&i.push({nodeIds:d.nodeIds,bp:f});let h=Math.max(d.refSpan,o),p=d.pathLength>0?h/d.pathLength:0;d.nodeIds.forEach((u,m)=>{let g=a.get(u);if(g){let x=d.nodeOffsets[m],w=h/d.nodeIds.length,N=R=>d.start+R*p,S=n(g);s[u]=p?[{x:N(x),y:S},{x:N(x+g.length),y:S}]:[{x:d.start+m*w,y:S},{x:d.start+(m+1)*w,y:S}]}})}let l=nt(e),c=Object.keys(s);for(let d of c){let f=s[d].at(-1).x;for(let h of l.get(d)??[]){let p=a.get(h);if(p&&!(h in s)){let u=n(p);s[h]=[{x:f,y:u},{x:f+o,y:u}],c.push(h)}}}return i}function sl(e,t){let n=new Map;for(let o of e.nodes)if(Ze(o)){let{sample:r}=Ot(o.stable.refName);n.set(r,(n.get(r)??0)+o.length)}let s=new Map(t.map((o,r)=>[o,r]));return[...n.keys()].sort((o,r)=>(s.get(o)??1/0)-(s.get(r)??1/0)||n.get(r)-n.get(o)||o.localeCompare(r))}function Ts(e,t,n=[]){let s=ye(e),o=sl(e,n);if(s.length===0||o.length===0)return;let r=Je(s,t),a=new Map(o.map((h,p)=>[h,p+1])),i=be(s),l=o.length+1,c=Pt({graph:e,span:r,rowY:h=>{let p=h.stable;return((p?a.get(Ot(p.refName).sample):void 0)??l)*q},positions:i}),f=[{label:Ot(s[0].stable.refName).sample,y:0},...o.map(h=>({label:h,y:a.get(h)*q}))];return{nodePositions:i,rowLabels:f,sampleRows:o,referenceAxis:!0,pixelRows:!0,alleleDeletions:c}}function rl(e){let t=new Set;for(let n of e.nodes)n.stable&&t.add(n.stable.rank);return new Map([...t].sort((n,s)=>n-s).map((n,s)=>[n,s]))}function Os(e,t){let n=ye(e);if(n.length===0)return;let s=Je(n,t),o=rl(e),r=be(n),a=Pt({graph:e,span:s,rowY:l=>(l.stable?o.get(l.stable.rank)??o.size:o.size)*q,positions:r}),i=[...o].map(([l,c])=>({label:l===0?"Reference (rank 0)":`Rank ${l}`,y:c*q}));return{nodePositions:r,rowLabels:i,referenceAxis:!0,pixelRows:!0,alleleDeletions:a}}var al=12,An=q;function Ps(e){return 10+8*Math.log2(1+e.length)}function he(e,t){return e<t?-1:e>t?1:0}function Fs(e,t){return he(e.at,t.at)||he(e.side,t.side)||he(e.hops,t.hops)}var $s={at:1/0,side:0,hops:0};function il(e){let t=new Map(e.nodes.map(s=>[s.id,s])),n=fl(e);return e.nodes.map(s=>s.id).sort((s,o)=>Fs(n.get(s)??$s,n.get(o)??$s)||he(t.get(s).name,t.get(o).name)||he(s,o))}function ll(e,t){let n=new Set(e.nodes.map(d=>d.id)),s=new Map(t.map(d=>[d.id,d.stable.start])),o=new Map,r=new Map;t.forEach((d,f)=>{r.set(d.id,t[f-1]?.id),o.set(d.id,t[f+1]?.id)});let a=t[0]?.id,i=(d,f)=>{let h=o.get(d);o.set(d,f),r.set(f,d),o.set(f,h),h!==void 0&&r.set(h,f)},l=(d,f)=>{let h=r.get(d);h===void 0?(a=f,r.set(f,void 0),o.set(f,d),r.set(d,f)):i(h,f)};for(let d of e.paths??[]){let f=0,h=0,p;for(let x of d.nodeIds){let w=s.get(x);w!==void 0&&(p!==void 0&&w!==p&&(w>p?f++:h++),p=w)}let u=h>f?[...d.nodeIds].reverse():d.nodeIds,m,g=new Set;for(let x of u)if(o.has(x)){if(m===void 0)for(let w of g)l(x,w);m=x}else n.has(x)&&(m===void 0?g.add(x):(i(m,x),m=x))}let c=[];for(let d=a;d!==void 0;d=o.get(d))c.push(d);return c}function cl(e,t){let n=[...t.entries()].sort(([a,i],[l,c])=>Fs(i,c)||he(a,l)).map(([a])=>a),s=n.length;for(let a of n){let i=t.get(a);for(let l of e.get(a)??[])t.has(l)||(t.set(l,{at:i.at,side:1,hops:i.hops+1}),n.push(l))}let o=new Set(n.slice(s)),r=new Set;for(let a of o){if(r.has(a))continue;let{at:i}=t.get(a),l=[a];r.add(a);let c=!0;for(let d of l){let{hops:f}=t.get(d),h=!0,p=!1;for(let u of e.get(d)??[]){let m=t.get(u);m.at===i&&o.has(u)?(h&&=m.hops<=f,r.has(u)||(r.add(u),l.push(u))):m.at!==i&&(p||=m.at<i,c&&=m.at<i)}c&&=!h||p}if(c)for(let d of l){let f=t.get(d);t.set(d,{...f,side:-1,hops:-f.hops})}}}function fl(e){let t=new Set(e.nodes.map(r=>r.id)),n=new Map;for(let r of e.edges)!t.has(r.from)||!t.has(r.to)||((n.get(r.from)??n.set(r.from,[]).get(r.from)).push(r.to),(n.get(r.to)??n.set(r.to,[]).get(r.to)).push(r.from));let s=e.nodes.filter(P).sort((r,a)=>he(r.stable.start,a.stable.start)||he(r.name,a.name)),o=new Map;return ll(e,s).forEach((r,a)=>{o.set(r,{at:a,side:0,hops:0})}),cl(n,o),o}function dl(e){let t=new Map(e.nodes.map(f=>[f.id,f])),n=il(e),s=new Map(n.map((f,h)=>[f,h])),o=f=>P(t.get(f)),r=new Map(n.map(f=>[f,[]])),a=new Map(n.map(f=>[f,[]])),i=(f,h)=>{r.get(h).push(f),a.get(f).push(h)};for(let f of e.edges)f.from===f.to||!s.has(f.from)||!s.has(f.to)||(s.get(f.from)<s.get(f.to)?i(f.from,f.to):i(f.to,f.from));let l=n.filter(o);for(let f=1;f<l.length;f++)i(l[f-1],l[f]);let c=new Map;for(let f of n){let h=0;for(let p of r.get(f))h=Math.max(h,c.get(p)+1);c.set(f,h)}for(let f=n.length-1;f>=0;f--){let h=n[f],p=a.get(h);if(o(h)||p.length===0)continue;let u=1/0;for(let x of p)u=Math.min(u,c.get(x));let m=c.get(h),g=Math.max(m,u-1);c.set(h,Math.floor((m+g)/2))}let d=[];for(let f of n)(d[c.get(f)]??=[]).push(f);return{layers:d,layerOf:c,preds:r}}function Ds(e){if(!e.nodes.some(P))return;let t=new Map(e.nodes.map(f=>[f.id,f])),n=f=>P(t.get(f)),{layers:s,layerOf:o,preds:r}=dl(e),a=s.map(f=>{let h=0;for(let p of f)h=Math.max(h,Ps(t.get(p)));return h}),i=[],l=0;for(let f=0;f<s.length;f++)i[f]=l,l+=a[f]+al;let c=new Map;for(let f of s){let h=[];for(let u of f){if(n(u)){c.set(u,0);continue}let m=r.get(u).filter(x=>c.has(x)),g=0;for(let x of m)g+=c.get(x)/m.length;h.push({id:u,ideal:g===0?An:g})}h.sort((u,m)=>u.ideal-m.ideal);let p=new Set([0]);for(let{id:u,ideal:m}of h){let g=Math.round(m/An);g===0&&(g=m>=0?1:-1);for(let x=1;p.has(g);x++)p.has(g+x)?p.has(g-x)||(g-=x):g+=x;p.add(g),c.set(u,g*An)}}let d={};for(let f of e.nodes){let h=o.get(f.id),p=Ps(f),u=i[h]+a[h]/2,m=c.get(f.id);d[f.id]=[{x:u-p/2,y:m},{x:u+p/2,y:m}]}return{nodePositions:d,referenceAxis:!1,pixelRows:!0}}function Bs(e){return e.sample??ut(e.name)}function hl(e){return e.haplotype!==void 0&&e.sample!==void 0?`${e.sample}#${e.haplotype}`:Bs(e)}function ul(e,t){let n=[],s;for(let o of e){s!==void 0&&o.start!==void 0&&o.start>s&&n.push(o.start-s),n.push(...o.nodeIds);let r=o.nodeIds.reduce((a,i)=>a+(t.get(i)??0),0);s=o.start===void 0?void 0:o.start+r}return n}function pl(e,t){let n=[],s;for(let o of e){if(o.start===void 0||s!==void 0&&o.start<s)return;s!==void 0&&o.start>s&&n.push({start:s,end:o.start});let r=o.start;for(let a of o.nodeIds){let i=t.get(a)??0;n.push({start:r,end:r+i}),r+=i}s=r}return n}function ml(e,t,n,s=!0){if(!n||!s)return{ids:e,complete:!0,from:-1,to:-1};let o=-1,r=-1,a=-1/0,i=1/0;if(e.forEach((c,d)=>{let f=typeof c=="string"?t.get(c):void 0;f&&(f.end<=n.start&&f.end>a&&(a=f.end,o=d),f.start>=n.end&&f.start<i&&(i=f.start,r=d))}),o<0||r<0)return{ids:e,complete:!1,from:-1,to:-1};let l=e.slice(Math.min(o,r)+1,Math.max(o,r));return{ids:o<r?l:l.reverse(),complete:!0,from:o,to:r}}function Ah(e,t){return t?e.filter(n=>t.includes(n.sample)).sort((n,s)=>t.indexOf(n.sample)-t.indexOf(s.sample)||n.label.localeCompare(s.label)):e}function qs(e,t,n){let s=e.paths??[],o=g=>le(g.name).name===e.referencePath,r=s.some(o)?s.filter(o).sort((g,x)=>(g.start??0)-(x.start??0)):s.slice(0,1),a=r[0],i=s.filter(g=>!r.includes(g));if(!a||i.length===0)return;let l=new Map;for(let g of i)l.set(g.name,[...l.get(g.name)??[],g]);let c=new Map(e.nodes.map(g=>[g.id,g.length])),d=a.start??0,f=t&&t.end>t.start?t:void 0,h=new Map;for(let g of r){let x=g.start??0;for(let w of g.nodeIds){let N=c.get(w)??0;h.has(w)||h.set(w,{start:x,end:x+N}),x+=N}}let p=f===void 0||[...h.values()].some(g=>g.end<=f.start)&&[...h.values()].some(g=>g.start>=f.end),u=g=>{let x=g[0],w=[...g].sort((G,K)=>(G.start??0)-(K.start??0)),{ids:N,complete:S,from:R,to:M}=ml(ul(w,c),h,f,p),v=pl(w,c),I=x.contig??pt(le(x.name).name),$=v?.length?R<0?{contig:I,start:v[0].start,reversed:!1}:R<M?{contig:I,start:v[R].end,reversed:!1}:{contig:I,start:v[R].start,reversed:!0}:void 0,W=[],D=0,pe=0,_e=0,re=0;for(let G of N){if(typeof G=="number"){W.push({start:D,bp:G,onReference:!1,gap:!0}),D+=G,_e+=G,re=0;continue}let K=c.get(G)??0,z=h.get(G),U=W.at(-1),Ae=U?.referenceStart,ze=z&&Ae!==void 0&&re>=0&&Ae+U.bp===z.start,T=z&&Ae!==void 0&&re<=0&&z.end===Ae;!z&&U&&!U.onReference&&!U.gap?U.bp+=K:ze||T?(U.bp+=K,ze||(U.referenceStart=z.start,U.reversed=!0),re=ze?1:-1):(W.push({start:D,bp:K,onReference:z!==void 0,referenceStart:z?.start}),re=0),D+=K,z||(pe+=K)}return{name:x.name,label:hl(x),sample:Bs(x),haplotype:x.haplotype,bp:D,offReferenceBp:pe,gapBp:_e,complete:S,runs:W,axis:$}};return{origin:f?f.start:d,unit:n,reference:u(r),rows:[...l.values()].map(u).sort((g,x)=>Number(x.complete)-Number(g.complete)||x.bp-g.bp||g.label.localeCompare(x.label))}}var gl=1.3;function xl(e){let t=e.reference.bp;for(let n of e.rows)t=Math.max(t,n.bp);return{maxX:e.origin+t*gl,maxY:e.rows.length*q}}function Xs(e,t){let n=ye(e),s=qs(e,t);if(n.length===0||!s)return;let o=t?n.filter(i=>Ut(i,t)):n,r=be(o.length>0?o:n),a=[{label:s.reference.label,y:0},...s.rows.map((i,l)=>({label:i.label,y:(l+1)*q}))];return{nodePositions:r,rowLabels:a,referenceAxis:!0,pixelRows:!0,extent:xl(s)}}var Gs="Force-directed layout",Ne=e=>e.nodes.some(P),ks=e=>Ne(e)&&(e.paths?.length??0)>1,Hs=e=>Ne(e)&&Ge(e),Ws=e=>Ne(e)&&e.nodes.some(Ze),$t=[{value:"auto",label:"Anchored",description:"x is reference bp, one row per stable rank. Needs rGFA tags or a reference path.",run:Os,cutMargins:!0,wholeWalks:!1,available:Ne,drawsLocally:Ne,drawsNodes:!0},{value:"samplerows",label:"Sample rows",description:"x is reference bp, one row per contributing assembly. Needs rGFA tags or a reference path.",run:Ts,cutMargins:!0,wholeWalks:!1,available:Ws,drawsLocally:Ws,drawsNodes:!0},{value:"walkrows",label:"Walk rows",description:"x is each walk's own bp: one bar per haplotype, blue on the reference's path and purple off it, so a repeat expansion reads as bar length, and each bar boxes its haplotype's own genes where the session has them. Needs W or P lines.",run:Xs,cutMargins:!1,wholeWalks:!0,available:ks,drawsLocally:ks,drawsNodes:!1},{value:"ordered",label:"Ordered",description:"x is reference order, not bp: every node gets room, bubbles read as lenses. Needs rGFA tags or a reference path.",run:Ds,cutMargins:!1,wholeWalks:!1,available:Ne,drawsLocally:Ne,drawsNodes:!0},{value:"tubemap",label:"Tube map",description:"sequenceTubeMap: every path a coloured tube through boxed nodes, columns in node order and node widths log-scaled. Needs P or W lines.",run:Ls,cutMargins:!1,wholeWalks:!1,available:Ge,drawsLocally:Ge,drawsNodes:!1},{value:"tubemapref",label:"Tube map on reference",description:"The tube map with each column at the reference bp it covers, so the tubes line up with the tracks around them. Needs P or W lines and a reference path.",run:Is,cutMargins:!0,wholeWalks:!1,available:Hs,drawsLocally:Hs,drawsNodes:!1},{value:"force",label:Gs,description:"OGDF FMMM, via the external Bandage engine.",run:()=>{},cutMargins:!1,wholeWalks:!1,available:()=>!0,drawsLocally:()=>!1,drawsNodes:!0}],yl=$t.map(e=>e.value);function bl(e,t){return!Ys(e).drawsLocally(t)}function Ys(e){return $t.find(t=>t.value===e)??$t[0]}var Ks=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],Cn=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"rainbow",label:"Rainbow"}],zs=["blue","red","purple","green"],wl=e=>Ks.some(t=>t.value===e),Ml=e=>Cn.some(t=>t.value===e);function vl(e,t,n,s=!0){let{field:o,scheme:r}=e.color??{},a=wl(o)?o:s?"progress":"walk",i=t?"grey":zs[n%zs.length],l=Ml(r)?r==="rainbow"&&a!=="reference"?i:r:i;return{field:a,scheme:l}}var js=.5,El=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4,Rl=e=>e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055;function Us(e){let[t,n,s]=[1,3,5].map(i=>El(Number.parseInt(e.slice(i,i+2),16)/255)),o=Math.cbrt(.4122214708*t+.5363325363*n+.0514459929*s),r=Math.cbrt(.2119034982*t+.6806995451*n+.1073969566*s),a=Math.cbrt(.0883024619*t+.2817188376*n+.6299787005*s);return[.2104542553*o+.793617785*r-.0040720468*a,1.9779984951*o-2.428592205*r+.4505937099*a,.0259040371*o+.7827717662*r-.808675766*a]}function Sl([e,t,n]){let s=(e+.3963377774*t+.2158037573*n)**3,o=(e-.1055613458*t-.0638541728*n)**3,r=(e-.0894841775*t-1.291485548*n)**3;return[4.0767416621*s-3.3077115913*o+.2309699292*r,-1.2684380046*s+2.6097574011*o-.3413193965*r,-.0041960863*s-.7034186147*o+1.707614701*r].map(a=>Rl(Math.max(0,Math.min(1,a)))*255)}function Tn(e,t){let n=Math.max(0,Math.min(1,t)),s=Cn.find(a=>a.value===e);if(!s||!("ends"in s))return Ee(n*Re,.7,.5).map(a=>a*255);let o=Us(s.ends[0]),r=Us(s.ends[1]);return Sl(o.map((a,i)=>a+(r[i]-a)*n))}function Ln(e,t){let[n,s,o]=Tn(e,t).map(Math.round);return`rgb(${n}, ${s}, ${o})`}function In(e,t){let[n,s,o]=Tn(e,t).map(Math.round);return B(n,s,o,255)}function Nl({field:e,scheme:t},n){return e==="walk"?In(t,js):n===void 0?Vs:In(t,n)}var Vs=Rt;function Qs({field:e,scheme:t}){return e==="walk"?[{offset:0,color:Ln(t,js)}]:Array.from({length:7},(n,s)=>({offset:s/6,color:Ln(t,s/6)}))}function _l(e){let t=Qs(e);return t.length===1?t[0].color:`linear-gradient(to right, ${t.map(n=>`${n.color} ${n.offset*100}%`).join(", ")})`}var Ft=8,On=34,Dt=12,Al=60;function Ll({count:e,bounds:t,pixelRows:n,width:s,room:o,columns:r}){function a(l){let c=Math.ceil(e/l),d=Math.floor((s-(l-1)*Ft)/l),f=(o-c*On-(c-1)*Ft)/c,h=(d-2*Dt)/t.w,p=t.h>0?(f-2*Dt)/t.h:1/0,u=n?h:Math.min(h,p),m=n?t.h:t.h*u,g=Math.floor(Math.max(Al,Math.min(m+2*Dt,f)));return{columns:l,width:d,height:g,scale:u,total:c*(g+On)+(c-1)*Ft}}if(r!==void 0)return a(Math.max(1,Math.min(e,Math.round(r))));let i=a(1);for(let l=2;l<=e;l++){let c=a(l);c.scale>i.scale&&(i=c)}return i}function Il(e){let t=typeof e=="string"?{field:e}:e??{};return{field:t.field==="walk"||t.field==="sample"?t.field:"",domain:[...t.domain??[]],...t.columns===void 0?{}:{columns:t.columns}}}function Zs(e,t){let n=new Map(t.map((o,r)=>[o,r])),s=o=>n.get(o)??t.length;return e.map((o,r)=>({name:o,i:r})).sort((o,r)=>s(o.name)-s(r.name)||o.i-r.i).map(({name:o})=>o)}function Cl(e,t,n=[]){let s=Zs(e,n),o={columns:void 0,count:e.length,cells:e.map(c=>s.indexOf(c))};if(t==="walk")return o;let r=e.map(c=>{let[d,f,h]=c.split("#"),p=Number(f);return h!==void 0&&Number.isInteger(p)&&p>=0?{sample:d,column:Math.max(0,p-1)}:void 0}),a=Zs([...new Set(r.flatMap(c=>c?[c.sample]:[]))],n),i=Math.max(1,...r.map(c=>c?c.column+1:1)),l=r.map(c=>c?a.indexOf(c.sample)*i+c.column:-1);return l.includes(-1)||new Set(l).size<l.length?o:{columns:i,count:a.length*i,cells:l}}var Tl=10;function Ol(e,t){let n=e.end-e.start,s=e.longestAlleleLength-e.shortestAlleleLength;return t.find(o=>s<=Tl*(o.end-o.start)&&(n===0?o.start<=e.start&&e.start<=o.end:Math.min(e.end,o.end)-Math.max(e.start,o.start)>=n/2))}var Pl=40;function ue(e){return e>=1e4?`${(e/1e3).toFixed(0)} kb`:e>=1e3?`${(e/1e3).toFixed(1)} kb`:`${e} bp`}function $l(e,t){let n=ue(e),s=ue(t),o=s.slice(s.indexOf(" "));return n.endsWith(o)?`${n.slice(0,-o.length)}\u2013${s}`:`${n}\u2013${s}`}function Js(e){return e>=ho?"\u22652.1B routes":e>=1e5?`${(e/1e3).toFixed(0)}k routes`:`${e} routes`}function Fl(e,t=[]){let n=Dl(e,t);return e.partial?{...n,label:`${n.label}, partial`}:n}function Dl(e,t){let n=e.end-e.start,{shortestAlleleLength:s,longestAlleleLength:o,pathCount:r,segmentCount:a,inversion:i}=e,l=$l(s,o);if(a>=Pl)return{kind:"superbubble",label:`${l} superbubble, ${a} segments, ${Js(r)}${i?", inv":""}`};if(i)return{kind:"inversion",label:`${ue(o)} inv`};let c=o!==s?Ol(e,t):void 0;if(c){let f=c.name?` (${c.name})`:"";return{kind:"repeat",label:`${l} repeat array${f}, ${Js(r)}`}}let d=r>2?`, ${r} alleles`:"";return s===o&&s===n?n<=1?{kind:"snp",label:"SNP"}:{kind:"substitution",label:`${ue(n)} sub`}:n===0||s===n?{kind:"insertion",label:`\u2264${ue(o-n)} ins${d}`}:o===n?{kind:"deletion",label:`${ue(n-s)} del${d}`}:{kind:"complex",label:`${ue(n)} ref \u2192 ${l}, ${r} alleles`}}var Bl={snp:"#5b6b7a",substitution:"#5b6b7a",insertion:"#2f8fd6",deletion:"#c94040",inversion:"#e07b00",repeat:"#8e3fbf",superbubble:"#8e3fbf",complex:"#8e3fbf"},ql={snp:"SNP",substitution:"substitution",insertion:"insertion",deletion:"deletion",inversion:"inversion",repeat:"repeat array",superbubble:"superbubble",complex:"site"};function Xl(e){return e.segments.split(",").filter(Boolean)}var $n="#2f8fd6",Fn="#8e3fbf",Dn="#bdbdbd",at="#1c1c22",Bn=12,qn=4,kl=3;function Ye(e){return`${(e/1e3).toFixed(e<1e4?1:0)} kb`}function er(e,t){return t?` \u2248 ${Math.round(e/t)} units`:""}function tr(e,t,n,s){let{bp:o,gapBp:r,complete:a}=e;if(!t)return`${Ye(o)}${er(o,n)}`;let i=o-t.bp,l=i===0?"":` (${i>0?"+":"\u2212"}${Ye(Math.abs(i))})`,c=r>0?` \xB7 ${Ye(r)} outside the cut`:"",d=s?` \xB7 called ${Ye(s.bp)}${s.spanningReads===0?" \xB7 no spanning read":""}`:"";return`${Ye(o)}${er(o,n)}${l}${c}${a?"":" \xB7 partial walk"}${d}`}function nr(e,t,n){let s=t+6;return s+e.length*we<n?{x:s,anchor:"start",halo:!1}:{x:t-6,anchor:"end",halo:!0}}function or(e,t,n){if(t*n<kl)return[];let s=[];for(let o=t;o<e;o+=t)s.push(o);return s}function sr(e,t){if(e.gap)return{fill:Dn};if(!t)return{fill:e.onReference?$n:Fn};if(e.referenceStart===void 0)return{fill:St};let n=Ao({...e,start:e.referenceStart},t);return n.length===1?{fill:At(n[0])}:{stops:n.map(At)}}function it(e,t,n){return e.reversed?{start:e.start-n,end:e.start-t}:{start:t-e.start,end:n-e.start}}function Hl(e,t){return e.reversed?{start:e.start-t,end:e.start}:{start:e.start,end:e.start+t}}function Wl(e,t){let n=new Map;for(let s of e){let o=t.get(s.name);if(!s.axis||!o)continue;let r=s.axis,a=({start:i,end:l})=>({start:Math.max(0,i),end:Math.min(s.bp,l)});n.set(s.name,o.map(i=>({name:i.name,...a(it(r,i.start,i.end)),exons:i.exons.map(l=>a(it(r,l.start,l.end))).filter(l=>l.end>l.start)})).filter(i=>i.end>i.start).sort((i,l)=>i.start-l.start))}return n}var Gl=9,Yl=5.2,zl=8,rr=(e,t)=>Math.min(2,(e-t)/2-1);function Bt(e,t){return rr(e,t)>=1}function ar(e,t,n,{rowPx:s=q,barPx:o=Bn}={}){if(!Bt(s,o))return[];let r=rr(s,o),a=e.map(c=>{let d=t(c.start);return{g:c,x:d,w:Math.max(2,t(c.end)-d)}}),i=[],l=new Set((o>=zl?[...a]:[]).sort((c,d)=>c.w-d.w).filter(({g:c,x:d,w:f})=>{let h=c.name.length*Yl/2,p=[d+f/2-h,d+f/2+h];return 2*h>f+6||i.some(([u,m])=>p[0]<m+2&&p[1]>u-2)?!1:(i.push(p),!0)}));return a.map(c=>({name:c.g.name,x:c.x,y:n-o/2-r,w:c.w,h:o+2*r,exons:c.g.exons.map(d=>({x:t(d.start),w:Math.max(1,t(d.end)-t(d.start))})),label:l.has(c)?{x:c.x+c.w/2,y:n+3,size:Gl}:void 0}))}var Pn=e=>`${e} row${e===1?"":"s"}`;function Ul(e,t={}){let n=[{swatch:t.ramp?{kind:"bar",fill:t.rampCss??Lo,ramp:!0}:{kind:"bar",fill:$n},label:`on ${e.reference.label}'s path`},{swatch:{kind:"bar",fill:t.ramp?St:Fn},label:`off ${e.reference.label}'s path`}];return[e.reference,...e.rows].some(s=>s.gapBp>0)&&n.push({swatch:{kind:"gap",fill:Dn},label:"walked outside the cut"}),t.genes?.crowded?n.push({swatch:{kind:"gene"},label:"genes left out: too many rows to box them in",note:!0}):t.genes&&(n.push({swatch:{kind:"gene"},label:"genes, each row's own annotation"}),t.genes.untracked&&n.push({swatch:{kind:"gene"},label:`no gene track for ${Pn(t.genes.untracked)}`,note:!0}),t.genes.unplaced&&n.push({swatch:{kind:"gene"},label:`no contig coordinates for ${Pn(t.genes.unplaced)}`,note:!0}),t.genes.unread&&n.push({swatch:{kind:"gene"},label:`genes not read for the last ${Pn(t.genes.unread)}`,note:!0})),n}var Kl="#111",jl="#9e9e9e",ir="#c62828";function Vl(e,t,n,s="walk-key"){let o=0,r=e.flatMap((a,i)=>{let l=`${s}-ramp-${i}`,c=!a.note&&a.swatch.kind==="bar"&&a.swatch.ramp?A("linearGradient",{id:l},...fn.map(h=>A("stop",{offset:h.offset,"stop-color":h.color}))):void 0,d=a.note?void 0:a.swatch.kind==="gene"?A("rect",{x:o,y:5,width:18,height:8,fill:"none",stroke:at,"stroke-width":1.5}):A("rect",{x:o,y:a.swatch.kind==="gap"?7:5,width:18,height:a.swatch.kind==="gap"?qn:8,rx:2,fill:c?`url(#${l})`:a.swatch.fill}),f=A("text",{x:a.note?o:o+23,y:13,"font-style":a.note?"italic":void 0,fill:a.note?"#666":void 0},a.label);return o+=(a.note?0:23)+a.label.length*we+16,[c,d,f].filter(h=>h!==void 0)});return{width:o,tree:A("g",{transform:`translate(${t} ${n})`,"font-family":"Helvetica, Arial, sans-serif","font-size":11},...r)}}function lr(e,t){let n=1/t,s=[],o=[],r=()=>{if(o.length!==0){if(o.length===1)s.push(o[0]);else{let i=0,l=0;for(let f of o)f.onReference?i+=f.bp:l+=f.bp;let c=i>=l,d=o.find(f=>f.onReference===c);s.push({start:o[0].start,bp:i+l,onReference:c,referenceStart:c?d.referenceStart:void 0,...d.reversed?{reversed:!0}:{}})}o=[]}},a=0;for(let i of e){if(i.gap||i.bp>=n){r(),a=0,s.push(i);continue}o.push(i),a+=i.bp,a>=n&&(r(),a=0)}return r(),s}function Ql(e,t,n){return A("g",{class:"row-gene","data-testid":"graph-walk-gene"},A("title",{},e.name),...e.exons.map(s=>A("rect",{x:s.x,y:t-n/2,width:s.w,height:n,fill:at,opacity:.35})),A("rect",{x:e.x,y:e.y,width:e.w,height:e.h,fill:"none",stroke:at,"stroke-width":1.5}),e.label&&A("text",{x:e.label.x,y:e.label.y,"font-family":"sans-serif","font-size":e.label.size,"font-weight":600,"text-anchor":"middle",fill:at,stroke:"white","stroke-width":2.5,"paint-order":"stroke"},e.name))}function Zl(e,t,n={}){let s=u=>u*t.scaleX+t.translateX,o=t.rowPx??q,r=t.barPx??Bn,a=u=>u*o*t.scaleY+t.translateY,{origin:i,unit:l,reference:c,rows:d}=e,f=u=>s(i+u),h=n.idPrefix??"walkrow",p=(u,m)=>{let g=a(m);if(g<-r||g>t.height+r)return;let x=lr(u.runs,t.scaleX).flatMap(v=>{let I=sr(v,n.ramp),$=v.gap?Math.min(qn,r):r,W=`${h}-${m}-${v.start}`,D=A("rect",{x:f(v.start),y:g-$/2,width:Math.max(1,v.bp*t.scaleX),height:$,fill:"stops"in I?`url(#${W})`:I.fill});return"stops"in I?[A("linearGradient",{id:W},...I.stops.map((pe,_e)=>A("stop",{offset:_e/(I.stops.length-1),"stop-color":pe}))),D]:[D]}),w=l?or(u.bp,l,t.scaleX).map(v=>A("line",{x1:f(v),x2:f(v),y1:g-r/2,y2:g+r/2,stroke:"white","stroke-width":1})):[],{call:N}=u,S=tr(u,m===0?void 0:c,l,N),R=nr(S,f(u.bp),t.width),M=t.readouts??!0;return A("g",{"data-testid":m===0?"graph-walk-reference":"graph-walk-row"},...x,...w,...ar(n.rowGenes?.get(u.name)??[],f,g,{rowPx:o,barPx:r}).map(v=>Ql(v,g,r)),N&&A("rect",{"data-testid":"graph-walk-call",x:f(N.bp)-1,y:g-r/2-3,width:2,height:r+6,fill:N.spanningReads===0?jl:Kl}),M&&A("text",{x:R.x,y:g+4,"font-family":"sans-serif","font-size":11,fill:N?.agrees===!1?ir:"#333",stroke:R.halo?"white":void 0,"stroke-width":R.halo?3:void 0,"paint-order":"stroke","text-anchor":R.anchor},S))};return A("g",{},...[c,...d].map(p))}var lt=6,dr=260,Jl=11,ec=3,hr=12,tc=1.3,nc="#111",cr=3;function oc(e,t,n){let s=e.pathVisits?.get(n.name)??[],o=[];for(let r of t){let a=r.axis;if(!a)continue;let i=le(r.name).name;for(let l of s){if(l.path!==i)continue;let{start:c,end:d}=it(a,l.start,l.start+n.length);d>0&&c<r.bp&&o.push({row:r.name,start:c,bp:d-c})}}return o}var fr=new WeakMap;function sc(e,t){let n=fr.get(e);if(n||(n=new Map,fr.set(e,n)),n.has(t))return n.get(t);let s=new Map(e.nodes.map(a=>[a.id,a.length])),o=(e.paths??[]).filter(a=>a.name===t),r;if(o.every(a=>a.start!==void 0)){r={ids:[],starts:[],ends:[]};for(let a of[...o].sort((i,l)=>i.start-l.start)){let i=a.start;for(let l of a.nodeIds){let c=s.get(l)??0;r.ids.push(l),r.starts.push(i),r.ends.push(i+c),i+=c}}}return n.set(t,r),r}function rc(e,t,n,s){let o=t.axis,r=o&&sc(e,t.name);if(!o||!r||n<0||n>t.bp)return;let a=o.reversed?o.start-n:o.start+n,i=.5/s,l=o.reversed?{start:o.start-t.bp,end:o.start}:{start:o.start,end:o.start+t.bp},c=Math.max(a-i,l.start),d=Math.min(a+i,l.end),f=0,h=r.starts.length;for(;f<h;){let g=f+h>>1;r.ends[g]<=c?f=g+1:h=g}let p,u=-1,m=!1;for(let g=f;g<r.starts.length&&r.starts[g]<d;g++){let x=r.ends[g]-r.starts[g],w=r.starts[g]<=a&&a<r.ends[g];(x>u||x===u&&w&&!m)&&(u=x,p=r.ids[g],m=w)}return p}function ac(e,t){let n=t.maxHeight??dr,s=t.labelPx??Math.max(...[e.reference,...e.rows].map(p=>p.label.length))*we+16,o=e.rows.length+1,r=Math.max(ec,Math.min(q,Math.floor((n-2*lt)/o))),a=r>=hr,i=r>=14,l=Math.max(2,Math.round(r*.6)),c=Math.max(e.reference.bp,...e.rows.map(p=>p.bp),1),d=a?s:lt,h=Math.max(1,t.width-d-lt)/(c*(i?tc:1));return{scaleX:h,scaleY:1,translateX:d-e.origin*h,translateY:lt+r/2,width:t.width,height:o*r+2*lt,rowPx:r,barPx:l,readouts:i,labelled:a,boxesGenes:Bt(r,l)}}function ic(e,t,n,s){let o=Math.round((s-t.translateY)/t.rowPx),r=[e.reference,...e.rows][o],a=(n-t.translateX)/t.scaleX-e.origin;return r&&o>=0&&a>=0&&a<=r.bp?{index:o,row:r,offset:a}:void 0}function lc(e,t,n){let s=new Map([e.reference,...e.rows].map((r,a)=>[r.name,a])),o=r=>(e.origin+r)*t.scaleX+t.translateX;return A("g",{"data-testid":"graph-walk-marks"},...n.flatMap(r=>{let a=s.get(r.row);if(a===void 0)return[];let i=a*t.rowPx+t.translateY,l=o(r.start),c=Math.max(2,r.bp*t.scaleX),d=f=>A("rect",{x:l,y:f,width:c,height:cr,fill:nc});return[d(i-t.barPx/2-cr-1),d(i+t.barPx/2+1)]}))}function cc(e,t,n=new Set){return A("g",{"font-family":"sans-serif","font-size":Jl,fill:"#333"},...(t.labelled?[e.reference,...e.rows]:[]).map((s,o)=>A("text",{x:6,y:o*t.rowPx+t.translateY+4,"font-weight":n.has(s.name)?600:void 0},s.label)))}function fc(e,t,n){if(t?.size)return e.boxesGenes?n:{untracked:0,unread:0,...n,crowded:!0}}var mr=2,qt=8192;function gr(){return typeof devicePixelRatio>"u"?1:Math.min(devicePixelRatio,mr)}var ur=!1;function pr(e,t,n){let s=Math.round(e*t);return s>qt?(ur||(ur=!0,console.warn(`Canvas ${n} ${s}px exceeds the safe limit ${qt}px and was clamped`)),qt):s}function Xn(e,t,n){let s=gr(),o=pr(t,s,"width"),r=pr(n,s,"height");(e.width!==o||e.height!==r)&&(e.width=o,e.height=r);let a=`${t}px`,i=`${n}px`;e.style.width!==a&&(e.style.width=a),e.style.height!==i&&(e.style.height=i)}var bp=class{constructor(e){this.transform=null,this.batch=null,this.nodeHighlights=new Map,this.highlightedEdge=null,this.highlightFactor=1;let t=e.getContext("2d");if(!t)throw new Error("Canvas 2D context not available");this.canvas=e,this.ctx=t}setErrorHandler(e){}releaseOffscreenTargets(){}resize(e,t){Xn(this.canvas,e,t)}uploadGeometry(e){this.batch=e,this.highlightedEdge=null}setNodeHighlights(e){this.nodeHighlights=e}setEdgeHighlight(e,t){this.highlightedEdge=e,this.highlightFactor=t}updateTransform(e){this.transform=e}render(e){if(!this.transform)return;let n=this.ctx,{width:s,height:o}=n.canvas;e[3]<1&&n.clearRect(0,0,s,o),n.fillStyle=mo([e[0],e[1],e[2]],e[3]),n.fillRect(0,0,s,o);let r=this.batch;r&&(n.lineCap="round",n.lineJoin="round",this.renderEdges(r),this.renderNodes(r),this.renderArrows(r))}renderEdges(e){let t=this.transform,n=this.ctx,s=this.highlightedEdge===null?void 0:e.edgeCurveRuns.get(this.highlightedEdge);for(let{color:o,items:r}of kn(e.edgeCurves,(a,i)=>({color:Xt(s,i)?wt(a.color,this.highlightFactor):a.color,weight:a.thickness,last:Xt(s,i)}))){n.strokeStyle=ne(o),n.lineWidth=r[0].thickness*2*t.dpr,n.beginPath();for(let a of r){let i=a.curves[0];n.moveTo(i.x0*t.scaleX+t.translateX,i.y0*t.scaleY+t.translateY);for(let l of a.curves)n.bezierCurveTo(l.cx0*t.scaleX+t.translateX,l.cy0*t.scaleY+t.translateY,l.cx1*t.scaleX+t.translateX,l.cy1*t.scaleY+t.translateY,l.x1*t.scaleX+t.translateX,l.y1*t.scaleY+t.translateY)}n.stroke()}}renderNodes(e){let t=this.transform,n=this.ctx,s=new Map;for(let[o,r]of this.nodeHighlights){let a=e.nodeStrokeRuns.get(o);if(a)for(let i=a.start;i<a.start+a.count;i++)s.set(i,r)}for(let{color:o,items:r}of kn(e.nodeStrokes,(a,i)=>{let l=s.get(i);return{color:l===void 0?a.color:wt(a.color,l),weight:a.thickness,last:l!==void 0}})){n.strokeStyle=ne(o),n.lineWidth=r[0].thickness*2*t.dpr,n.beginPath();for(let a of r){let i=a.points[0];n.moveTo(i.x*t.scaleX+t.translateX,i.y*t.scaleY+t.translateY);for(let l=1,c=a.points.length;l<c;l++){let d=a.points[l];n.lineTo(d.x*t.scaleX+t.translateX,d.y*t.scaleY+t.translateY)}}n.stroke()}}renderArrows(e){let t=this.transform,n=this.ctx,s=this.highlightedEdge===null?void 0:e.arrowRuns.get(this.highlightedEdge);for(let{color:o,items:r}of kn(e.arrows,(a,i)=>({color:Xt(s,i)?wt(a.color,this.highlightFactor):a.color,weight:0,last:Xt(s,i)}))){n.fillStyle=ne(o),n.beginPath();for(let a of r){let[i,l,c,d]=hc(a,t);n.moveTo(i.x,i.y),n.lineTo(l.x,l.y),n.lineTo(c.x,c.y),n.lineTo(d.x,d.y),n.closePath()}n.fill()}}dispose(){this.batch=null,this.nodeHighlights=new Map,this.highlightedEdge=null}},dc=.25;function hc(e,t){let n=Math.cos(e.angle),s=Math.sin(e.angle),o=e.x*t.scaleX+t.translateX,r=e.y*t.scaleY+t.translateY,a=e.length*t.dpr,i=e.halfWidth*t.dpr,l=o-n*a,c=r-s*a,d=a*(1-dc);return[{x:o,y:r},{x:l-s*i,y:c+n*i},{x:o-n*d,y:r-s*d},{x:l+s*i,y:c-n*i}]}function Xt(e,t){return e!==void 0&&t>=e.start&&t<e.start+e.count}function kn(e,t){let n=new Map,s=new Map;for(let o=0,r=e.length;o<r;o++){let a=e[o],{color:i,weight:l,last:c}=t(a,o),d=c?s:n,f=`${i}:${l}`,h=d.get(f);h?h.items.push(a):d.set(f,{color:i,items:[a]})}return[...n.values(),...s.values()]}function Hn(e,t,n){let s=Math.round(t),o=Math.round(n);return`${e?`${e}:`:""}${Be(s)}-${Be(o)} (${ce(o-s)})`}function uc(e,t){let{field:n}=e.encoding,s=e.range?Hn(e.range.contig,e.range.start,e.range.end):void 0,o=n==="progress"?s:n==="reference"&&t?Hn(t.name,t.start,t.end):void 0,r=e.range?e.range.end-e.range.start:e.bp,a=r-e.bp;return{delta:e.referenceBp===void 0||r===e.referenceBp?"":` ${r>e.referenceBp?"+":"\u2212"}${ce(Math.abs(r-e.referenceBp))}`,outside:a>0?`, ${ce(a)} outside the cut`:"",reversed:e.reversedBp>0?`, ${ce(e.reversedBp)} reversed`:"",shades:n!=="walk",scale:o,hover:o===s?void 0:s}}function pc(e,t,n){let s=e.progress.get(t),o=e.range;if(s===void 0||!o)return;let r=Math.round(o.start+s*(o.end-o.start)-n/2);return`${o.contig}:${Be(r)}-${Be(r+n)}`}function mc(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),s=new Map;t.nodes.forEach(o=>{let r=n.get(o.name);if(o.order>=0&&r&&P(r)){let{refName:a,start:i}=r.stable;(s.get(a)??s.set(a,[]).get(a)).push({bp0:i,bp1:i+o.sequenceLength,x0:o.x,x1:o.x+o.pixelWidth})}});for(let o of s.values())o.sort((r,a)=>r.bp0-a.bp0);return s}function kt(e,t,n=!1){let s=0,o=e.length-1;for(;s<o;){let i=s+o>>1,l=e[i].bp1;(n?l<t:l<=t)?s=i+1:o=i}let r=e[s];if(t<=r.bp0)return r.x0;let a=r.bp1-r.bp0;return a>0?r.x0+(Math.min(t,r.bp1)-r.bp0)/a*(r.x1-r.x0):r.x0}function Ht(e,t,n){let s=kt(e,t),o=kt(e,n,!0);return{x0:Math.min(s,o),x1:Math.max(s,o)}}function gc(e){let t;for(let n of e.values())(!t||n.length>t.length)&&(t=n);return t}var xr=5,xc=10,yc=110,bc=3;function yr(e){return e?"#b0b0b8":"#55555c"}function wc(e){let t=10**Math.floor(Math.log10(e)),n=e/t;return(n<=1?1:n<=2?2:n<=5?5:10)*t}function br(e){let t=[];for(let n of e)t.every(s=>Math.abs(n.at-s.at)>=(n.width+s.width)/2+xc)&&t.push(n);return t.map(({text:n,at:s})=>({text:n,at:s}))}function Mc(e,t,n,s){let o=e[0],r=e.at(-1);if(!o||!r)return;let a=t(o.x0),i=t(r.x1),l=r.bp1-o.bp0;if(i<=a||l<=0)return;let c=wc(l/(i-a)*yc),d=[],f=[];for(let h=Math.ceil(o.bp0/c)*c;h<=r.bp1;h+=c){let p=Math.round(t(kt(e,h)))+.5;if(p>=0&&p<=n){d.push(p);let u=h.toLocaleString("en-US");f.push({text:u,at:p,width:s(u)})}}return{spans:[{x0:a,x1:i}],ticks:d,labels:br(f)}}function vc(e,t,n,s){let o=e.map(u=>({box:u,s0:t(u.x0),s1:t(u.x1)})).filter(({s0:u,s1:m})=>m>=0&&u<=n),r=o[0],a=o.at(-1);if(!r||!a)return;let i=(u,m)=>({text:u,at:m,width:s(u)}),l=(u,m)=>i(u.toLocaleString("en-US"),m),c=[],d=[],f=[],h=[];for(let{box:u,s0:m,s1:g}of o){c.push({x0:m,x1:g}),d.push(Math.round(m)+.5),g-m>=bc&&d.push(Math.round(g)+.5);let x=i(ce(u.bp1-u.bp0),(m+g)/2);x.width<=g-m&&f.push(x),u!==r.box&&h.push(l(u.bp0,m))}let p=[l(r.box.bp0,r.s0),l(a.box.bp1,a.s1)];return{spans:c,ticks:d,labels:br([...p,...f,...h])}}function wr(e,t,n,s,o=!1){return(o?Mc:vc)(e,t,n,s)}function Ec(e,t,n,s,o=!1){let{x:r,width:a,darkMode:i}=n;e.font="10px sans-serif";let l=wr(t,r,a,f=>e.measureText(f).width,o);if(!l)return;let c=yr(i),d=s+.5;e.strokeStyle=c,e.fillStyle=c,e.lineWidth=1,e.textAlign="center",e.textBaseline="top",e.beginPath();for(let{x0:f,x1:h}of l.spans)e.moveTo(Math.max(0,f),d),e.lineTo(Math.min(a,h),d);for(let f of l.ticks)e.moveTo(f,s),e.lineTo(f,s+xr);e.stroke();for(let{text:f,at:h}of l.labels)e.fillText(f,h,s+xr+2)}function Rc(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),s=[];return t.nodes.forEach(o=>{let r=n.get(o.name);o.order>=0&&r&&P(r)&&s.push({node:o.name,bp0:r.stable.start,bp1:r.stable.start+o.sequenceLength,x0:o.x,x1:o.x+o.pixelWidth})}),s}function Sc(e,t,n,s){let o=[];for(let r of e){let a=n(r.x0),i=n(r.x1);i>=0&&a<=s&&o.push({node:r.node,top0:t(r.bp0),top1:t(r.bp1),bottom0:a,bottom1:i})}return o}var Nc=3;function _c(e,t,n,s){if(t<=0||s<0||s>t)return;let o=s/t,r,a=Nc;for(let i of e){let l=i.top0+(i.bottom0-i.top0)*o,c=i.top1+(i.bottom1-i.top1)*o,d=Math.max(0,Math.min(l,c)-n,n-Math.max(l,c));d<a&&(a=d,r=i.node)}return r}function Mr(e,t,n){e.moveTo(t.top0,0),e.lineTo(t.top1,0),e.lineTo(t.bottom1,n),e.lineTo(t.bottom0,n),e.closePath()}function vr(e,t,n){e.moveTo(t.top0,0),e.lineTo(t.bottom0,n),e.moveTo(t.top1,0),e.lineTo(t.bottom1,n)}function Ac(e,t,n,{highlightNode:s,darkMode:o}){if(n<=0||t.length===0)return;let r=o?"255,255,255":"0,0,0";e.beginPath();for(let i of t)Mr(e,i,n);e.fillStyle=`rgba(${r},0.07)`,e.fill(),e.beginPath();for(let i of t)vr(e,i,n);e.strokeStyle=`rgba(${r},0.35)`,e.lineWidth=.5,e.stroke();let a=t.find(i=>i.node===s);a&&(e.beginPath(),Mr(e,a,n),e.fillStyle="rgba(255,192,203,0.5)",e.fill(),e.beginPath(),vr(e,a,n),e.strokeStyle="#ff0000",e.lineWidth=1,e.stroke())}function Lc(e,t){let n=[],s=e.sequenceNew??[];return s.forEach((o,r)=>{let a=t.nodeMap.get(O(o.nodeName)),i=a===void 0?void 0:t.nodes[a],l=r;for(;l<e.path.length&&e.path[l].node!==a;)l+=1;let c=e.path[l]?.y;if(i&&c!==void 0){let d={readId:e.id,y:c,height:e.width,nodeY:i.y},f=h=>Es(i,h);for(let h of o.mismatches){let p=f(h.pos);if(p!==null){if(h.type==="insertion"){let u=r===0&&h.pos===e.firstNodeOffset||r===s.length-1&&h.pos===e.finalNodeCoverLength;n.push({...d,kind:"insertion",x:p,seq:h.seq,softClip:u})}else if(h.type==="deletion"&&h.length!==void 0){let u=f(h.pos+h.length);u!==null&&n.push({...d,kind:"deletion",x0:p,x1:u})}else if(h.type==="substitution"&&h.seq!==void 0){let u=f(h.pos+h.seq.length);u!==null&&n.push({...d,kind:"substitution",x0:p,x1:u,seq:h.seq})}}}}}),n}function Er(e){return e.reads.flatMap(t=>Lc(t,e))}function Gn(e){let t=e.trim().split(/[\s,]+/),n=[],s=0,o=()=>Number(t[s++]);for(;s<t.length;){let r=t[s++];r==="M"||r==="L"?n.push({op:r,x:o(),y:o()}):r==="H"?n.push({op:r,x:o()}):r==="V"?n.push({op:r,y:o()}):r==="Q"?n.push({op:r,x1:o(),y1:o(),x:o(),y:o()}):r==="C"?n.push({op:r,x1:o(),y1:o(),x2:o(),y2:o(),x:o(),y:o()}):r==="Z"&&n.push({op:r})}return n}function Ar(e){let t=1/0,n=-1/0;for(let s of e)"x"in s&&(t=Math.min(t,s.x),n=Math.max(n,s.x)),"x1"in s&&(t=Math.min(t,s.x1),n=Math.max(n,s.x1));return{x0:t,x1:n}}function Rr(e,t,n,s){let o=Gn(e);return{commands:o,color:t,track:s,alpha:n,...Ar(o)}}function Sr(e,t){let{shapes:n}=e,s=i=>t==="haplotype"?i.id:void 0,o=[...n.rectangles,...n.verticalRectangles].filter(i=>i.type===t).map(i=>({color:i.color,track:s(i),alpha:i.alpha??1,x0:i.xStart,x1:i.xEnd+1,y0:i.yStart,y1:i.yEnd+1})),r=Rs(n.curves,t).map(i=>Rr(i.path,i.color,i.alpha??1,s(i))),a=n.corners.filter(i=>i.type===t).map(i=>Rr(i.path,i.color,1,s(i)));return{rects:o,shapes:[...r,...a]}}function Ic(e){let t=[];return e.nodes.forEach(n=>{if(n.order>=0){let s=Gn(Ss(n));t.push({name:n.name,commands:s,...Ar(s)})}}),{bounds:e.bounds,layers:[Sr(e,"haplotype"),Sr(e,"read")],nodes:t,mismatches:Er(e).filter(n=>n.kind!=="insertion"||!n.softClip)}}function Nr(e,t,n,s){let o=0,r=0;for(let a of t)switch(a.op){case"M":o=a.x,r=a.y,e.moveTo(n(o),s(r));break;case"L":o=a.x,r=a.y,e.lineTo(n(o),s(r));break;case"H":o=a.x,e.lineTo(n(o),s(r));break;case"V":r=a.y,e.lineTo(n(o),s(r));break;case"Q":o=a.x,r=a.y,e.quadraticCurveTo(n(a.x1),s(a.y1),n(o),s(r));break;case"C":o=a.x,r=a.y,e.bezierCurveTo(n(a.x1),s(a.y1),n(a.x2),s(a.y2),n(o),s(r));break;case"Z":e.closePath();break}}function _r(e,t,n,s,o){let r=new Map;for(let a of t)if(n(a)){let i=`${s(a)}|${a.alpha}`,l=r.get(i);l?l.push(a):r.set(i,[a])}for(let a of r.values()){e.fillStyle=s(a[0]),e.globalAlpha=a[0].alpha,e.beginPath();for(let i of a)o(i);e.fill()}e.globalAlpha=1}var Cc=12,Tc=.15;function Oc(e){return Math.max(Tc,Math.min(1,e/Cc))}var Pc=.55;function $c(e,t,n){let{x:s,y:o,width:r}=n,a=d=>s(d.x1)>=0&&s(d.x0)<=r,i=d=>d.track!==void 0&&n.tubeColors?.[d.track]||d.color;for(let d of t.layers)_r(e,d.rects,a,i,f=>{let h=s(f.x0),p=o(f.y0);e.rect(h,p,s(f.x1)-h,o(f.y1)-p)}),_r(e,d.shapes,a,i,f=>{Nr(e,f.commands,s,o)});let l=n.darkMode?"#d0d0d0":"#000000",c=n.darkMode?"rgba(40,40,40,0.4)":"rgba(255,255,255,0.4)";e.lineWidth=2*Math.max(.25,Math.min(1,n.yScale));for(let d of t.nodes)if(a(d)){let f=d.name===n.highlightNode;e.beginPath(),Nr(e,d.commands,s,o);let h=f?void 0:n.nodeColors?.get(d.name);e.fillStyle=f?"rgba(255,192,203,0.5)":h??c,e.strokeStyle=f?"#ff0000":l,e.globalAlpha=h?Pc:1,e.fill(),e.globalAlpha=f?1:Oc(s(d.x1)-s(d.x0)),e.stroke(),e.globalAlpha=1}Dc(e,t.mismatches,n)}var Lr=12,Fc=6;function Ir(e){return Lr*e>=Fc}function Wn(e,{x:t,width:n}){let[s,o]=e.kind==="insertion"?[e.x,e.x]:[e.x0,e.x1];return t(o)>=0&&t(s)<=n}function Dc(e,t,n){let{x:s,y:o,yScale:r,darkMode:a}=n;if(!Ir(r)||t.length===0)return;let i=Lr*r;e.fillStyle="grey",e.beginPath();for(let l of t)if(l.kind==="deletion"&&Wn(l,n)){let c=s(l.x0),d=o(l.y);e.rect(c,d,s(l.x1)-c,o(l.y+l.height)-d)}e.fill(),e.font=`${i}px monospace`,e.textBaseline="alphabetic",e.fillStyle=a?"#ffffff":"#000000";for(let l of t)Wn(l,n)&&(l.kind==="substitution"?e.fillText(l.seq,s(l.x0)+1,o(l.y+l.height)):l.kind==="insertion"&&e.fillText("*",s(l.x)-3,o(l.y+l.height)))}function Bc(e,t){let n=[];for(let s of t){let o=e.get(s.refName),r=o?.[0],a=o?.at(-1);if(!o||!r||!a)continue;let i=Math.max(s.start,r.bp0),l=Math.min(s.end,a.bp1);l<=i||n.push({gene:s,...Ht(o,i,l),exons:s.exons.filter(c=>c.end>i&&c.start<l).map(c=>Ht(o,Math.max(c.start,i),Math.min(c.end,l)))})}return n}var Yn=22,qc=4,Wt=8,Xc="11px sans-serif",kc=8;function Hc(e){let t=e.flatMap(o=>[{x:o.x0,step:1},{x:o.x1,step:-1}]).sort((o,r)=>o.x-r.x||o.step-r.step),n=0,s=0;for(let{step:o}of t)n+=o,s=Math.max(s,n);return Math.min(qc,s)}function Wc(e,t,n,s,o=0){let{x:r,width:a,darkMode:i}=n,l=Math.max(1,Math.floor((s-o)/Yn)),c=[],d=i?"#e0e0e6":"#1c1c22";e.font=Xc,e.textAlign="center",e.textBaseline="alphabetic",e.fillStyle=d,e.strokeStyle=d,e.lineWidth=1;let f=t.map(h=>({g:h,s0:r(h.x0),s1:r(h.x1)})).filter(({s0:h,s1:p})=>p>=0&&h<=a).sort((h,p)=>h.s0-p.s0);for(let{g:h,s0:p,s1:u}of f){let m=h.gene.strand>0?" \u2192":h.gene.strand<0?"\u2190 ":"",g=h.gene.strand<0?`${m}${h.gene.name}`:`${h.gene.name}${m}`,x=(Math.max(p,0)+Math.min(u,a))/2,w=e.measureText(g).width/2,N=Math.min(p,x-w),S=Math.max(u,x+w),R=c.findIndex(v=>v+kc<=N);R===-1&&(R=Math.min(c.length,l-1)),c[R]=Math.max(c[R]??-1/0,S);let M=s-R*Yn-Wt/2;e.beginPath(),e.moveTo(p,M+.5),e.lineTo(u,M+.5),e.stroke();for(let v of h.exons){let I=r(v.x0);e.fillRect(I,M-Wt/2,Math.max(1,r(v.x1)-I),Wt)}e.fillText(g,x,M-Wt/2-2)}}var se=12,$r=se+8,Fr=8,Cr=Fr+3,Gc=12;function Yc(e,{colorScheme:t,referenceRamp:n,walks:s}){let o={...Nt(e),referenceRamp:n},r=[];return e.nodes.forEach((a,i)=>{if(P(a)){let l=s?s.map(c=>{let d=c.colors.get(a.id);return d===void 0?Et:ne(d)}):[ne(_t(a,i,t,o))];r.push({node:a.id,bp0:a.stable.start,bp1:a.stable.start+a.length,colors:l,faded:l.includes(Et)})}}),r.sort((a,i)=>a.bp0-i.bp0)}function zn(e,t,n){let s=t*e.scale+e.translateX,o=n*e.scale+e.translateX;return s<o?[s,o]:[o,s]}var Tr=2;function Dr(e,t,n){let s=-t.translateX/t.scale,o=(n-t.translateX)/t.scale,r=Math.min(s,o),a=Math.max(s,o),i=0,l=0;for(let c of e)i+=Math.max(0,Math.min(c.bp1,r)-c.bp0),l+=Math.max(0,c.bp1-Math.max(c.bp0,a));return t.scale>=0?{left:Math.round(i),right:Math.round(l)}:{left:Math.round(l),right:Math.round(i)}}function zc(e,t,n,s){if(s<0||s>se+Tr)return;let o,r=Tr;for(let a of e){let[i,l]=zn(t,a.bp0,a.bp1),c=Math.max(0,i-n,n-l);c<=r&&(r=c,o=a.node)}return o}function Uc(e,t){let n=e?.[Math.floor(e.length/2)];return n?t(n):void 0}function Br(e,t,n,s){let o=e.map(c=>{let[d,f]=zn(t,c.bp0,c.bp1),h=Math.round(d*s);return{colors:c.colors,x0:d,px0:h,px1:Math.max(Math.round(f*s),h+1)}}).filter(c=>c.px1>0&&c.px0<n*s).sort((c,d)=>c.x0-d.x0),r=[],a=-1/0,i=[-1/0,-1/0];for(let{colors:c,px0:d,px1:f}of o){let h=Math.max(d,a);if(f>h){let p=i[0]<h?0:1;i[p]=f,r.push({colors:c,x0:h/s,x1:f/s,tier:p}),a=f}}return(r.length>0?r.at(-1).x1-r[0].x0:0)>=r.length*Gc?r:r.map(({tier:c,...d})=>d)}function Or(e,t,n,s){let o=n>0?t:t-Cr;e.clearRect(o,0,Cr,se);let r=t+n,a=r+n*Fr;e.beginPath(),e.moveTo(r,se/2),e.lineTo(a,0),e.lineTo(a,se),e.closePath(),e.fillStyle=s,e.fill()}function Pr(e,t,n){return Math.round(e*se*n/t)/n}function Kc(e,t,n,{width:s,lit:o,darkMode:r,dpr:a=1}){let i=r?"#ffffff":"#18181c";e.clearRect(0,0,s,$r);for(let c of Br(t,n,s,a)){let{tier:d}=c,f=d!==void 0&&c.colors.length===1,h=f?2:c.colors.length;c.colors.forEach((p,u)=>{let m=f?d:u,g=Pr(m,h,a);e.fillStyle=p,e.fillRect(c.x0,g,c.x1-c.x0,Pr(m+1,h,a)-g)})}let l=Dr(t,n,s);if(l.left>0&&Or(e,0,1,i),l.right>0&&Or(e,s,-1,i),o){let[c,d]=zn(n,o.start,o.end),f=Math.max(d-c,3),h=(c+d)/2-f/2;e.strokeStyle=i,e.lineWidth=1.5,e.strokeRect(h,.75,f,se-1.5),o.anchor&&(e.beginPath(),e.moveTo(h+f/2,se),e.lineTo(o.anchor.x,o.anchor.y),e.lineWidth=1,e.stroke())}}function jc(e,t){let n=new Map(e.nodes.map(o=>[o.id,o])),s=[];return t.nodes.forEach((o,r)=>{let a=n.get(o.name);if(o.order>=0&&a&&P(a)){let i=a.stable.start;s.push({bp0:i,bp1:i+o.sequenceLength,index:r,node:o})}}),s.sort((o,r)=>o.bp0-r.bp0)}function Vc(e,t,n){let s=0,o=e.length-1;for(;s<o;){let r=s+o+1>>1;e[r].bp0<=t?s=r:o=r-1}return[e[s],e[s-1]].find(r=>r&&n.has(r.index)&&r.bp0<=t&&t<=r.bp1)}function Xm(e,t,n){let s=jc(e,t),o=[];for(let r of t.tracks){let a=r.name?n.get(r.name):void 0;if(a?.length){let i=new Map;for(let l of r.path)l.node!==null&&l.y!==void 0&&!i.has(l.node)&&i.set(l.node,l.y);for(let l of a){let c=Vc(s,l.start,i);if(c){let{node:d,bp0:f,bp1:h}=c,p=u=>d.x+(Math.min(u,h)-f)/(h-f)*d.pixelWidth;o.push({x0:p(l.start),x1:p(l.end),y:i.get(c.index),height:r.width})}}}}return o}function Qc(e){return e?"rgba(255,255,255,0.9)":"rgba(0,0,0,0.8)"}function km(e,t,{x:n,y:s,width:o,darkMode:r}){if(t.length!==0){e.fillStyle=Qc(r),e.beginPath();for(let a of t){let i=n(a.x0),l=Math.max(n(a.x1),i+1);if(l>=0&&i<=o){let c=s(a.y);e.rect(i,c,l-i,s(a.y+a.height)-c)}}e.fill()}}function Zc(e,t){return Math.abs(t-e)<=.1*Math.max(e,t)}function Jc(e,t){let n=e.length,s=t.length,o=Array.from({length:n+1},()=>new Array(s+1).fill(0)),r=Array.from({length:n+1},()=>new Array(s+1).fill(!1));for(let i=n-1;i>=0;i--)for(let l=s-1;l>=0;l--){let c=Math.abs(e[i]-t[l])+o[i+1][l+1],d=n-i>s-l?o[i+1][l]:1/0,f=s-l>n-i?o[i][l+1]:1/0;o[i][l]=Math.min(c,d,f),r[i][l]=o[i][l]===c}let a=new Array(n).fill(void 0);for(let i=0,l=0;i<n&&l<s;)r[i][l]?a[i++]=l++:n-i>s-l?i++:l++;return a}function qr(e,t){return e.map((n,s)=>({item:n,i:s})).sort((n,s)=>t(n.item)-t(s.item))}var kr=e=>e.spanningReads!==0;function Xr(e,t){return{...t,agrees:e.complete&&kr(t)?Zc(e.bp,t.bp):void 0}}function ef(e,t){let n=new Map,s=new Set;e.forEach((i,l)=>{let c=t.find(d=>d.haplotype!==void 0&&d.haplotype===i.haplotype);c&&(s.add(c),n.set(l,Xr(i,c)))});let o=t.filter(i=>i.haplotype===void 0),r=qr(e,i=>i.bp),a=[[r.filter(i=>i.item.complete),o.filter(kr)],[r,o]];for(let[i,l]of a){let c=i.filter(f=>!n.has(f.i)),d=qr(l.filter(f=>!s.has(f)),f=>f.bp);Jc(c.map(f=>f.item.bp),d.map(f=>f.item.bp)).forEach((f,h)=>{if(f!==void 0){let p=c[h],u=d[f].item;s.add(u),n.set(p.i,Xr(p.item,u))}})}return n}function cg(e,t){if(!t)return e;let n=new Map,s=new Map;for(let o of e)s.set(o.sample,[...s.get(o.sample)??[],o]);for(let[o,r]of s){let a=t[o];if(a)for(let[i,l]of ef(r,a))n.set(r[i],l)}return e.map(o=>({...o,call:n.get(o)}))}var Hr=Qe(ht(),1),hg=(0,te.createSvgIcon)((0,Hr.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6"}),"Settings");export{te as a,ja as b,pn as c,Za as d,Ja as e,Wi as f,nt as g,zr as h,il as i,Ah as j,qs as k,xl as l,$t as m,yl as n,bl as o,Ys as p,ne as q,Et as r,St as s,ga as t,Nt as u,_t as v,Ma as w,Ks as x,Cn as y,vl as z,Nl as A,Vs as B,Qs as C,_l as D,Ft as E,On as F,Dt as G,Ll as H,Il as I,Cl as J,ue as K,Fl as L,Bl as M,ql as N,Xl as O,Lo as P,Ra as Q,at as R,Bn as S,qn as T,tr as U,Hl as V,Wl as W,Ul as X,ir as Y,Vl as Z,Zl as _,oc as $,rc as aa,ac as ba,ic as ca,lc as da,cc as ea,fc as fa,gr as ga,bp as ha,Sa as ia,Mf as ja,vf as ka,Hn as la,uc as ma,pc as na,Cf as oa,Ho as pa,Tf as qa,Wo as ra,dn as sa,Go as ta,Yo as ua,Ha as va,mc as wa,gc as xa,yr as ya,Ec as za,Rc as Aa,Sc as Ba,_c as Ca,Ac as Da,Ic as Ea,$c as Fa,Ir as Ga,Wn as Ha,Bc as Ia,Yn as Ja,Hc as Ka,Wc as La,$r as Ma,Yc as Na,Dr as Oa,zc as Pa,Uc as Qa,Kc as Ra,Xm as Sa,Qc as Ta,km as Ua,cg as Va,_d as Wa,Ad as Xa,Ya,Ld as Za,Id as _a,hn as $a,un as ab,Hd as bb,Wd as cb,hg as db};
|
|
2
|
+
//# sourceMappingURL=chunk-JE3RBATE.js.map
|