jbrowse-plugin-graphgenomeviewer 7.1.2 → 7.1.3

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.
Files changed (41) hide show
  1. package/dist/chunks/{GraphGenomeView-NJ5XCREB.js → GraphGenomeView-LX7GDEDM.js} +2 -2
  2. package/dist/chunks/{LinearGraphDisplay-TXTKAACH.js → LinearGraphDisplay-QLPIRKPR.js} +2 -2
  3. package/dist/chunks/{WalkTabixSyntenyAdapter-U53JLYVU.js → WalkTabixSyntenyAdapter-GH6NYQTF.js} +2 -2
  4. package/dist/chunks/{WalkTabixSyntenyAdapter-U53JLYVU.js.map → WalkTabixSyntenyAdapter-GH6NYQTF.js.map} +1 -1
  5. package/dist/chunks/{chunk-NWJYLP6Z.js → chunk-6PC7WKLS.js} +2 -2
  6. package/dist/chunks/chunk-BHSELHTZ.js +2 -0
  7. package/dist/chunks/chunk-BHSELHTZ.js.map +7 -0
  8. package/dist/chunks/{chunk-WEGWTC52.js → chunk-LBY7U6OJ.js} +2 -2
  9. package/dist/chunks/{chunk-WEGWTC52.js.map → chunk-LBY7U6OJ.js.map} +4 -4
  10. package/dist/chunks/chunk-LVQUQSAH.js +3 -0
  11. package/dist/chunks/chunk-LVQUQSAH.js.map +7 -0
  12. package/dist/chunks/chunk-PJ43KEV6.js +2 -0
  13. package/dist/chunks/chunk-PJ43KEV6.js.map +7 -0
  14. package/dist/chunks/renderSvg-GGJXJHCS.js +2 -0
  15. package/dist/chunks/renderSvg-GGJXJHCS.js.map +7 -0
  16. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +3 -3
  17. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  18. package/package.json +1 -1
  19. package/src/GbzBaseSyntenyAdapter/configSchema.ts +2 -2
  20. package/src/GetSubgraph.ts +1 -1
  21. package/src/GraphGenomeView/components/Legend.tsx +3 -121
  22. package/src/GraphGenomeView/components/LegendSwatch.tsx +237 -0
  23. package/src/GraphGenomeView/components/PaneSvg.tsx +2 -189
  24. package/src/GraphGenomeView/components/WalkStrip.tsx +1 -1
  25. package/src/GraphTrack/index.ts +2 -2
  26. package/src/LinearGraphDisplay/denseWindow.ts +0 -14
  27. package/src/LinearGraphDisplay/model.ts +2 -1
  28. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.ts +1 -1
  29. package/src/nodeLimitError.ts +12 -0
  30. package/src/version.ts +1 -1
  31. package/dist/chunks/chunk-2MCOY3YG.js +0 -3
  32. package/dist/chunks/chunk-2MCOY3YG.js.map +0 -7
  33. package/dist/chunks/chunk-MURN3JPK.js +0 -2
  34. package/dist/chunks/chunk-MURN3JPK.js.map +0 -7
  35. package/dist/chunks/chunk-WCGVUZWP.js +0 -2
  36. package/dist/chunks/chunk-WCGVUZWP.js.map +0 -7
  37. package/dist/chunks/renderSvg-KSQI5DH6.js +0 -2
  38. package/dist/chunks/renderSvg-KSQI5DH6.js.map +0 -7
  39. /package/dist/chunks/{GraphGenomeView-NJ5XCREB.js.map → GraphGenomeView-LX7GDEDM.js.map} +0 -0
  40. /package/dist/chunks/{LinearGraphDisplay-TXTKAACH.js.map → LinearGraphDisplay-QLPIRKPR.js.map} +0 -0
  41. /package/dist/chunks/{chunk-NWJYLP6Z.js.map → chunk-6PC7WKLS.js.map} +0 -0
@@ -1,7 +1,7 @@
1
- import{a as Tt,b as Oo,c as Do,d as Fe,e as Wo,f as _o}from"./chunks/chunk-E2QPSDQL.js";import{$ as lr,A as Uo,B as at,C as Ko,D as qo,E as Zo,F as Qo,G as er,J as ge,K as tr,L as or,M as rr,N as nr,O as ar,P as ir,Q as vt,R as sr,S as pr,T as Pt,U as cr,V as be,W as De,X as dr,Y as We,Z as ur,_ as mr,a as U,aa as hr,b as tt,ba as gr,c as Eo,ca as br,d as No,da as yr,e as Vo,ea as Bt,f as ot,fa as Br,g as z,ga as st,h as xt,ha as zr,i as Ho,ia as $r,j as jo,ja as Jr,k as Fo,ka as Yr,la as Xr,ma as Ur,na as Kr,oa as qr,p as zo,r as Gt,ra as pt,s as Q,sa as Zr,t as rt,u as Oe,ua as Qr,v as nt,w as $o,wa as tn,x as Jo,xa as on,y as Yo,z as Lt}from"./chunks/chunk-NWJYLP6Z.js";import{c as Ao,d as Co,k as en}from"./chunks/chunk-VJ3SO4CH.js";import{$ as Mr,Ba as Vr,Da as Hr,Ha as it,Ia as jr,Ja as Fr,Ka as Or,Na as Dr,O as Xo,Oa as Wr,Pa as _r,U as Ct,V as fr,X as wr,Y as It,a as je,aa as kr,b as To,c as V,ca as Sr,d as he,da as Rr,ga as xr,ha as Tr,ia as Gr,ka as Lr,la as vr,ma as Pr,na as Ar,oa as Cr,qa as Ir,wa as Et,ya as Er,za as Nr}from"./chunks/chunk-WEGWTC52.js";import"./chunks/chunk-FITPB5X6.js";import{F as Rt,c as Ze,d as te,f as Bo,g as Qe,i as Io,t as et}from"./chunks/chunk-WAMBI7OX.js";import{b as At}from"./chunks/chunk-W6EQLQ6H.js";import{a as rn,b as Nt}from"./chunks/chunk-WCGVUZWP.js";import{j as Ue}from"./chunks/chunk-S75W27NT.js";import{e as wt,g as Mt}from"./chunks/chunk-5O6YRJHL.js";import"./chunks/chunk-N6PQZSAX.js";import{c as D,e as lo,f as Ve,g as ho}from"./chunks/chunk-TUKJRVBS.js";import"./chunks/chunk-T4HOC6O3.js";import{b as So,d as Ro}from"./chunks/chunk-FVK2THE4.js";import{f as Pe,i as W,j as Z,k as He,l as Ke}from"./chunks/chunk-FHZXW7IG.js";import"./chunks/chunk-YBLNN5FU.js";import{a as go,b as Y,d as ie,e as se,f as bo}from"./chunks/chunk-MVVXRZXV.js";import{a as mo}from"./chunks/chunk-ZMOMFU2B.js";import{a as vo,f as Po}from"./chunks/chunk-DVCZ3BOC.js";import{c as wo,d as Mo,e as ko}from"./chunks/chunk-5OI6LO4I.js";import{a as xo}from"./chunks/chunk-7WIBGKBU.js";import{a as kt}from"./chunks/chunk-OGQ6OQDN.js";import{a as A,b as K,c as yo,e as q,f as fo,g as T}from"./chunks/chunk-NDRLCGPC.js";import{i as le,j as L,k as so,l as po,n as co}from"./chunks/chunk-TENPGIPX.js";import{b as pe}from"./chunks/chunk-YU7T5WOQ.js";import{I as qe,i as Go,l as Lo}from"./chunks/chunk-UGCNPRKC.js";import{a as uo,b as N,d as St}from"./chunks/chunk-JMBDTNUR.js";var ct=JBrowseExports["@jbrowse/core/Plugin"];var nn=ct&&ct.__esModule?ct.default:ct;var dt=U([N("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),N("circle",{cx:"14.8",cy:"18",r:"2"},"1"),N("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var ut=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"];var ce=ut&&ut.__esModule?ut.default:ut;var fa=Y("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:W("/path/to/graph.gbz.db"),haplotypeIndexLocation:W(""),readsLocation:W(""),readsIndex:Z("GbzBaseReadsIndex"),samplesTsvLocation:W(""),subgraphSnarls:{type:"stringEnum",model:T.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:Ue.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:Ue.context,advanced:!0},nodeLimit:{type:"number",defaultValue:Ue.limit,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>{let{uri:t,baseUri:o,reads:r}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:o}}:{},...typeof r=="string"?{readsLocation:{uri:r,baseUri:o},...wa(r,o)}:{}}}});function wa(e,t){let{name:o,query:r}=Mo(e);return o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi${r}`,baseUri:t}}}:{}}var an=fa;function Vt(e){e.addAdapterType(()=>new ce({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:an,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-LRECKL74.js").then(t=>t.default)}))}var ye=JBrowseExports["@jbrowse/core/pluggableElementTypes"],de=e=>ye!=null&&e in Object(ye)?ye[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/pluggableElementTypes' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var sn=de("AddTrackWorkflowType");var pn=de("BaseDisplay");var cn=de("DisplayType");var Ae=de("RpcMethodType"),dn=de("RpcMethodTypeWithRenameRegion");var un=de("TrackType");var mn=de("createBaseTrackConfig"),ln=de("createBaseTrackModel");var Yi=ye&&ye.__esModule?ye.default:ye;var fe=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"],Ma=e=>fe!=null&&e in Object(fe)?fe[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/data_adapters/dataAdapterCache' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var hn=Ma("getAdapter"),Ui=fe&&fe.__esModule?fe.default:fe;async function Ce(e,{sessionId:t,adapterConfig:o},r){let{dataAdapter:n}=await hn(e,t,o);return{adapter:typeof n[r]=="function"?n:void 0,name:n.constructor.name}}var _e=class extends Ae{constructor(){super(...arguments);this.name="GetGraphHaplotypes"}async execute(o){let{adapter:r}=await Ce(this.pluginManager,o,"getHaplotypeNames");return r?.getHaplotypeNames({signal:o.signal})}};function gn(e){return typeof e.reads=="string"&&e.reads!==""||wo(e.readsLocation)}var ze=class extends Ae{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(o){let{nodeNames:r,signal:n}=o,{adapter:a}=await Ce(this.pluginManager,o,"getReads");return a?a.getReads(r,{signal:n}):{records:[],total:0}}};var we=JBrowseExports["@jbrowse/core/util/librpc"],ka=e=>we!=null&&e in Object(we)?we[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/util/librpc' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Ht=ka("rpcResultWithArrayBuffers");var ps=we&&we.__esModule?we.default:we;var $e=class extends dn{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(o){let{region:r,opts:n,signal:a}=o,{adapter:i,name:p}=await Ce(this.pluginManager,o,"getSubgraph");if(i){let s=await i.getSubgraph(r,{...n,signal:a});if(typeof s!="string")return Ht(s);let c=s?Mt(s):void 0;return c?Ht(c):s}return console.warn(`[GetSubgraph] ${p} does not implement getSubgraph`),""}};var Sa=pe(()=>import("./chunks/AddTrackWorkflow-RPH4ZFSX.js"));function jt(e){e.addAddTrackWorkflowType(()=>new sn({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Sa,stateModel:T.model({})}))}var Je=class extends Ae{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(o){let{graph:r,options:n,statusCallback:a}=o;return a?.("Computing layout"),Co({graph:r,options:n})}};var mt=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"];var bn=mt&&mt.__esModule?mt.default:mt;var Me=JBrowseExports["@jbrowse/core/util/withLaunchInput"],Ra=e=>Me!=null&&e in Object(Me)?Me[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/util/withLaunchInput' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),yn=Ra("defineLaunchKeys");var Rs=Me&&Me.__esModule?Me.default:Me;var ke=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"],xa=e=>ke!=null&&e in Object(ke)?ke[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/pluggableElementTypes/models' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var fn=xa("BaseViewModel");var Ts=ke&&ke.__esModule?ke.default:ke;var Be=["off","nodes","everything"];var wn=U(N("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy");var Mn=U(N("path",{d:"M8.4 18.2c.38.5.6 1.12.6 1.8 0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3c.44 0 .85.09 1.23.26l1.41-1.77c-.92-1.03-1.29-2.39-1.09-3.69l-2.03-.68c-.54.83-1.46 1.38-2.52 1.38-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3c0 .07 0 .14-.01.21l2.03.68c.64-1.21 1.82-2.09 3.22-2.32V5.91C9.96 5.57 9 4.4 9 3c0-1.66 1.34-3 3-3s3 1.34 3 3c0 1.4-.96 2.57-2.25 2.91v2.16c1.4.23 2.58 1.11 3.22 2.32L18 9.71V9.5c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3c-1.06 0-1.98-.55-2.52-1.37l-2.03.68c.2 1.29-.16 2.65-1.09 3.69l1.41 1.77Q17.34 17 18 17c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3c0-.68.22-1.3.6-1.8l-1.41-1.77c-1.35.75-3.01.76-4.37 0z"}),"Hub");var kn=U(N("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10c1.38 0 2.5-1.12 2.5-2.5 0-.61-.23-1.2-.64-1.67-.08-.1-.13-.21-.13-.33 0-.28.22-.5.5-.5H16c3.31 0 6-2.69 6-6 0-4.96-4.49-9-10-9m5.5 11c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5m-3-4c-.83 0-1.5-.67-1.5-1.5S13.67 6 14.5 6s1.5.67 1.5 1.5S15.33 9 14.5 9M5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S7.33 13 6.5 13 5 12.33 5 11.5m6-4c0 .83-.67 1.5-1.5 1.5S8 8.33 8 7.5 8.67 6 9.5 6s1.5.67 1.5 1.5"}),"Palette");var Sn=U([N("circle",{cx:"12",cy:"12",r:"3.2"},"0"),N("path",{d:"M9 2 7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5"},"1")],"PhotoCamera");function Ot(e,t){if(!(t>0)||e.paths?.length||!e.nodes.some(R=>D(R)))return e;let{nodes:o,edges:r}=Ta(e),n=new Map(o.map((R,v)=>[R.id,v])),a=r.map(Tn),i=La(o.length,r,a,n),p=Pa(o,r,a,n),s=Aa(p),c=new Uint8Array(o.length),h=[];for(let R of s.values())if(Ca(R,o,i,p)>=t){for(let v of R)c[v]=1;D(o[R[0]])||h.push(R)}let{dist:w,pred:m}=Ea(o,i);for(let R of h)for(let[v,C]of Ba(R,o,i,p)){let y=Ia(v,C,i,p,w,o);for(;y!==void 0&&!c[y];)c[y]=1,y=D(o[y])?void 0:m[y]}let f=r.filter((R,v)=>{let C=n.get(R.from),y=n.get(R.to);if(C===void 0||y===void 0)return!1;let b=va(o[C],a[v].from,o[y],a[v].to);return c[C]&&c[y]&&!(b>0&&b<t)});return Va({...e,nodes:o,edges:f},c,p)}function Ta({nodes:e,edges:t}){let o=new Set(e.filter(n=>n.stable?.strand==="-").map(n=>n.id));if(o.size===0)return{nodes:e,edges:t};let r=(n,a)=>{let i=a??et(n);return o.has(n)?Ga(i):i};return{nodes:e.map(n=>o.has(n.id)?{...n,stable:{...n.stable,strand:"+"}}:n),edges:t.map(n=>o.has(n.from)||o.has(n.to)?{...n,fromStrand:r(n.from,n.fromStrand),toStrand:r(n.to,n.toStrand)}:n)}}function Ga(e){return e==="+"?"-":"+"}function Tn(e){return{from:(e.fromStrand??et(e.from))==="+"?"e":"s",to:(e.toStrand??et(e.to))==="+"?"s":"e"}}function La(e,t,o,r){let n=Array.from({length:e},()=>[]);return t.forEach((a,i)=>{let p=r.get(a.from),s=r.get(a.to);if(p!==void 0&&s!==void 0){let{from:c,to:h}=o[i];n[p].push({other:s,side:c,otherSide:h}),n[s].push({other:p,side:h,otherSide:c})}}),n}function Gn(e,t){let o=e.stable,r=t.stable;return o&&r?.refName===o.refName&&r.rank===o.rank?[o,r]:void 0}function Dt(e,t,o,r){let n=Gn(e,o);if(!n)return!1;let[a,i]=n;return t==="e"&&r==="s"&&a.start+e.length===i.start||r==="e"&&t==="s"&&i.start+o.length===a.start}function va(e,t,o,r){let n=Gn(e,o);if(!n||Dt(e,t,o,r))return 0;let[a,i]=n;return Math.abs(Ft(i,o,r)-Ft(a,e,t))}function Ft({start:e},t,o){return o==="s"?e:e+t.length}function Pa(e,t,o,r){let n=e.map((i,p)=>p),a=i=>{for(;n[i]!==i;)n[i]=n[n[i]],i=n[i];return i};return t.forEach((i,p)=>{let s=r.get(i.from),c=r.get(i.to);s!==void 0&&c!==void 0&&Dt(e[s],o[p].from,e[c],o[p].to)&&(n[a(s)]=a(c))}),e.map((i,p)=>a(p))}function Aa(e){let t=new Map;return e.forEach((o,r)=>{let n=t.get(o);n?n.push(r):t.set(o,[r])}),t}function Ca(e,t,o,r){if(D(t[e[0]]))return 1/0;let n=0,a,i=1/0,p=-1/0,s=!0;for(let c of e){n+=t[c].length;for(let{other:h,otherSide:w}of o[c]){let m=t[h];if(r[h]!==r[c]&&D(m)){a??=m.stable.refName,s&&=m.stable.refName===a;let f=Ft(m.stable,m,w);i=Math.min(i,f),p=Math.max(p,f)}}}return s&&p>i?Math.max(n,p-i):n}function Ba(e,t,o,r){let n=c=>t[c].stable?.start??0,a=c=>n(c)+t[c].length,i=e[0],p=e[0];for(let c of e)n(c)<n(i)&&(i=c),a(c)>a(p)&&(p=c);let s=[];for(let c of new Set([i,p]))for(let h of["s","e"])o[c].some(w=>w.side===h&&r[w.other]===r[c])||s.push([c,h]);return s}function Ia(e,t,o,r,n,a){let i;for(let p of o[e]){let s=p.other;p.side===t&&r[s]!==r[e]&&Number.isFinite(n[s])&&(i===void 0||n[s]<n[i]||n[s]===n[i]&&a[s].name<a[i].name)&&(i=s)}return i}function Ea(e,t){let o=new Float64Array(e.length).fill(1/0),r=new Int32Array(e.length).fill(-1),n=new Na(([a,i],[p,s])=>a-p||Rn(e[i].name,e[s].name));e.forEach((a,i)=>{D(a)&&(o[i]=0,n.push([0,i]))});for(let a=n.pop();a!==void 0;a=n.pop()){let[i,p]=a;if(!(i>o[p]))for(let{other:s}of t[p]){if(D(e[s]))continue;let c=i+e[s].length;c<o[s]?(o[s]=c,r[s]=p,n.push([c,s])):c===o[s]&&Rn(e[p].name,e[r[s]].name)<0&&(r[s]=p)}}return{dist:o,pred:Array.from(r,a=>a<0?void 0:a)}}function Rn(e,t){return e<t?-1:e>t?1:0}var Na=class{constructor(e){this.order=e,this.items=[]}push(e){let{items:t}=this;t.push(e);let o=t.length-1;for(;o>0;){let r=o-1>>1;if(this.order(t[o],t[r])>=0)break;[t[o],t[r]]=[t[r],t[o]],o=r}}pop(){let{items:e}=this,t=e[0],o=e.pop();if(e.length>0&&o!==void 0){e[0]=o;let r=0;for(;;){let n=2*r+1,a=n+1,i=r;if(n<e.length&&this.order(e[n],e[i])<0&&(i=n),a<e.length&&this.order(e[a],e[i])<0&&(i=a),i===r)break;[e[r],e[i]]=[e[i],e[r]],r=i}}return t}};function Va(e,t,o){let{nodes:r,edges:n}=e,a=new Map(r.map((y,b)=>[y.id,b])),i=n.map(Tn),p=n.map((y,b)=>[{i:a.get(y.from),side:i[b].from},{i:a.get(y.to),side:i[b].to}]),s=new Map,c=(y,b)=>`${y}${b}`;for(let y of p)for(let{i:b,side:P}of y)s.set(c(b,P),(s.get(c(b,P))??0)+1);let h=new Map,w=new Set,m=new Set;p.forEach(([y,b],P)=>{if(y.i!==b.i&&o[y.i]===o[b.i]&&Dt(r[y.i],y.side,r[b.i],b.side)&&s.get(c(y.i,y.side))===1&&s.get(c(b.i,b.side))===1){let[E,g]=r[y.i].stable.start<r[b.i].stable.start?[y,b]:[b,y];h.set(E.i,{j:g.i,out:E.side,in:g.side}),w.add(g.i),m.add(P)}});let f=r.map((y,b)=>b),R=new Map,v=new Map;r.forEach((y,b)=>{if(!t[b]||w.has(b)||!h.has(b))return;let P=[b],E=xn(h.get(b).out);R.set(c(b,E),"s");for(let g=h.get(b);g;g=h.get(g.j))P.push(g.j),E=g.in;R.set(c(P.at(-1),xn(E)),"e");for(let g of P)f[g]=b;v.set(b,Ha(P.map(g=>r[g])))});let C=({i:y,side:b})=>({id:r[f[y]].id,side:f[y]===y&&!v.has(y)?b:R.get(c(y,b))});return{...e,nodes:r.flatMap((y,b)=>!t[b]||f[b]!==b?[]:[v.get(b)??y]),edges:n.flatMap((y,b)=>{if(m.has(b))return[];let[P,E]=p[b];if(!v.has(f[P.i])&&!v.has(f[E.i]))return[y];let g=C(P),B=C(E);return[{...y,from:g.id,to:B.id,fromStrand:g.side==="e"?"+":"-",toStrand:B.side==="s"?"+":"-"}]})}}function xn(e){return e==="s"?"e":"s"}function Ha(e){let{samples:t,...o}=e[0],r=e.reduce((i,p)=>i+p.length,0),n=r>0?e.reduce((i,p)=>i+p.depth*p.length,0)/r:o.depth,a=e.every(i=>i.samples)?e.reduce((i,p)=>i.filter(s=>p.samples.includes(s)),t):void 0;return a?{...o,length:r,depth:n,samples:a}:{...o,length:r,depth:n}}function Ln(e,t){let o=new Set(e.nodes.filter(s=>D(s)&&Ve(s,t)).map(s=>s.id)),r=e.paths??[];if(o.size===0||r.length===0)return e;let n=r.map(s=>{let c=-1,h=-1;return s.nodeIds.forEach((w,m)=>{o.has(w)&&(c<0&&(c=m),h=m)}),c<0?void 0:{first:c,last:h}});if(n.every((s,c)=>s?.first===0&&s.last===r[c].nodeIds.length-1))return e;let a=new Set,i=[],p=new Map;return r.forEach((s,c)=>{let h=n[c];if(h){let w=s.nodeIds.slice(h.first,h.last+1);for(let m of w)a.add(m);i.push({...s,nodeIds:w}),p.set(s.name,{first:h.first,nodeIds:w})}}),{...e,nodes:e.nodes.filter(s=>a.has(s.id)),edges:e.edges.filter(s=>a.has(s.from)&&a.has(s.to)),paths:i,pathVisits:e.pathVisits&&ja(e.pathVisits,r,n,new Map(e.nodes.map(s=>[s.id,s.name]))),anchorPaths:Io(e,p)}}function ja(e,t,o,r){let n=e.replay(),a=new Ze;return t.forEach((i,p)=>{let s=e.pathIndex(te(i.name).name),c=o[p];i.nodeIds.forEach((h,w)=>{let m=r.get(h)??h,f=n(e.slot(m),s);f>=0&&c&&w>=c.first&&w<=c.last&&a.add(m,e.paths[s],e.samples[s],e.start[f],e.reversed[f]===1)})}),a.build()}function vn(e,t,o){let r=e.nodes.map(n=>{if(!D(n))return n;let a=n.stable.start,i=a+n.length,[p,s]=Ve(n,t)?[Math.max(a,t.start),Math.min(i,t.end)]:i<=t.start?[Math.max(a,i-o),i]:[a,Math.min(i,a+o)];return p===a&&s===i?n:{...n,length:s-p,stable:{...n.stable,start:p}}});return r.some((n,a)=>n!==e.nodes[a])?{...e,nodes:r}:e}function Wt(e,t=()=>"",o=!0){let r=e.paths??[],n=tt(e),a=new Map;r.forEach((m,f)=>{let R=te(m.name).name,v=n[f].map(y=>`${y.node.id}${y.strand}`).join(","),C=a.get(R);C?C.push(v):a.set(R,[v])});let i=new Map,p=new Map;for(let[m,f]of a){let R=m===e.referencePath?`\0${m}`:f.join("|"),v=t(m),C=i.get(R)??i.size;i.set(R,C);let y=`${R} ${v}`,b=p.get(y);b?b.walks.push(m):p.set(y,{rank:C,group:v,walks:[m]})}if(o&&p.size===a.size)return e;let s=[...p.values()].sort((m,f)=>m.rank-f.rank||m.group.localeCompare(f.group)),c=new Map;for(let m of r){let f=te(m.name).name,R=c.get(f);R?R.push(m):c.set(f,[m])}if(!o)return{...e,paths:s.flatMap(({walks:m})=>m.flatMap(f=>c.get(f)))};let h=s.flatMap(({walks:m})=>c.get(m[0]).map(f=>m.length>1?{...f,members:m}:f)),w=new Set(s.map(m=>m.walks[0]));return{...e,paths:h,anchorPaths:e.anchorPaths?.filter(m=>w.has(m.name)),pathVisits:e.pathVisits?.filter(m=>w.has(m))}}function Fa(e,t){let o=[],r=()=>({a:-1/0,b:1/0,detour:[],bp:0}),n=[r()];for(let{node:a,strand:i}of t){let p=n.at(-1),s=o.at(-1);if(D(a)){let c=a.stable.start,h=c+a.length,w=i!==(a.stable.strand??"+"),m=s!==void 0&&p.detour.length===0;m&&!s.inverted&&!w&&s.end===c?s.end=h:m&&s.inverted&&w&&s.start===h?s.start=c:(o.push({start:c,end:h,inverted:w}),n.push(r()))}else p.detour.push({node:a,strand:i}),p.bp+=a.length}return o.forEach((a,i)=>{n[i].b=a.start,n[i+1].a=a.end}),{path:e,runs:o,gaps:n}}function _t(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function Pn(e,t,o){let r=0,n=e.length;for(;r<n;){let a=r+n>>1;e[a]<=t?r=a+1:n=a}return r<e.length&&e[r]<o}function Oa(e){let t=new Map;for(let o=1;o<e.length;o++){let r=e[o-1],n=e[o],a=r.stable.start+r.length;a!==n.stable.start&&(t.set(a,"reference-gap"),t.set(n.stable.start,"reference-gap"))}return t}function Da(e,t,o){let r=(a,i)=>{Number.isFinite(a)&&!o.has(a)&&o.set(a,i)};for(let{runs:a,gaps:i}of e){let p=a[0],s=a.at(-1);p&&s&&(r(p.start,"walk-end"),r(s.end,"walk-end"));for(let c of a)c.inverted&&c.end-c.start>=t&&(r(c.start,"inversion"),r(c.end,"inversion"));for(let c of i)c.b<c.a?(r(c.a,"backward"),r(c.b,"backward")):_t(c,t)||(r(c.a,"variant"),r(c.b,"variant"))}let n=e.flatMap(({runs:a,gaps:i})=>[...i.filter(p=>_t(p,t)).map(p=>[p.a,p.b]),...a.filter(p=>p.inverted&&p.end-p.start<t).map(p=>[p.start,p.end])]);for(let a=!0;a;){a=!1;let i=[...o.keys()].sort((p,s)=>p-s);for(let[p,s]of n)Pn(i,p,s)&&(a||=!o.has(p)||!o.has(s),r(p,"overlap"),r(s,"overlap"))}return o}function Wa(e,t){let o=[],r=[],n=()=>{let a=r[0],i=r.at(-1);if(a&&i){let p=a.stable.start,s=i.stable.start+i.length,c=`${p}-${s}`;o.push({node:{id:`${c}+`,name:c,length:s-p,depth:0,stable:{refName:a.stable.refName,start:p,rank:0,strand:"+"}},members:r})}r=[]};for(let a of e)t.has(a.stable.start)&&n(),r.push(a);return n(),o}function An(e,t){let o=e.nodes.filter(D).sort((g,B)=>g.stable.start-B.stable.start),r=e.paths??[];if(o.length===0||r.length===0)return;let n=tt(e),a=r.map((g,B)=>Fa(g,n[B])),i=Da(a,t,Oa(o)),p=[...i.keys()].sort((g,B)=>g-B),s=Wa(o,i),c=s.map(g=>g.node.stable.start),h=g=>{let B=0,O=c.length-1;for(;B<O;){let H=B+O+1>>1;c[H]<=g?B=H:O=H-1}return B},w=new Map,m=new Map;for(let g of s){w.set(g.node.id,g.members.map(B=>B.id));for(let B of g.members)m.set(B.id,g.node.id)}let f=new Map,R=g=>{let B=`${g.a} ${g.b} ${g.detour.map(H=>H.node.id+H.strand).join(",")}`,O=f.get(B);if(!O){let H=`r${f.size}`;O={id:`${H}+`,name:H,length:g.bp,depth:0,stable:{refName:o[0].stable.refName,start:Number.isFinite(g.a)?g.a:g.b,rank:1,strand:"+"}},f.set(B,O),w.set(O.id,g.detour.map(ee=>ee.node.id));for(let ee of g.detour)m.has(ee.node.id)||m.set(ee.node.id,O.id)}return O},v=new Map,C=[],y=new Ze,b=new Map,P=new Map;for(let{path:g,runs:B,gaps:O}of a){let H=[],ee=[],re=!1,Ge=(k,$)=>{let j=H.at(-1);re&&j?.node===k&&j.strand===$||H.push({node:k,strand:$}),re=!0},Ie=k=>{re=!1,k.detour.length>0&&(Ge(R(k),"+"),re=!1)},Ye=k=>{(k.bp>0||k.b>k.a)&&ee.push({start:k.a,end:k.b,bp:k.bp});let $=s[h(k.b>k.a?k.a:k.a-1)];for(let j of k.detour)m.has(j.node.id)||(m.set(j.node.id,$.node.id),w.get($.node.id).push(j.node.id))};B.forEach((k,$)=>{let j=O[$];_t(j,t)&&!Pn(p,j.a,j.b)?Ye(j):Ie(j);let d=h(k.start),u=h(k.end-1),l=k.end-k.start<t;if(k.inverted&&!l){re=!1;for(let M=u;M>=d;M--)Ge(s[M].node,"-");re=!1}else{k.inverted&&ee.push({start:k.start,end:k.end,bp:k.end-k.start,inverted:!0});for(let M=d;M<=u;M++)Ge(s[M].node,"+")}}),Ie(O.at(-1));let Ee=te(g.name).name,Ne=0;H.forEach(({node:k,strand:$},j)=>{P.set(k.id,(P.get(k.id)??0)+1),y.add(k.name,Ee,g.sample??Ee,Ne,$==="-"),Ne+=k.length;let d=H[j+1];if(d){let u=`${k.id}${$} ${d.node.id}${d.strand}`,l=b.get(u);l?l.pathIds.push(g.name):b.set(u,{from:k.id,to:d.node.id,fromStrand:$,toStrand:d.strand,pathIds:[g.name]})}}),C.push({...g,nodeIds:H.map(k=>k.node.id)}),v.set(g.name,ee)}let E=[...s.map(g=>g.node),...f.values()].filter(g=>P.has(g.id)).map(g=>({...g,depth:P.get(g.id)}));return{graph:{...e,nodes:E,edges:[...b.values()],paths:C,pathVisits:y.build(),reads:void 0},members:w,coarseOf:m,deviations:v,cuts:i}}function Cn(e,t,o){let r=Math.min(48,t,o);return Math.max(0,r-(e+t))-Math.max(0,e-(o-r))}function Bn(e,t,o){return{translateX:t.translateX+Cn(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,o.width),translateY:t.translateY+Cn(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,o.height)}}function In(e,t,o){let r=e.minX*t.scaleX+t.translateX,n=e.minY*t.scaleY+t.translateY;return r<o.width&&r+e.w*t.scaleX>0&&n<o.height&&n+e.h*t.scaleY>0}var _a=.05,lt=9;function za(e,t){let{minY:o,maxY:r}=e.layout.bounds,n=r-o;return e.columns&&n>0?Math.max(_a,Math.min(1,t/n)):1}function ht(e,t){let{scaleX:o,translateX:r,translateY:n}=t,a=t.scaleY*za(e,t.usableHeight),i=s=>(s-e.yOffset)*a+n,{columns:p}=e;if(p){let s=xr(p,c=>c*o+r);return{x:c=>Tr(s,c),y:i,yScale:a}}return{x:s=>s*o+r,y:i,yScale:a}}function zt(e,{x:t,y:o},r,n){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-lt)<=r&&r<=t(i.x+i.pixelWidth+lt)&&o(i.y-lt)<=n&&n<=o(i.y+i.contentHeight+lt)&&(a=i.name)}),a}var En=20,$a=.05,Nn=6;function Ja(e){let t=e.length-Nn;return t>0?`${e.slice(0,Nn).join(", ")} and ${t} more`:e.join(", ")}function Ya(e){if(e.kind==="deletion")return`deletion of ${Rt(e.length)}`;if(e.kind==="substitution")return`substitution ${e.seq}`;let t=e.seq??"",o=t.length>En?`${t.slice(0,En)}\u2026`:t;return`insertion of ${Rt(t.length)} ${o}`.trim()}function Xa(e,t,o){let r={substitution:!1,insertion:!1,deletion:!1};if(e&&t&&vr(t.yScale)){let n=3;for(let a of e.mismatches)if(!r[a.kind]&&Pr(a,{x:t.x,width:o})&&(r[a.kind]=!0,--n===0))break}return r}var Vn=Zr.views(e=>({get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?ht(t,{...e.screenTransform,usableHeight:e.usableHeight}):void 0},get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX&&!e.layoutResult?.tubeMapPanels?It(t):void 0},get tubeMapPanelRulerBoxes(){let{layoutResult:t}=e,o=t?.tubeMapPanels?.at(-1);return o&&t?.referenceAxis&&!e.hostPlacesX?It(wr(o.result.tubeMap)):void 0},get connectorZoneBottom(){let t=e.tubeMapPicture,o=this.tubeMapFrame;return t&&o?o.y(t.bounds.minY)-2:0},get tubeMapConnectors(){let t=e.tubeMapConnectedBoxes,o=this.tubeMapFrame,r=t&&o?e.hostBpFrame:void 0;return t&&o&&r?Mr(t,n=>n*r.scale+r.translateX,o.x,e.paneWidth):[]},get tubeMapPanelPictures(){let t=e.layoutResult?.tubeMapPanels;if(!t)return;let{field:o}=e.facetSetting;return t.map(r=>{let n=r.result.tubeMap,{graph:a,coarse:i}=n;return{panel:r,label:r.label??(o==="walk"?e.walkLabel(r.paths[0]):r.key),picture:Gr(n),tubeColors:e.tubeColorsOf(a,n.pathColors),nodeColors:e.tubeMapNodeColors?Br(a,e.effectiveColorScheme,e.referenceRamp):void 0,deviations:i?Rr(n,i.deviations):[]}})}})).views(e=>({get hoveredMember(){let t=e.hoveredNode,o=t===null?void 0:e.hoverDrawing?.members.get(t);if(!o)return t;let r=e.hoveredAt,n=e.hoveredPanel,a=n===null?void 0:this.tubeMapPanelViews?.[n],i;return a?.panel.result.tubeMap.layout.nodes.forEach(s=>{s.name===t&&(i=s)}),(r&&a&&i?Fr(o,s=>e.nodeSpan(s),a.frame.x(i.x),a.frame.x(i.x+i.pixelWidth),r.x):void 0)??o[0]},get tubeMapPanelHover(){let t=e.hoveredNode,o=e.tubeMapPanelPictures;if(t===null||!o)return;let r=this.hoveredMember??t;return o.map(({panel:n})=>{let a=n.result.tubeMap,i=jr(a,r);return i?{box:i,...Or(a.graph,i)}:void 0})},get tubeMapPanelTubeColors(){return e.tubeMapPanelPictures?.map(({panel:t,tubeColors:o})=>{let{graph:r}=t.result.tubeMap;return e.fadeUnhovered(o,r.paths??[],r.referencePath)})},get tubeMapPanelViews(){let t=e.tubeMapPanelPictures,o=this.tubeMapPanelTubeColors,r=e.layoutResult;if(!t||!o||!r)return;let n=t.length*Et,a=t.reduce((c,h)=>c+h.panel.height,0),i=e.usableHeight-n,p=e.scaleY*(r.referenceAxis&&a>0?Math.max($a,Math.min(1,i/a)):1),s=e.translateY;return t.map((c,h)=>{let{panel:w}=c,m=w.result.extent?.minY??0,f=s,R=f+Et;return s=R+w.height*p,{...c,tubeColors:o[h],frame:ht(w.result.tubeMap,{scaleX:e.scaleX,translateX:e.translateX,scaleY:p,translateY:R-m*p,usableHeight:1/0}),titleTop:f,top:R,bottom:s}})},tubeMapPanelAt(t){let o=this.tubeMapPanelViews?.findIndex(r=>r.titleTop<=t&&t<=r.bottom)??-1;return o<0?null:o}})).views(e=>({paintHover(t,o){let r=e.tubeMapPicture,n=e.tubeMapFrame,a=e.hoverLayerNode;if(r&&n){let{ctx:i,canvas:p}=t,s=fr();i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,p.width,p.height),i.setTransform(s,0,0,s,0,0);let c=e.tubeMapPanelViews;c?Dr(i,c,e.tubeMapPanelHover,{width:e.paneWidth,lit:a!==null}):Lr(i,r,{...n,width:e.paneWidth,highlightNode:a}),Sr(i,e.tubeMapConnectors,e.connectorZoneBottom,a),i.setTransform(1,0,0,1,0,0)}else t.uploadGeometry(o),t.setNodeHighlights(a===null?new Map:new Map([[a,vt]])),t.setEdgeHighlight(e.hoveredEdge,vt),t.updateTransform(e.paintTransform),t.renderHighlights()}})).views(e=>{let t=To(()=>{let o=e.layoutResult,r=o?.tubeMapPanels!==void 0,n=r?[]:o?.tubeMap?.layout.reads??[],a=e.drawnGraph?.paths??[],i=e.tubeMapColoring,p=e.tubeColorKind;return{bundled:a.some(s=>s.members),values:p==="value"&&i?[...[...i.palette].map(([s,c])=>({value:s,color:c})),...i.unvalued?[{value:`${i.field}: none`,color:Hr}]:[]]:void 0,roles:p==="role"||p==="tinted",haplotypeTube:p==="tinted"?Nr[0]:Er,logWidths:o?.tubeMap!==void 0&&!o.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:n.some(s=>!s.is_reverse),reverseReads:n.some(s=>s.is_reverse),...Xa(r?void 0:e.tubeMapPicture,e.tubeMapFrame,e.paneWidth)}},{equals:(o,r)=>JSON.stringify(o)===JSON.stringify(r)});return{get tubeMapKeys(){return t.get()}}}).views(e=>({tubeMapUnder(t){let o=e.tubeMapPanelViews;if(o){let i=e.tubeMapPanelAt(t),p=i===null?void 0:o[i];return p&&{drawing:p.panel.result.tubeMap,...p}}let r=e.layoutResult?.tubeMap,n=e.tubeMapPicture,a=e.tubeMapFrame;return r&&n&&a?{drawing:r,picture:n,frame:a}:void 0},tubeMapNodeAt(t,o){let r=this.tubeMapUnder(o);return(r?zt(r.drawing,r.frame,t,o):null)??kr(e.tubeMapConnectors,e.connectorZoneBottom,t,o)??null},tubeAt(t,o){let r=this.tubeMapUnder(o);if(!r)return null;let{picture:n,frame:a}=r,i=Cr(n,a,t,o),p=i?.readId??Ar(n,a,t,o);return p===void 0?null:{track:p,mismatch:i}},get hoveredTubeText(){let t=e.hoveredTube,o=e.layoutResult?.tubeMap?.layout,r=t&&o?.reads.find(i=>i.id===t.track);if(t&&r){let i=r.mapping_quality;return{label:r.name??"read",readout:[`MAPQ ${i??"unknown"}`,`${r.is_reverse?"reverse":"forward"} strand`,...t.mismatch?[Ya(t.mismatch)]:[]].join(", ")}}let n=t?e.hoverGraph?.paths?.[t.track]:void 0,a=n?.members;return a?{label:`${a.length} haplotypes`,readout:`one route: ${Ja(a.map(i=>e.walkLabel(i)))}`}:n?{label:e.walkLabel(n.name),readout:"haplotype"}:void 0}}));var Hn=Vn.actions(()=>({writeGrammar(e){}})).actions(e=>({keepDrawingInView(){let t=e.layoutBounds,o=e.viewBox;if(!t||e.viewportOwner==="fit"||!e.paneMeasured||o.width<=0||o.height<=0)return;let r=Bn(t,e,o);e.viewportOwner!=="host"&&(e.translateX=r.translateX),e.translateY=r.translateY}})).actions(e=>{let t;return{setColorScheme(o){(e.statedColorDomain||e.chosenColorScheme==="reference-position")&&(t=e.statedColorDomain),e.writeGrammar({color:Kr(o,t)})}}}).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,o,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=o.nodeStrokes.length,e.builtViewport={...r,viewportDirty:e.viewportDirty},e.drawnBatch=o},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLayoutEngine(t){e.layoutEngine=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.writeGrammar({layoutMode:t})},setHover(t){e.writeGrammar({hover:t}),e.hoverLightsEverything||(e.hoveredEdge=null)},setReferencePath(t){e.referencePath=t;let o=e.graph;if(o?.anchoredBy==="paths"){let r=Qe(o,t);We.inherit(o,r),e.graph=r}},setLayer(t,o){e.writeGrammar({layers:Ur(e.grammar.layers,t,o)})},setShowPerf(t){e.showPerf=t},setBubbleSpread(t){e.bubbleSpread=t},setMaxGraphNodes(t){e.maxGraphNodes=t},setNodeWidth(t){e.writeGrammar({size:qr(t,e.contigThickness)})},setTubeMapFold(t){e.tubeMapFold=t},setTubeMapRoutes(t){e.tubeMapRoutes=t},setTubeMapColorBy(t){e.tubeMapColorBy=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let o=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>o.get(r)??{walk:r})},setFacet(t){let o=e.facetSetting;t===""?o.field!==""&&e.writeGrammar({facet:{}}):e.writeGrammar({facet:{...o,field:t,domain:t===o.field?o.domain:[]}})},toggleWalk(t){let o=e.walkLayers;e.walkLayers=o.some(r=>r.walk===t)?o.filter(r=>r.walk!==t):[...o,{walk:t}]},setWalkColor(t,o){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...o}}:r)},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.writeGrammar({rows:t?{kept:t}:{}})},setWalkRowGroupBy(t){(t||e.walkRowGroupBy)&&e.writeGrammar({facet:t??{}})},pairWithLinearView(t){let o=e.connectedViewId;o!==void 0&&rt([...L(e).views]).some(n=>n.id===o)||(e.connectedViewId=t)},setHoveredNode(t,o){e.hoveredNode=t,e.hoveredAt=t===null?null:o??null},setHoveredPanel(t){e.hoveredPanel=t},setHoveredTube(t){let o=e.hoveredTube;(t?.track!==o?.track||t?.mismatch!==o?.mismatch)&&(e.hoveredTube=t)},setHoveredRowWalks(t){t.join(`
1
+ import{a as Tt,b as Oo,c as Wo,d as Fe,e as Do,f as _o}from"./chunks/chunk-E2QPSDQL.js";import{$ as lr,A as Uo,B as at,C as Ko,D as qo,E as Zo,F as Qo,G as er,J as ge,K as tr,L as or,M as rr,N as nr,O as ar,P as ir,Q as vt,R as sr,S as pr,T as Pt,U as cr,V as be,W as We,X as dr,Y as De,Z as ur,_ as mr,a as U,aa as hr,b as tt,ba as gr,c as Eo,ca as br,d as No,da as yr,e as Vo,ea as Bt,f as ot,fa as Br,g as z,ga as st,h as xt,ha as zr,i as Ho,ia as $r,j as jo,ja as Jr,k as Fo,ka as Yr,la as Xr,ma as Ur,na as Kr,oa as qr,p as zo,r as Gt,ra as pt,s as Q,sa as Zr,t as rt,u as Oe,ua as Qr,v as nt,w as $o,wa as tn,x as Jo,xa as on,y as Yo,z as Lt}from"./chunks/chunk-6PC7WKLS.js";import{c as Ao,d as Co,k as en}from"./chunks/chunk-VJ3SO4CH.js";import{$ as Mr,Ba as Vr,Da as Hr,Ha as it,Ia as jr,Ja as Fr,Ka as Or,Na as Wr,O as Xo,Oa as Dr,Pa as _r,U as Ct,V as fr,X as wr,Y as It,a as je,aa as kr,b as To,c as V,ca as Sr,d as he,da as Rr,ga as xr,ha as Tr,ia as Gr,ka as Lr,la as vr,ma as Pr,na as Ar,oa as Cr,qa as Ir,wa as Et,ya as Er,za as Nr}from"./chunks/chunk-LBY7U6OJ.js";import"./chunks/chunk-FITPB5X6.js";import{F as Rt,c as Ze,d as te,f as Bo,g as Qe,i as Io,t as et}from"./chunks/chunk-WAMBI7OX.js";import{b as At}from"./chunks/chunk-W6EQLQ6H.js";import{a as rn}from"./chunks/chunk-PJ43KEV6.js";import{j as Ue}from"./chunks/chunk-S75W27NT.js";import{e as wt,g as Mt}from"./chunks/chunk-5O6YRJHL.js";import"./chunks/chunk-N6PQZSAX.js";import{c as W,e as lo,f as Ve,g as ho}from"./chunks/chunk-TUKJRVBS.js";import"./chunks/chunk-T4HOC6O3.js";import{b as So,d as Ro}from"./chunks/chunk-FVK2THE4.js";import{f as Pe,i as D,j as Z,k as He,l as Ke}from"./chunks/chunk-FHZXW7IG.js";import"./chunks/chunk-YBLNN5FU.js";import{a as go,b as Y,d as ie,e as se,f as bo}from"./chunks/chunk-MVVXRZXV.js";import{a as mo}from"./chunks/chunk-ZMOMFU2B.js";import{a as vo,f as Po}from"./chunks/chunk-DVCZ3BOC.js";import{c as wo,d as Mo,e as ko}from"./chunks/chunk-5OI6LO4I.js";import{a as xo}from"./chunks/chunk-7WIBGKBU.js";import{a as kt}from"./chunks/chunk-OGQ6OQDN.js";import{a as A,b as K,c as yo,e as q,f as fo,g as T}from"./chunks/chunk-NDRLCGPC.js";import{i as le,j as L,k as so,l as po,n as co}from"./chunks/chunk-TENPGIPX.js";import{b as pe}from"./chunks/chunk-YU7T5WOQ.js";import{I as qe,i as Go,l as Lo}from"./chunks/chunk-UGCNPRKC.js";import{a as uo,b as N,d as St}from"./chunks/chunk-JMBDTNUR.js";var ct=JBrowseExports["@jbrowse/core/Plugin"];var nn=ct&&ct.__esModule?ct.default:ct;var dt=U([N("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),N("circle",{cx:"14.8",cy:"18",r:"2"},"1"),N("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var ut=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"];var ce=ut&&ut.__esModule?ut.default:ut;var fa=Y("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:D("/path/to/graph.gbz.db"),haplotypeIndexLocation:D(""),readsLocation:D(""),readsIndex:Z("GbzBaseReadsIndex"),samplesTsvLocation:D(""),subgraphSnarls:{type:"stringEnum",model:T.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:Ue.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:Ue.context,advanced:!0},nodeLimit:{type:"number",defaultValue:Ue.limit,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>{let{uri:t,baseUri:o,reads:r}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:o}}:{},...typeof r=="string"?{readsLocation:{uri:r,baseUri:o},...wa(r,o)}:{}}}});function wa(e,t){let{name:o,query:r}=Mo(e);return o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi${r}`,baseUri:t}}}:{}}var an=fa;function Nt(e){e.addAdapterType(()=>new ce({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:an,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-LRECKL74.js").then(t=>t.default)}))}var ye=JBrowseExports["@jbrowse/core/pluggableElementTypes"],de=e=>ye!=null&&e in Object(ye)?ye[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/pluggableElementTypes' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var sn=de("AddTrackWorkflowType");var pn=de("BaseDisplay");var cn=de("DisplayType");var Ae=de("RpcMethodType"),dn=de("RpcMethodTypeWithRenameRegion");var un=de("TrackType");var mn=de("createBaseTrackConfig"),ln=de("createBaseTrackModel");var Yi=ye&&ye.__esModule?ye.default:ye;var fe=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"],Ma=e=>fe!=null&&e in Object(fe)?fe[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/data_adapters/dataAdapterCache' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var hn=Ma("getAdapter"),Ui=fe&&fe.__esModule?fe.default:fe;async function Ce(e,{sessionId:t,adapterConfig:o},r){let{dataAdapter:n}=await hn(e,t,o);return{adapter:typeof n[r]=="function"?n:void 0,name:n.constructor.name}}var _e=class extends Ae{constructor(){super(...arguments);this.name="GetGraphHaplotypes"}async execute(o){let{adapter:r}=await Ce(this.pluginManager,o,"getHaplotypeNames");return r?.getHaplotypeNames({signal:o.signal})}};function gn(e){return typeof e.reads=="string"&&e.reads!==""||wo(e.readsLocation)}var ze=class extends Ae{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(o){let{nodeNames:r,signal:n}=o,{adapter:a}=await Ce(this.pluginManager,o,"getReads");return a?a.getReads(r,{signal:n}):{records:[],total:0}}};var we=JBrowseExports["@jbrowse/core/util/librpc"],ka=e=>we!=null&&e in Object(we)?we[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/util/librpc' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Vt=ka("rpcResultWithArrayBuffers");var ps=we&&we.__esModule?we.default:we;var $e=class extends dn{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(o){let{region:r,opts:n,signal:a}=o,{adapter:i,name:p}=await Ce(this.pluginManager,o,"getSubgraph");if(i){let s=await i.getSubgraph(r,{...n,signal:a});if(typeof s!="string")return Vt(s);let c=s?Mt(s):void 0;return c?Vt(c):s}return console.warn(`[GetSubgraph] ${p} does not implement getSubgraph`),""}};var Sa=pe(()=>import("./chunks/AddTrackWorkflow-RPH4ZFSX.js"));function Ht(e){e.addAddTrackWorkflowType(()=>new sn({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Sa,stateModel:T.model({})}))}var Je=class extends Ae{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(o){let{graph:r,options:n,statusCallback:a}=o;return a?.("Computing layout"),Co({graph:r,options:n})}};var mt=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"];var bn=mt&&mt.__esModule?mt.default:mt;var Me=JBrowseExports["@jbrowse/core/util/withLaunchInput"],Ra=e=>Me!=null&&e in Object(Me)?Me[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/util/withLaunchInput' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),yn=Ra("defineLaunchKeys");var Rs=Me&&Me.__esModule?Me.default:Me;var ke=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"],xa=e=>ke!=null&&e in Object(ke)?ke[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/pluggableElementTypes/models' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var fn=xa("BaseViewModel");var Ts=ke&&ke.__esModule?ke.default:ke;var Be=["off","nodes","everything"];var wn=U(N("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy");var Mn=U(N("path",{d:"M8.4 18.2c.38.5.6 1.12.6 1.8 0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3c.44 0 .85.09 1.23.26l1.41-1.77c-.92-1.03-1.29-2.39-1.09-3.69l-2.03-.68c-.54.83-1.46 1.38-2.52 1.38-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3c0 .07 0 .14-.01.21l2.03.68c.64-1.21 1.82-2.09 3.22-2.32V5.91C9.96 5.57 9 4.4 9 3c0-1.66 1.34-3 3-3s3 1.34 3 3c0 1.4-.96 2.57-2.25 2.91v2.16c1.4.23 2.58 1.11 3.22 2.32L18 9.71V9.5c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3c-1.06 0-1.98-.55-2.52-1.37l-2.03.68c.2 1.29-.16 2.65-1.09 3.69l1.41 1.77Q17.34 17 18 17c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3c0-.68.22-1.3.6-1.8l-1.41-1.77c-1.35.75-3.01.76-4.37 0z"}),"Hub");var kn=U(N("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10c1.38 0 2.5-1.12 2.5-2.5 0-.61-.23-1.2-.64-1.67-.08-.1-.13-.21-.13-.33 0-.28.22-.5.5-.5H16c3.31 0 6-2.69 6-6 0-4.96-4.49-9-10-9m5.5 11c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5m-3-4c-.83 0-1.5-.67-1.5-1.5S13.67 6 14.5 6s1.5.67 1.5 1.5S15.33 9 14.5 9M5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S7.33 13 6.5 13 5 12.33 5 11.5m6-4c0 .83-.67 1.5-1.5 1.5S8 8.33 8 7.5 8.67 6 9.5 6s1.5.67 1.5 1.5"}),"Palette");var Sn=U([N("circle",{cx:"12",cy:"12",r:"3.2"},"0"),N("path",{d:"M9 2 7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5"},"1")],"PhotoCamera");function Ft(e,t){if(!(t>0)||e.paths?.length||!e.nodes.some(R=>W(R)))return e;let{nodes:o,edges:r}=Ta(e),n=new Map(o.map((R,v)=>[R.id,v])),a=r.map(Tn),i=La(o.length,r,a,n),p=Pa(o,r,a,n),s=Aa(p),c=new Uint8Array(o.length),h=[];for(let R of s.values())if(Ca(R,o,i,p)>=t){for(let v of R)c[v]=1;W(o[R[0]])||h.push(R)}let{dist:w,pred:m}=Ea(o,i);for(let R of h)for(let[v,C]of Ba(R,o,i,p)){let y=Ia(v,C,i,p,w,o);for(;y!==void 0&&!c[y];)c[y]=1,y=W(o[y])?void 0:m[y]}let f=r.filter((R,v)=>{let C=n.get(R.from),y=n.get(R.to);if(C===void 0||y===void 0)return!1;let b=va(o[C],a[v].from,o[y],a[v].to);return c[C]&&c[y]&&!(b>0&&b<t)});return Va({...e,nodes:o,edges:f},c,p)}function Ta({nodes:e,edges:t}){let o=new Set(e.filter(n=>n.stable?.strand==="-").map(n=>n.id));if(o.size===0)return{nodes:e,edges:t};let r=(n,a)=>{let i=a??et(n);return o.has(n)?Ga(i):i};return{nodes:e.map(n=>o.has(n.id)?{...n,stable:{...n.stable,strand:"+"}}:n),edges:t.map(n=>o.has(n.from)||o.has(n.to)?{...n,fromStrand:r(n.from,n.fromStrand),toStrand:r(n.to,n.toStrand)}:n)}}function Ga(e){return e==="+"?"-":"+"}function Tn(e){return{from:(e.fromStrand??et(e.from))==="+"?"e":"s",to:(e.toStrand??et(e.to))==="+"?"s":"e"}}function La(e,t,o,r){let n=Array.from({length:e},()=>[]);return t.forEach((a,i)=>{let p=r.get(a.from),s=r.get(a.to);if(p!==void 0&&s!==void 0){let{from:c,to:h}=o[i];n[p].push({other:s,side:c,otherSide:h}),n[s].push({other:p,side:h,otherSide:c})}}),n}function Gn(e,t){let o=e.stable,r=t.stable;return o&&r?.refName===o.refName&&r.rank===o.rank?[o,r]:void 0}function Ot(e,t,o,r){let n=Gn(e,o);if(!n)return!1;let[a,i]=n;return t==="e"&&r==="s"&&a.start+e.length===i.start||r==="e"&&t==="s"&&i.start+o.length===a.start}function va(e,t,o,r){let n=Gn(e,o);if(!n||Ot(e,t,o,r))return 0;let[a,i]=n;return Math.abs(jt(i,o,r)-jt(a,e,t))}function jt({start:e},t,o){return o==="s"?e:e+t.length}function Pa(e,t,o,r){let n=e.map((i,p)=>p),a=i=>{for(;n[i]!==i;)n[i]=n[n[i]],i=n[i];return i};return t.forEach((i,p)=>{let s=r.get(i.from),c=r.get(i.to);s!==void 0&&c!==void 0&&Ot(e[s],o[p].from,e[c],o[p].to)&&(n[a(s)]=a(c))}),e.map((i,p)=>a(p))}function Aa(e){let t=new Map;return e.forEach((o,r)=>{let n=t.get(o);n?n.push(r):t.set(o,[r])}),t}function Ca(e,t,o,r){if(W(t[e[0]]))return 1/0;let n=0,a,i=1/0,p=-1/0,s=!0;for(let c of e){n+=t[c].length;for(let{other:h,otherSide:w}of o[c]){let m=t[h];if(r[h]!==r[c]&&W(m)){a??=m.stable.refName,s&&=m.stable.refName===a;let f=jt(m.stable,m,w);i=Math.min(i,f),p=Math.max(p,f)}}}return s&&p>i?Math.max(n,p-i):n}function Ba(e,t,o,r){let n=c=>t[c].stable?.start??0,a=c=>n(c)+t[c].length,i=e[0],p=e[0];for(let c of e)n(c)<n(i)&&(i=c),a(c)>a(p)&&(p=c);let s=[];for(let c of new Set([i,p]))for(let h of["s","e"])o[c].some(w=>w.side===h&&r[w.other]===r[c])||s.push([c,h]);return s}function Ia(e,t,o,r,n,a){let i;for(let p of o[e]){let s=p.other;p.side===t&&r[s]!==r[e]&&Number.isFinite(n[s])&&(i===void 0||n[s]<n[i]||n[s]===n[i]&&a[s].name<a[i].name)&&(i=s)}return i}function Ea(e,t){let o=new Float64Array(e.length).fill(1/0),r=new Int32Array(e.length).fill(-1),n=new Na(([a,i],[p,s])=>a-p||Rn(e[i].name,e[s].name));e.forEach((a,i)=>{W(a)&&(o[i]=0,n.push([0,i]))});for(let a=n.pop();a!==void 0;a=n.pop()){let[i,p]=a;if(!(i>o[p]))for(let{other:s}of t[p]){if(W(e[s]))continue;let c=i+e[s].length;c<o[s]?(o[s]=c,r[s]=p,n.push([c,s])):c===o[s]&&Rn(e[p].name,e[r[s]].name)<0&&(r[s]=p)}}return{dist:o,pred:Array.from(r,a=>a<0?void 0:a)}}function Rn(e,t){return e<t?-1:e>t?1:0}var Na=class{constructor(e){this.order=e,this.items=[]}push(e){let{items:t}=this;t.push(e);let o=t.length-1;for(;o>0;){let r=o-1>>1;if(this.order(t[o],t[r])>=0)break;[t[o],t[r]]=[t[r],t[o]],o=r}}pop(){let{items:e}=this,t=e[0],o=e.pop();if(e.length>0&&o!==void 0){e[0]=o;let r=0;for(;;){let n=2*r+1,a=n+1,i=r;if(n<e.length&&this.order(e[n],e[i])<0&&(i=n),a<e.length&&this.order(e[a],e[i])<0&&(i=a),i===r)break;[e[r],e[i]]=[e[i],e[r]],r=i}}return t}};function Va(e,t,o){let{nodes:r,edges:n}=e,a=new Map(r.map((y,b)=>[y.id,b])),i=n.map(Tn),p=n.map((y,b)=>[{i:a.get(y.from),side:i[b].from},{i:a.get(y.to),side:i[b].to}]),s=new Map,c=(y,b)=>`${y}${b}`;for(let y of p)for(let{i:b,side:P}of y)s.set(c(b,P),(s.get(c(b,P))??0)+1);let h=new Map,w=new Set,m=new Set;p.forEach(([y,b],P)=>{if(y.i!==b.i&&o[y.i]===o[b.i]&&Ot(r[y.i],y.side,r[b.i],b.side)&&s.get(c(y.i,y.side))===1&&s.get(c(b.i,b.side))===1){let[E,g]=r[y.i].stable.start<r[b.i].stable.start?[y,b]:[b,y];h.set(E.i,{j:g.i,out:E.side,in:g.side}),w.add(g.i),m.add(P)}});let f=r.map((y,b)=>b),R=new Map,v=new Map;r.forEach((y,b)=>{if(!t[b]||w.has(b)||!h.has(b))return;let P=[b],E=xn(h.get(b).out);R.set(c(b,E),"s");for(let g=h.get(b);g;g=h.get(g.j))P.push(g.j),E=g.in;R.set(c(P.at(-1),xn(E)),"e");for(let g of P)f[g]=b;v.set(b,Ha(P.map(g=>r[g])))});let C=({i:y,side:b})=>({id:r[f[y]].id,side:f[y]===y&&!v.has(y)?b:R.get(c(y,b))});return{...e,nodes:r.flatMap((y,b)=>!t[b]||f[b]!==b?[]:[v.get(b)??y]),edges:n.flatMap((y,b)=>{if(m.has(b))return[];let[P,E]=p[b];if(!v.has(f[P.i])&&!v.has(f[E.i]))return[y];let g=C(P),B=C(E);return[{...y,from:g.id,to:B.id,fromStrand:g.side==="e"?"+":"-",toStrand:B.side==="s"?"+":"-"}]})}}function xn(e){return e==="s"?"e":"s"}function Ha(e){let{samples:t,...o}=e[0],r=e.reduce((i,p)=>i+p.length,0),n=r>0?e.reduce((i,p)=>i+p.depth*p.length,0)/r:o.depth,a=e.every(i=>i.samples)?e.reduce((i,p)=>i.filter(s=>p.samples.includes(s)),t):void 0;return a?{...o,length:r,depth:n,samples:a}:{...o,length:r,depth:n}}function Ln(e,t){let o=new Set(e.nodes.filter(s=>W(s)&&Ve(s,t)).map(s=>s.id)),r=e.paths??[];if(o.size===0||r.length===0)return e;let n=r.map(s=>{let c=-1,h=-1;return s.nodeIds.forEach((w,m)=>{o.has(w)&&(c<0&&(c=m),h=m)}),c<0?void 0:{first:c,last:h}});if(n.every((s,c)=>s?.first===0&&s.last===r[c].nodeIds.length-1))return e;let a=new Set,i=[],p=new Map;return r.forEach((s,c)=>{let h=n[c];if(h){let w=s.nodeIds.slice(h.first,h.last+1);for(let m of w)a.add(m);i.push({...s,nodeIds:w}),p.set(s.name,{first:h.first,nodeIds:w})}}),{...e,nodes:e.nodes.filter(s=>a.has(s.id)),edges:e.edges.filter(s=>a.has(s.from)&&a.has(s.to)),paths:i,pathVisits:e.pathVisits&&ja(e.pathVisits,r,n,new Map(e.nodes.map(s=>[s.id,s.name]))),anchorPaths:Io(e,p)}}function ja(e,t,o,r){let n=e.replay(),a=new Ze;return t.forEach((i,p)=>{let s=e.pathIndex(te(i.name).name),c=o[p];i.nodeIds.forEach((h,w)=>{let m=r.get(h)??h,f=n(e.slot(m),s);f>=0&&c&&w>=c.first&&w<=c.last&&a.add(m,e.paths[s],e.samples[s],e.start[f],e.reversed[f]===1)})}),a.build()}function vn(e,t,o){let r=e.nodes.map(n=>{if(!W(n))return n;let a=n.stable.start,i=a+n.length,[p,s]=Ve(n,t)?[Math.max(a,t.start),Math.min(i,t.end)]:i<=t.start?[Math.max(a,i-o),i]:[a,Math.min(i,a+o)];return p===a&&s===i?n:{...n,length:s-p,stable:{...n.stable,start:p}}});return r.some((n,a)=>n!==e.nodes[a])?{...e,nodes:r}:e}function Wt(e,t=()=>"",o=!0){let r=e.paths??[],n=tt(e),a=new Map;r.forEach((m,f)=>{let R=te(m.name).name,v=n[f].map(y=>`${y.node.id}${y.strand}`).join(","),C=a.get(R);C?C.push(v):a.set(R,[v])});let i=new Map,p=new Map;for(let[m,f]of a){let R=m===e.referencePath?`\0${m}`:f.join("|"),v=t(m),C=i.get(R)??i.size;i.set(R,C);let y=`${R} ${v}`,b=p.get(y);b?b.walks.push(m):p.set(y,{rank:C,group:v,walks:[m]})}if(o&&p.size===a.size)return e;let s=[...p.values()].sort((m,f)=>m.rank-f.rank||m.group.localeCompare(f.group)),c=new Map;for(let m of r){let f=te(m.name).name,R=c.get(f);R?R.push(m):c.set(f,[m])}if(!o)return{...e,paths:s.flatMap(({walks:m})=>m.flatMap(f=>c.get(f)))};let h=s.flatMap(({walks:m})=>c.get(m[0]).map(f=>m.length>1?{...f,members:m}:f)),w=new Set(s.map(m=>m.walks[0]));return{...e,paths:h,anchorPaths:e.anchorPaths?.filter(m=>w.has(m.name)),pathVisits:e.pathVisits?.filter(m=>w.has(m))}}function Fa(e,t){let o=[],r=()=>({a:-1/0,b:1/0,detour:[],bp:0}),n=[r()];for(let{node:a,strand:i}of t){let p=n.at(-1),s=o.at(-1);if(W(a)){let c=a.stable.start,h=c+a.length,w=i!==(a.stable.strand??"+"),m=s!==void 0&&p.detour.length===0;m&&!s.inverted&&!w&&s.end===c?s.end=h:m&&s.inverted&&w&&s.start===h?s.start=c:(o.push({start:c,end:h,inverted:w}),n.push(r()))}else p.detour.push({node:a,strand:i}),p.bp+=a.length}return o.forEach((a,i)=>{n[i].b=a.start,n[i+1].a=a.end}),{path:e,runs:o,gaps:n}}function Dt(e,t){return Number.isFinite(e.a)&&Number.isFinite(e.b)&&e.b>=e.a&&Math.max(e.b-e.a,e.bp)<t}function Pn(e,t,o){let r=0,n=e.length;for(;r<n;){let a=r+n>>1;e[a]<=t?r=a+1:n=a}return r<e.length&&e[r]<o}function Oa(e){let t=new Map;for(let o=1;o<e.length;o++){let r=e[o-1],n=e[o],a=r.stable.start+r.length;a!==n.stable.start&&(t.set(a,"reference-gap"),t.set(n.stable.start,"reference-gap"))}return t}function Wa(e,t,o){let r=(a,i)=>{Number.isFinite(a)&&!o.has(a)&&o.set(a,i)};for(let{runs:a,gaps:i}of e){let p=a[0],s=a.at(-1);p&&s&&(r(p.start,"walk-end"),r(s.end,"walk-end"));for(let c of a)c.inverted&&c.end-c.start>=t&&(r(c.start,"inversion"),r(c.end,"inversion"));for(let c of i)c.b<c.a?(r(c.a,"backward"),r(c.b,"backward")):Dt(c,t)||(r(c.a,"variant"),r(c.b,"variant"))}let n=e.flatMap(({runs:a,gaps:i})=>[...i.filter(p=>Dt(p,t)).map(p=>[p.a,p.b]),...a.filter(p=>p.inverted&&p.end-p.start<t).map(p=>[p.start,p.end])]);for(let a=!0;a;){a=!1;let i=[...o.keys()].sort((p,s)=>p-s);for(let[p,s]of n)Pn(i,p,s)&&(a||=!o.has(p)||!o.has(s),r(p,"overlap"),r(s,"overlap"))}return o}function Da(e,t){let o=[],r=[],n=()=>{let a=r[0],i=r.at(-1);if(a&&i){let p=a.stable.start,s=i.stable.start+i.length,c=`${p}-${s}`;o.push({node:{id:`${c}+`,name:c,length:s-p,depth:0,stable:{refName:a.stable.refName,start:p,rank:0,strand:"+"}},members:r})}r=[]};for(let a of e)t.has(a.stable.start)&&n(),r.push(a);return n(),o}function An(e,t){let o=e.nodes.filter(W).sort((g,B)=>g.stable.start-B.stable.start),r=e.paths??[];if(o.length===0||r.length===0)return;let n=tt(e),a=r.map((g,B)=>Fa(g,n[B])),i=Wa(a,t,Oa(o)),p=[...i.keys()].sort((g,B)=>g-B),s=Da(o,i),c=s.map(g=>g.node.stable.start),h=g=>{let B=0,O=c.length-1;for(;B<O;){let H=B+O+1>>1;c[H]<=g?B=H:O=H-1}return B},w=new Map,m=new Map;for(let g of s){w.set(g.node.id,g.members.map(B=>B.id));for(let B of g.members)m.set(B.id,g.node.id)}let f=new Map,R=g=>{let B=`${g.a} ${g.b} ${g.detour.map(H=>H.node.id+H.strand).join(",")}`,O=f.get(B);if(!O){let H=`r${f.size}`;O={id:`${H}+`,name:H,length:g.bp,depth:0,stable:{refName:o[0].stable.refName,start:Number.isFinite(g.a)?g.a:g.b,rank:1,strand:"+"}},f.set(B,O),w.set(O.id,g.detour.map(ee=>ee.node.id));for(let ee of g.detour)m.has(ee.node.id)||m.set(ee.node.id,O.id)}return O},v=new Map,C=[],y=new Ze,b=new Map,P=new Map;for(let{path:g,runs:B,gaps:O}of a){let H=[],ee=[],re=!1,Ge=(k,$)=>{let j=H.at(-1);re&&j?.node===k&&j.strand===$||H.push({node:k,strand:$}),re=!0},Ie=k=>{re=!1,k.detour.length>0&&(Ge(R(k),"+"),re=!1)},Ye=k=>{(k.bp>0||k.b>k.a)&&ee.push({start:k.a,end:k.b,bp:k.bp});let $=s[h(k.b>k.a?k.a:k.a-1)];for(let j of k.detour)m.has(j.node.id)||(m.set(j.node.id,$.node.id),w.get($.node.id).push(j.node.id))};B.forEach((k,$)=>{let j=O[$];Dt(j,t)&&!Pn(p,j.a,j.b)?Ye(j):Ie(j);let d=h(k.start),u=h(k.end-1),l=k.end-k.start<t;if(k.inverted&&!l){re=!1;for(let M=u;M>=d;M--)Ge(s[M].node,"-");re=!1}else{k.inverted&&ee.push({start:k.start,end:k.end,bp:k.end-k.start,inverted:!0});for(let M=d;M<=u;M++)Ge(s[M].node,"+")}}),Ie(O.at(-1));let Ee=te(g.name).name,Ne=0;H.forEach(({node:k,strand:$},j)=>{P.set(k.id,(P.get(k.id)??0)+1),y.add(k.name,Ee,g.sample??Ee,Ne,$==="-"),Ne+=k.length;let d=H[j+1];if(d){let u=`${k.id}${$} ${d.node.id}${d.strand}`,l=b.get(u);l?l.pathIds.push(g.name):b.set(u,{from:k.id,to:d.node.id,fromStrand:$,toStrand:d.strand,pathIds:[g.name]})}}),C.push({...g,nodeIds:H.map(k=>k.node.id)}),v.set(g.name,ee)}let E=[...s.map(g=>g.node),...f.values()].filter(g=>P.has(g.id)).map(g=>({...g,depth:P.get(g.id)}));return{graph:{...e,nodes:E,edges:[...b.values()],paths:C,pathVisits:y.build(),reads:void 0},members:w,coarseOf:m,deviations:v,cuts:i}}function Cn(e,t,o){let r=Math.min(48,t,o);return Math.max(0,r-(e+t))-Math.max(0,e-(o-r))}function Bn(e,t,o){return{translateX:t.translateX+Cn(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,o.width),translateY:t.translateY+Cn(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,o.height)}}function In(e,t,o){let r=e.minX*t.scaleX+t.translateX,n=e.minY*t.scaleY+t.translateY;return r<o.width&&r+e.w*t.scaleX>0&&n<o.height&&n+e.h*t.scaleY>0}var _a=.05,lt=9;function za(e,t){let{minY:o,maxY:r}=e.layout.bounds,n=r-o;return e.columns&&n>0?Math.max(_a,Math.min(1,t/n)):1}function ht(e,t){let{scaleX:o,translateX:r,translateY:n}=t,a=t.scaleY*za(e,t.usableHeight),i=s=>(s-e.yOffset)*a+n,{columns:p}=e;if(p){let s=xr(p,c=>c*o+r);return{x:c=>Tr(s,c),y:i,yScale:a}}return{x:s=>s*o+r,y:i,yScale:a}}function _t(e,{x:t,y:o},r,n){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-lt)<=r&&r<=t(i.x+i.pixelWidth+lt)&&o(i.y-lt)<=n&&n<=o(i.y+i.contentHeight+lt)&&(a=i.name)}),a}var En=20,$a=.05,Nn=6;function Ja(e){let t=e.length-Nn;return t>0?`${e.slice(0,Nn).join(", ")} and ${t} more`:e.join(", ")}function Ya(e){if(e.kind==="deletion")return`deletion of ${Rt(e.length)}`;if(e.kind==="substitution")return`substitution ${e.seq}`;let t=e.seq??"",o=t.length>En?`${t.slice(0,En)}\u2026`:t;return`insertion of ${Rt(t.length)} ${o}`.trim()}function Xa(e,t,o){let r={substitution:!1,insertion:!1,deletion:!1};if(e&&t&&vr(t.yScale)){let n=3;for(let a of e.mismatches)if(!r[a.kind]&&Pr(a,{x:t.x,width:o})&&(r[a.kind]=!0,--n===0))break}return r}var Vn=Zr.views(e=>({get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?ht(t,{...e.screenTransform,usableHeight:e.usableHeight}):void 0},get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX&&!e.layoutResult?.tubeMapPanels?It(t):void 0},get tubeMapPanelRulerBoxes(){let{layoutResult:t}=e,o=t?.tubeMapPanels?.at(-1);return o&&t?.referenceAxis&&!e.hostPlacesX?It(wr(o.result.tubeMap)):void 0},get connectorZoneBottom(){let t=e.tubeMapPicture,o=this.tubeMapFrame;return t&&o?o.y(t.bounds.minY)-2:0},get tubeMapConnectors(){let t=e.tubeMapConnectedBoxes,o=this.tubeMapFrame,r=t&&o?e.hostBpFrame:void 0;return t&&o&&r?Mr(t,n=>n*r.scale+r.translateX,o.x,e.paneWidth):[]},get tubeMapPanelPictures(){let t=e.layoutResult?.tubeMapPanels;if(!t)return;let{field:o}=e.facetSetting;return t.map(r=>{let n=r.result.tubeMap,{graph:a,coarse:i}=n;return{panel:r,label:r.label??(o==="walk"?e.walkLabel(r.paths[0]):r.key),picture:Gr(n),tubeColors:e.tubeColorsOf(a,n.pathColors),nodeColors:e.tubeMapNodeColors?Br(a,e.effectiveColorScheme,e.referenceRamp):void 0,deviations:i?Rr(n,i.deviations):[]}})}})).views(e=>({get hoveredMember(){let t=e.hoveredNode,o=t===null?void 0:e.hoverDrawing?.members.get(t);if(!o)return t;let r=e.hoveredAt,n=e.hoveredPanel,a=n===null?void 0:this.tubeMapPanelViews?.[n],i;return a?.panel.result.tubeMap.layout.nodes.forEach(s=>{s.name===t&&(i=s)}),(r&&a&&i?Fr(o,s=>e.nodeSpan(s),a.frame.x(i.x),a.frame.x(i.x+i.pixelWidth),r.x):void 0)??o[0]},get tubeMapPanelHover(){let t=e.hoveredNode,o=e.tubeMapPanelPictures;if(t===null||!o)return;let r=this.hoveredMember??t;return o.map(({panel:n})=>{let a=n.result.tubeMap,i=jr(a,r);return i?{box:i,...Or(a.graph,i)}:void 0})},get tubeMapPanelTubeColors(){return e.tubeMapPanelPictures?.map(({panel:t,tubeColors:o})=>{let{graph:r}=t.result.tubeMap;return e.fadeUnhovered(o,r.paths??[],r.referencePath)})},get tubeMapPanelViews(){let t=e.tubeMapPanelPictures,o=this.tubeMapPanelTubeColors,r=e.layoutResult;if(!t||!o||!r)return;let n=t.length*Et,a=t.reduce((c,h)=>c+h.panel.height,0),i=e.usableHeight-n,p=e.scaleY*(r.referenceAxis&&a>0?Math.max($a,Math.min(1,i/a)):1),s=e.translateY;return t.map((c,h)=>{let{panel:w}=c,m=w.result.extent?.minY??0,f=s,R=f+Et;return s=R+w.height*p,{...c,tubeColors:o[h],frame:ht(w.result.tubeMap,{scaleX:e.scaleX,translateX:e.translateX,scaleY:p,translateY:R-m*p,usableHeight:1/0}),titleTop:f,top:R,bottom:s}})},tubeMapPanelAt(t){let o=this.tubeMapPanelViews?.findIndex(r=>r.titleTop<=t&&t<=r.bottom)??-1;return o<0?null:o}})).views(e=>({paintHover(t,o){let r=e.tubeMapPicture,n=e.tubeMapFrame,a=e.hoverLayerNode;if(r&&n){let{ctx:i,canvas:p}=t,s=fr();i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,p.width,p.height),i.setTransform(s,0,0,s,0,0);let c=e.tubeMapPanelViews;c?Wr(i,c,e.tubeMapPanelHover,{width:e.paneWidth,lit:a!==null}):Lr(i,r,{...n,width:e.paneWidth,highlightNode:a}),Sr(i,e.tubeMapConnectors,e.connectorZoneBottom,a),i.setTransform(1,0,0,1,0,0)}else t.uploadGeometry(o),t.setNodeHighlights(a===null?new Map:new Map([[a,vt]])),t.setEdgeHighlight(e.hoveredEdge,vt),t.updateTransform(e.paintTransform),t.renderHighlights()}})).views(e=>{let t=To(()=>{let o=e.layoutResult,r=o?.tubeMapPanels!==void 0,n=r?[]:o?.tubeMap?.layout.reads??[],a=e.drawnGraph?.paths??[],i=e.tubeMapColoring,p=e.tubeColorKind;return{bundled:a.some(s=>s.members),values:p==="value"&&i?[...[...i.palette].map(([s,c])=>({value:s,color:c})),...i.unvalued?[{value:`${i.field}: none`,color:Hr}]:[]]:void 0,roles:p==="role"||p==="tinted",haplotypeTube:p==="tinted"?Nr[0]:Er,logWidths:o?.tubeMap!==void 0&&!o.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:n.some(s=>!s.is_reverse),reverseReads:n.some(s=>s.is_reverse),...Xa(r?void 0:e.tubeMapPicture,e.tubeMapFrame,e.paneWidth)}},{equals:(o,r)=>JSON.stringify(o)===JSON.stringify(r)});return{get tubeMapKeys(){return t.get()}}}).views(e=>({tubeMapUnder(t){let o=e.tubeMapPanelViews;if(o){let i=e.tubeMapPanelAt(t),p=i===null?void 0:o[i];return p&&{drawing:p.panel.result.tubeMap,...p}}let r=e.layoutResult?.tubeMap,n=e.tubeMapPicture,a=e.tubeMapFrame;return r&&n&&a?{drawing:r,picture:n,frame:a}:void 0},tubeMapNodeAt(t,o){let r=this.tubeMapUnder(o);return(r?_t(r.drawing,r.frame,t,o):null)??kr(e.tubeMapConnectors,e.connectorZoneBottom,t,o)??null},tubeAt(t,o){let r=this.tubeMapUnder(o);if(!r)return null;let{picture:n,frame:a}=r,i=Cr(n,a,t,o),p=i?.readId??Ar(n,a,t,o);return p===void 0?null:{track:p,mismatch:i}},get hoveredTubeText(){let t=e.hoveredTube,o=e.layoutResult?.tubeMap?.layout,r=t&&o?.reads.find(i=>i.id===t.track);if(t&&r){let i=r.mapping_quality;return{label:r.name??"read",readout:[`MAPQ ${i??"unknown"}`,`${r.is_reverse?"reverse":"forward"} strand`,...t.mismatch?[Ya(t.mismatch)]:[]].join(", ")}}let n=t?e.hoverGraph?.paths?.[t.track]:void 0,a=n?.members;return a?{label:`${a.length} haplotypes`,readout:`one route: ${Ja(a.map(i=>e.walkLabel(i)))}`}:n?{label:e.walkLabel(n.name),readout:"haplotype"}:void 0}}));var Hn=Vn.actions(()=>({writeGrammar(e){}})).actions(e=>({keepDrawingInView(){let t=e.layoutBounds,o=e.viewBox;if(!t||e.viewportOwner==="fit"||!e.paneMeasured||o.width<=0||o.height<=0)return;let r=Bn(t,e,o);e.viewportOwner!=="host"&&(e.translateX=r.translateX),e.translateY=r.translateY}})).actions(e=>{let t;return{setColorScheme(o){(e.statedColorDomain||e.chosenColorScheme==="reference-position")&&(t=e.statedColorDomain),e.writeGrammar({color:Kr(o,t)})}}}).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,o,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=o.nodeStrokes.length,e.builtViewport={...r,viewportDirty:e.viewportDirty},e.drawnBatch=o},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLayoutEngine(t){e.layoutEngine=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.writeGrammar({layoutMode:t})},setHover(t){e.writeGrammar({hover:t}),e.hoverLightsEverything||(e.hoveredEdge=null)},setReferencePath(t){e.referencePath=t;let o=e.graph;if(o?.anchoredBy==="paths"){let r=Qe(o,t);De.inherit(o,r),e.graph=r}},setLayer(t,o){e.writeGrammar({layers:Ur(e.grammar.layers,t,o)})},setShowPerf(t){e.showPerf=t},setBubbleSpread(t){e.bubbleSpread=t},setMaxGraphNodes(t){e.maxGraphNodes=t},setNodeWidth(t){e.writeGrammar({size:qr(t,e.contigThickness)})},setTubeMapFold(t){e.tubeMapFold=t},setTubeMapRoutes(t){e.tubeMapRoutes=t},setTubeMapColorBy(t){e.tubeMapColorBy=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let o=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>o.get(r)??{walk:r})},setFacet(t){let o=e.facetSetting;t===""?o.field!==""&&e.writeGrammar({facet:{}}):e.writeGrammar({facet:{...o,field:t,domain:t===o.field?o.domain:[]}})},toggleWalk(t){let o=e.walkLayers;e.walkLayers=o.some(r=>r.walk===t)?o.filter(r=>r.walk!==t):[...o,{walk:t}]},setWalkColor(t,o){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...o}}:r)},setPaneHeight(t){e.paneHeight=t},setWalkRowSamples(t){e.writeGrammar({rows:t?{kept:t}:{}})},setWalkRowGroupBy(t){(t||e.walkRowGroupBy)&&e.writeGrammar({facet:t??{}})},pairWithLinearView(t){let o=e.connectedViewId;o!==void 0&&rt([...L(e).views]).some(n=>n.id===o)||(e.connectedViewId=t)},setHoveredNode(t,o){e.hoveredNode=t,e.hoveredAt=t===null?null:o??null},setHoveredPanel(t){e.hoveredPanel=t},setHoveredTube(t){let o=e.hoveredTube;(t?.track!==o?.track||t?.mismatch!==o?.mismatch)&&(e.hoveredTube=t)},setHoveredRowWalks(t){t.join(`
2
2
  `)!==e.hoveredRowWalks.join(`
3
- `)&&(e.hoveredRowWalks=t)},setHoveredWalkRow(t){e.hoveredWalkRow=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){this.setLayer("walkStrip",t),e.stripHover=null},setStripHover(t){e.stripHover=t;let o=e.walkStripRows,r=e.walkStripFrame,n=t&&o?[o.reference,...o.rows].find(i=>i.name===t.row):void 0,a=n&&r&&e.graph?Fo(e.graph,n,t.offset,r.scaleX):void 0;e.hoveredNode=a??null},setLegendSize(t){e.legendSize=t},setHoveredEdge(t){e.hoveredEdge=e.hoverLightsEverything?t:null},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearHover(){e.hoveredNode=null,e.hoveredAt=null,e.hoveredTube=null,e.hoveredPanel=null,e.hoveredWalkRow=null,e.hoveredBubble=null,e.hoveredEdge=null},clearInteractionState(){this.clearHover(),e.hoveredRowWalks=[],e.stripHover=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let o=e.nodeById?.get(t);if(o){let r=L(e),n=e.graphRegion,a=n?e.nodeSpan(t):void 0;po(r)&&r.showWidget(r.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:o.id,name:o.name,length:o.length,depth:o.depth,rank:o.stable?.rank,stableName:o.stable?.refName,contributingAssembly:Gt(o)?.sample,contributingHaplotype:Gt(o)?.haplotype,sampleCount:o.samples?.length,samples:o.samples,...n&&a?{refName:n.refName,assemblyName:n.assemblyName,start:a.start,end:a.end}:{}}}))}},setTransform(t,o,r){let{host:n}=e;e.viewportOwner==="host"&&n?n.horizontalScroll(e.translateX-o):(e.viewportOwner="user",e.scale=qo(t),e.translateX=o),e.translateY=r,e.keepDrawingInView()},zoom(t,o,r){let{host:n}=e;if(e.viewportOwner==="host"&&n){n.zoomTo(n.bpPerPx/t,o);return}e.viewportOwner="user";let a=er(e,t,o,r,e.pixelRows);e.scale=a.scale,e.translateX=a.translateX,e.translateY=a.translateY,e.keepDrawingInView()},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},setMorphFrame(t){e.morphEntering=t,e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let o=e.layoutBounds,{usableHeight:r}=e;o&&r>0&&(e.translateY=Zo(o,r,e.scaleY,e.fitPads.top));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,o){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=o,r&&e.zoomToFit()},followNewLayout(t){let o=e.layoutBounds;if(e.viewportOwner!=="user"||!o||t===e.layoutResult)return;let r=t?.referenceAxis===!0&&e.xIsReferenceBp;t===void 0||r&&(!e.paneMeasured||In(o,e,e.viewBox))?e.keepDrawingInView():(e.viewportOwner="fit",e.zoomToFit())},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{q(e)&&e.setViewportDirty()},sr)}function o(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{q(e)&&e.setPositionsDirty()})}let r;function n(){r&&(cancelAnimationFrame(r.frame),r=void 0)}function a(){let i=r;n(),i?.finish()}return{morphFrom(i,p){let s=e.layoutResult;if(i===s)return;let c=r&&i?structuredClone(i.nodePositions):i?.nodePositions;a();let h=e.graph;if(!i||!c||!s||!h||i.referenceAxis||s.referenceAxis||i.pixelRows||s.pixelRows||s.tubeMap||e.facetGrid||h.nodes.length>mr||typeof requestAnimationFrame>"u"||"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;e.viewportOwner==="fit"&&e.zoomToFit();let w=s.deletionRoutes??{},m=structuredClone({nodes:s.nodePositions,routes:w}),f=gr(c,p,s.nodePositions,e.screenTransform,h.edges),R={nodes:f,routes:br(w,h.edges,f,m.nodes)},v=new Set(Object.keys(s.nodePositions).filter(E=>!c[E])),C=E=>{Bt(s.nodePositions,R.nodes,m.nodes,E),Bt(w,R.routes,m.routes,E),q(e)&&e.setMorphFrame(E<1&&v.size>0?{layout:s,ids:v,alpha:E}:void 0)};C(0);let y=0,b=performance.now(),P=()=>{if(!q(e)||e.layoutResult!==s){r=void 0;return}let E=performance.now();y+=Math.min(E-b,hr),b=E;let g=Math.min(1,y/lr);C(yr(g)),g<1?r.frame=requestAnimationFrame(P):r=void 0};r={frame:requestAnimationFrame(P),finish:()=>{C(1)}}},finishMorph:a,moveNode(i,p,s){a();let c=e.layoutResult?.nodePositions;if(c?.[i]){for(let h of c[i])h.x+=p,h.y+=s;o()}},scheduleViewportDirty:t}});function jn(e,t,o){let r=e.walks,n=r.offsets[1]??0,a={nodes:e.nodes,links:e.links,walks:{names:r.names.slice(0,1),starts:r.starts.subarray(0,1),ends:r.ends.subarray(0,1),offsets:Int32Array.of(0,n),steps:r.steps.subarray(0,n),reversed:r.reversed.subarray(0,n)}},i=at(a,t,{referencePath:o}),p=new Int32Array(e.nodes.names.length);for(let c of r.steps)p[c]++;i.nodes.forEach((c,h)=>{c.depth=Math.max(p[h],1)});let s=r.names.slice(1).flatMap((c,h)=>r.offsets[h+2]<=r.offsets[h+1]?[]:[{...So(c),nodeIds:[],start:r.starts[h+1]}]);return i.paths=[...i.paths??[],...s],i}function Fn(e,t,o){let r=lo(e);if(r.length===0)return;let n=o?r.filter(a=>Ve(a,o)):r;return{nodePositions:ho(n.length>0?n:r),rowLabels:No(t),referenceAxis:!0,pixelRows:!0,extent:Eo(t)}}var Ua=Hn.views(e=>({get engineSettings(){return Ko({engine:e.layoutEngine,quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}})),On=Ua.actions(e=>{let t,o,r,n=new WeakMap;function a(d,u){let{rpcManager:l}=L(e);return l.call(le(e),"GraphComputeLayout",{...d,signal:t?.signal,statusCallback:M=>{u===r&&e.setStatusMessage(co(M)??"")}})}function*i(d){let u=performance.now(),l=ge.has(e.chosenLayoutMode),M=e.graphRegion,x=l&&M?Ln(d,M):d,S=l&&e.tubeMapFold>0&&!x.reads?An(x,e.tubeMapFold):void 0,G=S?.graph??x,I=ae=>l&&e.tubeMapRoutes!=="each"?Wt(ae,e.tubeMapColoring?.valueOf,e.tubeMapRoutes==="bundled"):ae,F=e.walkCut?.walkRowRuns,_=e.chosenLayoutMode==="walkrows"&&F?Fn(d,Ro(F),e.graphRegion):z(e.chosenLayoutMode).run(I(G),e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(_){let ae=me=>S&&me.tubeMap?{...me,tubeMap:{...me.tubeMap,coarse:S}}:me,J=ae(_),ve=e.tubeMapPanelSplit;return{result:l&&ve?_r(J,it(G,ve).map(me=>{let io=z(e.chosenLayoutMode).run(I(Wr(G,me.paths)),e.graphRegion);return{...me,result:io&&ae(io)}})):J,duration:performance.now()-u,mode:e.chosenLayoutMode}}let X=e.engineSettings,ue=We.ready(d,X);if(ue)return{result:ue,duration:performance.now()-u,mode:"force"};let ne={},Le=We.layout(d,X,ae=>a(ae,ne));return r=n.get(Le)??ne,n.set(Le,r),{...yield Le,mode:"force"}}let p=0,s=!1,c,h,w=new Map;function m(){e.graph!==h&&(h=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0)}function*f(d){let u=++p;s=!0,r=void 0;let l=()=>e.graph===d&&u===p,M=t?.signal,x;try{if(e.modeDrawsNodes&&d.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${d.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Pick Layout \u2192 Walk rows, zoom in to a smaller region, or raise the node limit in Graph settings.`);x=yield*i(d)}catch(G){if(!l()||M?.aborted)return!1;throw c=G,m(),G}finally{u===p&&(s=!1,g())}let S=l();if(S){c!==void 0&&e.error===c&&(e.error=void 0),c=void 0;let G=e.layoutResult,I=e.screenTransform;h=d,e.layoutResult=x.result,e.drawnLayoutMode=x.mode,e.setLayoutMs(x.duration),e.followNewLayout(G),e.morphFrom(G,I)}return S}function R(d,u){let l=d.anchorPaths;return d.anchoredBy==="paths"&&l?(wt(d,e.assemblySpellings(u.assemblyName))??Bo(l,u.assemblyName))?.name:void 0}function v(d,u,l,M=!1){let x=e.referencePath||l?.assemblyName,S=typeof d!="string"&&d.walkRowRuns&&!M?jn(d,u,x):at(d,u,{referencePath:x});return S.anchoredBy==="tags"&&!S.referencePath&&S.paths?.length&&l&&(S.referencePath=wt(S,e.assemblySpellings(l.assemblyName))?.name),S}function C(d){e.graph=d?.graph,e.walkCut=d?.walkCut,e.graphRegion=d?.region,e.loadedReferencePath=d?.loadedReferencePath,e.foldedBelowBp=d?.foldedBelowBp,e.readsShown=d?.readsShown,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,w.clear(),e.repeatArrays=void 0,e.clearInteractionState()}function*y(d,u,l,M=!1,x,S=0){let G=t?.signal,I=typeof d!="string"&&d.walkRowRuns?d:void 0,F=v(d,u,l),_=l?R(F,l):void 0,X=!e.referencePath&&_!==void 0&&_!==F.referencePath?Qe(F,_):F,ue=S>0&&!x?Ot(X,S):X,ne=l&&ue!==X?vn(ue,l,S):ue,Le;if(x){e.setStatusMessage("Reading alignments");try{let{records:J,total:ve}=yield x(ne);ne.reads=J,Le={shown:J.length,total:ve}}catch(J){if(G?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",J)}if(G?.aborted)return}let Xe=M?e.selectedNode:null;C({graph:ne,walkCut:I,region:l,loadedReferencePath:_,foldedBelowBp:ue===X?void 0:S,readsShown:Le});let ae=new Set(ne.nodes.map(J=>J.name));e.openBubbles=e.openBubbles.filter(J=>Ct(J).some(ve=>ae.has(ve))),Xe!==null&&ne.nodes.some(J=>J.id===Xe)&&(e.selectedNode=Xe),e.setStatusMessage("Computing layout"),yield*f(ne)}let b=0,P;function E(){let d=++b;return t?.abort(),t=new AbortController,P=d,e.loadCanceled=!1,{isLive:()=>d===b,signal:t.signal}}function g(){P===void 0&&!s&&e.finishLoading()}function B(){P=void 0,g()}function*O(d,u){let l=E();e.isLoading=!0,e.error=void 0;try{yield*u(l)}catch(M){l.isLive()&&(console.error(`[GraphGenomeView.${d}]`,M),e.error=M)}finally{l.isLive()&&B()}}function*H(d,u,l,M){try{return yield L(e).rpcManager.call(le(e),"CoreGetFeatures",{adapterConfig:d,regions:[u],signal:M})}catch(x){console.warn(`[GraphGenomeView] no ${l} for this graph`,x);return}}function*ee(d,u,l,M,x=0){let S=ir(d);if(d.type!=="RgfaTabixAdapter"||S===void 0)return;let G=yield*H({type:"MinigraphBubbleAdapter",uri:`${S}.bubbles.bed.gz`,baseUri:d.baseUri,assemblyNameToPanSN:d.assemblyNameToPanSN},u,"bubble index",M);G&&l()&&(e.indexBubbles=G.flatMap(I=>{let F=I.get("start"),_=I.get("end"),X=I.get("longestAlleleLength");return Math.max(_-F,X)<x?[]:[{refName:u.refName,start:F,end:_,segmentCount:I.get("segmentCount"),pathCount:I.get("pathCount")??0,inversion:I.get("inversion"),shortestAlleleLength:I.get("shortestAlleleLength"),longestAlleleLength:X,segments:I.get("segments"),shortestAllele:void 0,longestAllele:void 0}]}))}function*re(d,u,l,M){let x=d?L(e).tracks.find(S=>S.trackId===d):void 0;if(x)return yield*H(se(x,"adapter"),u,l,M)}let Ge={genes:{trackId:()=>e.geneTrack?.trackId,set:d=>{e.geneTrackFeatures=d}},repeats:{trackId:()=>e.repeatTrack?.trackId,set:d=>{e.repeatArrays=d&&Yr(d)}}};function*Ie(d,u,l,M){let{trackId:x,set:S}=Ge[d],G=x(),I=yield*re(G,u,d,M);I&&l()&&x()===G&&S(I)}function Ye(d,u,l){return["genes","repeats"].map(M=>K(Ie)(M,d,u,l))}function*Ee(d){let u=e.graphRegion;u&&(Ge[d].set(void 0),yield*Ie(d,u,()=>e.graphRegion===u))}function*Ne(d,u,l){yield*O("loadWholeGFA",function*({isLive:M,signal:x}){let S=typeof u=="string"?u:yield u(x);M()&&(yield*y(S,d,l),l&&M()&&(e.setStatusMessage("Reading annotations"),yield Promise.all(Ye(l,M,x))))})}function k(){t?.abort(),t=void 0,P=void 0,b++,p++,s=!1,r=void 0}function $(){let d=e.walkCut,u=e.graph;if(!d||!u||e.chosenLayoutMode==="walkrows")return u;let l=v(d,u.name,e.graphRegion,!0);return e.graph=l,e.walkCut=void 0,l}function j(){k(),C(),h=void 0,c=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0,e.walkRowSampleTable=void 0,o=void 0,e.openBubbles=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearPerfMetrics(),e.viewportOwner==="user"&&(e.viewportOwner="fit")}return{clearGraph(){j()},cancelLoad(){e.canCancelLoad&&(j(),e.loadCanceled=!0)},stopLoad(){k(),m(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){k()},loadGFA:K(function*(d,u="Imported GFA"){yield*Ne(u,d)}),loadGFAFromLocation:K(function*(d,u){e.setStatusMessage("Fetching GFA"),yield*Ne(De(d)||"GFA",l=>kt(d).readFile({encoding:"utf8",signal:l}),u)}),cutSubgraph:K(function*(d,u,l={},M=0){yield*O("cutSubgraph",function*({isLive:x,signal:S}){e.setStatusMessage("Fetching subgraph");let G=performance.now(),I=yield L(e).rpcManager.call(le(e),"GetSubgraph",{adapterConfig:d,region:u,opts:l,signal:S});if(x()){if(e.setFetchMs(performance.now()-G),!I)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");yield*y(I,zo(u),u,!0,gn(d)?F=>L(e).rpcManager.call(le(e),"GetGraphReads",{adapterConfig:d,nodeNames:F.nodes.map(_=>_.name),signal:S}):void 0,M),x()&&(e.setStatusMessage("Reading annotations"),yield Promise.all([l.tier==="coarse"?void 0:K(ee)(d,u,x,S,e.foldedBelowBp),...Ye(u,x,S)]))}})}),reloadRepeats:K(function*(){yield*Ee("repeats")}),reloadGenes:K(function*(){yield*Ee("genes")}),loadWalkRowSampleTable:K(function*(){let d=e.walkRowSamplesTsv,u=d?JSON.stringify(d):void 0;if(u!==o&&(o=u,e.walkRowSampleTable=void 0,!!d))try{let l=yield kt(d).readFile("utf8");q(e)&&u===o&&(e.walkRowSampleTable=Ir(l))}catch(l){q(e)&&u===o&&(o=void 0,L(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(l)})`,"warning"))}}),loadWalkGenes:K(function*(){let d=e.walkGeneReads?.reads??[],u=JSON.stringify(d),l=e.graph,M=new Map;yield Promise.all(d.map(({row:x,trackId:S,region:G})=>K(function*(){let I=`${S} ${G.refName}:${G.start}-${G.end}`,F=w.get(I);if(!F){let _=yield*re(S,G,"haplotype genes");if(!_)return;F=Xr(_).map(X=>({...X,refName:G.refName})),w.set(I,F)}M.set(x,F)})())),q(e)&&e.graph===l&&JSON.stringify(e.walkGeneReads?.reads??[])===u&&(e.walkGeneFeatures=d.length?M:void 0)}),toggleBubble(d){let u=e.openBubbles,l=u.findIndex(G=>At(G,d));if(l>=0){e.openBubbles=u.slice(0,l);return}let M=new Set(Ct(d));if(!e.graph?.nodes.some(G=>M.has(G.name))){L(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let x=e.openBubbleInsides,S=x.length-1;for(;S>=0&&!x[S].some(G=>At(G,d));)S--;e.openBubbles=[...u.slice(0,S+1),d]},closeBubbles(){e.openBubbles.length>0&&(e.openBubbles=[])},recomputeLayout:K(function*(){let d=$();if(d){e.isLoading=!0,e.setStatusMessage("Computing layout");try{yield*f(d)}catch(u){console.error("[GraphGenomeView.recomputeLayout]",u),e.error=u}}})}});function Ka(e){return Q(e)&&typeof e.get=="function"}function qa(e){let t=Ka(e)?e.get("name"):Q(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Dn(e){let t;if(Q(e)&&Q(e.hoverPosition)){let{refName:o,coord:r,coord0:n,assemblyName:a}=e.hoverPosition;typeof o=="string"&&typeof r=="number"&&(t={refName:o,coord:typeof n=="number"?n:r-1,assemblyName:typeof a=="string"?a:void 0,featureName:qa(e.hoverFeature)})}return t}function Wn(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function _n({hover:e,nodes:t}){let o,r;for(let n of t)n.name===e.featureName?o=n.id:r===void 0&&D(n)&&e.coord>=n.stable.start&&e.coord<n.stable.start+n.length&&(r=n.id);return o??r??null}var Za=/^(.+) HP(\d+)$/,Qa=/^(.+)\.(\d+)$/;function ei(e){let t=Za.exec(e),o=Qa.exec(e);return[...t?[{sample:t[1],haplotype:String(Number(t[2])+1)}]:[],...o?[{sample:o[1],haplotype:o[2]}]:[],{sample:e,haplotype:void 0}]}function ti(e){return te(e).name.split("#")[1]}function zn(e,t){let o=t.map(r=>r.name);for(let{sample:r,haplotype:n}of ei(e)){let a=o.filter(i=>mo(te(i).name)===r&&(n===void 0||ti(i)===n));if(a.length>0)return a}return[]}var $n=On.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){A(e,je(()=>{e.fittedTransform&&he(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),A(e,V(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),A(e,V(()=>{let r=e.facetGrid;return r?`${e.facetSetting.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),A(e,V(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),A(e,V(()=>e.hasGraph&&(e.chosenLayoutMode==="walkrows"||ge.has(e.chosenLayoutMode))?JSON.stringify(e.walkRowSamplesTsv??null):void 0,r=>{r!==void 0&&e.loadWalkRowSampleTable()},{fireImmediately:!0})),A(e,V(()=>e.fitPadTop,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),A(e,je(()=>{let r=Dn(L(e).hovered),n=e.hoverLightsEverything;he(()=>{let a=e.graphRegion,i=e.graph,p=r&&a&&Wn(r,a)?r:void 0,s=p?.featureName&&i?.paths?zn(p.featureName,i.paths):[];a&&i&&!e.pointerInPane&&e.setHoveredNode(p&&n&&s.length===0?_n({hover:p,nodes:i.nodes}):null),e.setHoveredRowWalks(s)})})),A(e,V(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.clearHover()},{name:"GraphClearHoverOnViewportChange"}));let o=!0;A(e,je(()=>{let{scale:r}=e,n=dr(e);if(o){o=!1;return}let a=he(()=>e.builtViewport);a?.scale===r&&Qo(a.bounds,n)||e.scheduleViewportDirty()})),A(e,je(()=>{let r=e.currentRenderingBackend;r&&(e.applySelection(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:o=>{if(o.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap||e.facetPanels)return cr(e.viewportDirty),o.uploadGeometry(Pt),e.setGeometryMetrics(0,Pt,{scale:he(()=>e.scale),bounds:he(()=>e.viewportToBuild())}),!0;let r=performance.now(),n=e.buildDrawing(e.walkLift??e.openBubbleFocus,e.effectiveDrawPaths);return n?(o.uploadGeometry(n.batch),e.setGeometryMetrics(performance.now()-r,n.batch,{scale:he(()=>e.scale),bounds:n.viewportBounds}),!0):!1},render:o=>e.nodePositions?(e.paint(o),e.markPainted(),!0):!1,releaseTargets:o=>{o.releaseOffscreenTargets()}}))}})).actions(e=>({relayoutFrom(t){return e.recomputeLayout()}})).actions(e=>({relayout(t){return e.handledLayoutMode=e.chosenLayoutMode,e.relayoutFrom(t)}})).actions(e=>({switchLayout(t){let o=e.chosenLayoutMode;return e.setLayoutMode(t),e.relayout(o)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user");for(let[t,o]of[[()=>e.geneTrack?.trackId,()=>e.reloadGenes()],[()=>e.repeatTrack?.trackId,()=>e.reloadRepeats()]])A(e,V(()=>({track:t(),region:e.graphRegion}),(r,n)=>{r.region&&r.region===n.region&&o()},{equals:(r,n)=>r.track===n.track&&r.region===n.region}));A(e,V(()=>e.chosenLayoutMode,(t,o)=>{t!==e.handledLayoutMode&&e.relayout(o)})),A(e,V(()=>({mode:e.chosenLayoutMode,engine:JSON.stringify(e.engineSettings),maxNodes:e.maxGraphNodes}),(t,o)=>{e.graph&&t.mode===o.mode&&(t.engine!==o.engine&&e.usesLayoutEngine||t.maxNodes!==o.maxNodes&&e.modeDrawsNodes)&&e.recomputeLayout()},{equals:(t,o)=>t.mode===o.mode&&t.engine===o.engine&&t.maxNodes===o.maxNodes})),A(e,V(()=>ge.has(e.chosenLayoutMode)?JSON.stringify({fold:e.tubeMapFold,facet:e.facetSetting,groupBy:e.walkRowGroupBy,table:e.walkRowGroupBy&&e.walkRowSampleTable?.length,routes:e.tubeMapRoutes,bundledBy:e.tubeMapRoutes!=="each"?e.tubeMapColoring?.field:void 0}):void 0,(t,o)=>{t!==void 0&&o!==void 0&&e.graph&&e.recomputeLayout()}))}})).actions(e=>({switchForceEngine(t){return e.setLayoutEngine(t),e.chosenLayoutMode==="force"?void 0:e.switchLayout("force")}}));var oi="FeatureTrack";function Jn({session:e,assemblyName:t,first:o}){let r=Oe(e,t),n=[];for(let a of e.tracks){let i=se(a,"trackId");se(a,"type")===oi&&typeof i=="string"&&i!==o&&nt(e,a).includes(r)&&n.push(i)}return o?[o,...n]:n}var Yn=U(N("path",{d:"M9.19 6.35c-2.04 2.29-3.44 5.58-3.57 5.89L2 10.69l4.05-4.05c.47-.47 1.15-.68 1.81-.55zM11.17 17s3.74-1.55 5.89-3.7c5.4-5.4 4.5-9.62 4.21-10.57-.95-.3-5.17-1.19-10.57 4.21C8.55 9.09 7 12.83 7 12.83zm6.48-2.19c-2.29 2.04-5.58 3.44-5.89 3.57L13.31 22l4.05-4.05c.47-.47.68-1.15.55-1.81zM9 18c0 .83-.34 1.58-.88 2.12C6.94 21.3 2 22 2 22s.7-4.94 1.88-6.12C4.42 15.34 5.17 15 6 15c1.66 0 3 1.34 3 3m4-9c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2"}),"RocketLaunch");function gt(e,t){Lo(e,t);let o=e.find(r=>"subMenu"in r&&r.label===Go);o&&!o.icon&&(o.icon=Yn)}var ri="SyntenyTrack",ni="Synteny adapters";function ai(e){if(se(e,"type")===ri)return!0;let t=e.adapter?.type;if(typeof t!="string"||!fo(e))return!1;let{pluginManager:o}=yo(e);return!!o?.hasAdapterType(t)&&o.getAdapterType(t).adapterMetadata?.category===ni}function Xn(e,t){let o=new Set(t),r=[];for(let n of e.tracks){let a=se(n,"trackId");if(ai(n)&&typeof a=="string"){let i=nt(e,n).filter(p=>o.has(p)).length;i>=2&&r.push({trackId:a,name:xo(n,e),coverage:i})}}return r.sort((n,a)=>a.coverage-n.coverage)}function Un(e,t,o="image/svg+xml"){let r=URL.createObjectURL(new Blob([e],{type:o})),n=document.createElement("a");n.href=r,n.download=t,n.click(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}var Kn=[["fmmm","FMMM"],["stress","stress"]],$t=e=>e.label.replace(/ layout$/,"");function oe(e,t,o){return e.map(({value:r,label:n,disabled:a})=>({type:"radio",label:n,disabled:a,checked:r===t,onClick:()=>{o(r)}}))}var qn=$n.actions(e=>({showInLinearView(t){let o=L(e),r=t.assembly===e.graphRegion?.assemblyName,n=$o({session:o,location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId,tracks:Jn({session:o,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(n)},highlightInLinearView(t){Jo({session:L(e),location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId})},showSyntenyView(t){Yo({session:L(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.sourceTrackId})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(o=>o.sample);return t.length>=2?Xn(L(e),t):[]}})).views(e=>({walkRowSampleMenuItems(){let{disagreeing:t}=e.walkRowSampleChoices,o=e.walkRowSamples,r=n=>n.join(`
3
+ `)&&(e.hoveredRowWalks=t)},setHoveredWalkRow(t){e.hoveredWalkRow=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){this.setLayer("walkStrip",t),e.stripHover=null},setStripHover(t){e.stripHover=t;let o=e.walkStripRows,r=e.walkStripFrame,n=t&&o?[o.reference,...o.rows].find(i=>i.name===t.row):void 0,a=n&&r&&e.graph?Fo(e.graph,n,t.offset,r.scaleX):void 0;e.hoveredNode=a??null},setLegendSize(t){e.legendSize=t},setHoveredEdge(t){e.hoveredEdge=e.hoverLightsEverything?t:null},setSelectedNode(t){e.selectedNode=t},setDraggingNode(t){e.draggingNode=t},setPanning(t){e.isPanning=t},stopDragging(){e.draggingNode=null,e.isPanning=!1},clearHover(){e.hoveredNode=null,e.hoveredAt=null,e.hoveredTube=null,e.hoveredPanel=null,e.hoveredWalkRow=null,e.hoveredBubble=null,e.hoveredEdge=null},clearInteractionState(){this.clearHover(),e.hoveredRowWalks=[],e.stripHover=null,e.selectedNode=null,e.draggingNode=null,e.isPanning=!1},showNodeDetails(t){let o=e.nodeById?.get(t);if(o){let r=L(e),n=e.graphRegion,a=n?e.nodeSpan(t):void 0;po(r)&&r.showWidget(r.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:o.id,name:o.name,length:o.length,depth:o.depth,rank:o.stable?.rank,stableName:o.stable?.refName,contributingAssembly:Gt(o)?.sample,contributingHaplotype:Gt(o)?.haplotype,sampleCount:o.samples?.length,samples:o.samples,...n&&a?{refName:n.refName,assemblyName:n.assemblyName,start:a.start,end:a.end}:{}}}))}},setTransform(t,o,r){let{host:n}=e;e.viewportOwner==="host"&&n?n.horizontalScroll(e.translateX-o):(e.viewportOwner="user",e.scale=qo(t),e.translateX=o),e.translateY=r,e.keepDrawingInView()},zoom(t,o,r){let{host:n}=e;if(e.viewportOwner==="host"&&n){n.zoomTo(n.bpPerPx/t,o);return}e.viewportOwner="user";let a=er(e,t,o,r,e.pixelRows);e.scale=a.scale,e.translateX=a.translateX,e.translateY=a.translateY,e.keepDrawingInView()},setViewportDirty(){e.viewportRebuildPending=!1,e.viewportDirty++},setPositionsDirty(){e.positionsVersion++},setMorphFrame(t){e.morphEntering=t,e.positionsVersion++},zoomToFit(){if(e.viewportOwner==="host"){let o=e.layoutBounds,{usableHeight:r}=e;o&&r>0&&(e.translateY=Zo(o,r,e.scaleY,e.fitPads.top));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,o){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=o,r&&e.zoomToFit()},followNewLayout(t){let o=e.layoutBounds;if(e.viewportOwner!=="user"||!o||t===e.layoutResult)return;let r=t?.referenceAxis===!0&&e.xIsReferenceBp;t===void 0||r&&(!e.paneMeasured||In(o,e,e.viewBox))?e.keepDrawingInView():(e.viewportOwner="fit",e.zoomToFit())},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{q(e)&&e.setViewportDirty()},sr)}function o(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{q(e)&&e.setPositionsDirty()})}let r;function n(){r&&(cancelAnimationFrame(r.frame),r=void 0)}function a(){let i=r;n(),i?.finish()}return{morphFrom(i,p){let s=e.layoutResult;if(i===s)return;let c=r&&i?structuredClone(i.nodePositions):i?.nodePositions;a();let h=e.graph;if(!i||!c||!s||!h||i.referenceAxis||s.referenceAxis||i.pixelRows||s.pixelRows||s.tubeMap||e.facetGrid||h.nodes.length>mr||typeof requestAnimationFrame>"u"||"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;e.viewportOwner==="fit"&&e.zoomToFit();let w=s.deletionRoutes??{},m=structuredClone({nodes:s.nodePositions,routes:w}),f=gr(c,p,s.nodePositions,e.screenTransform,h.edges),R={nodes:f,routes:br(w,h.edges,f,m.nodes)},v=new Set(Object.keys(s.nodePositions).filter(E=>!c[E])),C=E=>{Bt(s.nodePositions,R.nodes,m.nodes,E),Bt(w,R.routes,m.routes,E),q(e)&&e.setMorphFrame(E<1&&v.size>0?{layout:s,ids:v,alpha:E}:void 0)};C(0);let y=0,b=performance.now(),P=()=>{if(!q(e)||e.layoutResult!==s){r=void 0;return}let E=performance.now();y+=Math.min(E-b,hr),b=E;let g=Math.min(1,y/lr);C(yr(g)),g<1?r.frame=requestAnimationFrame(P):r=void 0};r={frame:requestAnimationFrame(P),finish:()=>{C(1)}}},finishMorph:a,moveNode(i,p,s){a();let c=e.layoutResult?.nodePositions;if(c?.[i]){for(let h of c[i])h.x+=p,h.y+=s;o()}},scheduleViewportDirty:t}});function jn(e,t,o){let r=e.walks,n=r.offsets[1]??0,a={nodes:e.nodes,links:e.links,walks:{names:r.names.slice(0,1),starts:r.starts.subarray(0,1),ends:r.ends.subarray(0,1),offsets:Int32Array.of(0,n),steps:r.steps.subarray(0,n),reversed:r.reversed.subarray(0,n)}},i=at(a,t,{referencePath:o}),p=new Int32Array(e.nodes.names.length);for(let c of r.steps)p[c]++;i.nodes.forEach((c,h)=>{c.depth=Math.max(p[h],1)});let s=r.names.slice(1).flatMap((c,h)=>r.offsets[h+2]<=r.offsets[h+1]?[]:[{...So(c),nodeIds:[],start:r.starts[h+1]}]);return i.paths=[...i.paths??[],...s],i}function Fn(e,t,o){let r=lo(e);if(r.length===0)return;let n=o?r.filter(a=>Ve(a,o)):r;return{nodePositions:ho(n.length>0?n:r),rowLabels:No(t),referenceAxis:!0,pixelRows:!0,extent:Eo(t)}}var Ua=Hn.views(e=>({get engineSettings(){return Ko({engine:e.layoutEngine,quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}})),On=Ua.actions(e=>{let t,o,r,n=new WeakMap;function a(d,u){let{rpcManager:l}=L(e);return l.call(le(e),"GraphComputeLayout",{...d,signal:t?.signal,statusCallback:M=>{u===r&&e.setStatusMessage(co(M)??"")}})}function*i(d){let u=performance.now(),l=ge.has(e.chosenLayoutMode),M=e.graphRegion,x=l&&M?Ln(d,M):d,S=l&&e.tubeMapFold>0&&!x.reads?An(x,e.tubeMapFold):void 0,G=S?.graph??x,I=ae=>l&&e.tubeMapRoutes!=="each"?Wt(ae,e.tubeMapColoring?.valueOf,e.tubeMapRoutes==="bundled"):ae,F=e.walkCut?.walkRowRuns,_=e.chosenLayoutMode==="walkrows"&&F?Fn(d,Ro(F),e.graphRegion):z(e.chosenLayoutMode).run(I(G),e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(_){let ae=me=>S&&me.tubeMap?{...me,tubeMap:{...me.tubeMap,coarse:S}}:me,J=ae(_),ve=e.tubeMapPanelSplit;return{result:l&&ve?_r(J,it(G,ve).map(me=>{let io=z(e.chosenLayoutMode).run(I(Dr(G,me.paths)),e.graphRegion);return{...me,result:io&&ae(io)}})):J,duration:performance.now()-u,mode:e.chosenLayoutMode}}let X=e.engineSettings,ue=De.ready(d,X);if(ue)return{result:ue,duration:performance.now()-u,mode:"force"};let ne={},Le=De.layout(d,X,ae=>a(ae,ne));return r=n.get(Le)??ne,n.set(Le,r),{...yield Le,mode:"force"}}let p=0,s=!1,c,h,w=new Map;function m(){e.graph!==h&&(h=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0)}function*f(d){let u=++p;s=!0,r=void 0;let l=()=>e.graph===d&&u===p,M=t?.signal,x;try{if(e.modeDrawsNodes&&d.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${d.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Pick Layout \u2192 Walk rows, zoom in to a smaller region, or raise the node limit in Graph settings.`);x=yield*i(d)}catch(G){if(!l()||M?.aborted)return!1;throw c=G,m(),G}finally{u===p&&(s=!1,g())}let S=l();if(S){c!==void 0&&e.error===c&&(e.error=void 0),c=void 0;let G=e.layoutResult,I=e.screenTransform;h=d,e.layoutResult=x.result,e.drawnLayoutMode=x.mode,e.setLayoutMs(x.duration),e.followNewLayout(G),e.morphFrom(G,I)}return S}function R(d,u){let l=d.anchorPaths;return d.anchoredBy==="paths"&&l?(wt(d,e.assemblySpellings(u.assemblyName))??Bo(l,u.assemblyName))?.name:void 0}function v(d,u,l,M=!1){let x=e.referencePath||l?.assemblyName,S=typeof d!="string"&&d.walkRowRuns&&!M?jn(d,u,x):at(d,u,{referencePath:x});return S.anchoredBy==="tags"&&!S.referencePath&&S.paths?.length&&l&&(S.referencePath=wt(S,e.assemblySpellings(l.assemblyName))?.name),S}function C(d){e.graph=d?.graph,e.walkCut=d?.walkCut,e.graphRegion=d?.region,e.loadedReferencePath=d?.loadedReferencePath,e.foldedBelowBp=d?.foldedBelowBp,e.readsShown=d?.readsShown,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,w.clear(),e.repeatArrays=void 0,e.clearInteractionState()}function*y(d,u,l,M=!1,x,S=0){let G=t?.signal,I=typeof d!="string"&&d.walkRowRuns?d:void 0,F=v(d,u,l),_=l?R(F,l):void 0,X=!e.referencePath&&_!==void 0&&_!==F.referencePath?Qe(F,_):F,ue=S>0&&!x?Ft(X,S):X,ne=l&&ue!==X?vn(ue,l,S):ue,Le;if(x){e.setStatusMessage("Reading alignments");try{let{records:J,total:ve}=yield x(ne);ne.reads=J,Le={shown:J.length,total:ve}}catch(J){if(G?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",J)}if(G?.aborted)return}let Xe=M?e.selectedNode:null;C({graph:ne,walkCut:I,region:l,loadedReferencePath:_,foldedBelowBp:ue===X?void 0:S,readsShown:Le});let ae=new Set(ne.nodes.map(J=>J.name));e.openBubbles=e.openBubbles.filter(J=>Ct(J).some(ve=>ae.has(ve))),Xe!==null&&ne.nodes.some(J=>J.id===Xe)&&(e.selectedNode=Xe),e.setStatusMessage("Computing layout"),yield*f(ne)}let b=0,P;function E(){let d=++b;return t?.abort(),t=new AbortController,P=d,e.loadCanceled=!1,{isLive:()=>d===b,signal:t.signal}}function g(){P===void 0&&!s&&e.finishLoading()}function B(){P=void 0,g()}function*O(d,u){let l=E();e.isLoading=!0,e.error=void 0;try{yield*u(l)}catch(M){l.isLive()&&(console.error(`[GraphGenomeView.${d}]`,M),e.error=M)}finally{l.isLive()&&B()}}function*H(d,u,l,M){try{return yield L(e).rpcManager.call(le(e),"CoreGetFeatures",{adapterConfig:d,regions:[u],signal:M})}catch(x){console.warn(`[GraphGenomeView] no ${l} for this graph`,x);return}}function*ee(d,u,l,M,x=0){let S=ir(d);if(d.type!=="RgfaTabixAdapter"||S===void 0)return;let G=yield*H({type:"MinigraphBubbleAdapter",uri:`${S}.bubbles.bed.gz`,baseUri:d.baseUri,assemblyNameToPanSN:d.assemblyNameToPanSN},u,"bubble index",M);G&&l()&&(e.indexBubbles=G.flatMap(I=>{let F=I.get("start"),_=I.get("end"),X=I.get("longestAlleleLength");return Math.max(_-F,X)<x?[]:[{refName:u.refName,start:F,end:_,segmentCount:I.get("segmentCount"),pathCount:I.get("pathCount")??0,inversion:I.get("inversion"),shortestAlleleLength:I.get("shortestAlleleLength"),longestAlleleLength:X,segments:I.get("segments"),shortestAllele:void 0,longestAllele:void 0}]}))}function*re(d,u,l,M){let x=d?L(e).tracks.find(S=>S.trackId===d):void 0;if(x)return yield*H(se(x,"adapter"),u,l,M)}let Ge={genes:{trackId:()=>e.geneTrack?.trackId,set:d=>{e.geneTrackFeatures=d}},repeats:{trackId:()=>e.repeatTrack?.trackId,set:d=>{e.repeatArrays=d&&Yr(d)}}};function*Ie(d,u,l,M){let{trackId:x,set:S}=Ge[d],G=x(),I=yield*re(G,u,d,M);I&&l()&&x()===G&&S(I)}function Ye(d,u,l){return["genes","repeats"].map(M=>K(Ie)(M,d,u,l))}function*Ee(d){let u=e.graphRegion;u&&(Ge[d].set(void 0),yield*Ie(d,u,()=>e.graphRegion===u))}function*Ne(d,u,l){yield*O("loadWholeGFA",function*({isLive:M,signal:x}){let S=typeof u=="string"?u:yield u(x);M()&&(yield*y(S,d,l),l&&M()&&(e.setStatusMessage("Reading annotations"),yield Promise.all(Ye(l,M,x))))})}function k(){t?.abort(),t=void 0,P=void 0,b++,p++,s=!1,r=void 0}function $(){let d=e.walkCut,u=e.graph;if(!d||!u||e.chosenLayoutMode==="walkrows")return u;let l=v(d,u.name,e.graphRegion,!0);return e.graph=l,e.walkCut=void 0,l}function j(){k(),C(),h=void 0,c=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0,e.walkRowSampleTable=void 0,o=void 0,e.openBubbles=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearPerfMetrics(),e.viewportOwner==="user"&&(e.viewportOwner="fit")}return{clearGraph(){j()},cancelLoad(){e.canCancelLoad&&(j(),e.loadCanceled=!0)},stopLoad(){k(),m(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){k()},loadGFA:K(function*(d,u="Imported GFA"){yield*Ne(u,d)}),loadGFAFromLocation:K(function*(d,u){e.setStatusMessage("Fetching GFA"),yield*Ne(We(d)||"GFA",l=>kt(d).readFile({encoding:"utf8",signal:l}),u)}),cutSubgraph:K(function*(d,u,l={},M=0){yield*O("cutSubgraph",function*({isLive:x,signal:S}){e.setStatusMessage("Fetching subgraph");let G=performance.now(),I=yield L(e).rpcManager.call(le(e),"GetSubgraph",{adapterConfig:d,region:u,opts:l,signal:S});if(x()){if(e.setFetchMs(performance.now()-G),!I)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");yield*y(I,zo(u),u,!0,gn(d)?F=>L(e).rpcManager.call(le(e),"GetGraphReads",{adapterConfig:d,nodeNames:F.nodes.map(_=>_.name),signal:S}):void 0,M),x()&&(e.setStatusMessage("Reading annotations"),yield Promise.all([l.tier==="coarse"?void 0:K(ee)(d,u,x,S,e.foldedBelowBp),...Ye(u,x,S)]))}})}),reloadRepeats:K(function*(){yield*Ee("repeats")}),reloadGenes:K(function*(){yield*Ee("genes")}),loadWalkRowSampleTable:K(function*(){let d=e.walkRowSamplesTsv,u=d?JSON.stringify(d):void 0;if(u!==o&&(o=u,e.walkRowSampleTable=void 0,!!d))try{let l=yield kt(d).readFile("utf8");q(e)&&u===o&&(e.walkRowSampleTable=Ir(l))}catch(l){q(e)&&u===o&&(o=void 0,L(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(l)})`,"warning"))}}),loadWalkGenes:K(function*(){let d=e.walkGeneReads?.reads??[],u=JSON.stringify(d),l=e.graph,M=new Map;yield Promise.all(d.map(({row:x,trackId:S,region:G})=>K(function*(){let I=`${S} ${G.refName}:${G.start}-${G.end}`,F=w.get(I);if(!F){let _=yield*re(S,G,"haplotype genes");if(!_)return;F=Xr(_).map(X=>({...X,refName:G.refName})),w.set(I,F)}M.set(x,F)})())),q(e)&&e.graph===l&&JSON.stringify(e.walkGeneReads?.reads??[])===u&&(e.walkGeneFeatures=d.length?M:void 0)}),toggleBubble(d){let u=e.openBubbles,l=u.findIndex(G=>At(G,d));if(l>=0){e.openBubbles=u.slice(0,l);return}let M=new Set(Ct(d));if(!e.graph?.nodes.some(G=>M.has(G.name))){L(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let x=e.openBubbleInsides,S=x.length-1;for(;S>=0&&!x[S].some(G=>At(G,d));)S--;e.openBubbles=[...u.slice(0,S+1),d]},closeBubbles(){e.openBubbles.length>0&&(e.openBubbles=[])},recomputeLayout:K(function*(){let d=$();if(d){e.isLoading=!0,e.setStatusMessage("Computing layout");try{yield*f(d)}catch(u){console.error("[GraphGenomeView.recomputeLayout]",u),e.error=u}}})}});function Ka(e){return Q(e)&&typeof e.get=="function"}function qa(e){let t=Ka(e)?e.get("name"):Q(e)?e.name:void 0;return typeof t=="string"?t:void 0}function Wn(e){let t;if(Q(e)&&Q(e.hoverPosition)){let{refName:o,coord:r,coord0:n,assemblyName:a}=e.hoverPosition;typeof o=="string"&&typeof r=="number"&&(t={refName:o,coord:typeof n=="number"?n:r-1,assemblyName:typeof a=="string"?a:void 0,featureName:qa(e.hoverFeature)})}return t}function Dn(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function _n({hover:e,nodes:t}){let o,r;for(let n of t)n.name===e.featureName?o=n.id:r===void 0&&W(n)&&e.coord>=n.stable.start&&e.coord<n.stable.start+n.length&&(r=n.id);return o??r??null}var Za=/^(.+) HP(\d+)$/,Qa=/^(.+)\.(\d+)$/;function ei(e){let t=Za.exec(e),o=Qa.exec(e);return[...t?[{sample:t[1],haplotype:String(Number(t[2])+1)}]:[],...o?[{sample:o[1],haplotype:o[2]}]:[],{sample:e,haplotype:void 0}]}function ti(e){return te(e).name.split("#")[1]}function zn(e,t){let o=t.map(r=>r.name);for(let{sample:r,haplotype:n}of ei(e)){let a=o.filter(i=>mo(te(i).name)===r&&(n===void 0||ti(i)===n));if(a.length>0)return a}return[]}var $n=On.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){A(e,je(()=>{e.fittedTransform&&he(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),A(e,V(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),A(e,V(()=>{let r=e.facetGrid;return r?`${e.facetSetting.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),A(e,V(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),A(e,V(()=>e.hasGraph&&(e.chosenLayoutMode==="walkrows"||ge.has(e.chosenLayoutMode))?JSON.stringify(e.walkRowSamplesTsv??null):void 0,r=>{r!==void 0&&e.loadWalkRowSampleTable()},{fireImmediately:!0})),A(e,V(()=>e.fitPadTop,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),A(e,je(()=>{let r=Wn(L(e).hovered),n=e.hoverLightsEverything;he(()=>{let a=e.graphRegion,i=e.graph,p=r&&a&&Dn(r,a)?r:void 0,s=p?.featureName&&i?.paths?zn(p.featureName,i.paths):[];a&&i&&!e.pointerInPane&&e.setHoveredNode(p&&n&&s.length===0?_n({hover:p,nodes:i.nodes}):null),e.setHoveredRowWalks(s)})})),A(e,V(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.clearHover()},{name:"GraphClearHoverOnViewportChange"}));let o=!0;A(e,je(()=>{let{scale:r}=e,n=dr(e);if(o){o=!1;return}let a=he(()=>e.builtViewport);a?.scale===r&&Qo(a.bounds,n)||e.scheduleViewportDirty()})),A(e,je(()=>{let r=e.currentRenderingBackend;r&&(e.applySelection(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:o=>{if(o.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap||e.facetPanels)return cr(e.viewportDirty),o.uploadGeometry(Pt),e.setGeometryMetrics(0,Pt,{scale:he(()=>e.scale),bounds:he(()=>e.viewportToBuild())}),!0;let r=performance.now(),n=e.buildDrawing(e.walkLift??e.openBubbleFocus,e.effectiveDrawPaths);return n?(o.uploadGeometry(n.batch),e.setGeometryMetrics(performance.now()-r,n.batch,{scale:he(()=>e.scale),bounds:n.viewportBounds}),!0):!1},render:o=>e.nodePositions?(e.paint(o),e.markPainted(),!0):!1,releaseTargets:o=>{o.releaseOffscreenTargets()}}))}})).actions(e=>({relayoutFrom(t){return e.recomputeLayout()}})).actions(e=>({relayout(t){return e.handledLayoutMode=e.chosenLayoutMode,e.relayoutFrom(t)}})).actions(e=>({switchLayout(t){let o=e.chosenLayoutMode;return e.setLayoutMode(t),e.relayout(o)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user");for(let[t,o]of[[()=>e.geneTrack?.trackId,()=>e.reloadGenes()],[()=>e.repeatTrack?.trackId,()=>e.reloadRepeats()]])A(e,V(()=>({track:t(),region:e.graphRegion}),(r,n)=>{r.region&&r.region===n.region&&o()},{equals:(r,n)=>r.track===n.track&&r.region===n.region}));A(e,V(()=>e.chosenLayoutMode,(t,o)=>{t!==e.handledLayoutMode&&e.relayout(o)})),A(e,V(()=>({mode:e.chosenLayoutMode,engine:JSON.stringify(e.engineSettings),maxNodes:e.maxGraphNodes}),(t,o)=>{e.graph&&t.mode===o.mode&&(t.engine!==o.engine&&e.usesLayoutEngine||t.maxNodes!==o.maxNodes&&e.modeDrawsNodes)&&e.recomputeLayout()},{equals:(t,o)=>t.mode===o.mode&&t.engine===o.engine&&t.maxNodes===o.maxNodes})),A(e,V(()=>ge.has(e.chosenLayoutMode)?JSON.stringify({fold:e.tubeMapFold,facet:e.facetSetting,groupBy:e.walkRowGroupBy,table:e.walkRowGroupBy&&e.walkRowSampleTable?.length,routes:e.tubeMapRoutes,bundledBy:e.tubeMapRoutes!=="each"?e.tubeMapColoring?.field:void 0}):void 0,(t,o)=>{t!==void 0&&o!==void 0&&e.graph&&e.recomputeLayout()}))}})).actions(e=>({switchForceEngine(t){return e.setLayoutEngine(t),e.chosenLayoutMode==="force"?void 0:e.switchLayout("force")}}));var oi="FeatureTrack";function Jn({session:e,assemblyName:t,first:o}){let r=Oe(e,t),n=[];for(let a of e.tracks){let i=se(a,"trackId");se(a,"type")===oi&&typeof i=="string"&&i!==o&&nt(e,a).includes(r)&&n.push(i)}return o?[o,...n]:n}var Yn=U(N("path",{d:"M9.19 6.35c-2.04 2.29-3.44 5.58-3.57 5.89L2 10.69l4.05-4.05c.47-.47 1.15-.68 1.81-.55zM11.17 17s3.74-1.55 5.89-3.7c5.4-5.4 4.5-9.62 4.21-10.57-.95-.3-5.17-1.19-10.57 4.21C8.55 9.09 7 12.83 7 12.83zm6.48-2.19c-2.29 2.04-5.58 3.44-5.89 3.57L13.31 22l4.05-4.05c.47-.47.68-1.15.55-1.81zM9 18c0 .83-.34 1.58-.88 2.12C6.94 21.3 2 22 2 22s.7-4.94 1.88-6.12C4.42 15.34 5.17 15 6 15c1.66 0 3 1.34 3 3m4-9c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2"}),"RocketLaunch");function gt(e,t){Lo(e,t);let o=e.find(r=>"subMenu"in r&&r.label===Go);o&&!o.icon&&(o.icon=Yn)}var ri="SyntenyTrack",ni="Synteny adapters";function ai(e){if(se(e,"type")===ri)return!0;let t=e.adapter?.type;if(typeof t!="string"||!fo(e))return!1;let{pluginManager:o}=yo(e);return!!o?.hasAdapterType(t)&&o.getAdapterType(t).adapterMetadata?.category===ni}function Xn(e,t){let o=new Set(t),r=[];for(let n of e.tracks){let a=se(n,"trackId");if(ai(n)&&typeof a=="string"){let i=nt(e,n).filter(p=>o.has(p)).length;i>=2&&r.push({trackId:a,name:xo(n,e),coverage:i})}}return r.sort((n,a)=>a.coverage-n.coverage)}function Un(e,t,o="image/svg+xml"){let r=URL.createObjectURL(new Blob([e],{type:o})),n=document.createElement("a");n.href=r,n.download=t,n.click(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}var Kn=[["fmmm","FMMM"],["stress","stress"]],zt=e=>e.label.replace(/ layout$/,"");function oe(e,t,o){return e.map(({value:r,label:n,disabled:a})=>({type:"radio",label:n,disabled:a,checked:r===t,onClick:()=>{o(r)}}))}var qn=$n.actions(e=>({showInLinearView(t){let o=L(e),r=t.assembly===e.graphRegion?.assemblyName,n=$o({session:o,location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId,tracks:Jn({session:o,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(n)},highlightInLinearView(t){Jo({session:L(e),location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId})},showSyntenyView(t){Yo({session:L(e),contributors:e.launchableAssemblies,trackId:t,graphTrackId:e.sourceTrackId})}})).views(e=>({get syntenyLaunchTracks(){let t=e.launchableAssemblies.map(o=>o.sample);return t.length>=2?Xn(L(e),t):[]}})).views(e=>({walkRowSampleMenuItems(){let{disagreeing:t}=e.walkRowSampleChoices,o=e.walkRowSamples,r=n=>n.join(`
4
4
  `)===o?.join(`
5
5
  `);return[{type:"radio",label:"Every sample",checked:o===void 0,onClick:()=>{e.setWalkRowSamples(void 0)}},...t.length>0?[{type:"radio",label:"Where walk and call disagree",checked:r(t),onClick:()=>{e.setWalkRowSamples(t)}}]:[],{type:"radio",label:"Choose samples...",checked:o!==void 0&&!r(t),onClick:()=>{L(e).queueDialog(n=>[tr,{model:e,onClose:n}])}}]},walkRowGroupMenuItems(){let t=e.walkRowGroups?e.walkRowGroupBy?.field:void 0;return oe([{value:void 0,label:"None"},...e.walkRowGroupFields.map(o=>({value:o,label:o}))],t,o=>{e.setWalkRowGroupBy(o===void 0?void 0:{field:o})})},tubeMapPanelMenuItems(){let{graph:t,walkRowSampleTable:o}=e,{field:r}=e.facetSetting,n=r===""?e.walkRowGroupBy?.field:void 0,a=i=>!!t&&it(t,i).length>1;return[...oe(Vr.map(i=>({value:i.field,label:i.label,disabled:i.field!==""&&!a({by:i.field})})),n?void 0:r,i=>{e.setFacet(i),i===""&&e.setWalkRowGroupBy(void 0)}),...oe(e.walkRowGroupFields.map(i=>({value:i,label:`By ${i}`,disabled:!o||!a({by:"column",field:i,table:o})})),n,i=>{e.setFacet(""),e.setWalkRowGroupBy({field:i})})]},layoutOptionMenuItems({repeat:t=!0}={}){return[...ge.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:oe(ar.map(({bp:o,label:r})=>({value:o,label:r,disabled:o>0&&e.graph?.reads!==void 0})),e.graph?.reads?0:e.tubeMapFold,e.setTubeMapFold)},{label:"Panels",subMenu:this.tubeMapPanelMenuItems()},{label:"Routes",subMenu:oe(pr,e.tubeMapRoutes,e.setTubeMapRoutes)},...e.walkRowGroupFields.length>0?[{label:"Tube color",subMenu:oe(["",...e.walkRowGroupFields].map(o=>({value:o,label:o?`By ${o}`:"By role"})),e.tubeMapColorBy,e.setTubeMapColorBy)}]:[]]:[],...t&&e.chosenLayoutMode==="walkrows"&&e.repeatChoices.length>0?[{label:"Repeat",subMenu:oe([{value:"",label:"Whole window"},...e.repeatChoices.map(({key:o,name:r,unit:n})=>({value:o,label:`${r} \xB7 ${n.toLocaleString()} bp unit`}))],e.selectedRepeat?.key??"",e.setRepeatKey)}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars?[{label:"Samples",subMenu:this.walkRowSampleMenuItems()}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars&&e.walkRowGroupFields.length>0?[{label:"Group by...",subMenu:this.walkRowGroupMenuItems()}]:[]]},showMenuItems(){let t=(o,r)=>({type:"checkbox",label:o,checked:e.layerSet.has(r),onClick:()=>{e.setLayer(r,!e.layerSet.has(r))}});return[t("Show bubble halos","bubbles"),t("Show deletion edges","deletions"),{label:"Hover highlight",subMenu:oe(Be.map(o=>({value:o,label:o[0].toUpperCase()+o.slice(1)})),e.chosenHover,e.setHover)},t("Show genes on the backbone","genes"),...e.referenceStripApplies?[t("Show reference strip","referenceStrip")]:[]]},exportMenuItems(){return[{label:"Export SVG",icon:Sn,disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let t=e.figure();t&&Un(t,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}},{label:"Copy figure spec",icon:wn,disabled:e.figureSpecUnavailable!==void 0,disabledHelpText:e.figureSpecUnavailable,onClick:()=>{let t=e.figureSpec(),o=L(e);navigator.clipboard.writeText(`${JSON.stringify(t,null,2)}
6
- `).then(()=>{o.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(r=>{o.notify(`Could not copy the figure spec: ${String(r)}`)})}}]},highlightMenuItems({picks:t=!0}={}){let o=t?e.walkChoices:[];if(e.walkChoices.length===0||!e.liftsWalks||!t&&e.walkLayers.length===0)return[];let r=a=>e.walkLayers.some(i=>i.walk===a),n=o.length>nr;return[{type:"subHeader",label:"Highlight"},...n?[{label:"Choose haplotypes...",onClick:()=>{L(e).queueDialog(a=>[or,{model:e,onClose:a}])}}]:[],...(n?o.filter(a=>r(a.name)):o).map(a=>({type:"checkbox",label:a.label,checked:r(a.name),onClick:()=>{e.toggleWalk(a.name)}})),{label:"Clear highlights",disabled:e.walkLayers.length===0,onClick:()=>{e.setWalkLayers([])}},...e.drawnWalks.length>0?[{label:"Color highlighted...",onClick:()=>{L(e).queueDialog(a=>[rr,{model:e,onClose:a}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...oe(Xo.map(({value:a,label:i})=>({value:a,label:a==="walk"?"A panel per haplotype":i})),e.facetSetting.field,e.setFacet)]:[]]},colorSchemeLabel(t){let o=Lt.find(r=>r.value===t)?.label??t;return t==="auto"?`${o} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:o},graphMenuItems(){let t=this.layoutOptionMenuItems(),o=z(e.chosenLayoutMode),r=Kn.find(([n])=>n===e.layoutEngine)[1];return[{label:`Layout: ${$t(o)}${o.value==="force"?` (${r})`:""}`,icon:Mn,subMenu:[...Vo.flatMap(n=>{let a={type:"radio",disabled:e.graph?!n.available(e.graph):!1,disabledHelpText:n.description};return n.value==="force"?Kn.map(([i,p])=>({...a,label:`${$t(n)} (${p})`,checked:e.chosenLayoutMode===n.value&&e.layoutEngine===i,onClick:()=>{e.switchForceEngine(i)}})):[{...a,label:$t(n),checked:e.chosenLayoutMode===n.value,onClick:()=>{e.switchLayout(n.value)}}]}),...t.length>0?[{type:"divider"},...t]:[],...e.hostPlacesX?[]:[{type:"divider"},{label:"Zoom to fit",onClick:()=>{e.refitView()}}]]},{label:`Color: ${e.colorSchemeLock?.value??this.colorSchemeLabel(e.chosenColorScheme)}`,icon:kn,disabled:e.colorSchemeLock!==void 0,disabledHelpText:e.colorSchemeLock?.why,subMenu:oe(Lt.map(({value:n})=>({value:n,label:this.colorSchemeLabel(n)})),e.chosenColorScheme,e.setColorScheme)},{label:"Show...",icon:Uo,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[];for(let o of Qr({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))gt(t,o);return t}}));var bt=qn.views(e=>({get trackHaplotypes(){let t=e.sourceAdapter;return t&&Fe(t)}})).views(e=>({get cutHaplotypes(){return e.subgraphHaplotypes??e.trackHaplotypes},offReference(t){let o=e.sourceTrack,r=o&&Wo(o),n=L(e);return r===void 0?void 0:_o(Oe(n,r),Oe(n,t.assemblyName))},cutChangedFrom(t){let o=jo(z(t),{walkStrip:e.walkStrip,host:!!e.host});return e.cutsWholeWalks!==o||t==="walkrows"!=(e.chosenLayoutMode==="walkrows")}})).views(e=>({get cutOptions(){return{hops:e.subgraphContext,haplotypes:e.cutHaplotypes,...e.chosenLayoutMode==="walkrows"?{walkRows:!0}:{},...e.cutsWholeWalks?{snarls:"overlapping"}:{}}}}));function Jt(){return T.compose("GraphGenomeView",fn,bt,T.model({type:T.literal("GraphGenomeView"),gfaLocation:T.maybe(T.frozen()),loadedRegion:T.maybe(T.frozen()),loadedTrackId:T.optional(T.string,""),layoutMode:xt(ot),color:T.maybe(T.frozen()),size:T.maybe(T.frozen()),layers:T.maybe(T.frozen()),facet:T.maybe(T.frozen()),rows:T.maybe(T.frozen()),hover:xt(Be)})).views(e=>({get grammar(){return{layoutMode:e.layoutMode,color:e.color,size:e.size,layers:e.layers,facet:e.facet,rows:e.rows,hover:e.hover}}})).actions(e=>({writeGrammar(t){Object.assign(e,t)}})).volatile(()=>({widthMeasured:!1})).actions(e=>{let t=e.setWidth;return{setWidth(o){t(o),e.widthMeasured=!0}}}).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get paneMeasured(){return e.widthMeasured},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?L(e).tracks.find(t=>t.trackId===e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return[...e.exportMenuItems(),...e.launchMenuItems()]}})).actions(e=>{let t=e.clearGraph;return{clearGraph(){t(),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let o=e.loadedRegion;if(e.gfaLocation)return e.displayName||e.setDisplayName(De(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,o);if(!e.loadedTrackId||!o)return;let r=e.sourceAdapter,n=o.end-o.start,a=e.offReference(o);if(!r)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(a)e.setError(new Error(a));else if(n>e.maxRegionBp)e.setError(new Error(`Region too large (${be(n)}) \u2014 zoom in to view graph (max ${be(e.maxRegionBp)})`));else return e.cutSubgraph(r,o,e.cutOptions)}}}).actions(e=>({retryLoad(){e.load()},relayoutFrom(t){return e.loadedTrackId&&e.cutChangedFrom(t)?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load(),A(e,V(()=>e.walkStrip,()=>{e.loadedTrackId&&!z(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var ii=yn()({});function Yt(e){e.addViewType(()=>new bn({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Jt(),launchKeys:ii,ReactComponent:pe(()=>import("./chunks/GraphGenomeView-NJ5XCREB.js"))}))}var Xt=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function si(e){let t=e.getElementTypesInGroup("display"),o=n=>t.find(a=>a.name===n),r=n=>n&&Object.assign(Object.create(n),{adapterCapabilities:["headerLanes"]});return[o("LinearGraphDisplay"),o("LinearBasicDisplay"),...Xt.map(n=>r(o(n)))].filter(n=>n!==void 0)}function Ut(e){e.addTrackType(()=>{let t=Y("GraphTrack",{},{baseConfiguration:mn(e),explicitIdentifier:"trackId"}),o=new un({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:ln(e,"GraphTrack",t)});for(let r of si(e))o.addDisplayType(r);return o})}function Kt(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:o,...r}=t;return o.addView("GraphGenomeView",r),t})}var yt=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"];var Zn=yt&&yt.__esModule?yt.default:yt;var Se=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"],pi=e=>Se!=null&&e in Object(Se)?Se[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/display-kit/trackHeightConfigSchemaFields' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),Qn=pi("trackHeightConfigSchemaFields"),gu=Se&&Se.__esModule?Se.default:Se;function ea(){return Y("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:T.enumeration("LayoutMode",ot),defaultValue:"auto"},color:{type:"frozen",defaultValue:{}},size:{type:"frozen",defaultValue:{field:"depth",value:6}},layers:{type:"frozen",defaultValue:{}},facet:{type:"frozen",defaultValue:{}},rows:{type:"frozen",defaultValue:{}},hover:{type:"stringEnum",model:T.enumeration("HoverHighlight",Be),defaultValue:"nodes"},...Qn({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var Re=JBrowseExports["@jbrowse/core/svg/svgReady"],ci=e=>Re!=null&&e in Object(Re)?Re[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/svg/svgReady' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var ta=ci("computeSvgReady");var Ru=Re&&Re.__esModule?Re.default:Re;var ft=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"];var oa=ft&&ft.__esModule?ft.default:ft;var xe=JBrowseExports["@jbrowse/display-kit/plotMenu"],di=e=>xe!=null&&e in Object(xe)?xe[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/display-kit/plotMenu' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),ra=di("editPlotMenuItems");var Gu=xe&&xe.__esModule?xe.default:xe;var Te=JBrowseExports["@jbrowse/render-core/displayPhase"],na=e=>Te!=null&&e in Object(Te)?Te[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/render-core/displayPhase' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),aa=na("computeActivityPhase");var ia=na("computeDisplayStatusPhase"),vu=Te&&Te.__esModule?Te.default:Te;var ui=new Set(["scale","translateX","translateY"]);function mi(e){return Object.fromEntries(Object.keys(ur.properties).filter(t=>!ui.has(t)).map(t=>[t,e[t]]))}var qt=10;function li(e){let{aboveBpPerPx:t,foldBelowBp:o}=e??{};return typeof t=="number"?t:typeof o=="number"&&o>0?o/qt:void 0}var hi=pe(()=>import("./chunks/GraphTrackSettingsDialog-47PQ6LM7.js"));function sa(e){return T.compose("LinearGraphDisplay",pn,oa(),bt,T.model({type:T.literal("LinearGraphDisplay"),configuration:go(e),layoutEngine:Ho(Ao,"stress"),cutRegion:T.maybe(T.frozen()),coarseCut:T.optional(T.boolean,!1)})).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0,haplotypeNames:void 0,cutFoldBp:0})).views(t=>({get grammar(){return{layoutMode:ie(t,"layoutMode"),color:ie(t,"color"),size:ie(t,"size"),layers:ie(t,"layers"),facet:ie(t,"facet"),rows:ie(t,"rows"),hover:ie(t,"hover")}},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get trackHaplotypes(){let o=t.sourceAdapter,r=t.sourceTrack;return(o&&Fe(o))??(r&&Tt(r))},get coarseAboveBpPerPx(){return li(t.sourceAdapter?.coarse)}})).views(t=>({tierAt(o){let r=t.coarseAboveBpPerPx;return r!==void 0&&o>r?"coarse":"fine"},capFor(o){return o==="coarse"?1/0:t.maxRegionBp},foldDrifted(o){let r=qt*o,n=t.cutFoldBp;return!t.graph?.paths?.length&&(r>=2*Math.max(n,1)||t.foldedBelowBp!==void 0&&r<=n/2)},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let o=t.settledWindow;return o?t.capFor(t.tierAt(o.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let o=t.settledWindow;return o!==void 0&&o.end-o.start>t.settledCapBp},get regionTooLargeReason(){let o=t.settledWindow;return o?`Region too large for a graph cut (${be(o.end-o.start)}, max ${be(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get svgReady(){return ta({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return ia({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>aa({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({writeGrammar(o){for(let[r,n]of Object.entries(o))bo(t,r,n)},setSubgraphContext(o){t.subgraphContext=o,t.dense=void 0},setSubgraphHaplotypes(o){t.subgraphHaplotypes=o,t.dense=void 0},setDense(o){t.dense=o},setHaplotypeNames(o){t.haplotypeNames=o},setMaxRegionBp(o){t.maxRegionBp=o},cut(){let o=t.cutRegion,r=t.sourceAdapter;if(!o||!r)return;let n=t.offReference(o);if(n){t.clearGraph(),t.setError(new Error(n));return}let a=t.cutTier==="coarse";return t.cutFoldBp=Math.round(qt*(t.settledWindow?.bpPerPx??t.host?.bpPerPx??0)),t.cutSubgraph(r,o,{...t.cutOptions,tier:a?"coarse":void 0},t.cutFoldBp)}})).actions(t=>({recutAt(o){let r=t.tierAt(o.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=zr(o,t.capFor(r),z(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(o){t.settledWindow=o;let r=z(t.chosenLayoutMode).cutMargins;if(t.regionTooLarge||Nt(t.dense,o)||!t.loadCanceled&&t.tierAt(o.bpPerPx)===t.cutTier&&$r(t.cutRegion,o,r)&&!t.foldDrifted(o.bpPerPx))return!1;let n=t.recutAt(o),a=t.recuts;return Promise.resolve(n).then(()=>{q(t)&&t.recuts===a&&rn(t.error)&&this.refuseDenseCut(o)}),!0},refuseDenseCut(o){t.setDense(o),t.cutRegion=void 0,this.settleOn(t.settledWindow??o)},recut(){t.cutRegion?t.cut():t.settledWindow&&this.settleOn(t.settledWindow)},relayoutFrom(o){let r=t.host?st(t.host):void 0;return r&&!t.regionTooLarge&&(t.cutChangedFrom(o)||z(o).cutMargins!==z(t.chosenLayoutMode).cutMargins)?t.recutAt(r):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({async fetchHaplotypeNames(o,r){try{let n=await L(t).rpcManager.call(le(t),"GetGraphHaplotypes",{adapterConfig:o,signal:r});q(t)&&t.sourceAdapter===o&&t.setHaplotypeNames(n)}catch(n){r?.aborted||console.warn("[LinearGraphDisplay] no haplotype names",n)}}})).actions(t=>({stretchWithHost(o,r){let n=t.layoutResult,a=t.layoutBounds;if(!n||!a||n.referenceAxis||n.pixelRows||n.tubeMap||t.facetGrid)return;t.viewportOwner==="fit"&&(t.viewportOwner="user");let i=o.bpPerPx/r.bpPerPx,p=t.translateY+t.scaleY*(a.minY+a.h/2);t.scale*=i,t.translateX=i*(t.translateX+o.offsetPx)-r.offsetPx,t.translateY=p-i*(p-t.translateY)}})).actions(t=>({forceLoad(){let o=t.settledWindow;o&&(t.setMaxRegionBp(Math.ceil(o.end-o.start)),t.settleOn(o))},afterAttach(){t.cutRegion&&!t.graph&&t.cut();let o;A(t,()=>{o?.abort()}),A(t,V(()=>{let n=t.sourceAdapter;return n&&Oo(n)?n:void 0},n=>{o?.abort(),o=void 0,t.setHaplotypeNames(void 0),n&&(o=new AbortController,t.fetchHaplotypeNames(n,o.signal))},{fireImmediately:!0,name:"GraphHaplotypeNames"})),A(t,V(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),A(t,V(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,a)=>n?.scale===a?.scale&&n?.translateX===a?.translateX,fireImmediately:!0,name:"GraphHostFrame"}));let r;A(t,V(()=>t.host&&!t.hostPlacesX?{bpPerPx:t.host.bpPerPx,offsetPx:t.host.offsetPx}:void 0,n=>{let a=r;r=n,n&&a&&n.bpPerPx>0&&t.stretchWithHost(a,n)},{equals:(n,a)=>n?.bpPerPx===a?.bpPerPx&&n?.offsetPx===a?.offsetPx,fireImmediately:!0,name:"GraphHostStretch"})),A(t,V(()=>`${t.facetSetting.field} ${t.facetPlacement?.count}`,()=>{let n=(t.facetGridIn(t.paneCeiling-pt)?.total??0)+pt;(t.facetGrid?.total??0)+pt>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),A(t,V(()=>t.host?.coarseDynamicBlocks,n=>{let{host:a}=t,i=n&&a?st(a):void 0;i&&t.settleOn(i)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let o=t.host?st(t.host):void 0,r=t.sourceTrackId;if(!o||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge||Nt(t.dense,o))return;let n=Math.floor(o.start),a=Math.ceil(o.end);return{...mi(t),loadedTrackId:r,loadedRegion:{refName:o.refName,assemblyName:o.assemblyName,start:n,end:a},subgraphHaplotypes:t.cutHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-n),...t.grammar,layoutMode:t.chosenLayoutMode,connectedViewId:t.host?.id}}})).actions(t=>({openGraphView(){let o=t.graphViewSpec;o&&L(t).addView("GraphGenomeView",o)}})).views(t=>({cutMenuItems(){let o=t.sourceAdapter,r=t.sourceTrack;if(!o||!r||!Do(o))return[];let n=Fe(o),a=Tt(r),i=t.haplotypeNames,p=t.subgraphHaplotypes,s=c=>{t.setSubgraphHaplotypes(c),t.recut()};return[{type:"subHeader",label:"Load"},{type:"radio",label:i?`Every haplotype in the graph (${i.length.toLocaleString()})`:"Every haplotype in the graph",checked:p?p.length===0:!n&&!a,onClick:()=>{s([])}},...n||a?[{type:"radio",label:n?"The track's default haplotypes":`The track's ${a?.length} assemblies`,checked:p===void 0,onClick:()=>{s(void 0)}}]:[],{type:"radio",label:"Chosen in Graph settings...",checked:(p?.length??0)>0,onClick:()=>{this.openSettings()}}]},openSettings(){L(t).queueDialog(o=>[hi,{model:t,open:!0,onClose:o}])},async renderSvg(o){let{renderGraphTrackSvg:r}=await import("./chunks/renderSvg-KSQI5DH6.js");return r(t,o)},trackMenuItems(){let o=t.launchMenuItems();gt(o,{label:"Graph genome view",icon:dt,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}});let r=[...this.cutMenuItems(),...t.highlightMenuItems()];return[...r.length>0?[{label:"Haplotypes",icon:tn,subMenu:r}]:[],...t.graphMenuItems(),{label:"Graph settings...",icon:on,helpText:"Subgraph, drawing and force-directed layout",onClick:()=>{this.openSettings()}},...o,...ra(t)]}}))}function Zt(e){e.addDisplayType(()=>{let t=ea();return Object.assign(new Zn({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:sa(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:pe(()=>import("./chunks/LinearGraphDisplay-TXTKAACH.js"))}),{adapterCapabilities:["getSubgraph"]})})}function gi(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:o},index:He(t,o,r)}:e}var bi=Y("MinigraphBubbleAdapter",{bubblesLocation:W("/path/to/graph.bb.bed.gz"),index:Z("MinigraphBubbleIndex","/path/to/graph.bb.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:gi}),pa=bi;function Qt(e){e.addAdapterType(()=>new ce({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",configSchema:pa,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-HW7XQMAI.js").then(t=>t.default)}))}function ca(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:o},segmentsIndex:He(`${t}.segs.bed.gz`,o,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:o},linksIndex:He(`${t}.links.bed.gz`,o,r)}:e}function yi(e){let{coarse:t,baseUri:o,csi:r}=e;return Ke(ca(typeof t=="object"&&t!==null?{...e,coarse:ca({baseUri:o,csi:r,...t})}:e))}var fi=Y("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},foldBelowBp:{type:"maybeNumber"},segmentsLocation:W("/path/to/graph.tier.segs.bed.gz"),segmentsIndex:Z("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:W("/path/to/graph.tier.links.bed.gz"),linksIndex:Z("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),wi=Y("RgfaTabixAdapter",{segmentsLocation:W("/path/to/graph.segs.bed.gz"),segmentsIndex:Z("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:W("/path/to/graph.links.bed.gz"),linksIndex:Z("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),walksLocation:W(""),walksIndex:Z("RgfaWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Pe.stepBudget},walkByteBudget:{type:"integer",defaultValue:Pe.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:fi},{explicitlyTyped:!0,preProcessSnapshot:yi}),da=wi;function eo(e){e.addAdapterType(()=>new ce({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",configSchema:da,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-PSKYWD2X.js").then(t=>t.default)}))}var Mi=Y("WalkTabixSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},walksLocation:W("/path/to/graph.walks.bed.gz"),walksIndex:Z("WalkTabixWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Pe.stepBudget},walkByteBudget:{type:"integer",defaultValue:Pe.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},samplesTsvLocation:W(""),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Ke}),ua=Mi;function to(e){e.addAdapterType(()=>new ce({name:"WalkTabixSyntenyAdapter",displayName:"Walk-indexed graph adapter",configSchema:ua,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/WalkTabixSyntenyAdapter-U53JLYVU.js").then(t=>t.default)}))}var ki=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Si(e){return ko(e).toLowerCase().endsWith(".gbz.db")}function Ri(e){let t=e.adapter;return t?.type==="GbzBaseSyntenyAdapter"&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function xi(e,t,o){let r=n=>Po({choice:n,loc:e,indexLoc:t,assembly:"",sample:""});if((!o||o==="GbzBaseSyntenyAdapter")&&Si(e))return r("GbzBaseSyntenyAdapter");if((!o||o==="RgfaTabixAdapter")&&vo(e))return r("RgfaTabixAdapter")}function oo(e){e.addToExtensionPoint("Core-preProcessTrackConfig",Ri),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(o,r,n)=>xi(o,r,n)??t(o,r,n)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(o,r)=>ki.has(o)?"GraphTrack":t(o,r))}function ma(e){let t;if(Q(e)){let{refName:o,start:r,end:n,assemblyName:a}=e;typeof o=="string"&&typeof r=="number"&&typeof n=="number"&&(t={refName:o,start:r,end:n,assemblyName:typeof a=="string"?a:void 0})}return t}function Ti(e,t,o){let r=e.connectedViewId;return r===void 0||r===t||!o.has(r)}function la(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Gi(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(o=>Q(o)&&Array.isArray(o.displays)?o.displays.filter(r=>Q(r)&&r.type==="LinearGraphDisplay"):[])}function ha(e,t,o){let r=[],n=rt(e),a=new Set(n.map(i=>Q(i)?i.id:void 0));for(let i of n){if(Q(i)&&i.id===t)for(let p of Gi(i)){let s=ma(p.hoverHighlight);s&&la(s,o)&&r.push({key:typeof p.id=="string"?p.id:"graph-track",region:s})}if(Q(i)&&i.type==="GraphGenomeView"&&Ti(i,t,a)){let p=ma(i.hoverHighlight);p&&la(p,o)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:p})}}return r}var Li=en()(e=>({highlight:{height:"100%",position:"absolute",background:qe(e.palette.primary.main,.08),borderLeft:`1px solid ${qe(e.palette.primary.main,.4)}`,borderRight:`1px solid ${qe(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),vi=St(function({model:t,region:o}){let{classes:r}=Li(),n=t.getHighlightCoords(o);return n?N("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:n.left,width:n.width}}):null}),Pi=St(function({model:t}){let{views:o}=L(t);return N(uo,{children:ha([...o],t.id,t.assemblyNames).map(({key:r,region:n})=>N(vi,{model:t,region:n},`graph-hover-${r}`))})}),ga=Pi;var Ai="LinearGenomeView-TracksContainerComponent";function ro(e){e.contributeToExtensionPoint(Ai,({model:t})=>N(ga,{model:t},"graphgenomeview-hover-highlight"))}function Ci(e){return e.views(t=>({get adapterConfig(){return Jr(t,t.parentTrack.configuration)}}))}function no(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof cn&&Xt.includes(t.name)&&t.extendStateModel(Ci),t))}var ba="GraphGenomeView";var ya="7.1.2";var ao=class extends nn{constructor(){super(...arguments);this.name=ba;this.version=ya}install(o){Yt(o),Zt(o),Ut(o),Kt(o),ro(o),eo(o),Qt(o),Vt(o),to(o),jt(o),oo(o),no(o),o.addRpcMethod(()=>new Je(o)),o.addRpcMethod(()=>new $e(o)),o.addRpcMethod(()=>new ze(o)),o.addRpcMethod(()=>new _e(o))}configure(o){try{so(o.rootModel)&&o.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:dt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{ao as default};
6
+ `).then(()=>{o.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(r=>{o.notify(`Could not copy the figure spec: ${String(r)}`)})}}]},highlightMenuItems({picks:t=!0}={}){let o=t?e.walkChoices:[];if(e.walkChoices.length===0||!e.liftsWalks||!t&&e.walkLayers.length===0)return[];let r=a=>e.walkLayers.some(i=>i.walk===a),n=o.length>nr;return[{type:"subHeader",label:"Highlight"},...n?[{label:"Choose haplotypes...",onClick:()=>{L(e).queueDialog(a=>[or,{model:e,onClose:a}])}}]:[],...(n?o.filter(a=>r(a.name)):o).map(a=>({type:"checkbox",label:a.label,checked:r(a.name),onClick:()=>{e.toggleWalk(a.name)}})),{label:"Clear highlights",disabled:e.walkLayers.length===0,onClick:()=>{e.setWalkLayers([])}},...e.drawnWalks.length>0?[{label:"Color highlighted...",onClick:()=>{L(e).queueDialog(a=>[rr,{model:e,onClose:a}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...oe(Xo.map(({value:a,label:i})=>({value:a,label:a==="walk"?"A panel per haplotype":i})),e.facetSetting.field,e.setFacet)]:[]]},colorSchemeLabel(t){let o=Lt.find(r=>r.value===t)?.label??t;return t==="auto"?`${o} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:o},graphMenuItems(){let t=this.layoutOptionMenuItems(),o=z(e.chosenLayoutMode),r=Kn.find(([n])=>n===e.layoutEngine)[1];return[{label:`Layout: ${zt(o)}${o.value==="force"?` (${r})`:""}`,icon:Mn,subMenu:[...Vo.flatMap(n=>{let a={type:"radio",disabled:e.graph?!n.available(e.graph):!1,disabledHelpText:n.description};return n.value==="force"?Kn.map(([i,p])=>({...a,label:`${zt(n)} (${p})`,checked:e.chosenLayoutMode===n.value&&e.layoutEngine===i,onClick:()=>{e.switchForceEngine(i)}})):[{...a,label:zt(n),checked:e.chosenLayoutMode===n.value,onClick:()=>{e.switchLayout(n.value)}}]}),...t.length>0?[{type:"divider"},...t]:[],...e.hostPlacesX?[]:[{type:"divider"},{label:"Zoom to fit",onClick:()=>{e.refitView()}}]]},{label:`Color: ${e.colorSchemeLock?.value??this.colorSchemeLabel(e.chosenColorScheme)}`,icon:kn,disabled:e.colorSchemeLock!==void 0,disabledHelpText:e.colorSchemeLock?.why,subMenu:oe(Lt.map(({value:n})=>({value:n,label:this.colorSchemeLabel(n)})),e.chosenColorScheme,e.setColorScheme)},{label:"Show...",icon:Uo,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[];for(let o of Qr({contributors:e.launchableAssemblies,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:r=>{e.showInLinearView(r)},onShowSynteny:r=>{e.showSyntenyView(r)}}))gt(t,o);return t}}));var bt=qn.views(e=>({get trackHaplotypes(){let t=e.sourceAdapter;return t&&Fe(t)}})).views(e=>({get cutHaplotypes(){return e.subgraphHaplotypes??e.trackHaplotypes},offReference(t){let o=e.sourceTrack,r=o&&Do(o),n=L(e);return r===void 0?void 0:_o(Oe(n,r),Oe(n,t.assemblyName))},cutChangedFrom(t){let o=jo(z(t),{walkStrip:e.walkStrip,host:!!e.host});return e.cutsWholeWalks!==o||t==="walkrows"!=(e.chosenLayoutMode==="walkrows")}})).views(e=>({get cutOptions(){return{hops:e.subgraphContext,haplotypes:e.cutHaplotypes,...e.chosenLayoutMode==="walkrows"?{walkRows:!0}:{},...e.cutsWholeWalks?{snarls:"overlapping"}:{}}}}));function $t(){return T.compose("GraphGenomeView",fn,bt,T.model({type:T.literal("GraphGenomeView"),gfaLocation:T.maybe(T.frozen()),loadedRegion:T.maybe(T.frozen()),loadedTrackId:T.optional(T.string,""),layoutMode:xt(ot),color:T.maybe(T.frozen()),size:T.maybe(T.frozen()),layers:T.maybe(T.frozen()),facet:T.maybe(T.frozen()),rows:T.maybe(T.frozen()),hover:xt(Be)})).views(e=>({get grammar(){return{layoutMode:e.layoutMode,color:e.color,size:e.size,layers:e.layers,facet:e.facet,rows:e.rows,hover:e.hover}}})).actions(e=>({writeGrammar(t){Object.assign(e,t)}})).volatile(()=>({widthMeasured:!1})).actions(e=>{let t=e.setWidth;return{setWidth(o){t(o),e.widthMeasured=!0}}}).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get paneMeasured(){return e.widthMeasured},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?L(e).tracks.find(t=>t.trackId===e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return[...e.exportMenuItems(),...e.launchMenuItems()]}})).actions(e=>{let t=e.clearGraph;return{clearGraph(){t(),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let o=e.loadedRegion;if(e.gfaLocation)return e.displayName||e.setDisplayName(We(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,o);if(!e.loadedTrackId||!o)return;let r=e.sourceAdapter,n=o.end-o.start,a=e.offReference(o);if(!r)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(a)e.setError(new Error(a));else if(n>e.maxRegionBp)e.setError(new Error(`Region too large (${be(n)}) \u2014 zoom in to view graph (max ${be(e.maxRegionBp)})`));else return e.cutSubgraph(r,o,e.cutOptions)}}}).actions(e=>({retryLoad(){e.load()},relayoutFrom(t){return e.loadedTrackId&&e.cutChangedFrom(t)?e.load():e.recomputeLayout()},afterAttach(){e.graph||e.load(),A(e,V(()=>e.walkStrip,()=>{e.loadedTrackId&&!z(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var ii=yn()({});function Jt(e){e.addViewType(()=>new bn({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:$t(),launchKeys:ii,ReactComponent:pe(()=>import("./chunks/GraphGenomeView-LX7GDEDM.js"))}))}var Yt=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function si(e){let t=e.getElementTypesInGroup("display"),o=n=>t.find(a=>a.name===n),r=n=>n&&Object.assign(Object.create(n),{adapterCapabilities:["headerLanes"]});return[o("LinearGraphDisplay"),o("LinearBasicDisplay"),...Yt.map(n=>r(o(n)))].filter(n=>n!==void 0)}function Xt(e){e.addTrackType(()=>{let t=Y("GraphTrack",{},{baseConfiguration:mn(e),explicitIdentifier:"trackId"}),o=new un({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:ln(e,"GraphTrack",t)});for(let r of si(e))o.addDisplayType(r);return o})}function Ut(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:o,...r}=t;return o.addView("GraphGenomeView",r),t})}var yt=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"];var Zn=yt&&yt.__esModule?yt.default:yt;var Se=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"],pi=e=>Se!=null&&e in Object(Se)?Se[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/display-kit/trackHeightConfigSchemaFields' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),Qn=pi("trackHeightConfigSchemaFields"),gu=Se&&Se.__esModule?Se.default:Se;function ea(){return Y("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:T.enumeration("LayoutMode",ot),defaultValue:"auto"},color:{type:"frozen",defaultValue:{}},size:{type:"frozen",defaultValue:{field:"depth",value:6}},layers:{type:"frozen",defaultValue:{}},facet:{type:"frozen",defaultValue:{}},rows:{type:"frozen",defaultValue:{}},hover:{type:"stringEnum",model:T.enumeration("HoverHighlight",Be),defaultValue:"nodes"},...Qn({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var Re=JBrowseExports["@jbrowse/core/svg/svgReady"],ci=e=>Re!=null&&e in Object(Re)?Re[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/svg/svgReady' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var ta=ci("computeSvgReady");var Ru=Re&&Re.__esModule?Re.default:Re;var ft=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"];var oa=ft&&ft.__esModule?ft.default:ft;var xe=JBrowseExports["@jbrowse/display-kit/plotMenu"],di=e=>xe!=null&&e in Object(xe)?xe[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/display-kit/plotMenu' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),ra=di("editPlotMenuItems");var Gu=xe&&xe.__esModule?xe.default:xe;var Te=JBrowseExports["@jbrowse/render-core/displayPhase"],na=e=>Te!=null&&e in Object(Te)?Te[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/render-core/displayPhase' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),aa=na("computeActivityPhase");var ia=na("computeDisplayStatusPhase"),vu=Te&&Te.__esModule?Te.default:Te;function Kt(e,t){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;let o=e.end-e.start;return t.end-t.start>=o&&t.end>e.start-o&&t.start<e.end+o}var ui=new Set(["scale","translateX","translateY"]);function mi(e){return Object.fromEntries(Object.keys(ur.properties).filter(t=>!ui.has(t)).map(t=>[t,e[t]]))}var qt=10;function li(e){let{aboveBpPerPx:t,foldBelowBp:o}=e??{};return typeof t=="number"?t:typeof o=="number"&&o>0?o/qt:void 0}var hi=pe(()=>import("./chunks/GraphTrackSettingsDialog-47PQ6LM7.js"));function sa(e){return T.compose("LinearGraphDisplay",pn,oa(),bt,T.model({type:T.literal("LinearGraphDisplay"),configuration:go(e),layoutEngine:Ho(Ao,"stress"),cutRegion:T.maybe(T.frozen()),coarseCut:T.optional(T.boolean,!1)})).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0,haplotypeNames:void 0,cutFoldBp:0})).views(t=>({get grammar(){return{layoutMode:ie(t,"layoutMode"),color:ie(t,"color"),size:ie(t,"size"),layers:ie(t,"layers"),facet:ie(t,"facet"),rows:ie(t,"rows"),hover:ie(t,"hover")}},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get trackHaplotypes(){let o=t.sourceAdapter,r=t.sourceTrack;return(o&&Fe(o))??(r&&Tt(r))},get coarseAboveBpPerPx(){return li(t.sourceAdapter?.coarse)}})).views(t=>({tierAt(o){let r=t.coarseAboveBpPerPx;return r!==void 0&&o>r?"coarse":"fine"},capFor(o){return o==="coarse"?1/0:t.maxRegionBp},foldDrifted(o){let r=qt*o,n=t.cutFoldBp;return!t.graph?.paths?.length&&(r>=2*Math.max(n,1)||t.foldedBelowBp!==void 0&&r<=n/2)},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let o=t.settledWindow;return o?t.capFor(t.tierAt(o.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let o=t.settledWindow;return o!==void 0&&o.end-o.start>t.settledCapBp},get regionTooLargeReason(){let o=t.settledWindow;return o?`Region too large for a graph cut (${be(o.end-o.start)}, max ${be(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get svgReady(){return ta({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return ia({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>aa({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({writeGrammar(o){for(let[r,n]of Object.entries(o))bo(t,r,n)},setSubgraphContext(o){t.subgraphContext=o,t.dense=void 0},setSubgraphHaplotypes(o){t.subgraphHaplotypes=o,t.dense=void 0},setDense(o){t.dense=o},setHaplotypeNames(o){t.haplotypeNames=o},setMaxRegionBp(o){t.maxRegionBp=o},cut(){let o=t.cutRegion,r=t.sourceAdapter;if(!o||!r)return;let n=t.offReference(o);if(n){t.clearGraph(),t.setError(new Error(n));return}let a=t.cutTier==="coarse";return t.cutFoldBp=Math.round(qt*(t.settledWindow?.bpPerPx??t.host?.bpPerPx??0)),t.cutSubgraph(r,o,{...t.cutOptions,tier:a?"coarse":void 0},t.cutFoldBp)}})).actions(t=>({recutAt(o){let r=t.tierAt(o.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=zr(o,t.capFor(r),z(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(o){t.settledWindow=o;let r=z(t.chosenLayoutMode).cutMargins;if(t.regionTooLarge||Kt(t.dense,o)||!t.loadCanceled&&t.tierAt(o.bpPerPx)===t.cutTier&&$r(t.cutRegion,o,r)&&!t.foldDrifted(o.bpPerPx))return!1;let n=t.recutAt(o),a=t.recuts;return Promise.resolve(n).then(()=>{q(t)&&t.recuts===a&&rn(t.error)&&this.refuseDenseCut(o)}),!0},refuseDenseCut(o){t.setDense(o),t.cutRegion=void 0,this.settleOn(t.settledWindow??o)},recut(){t.cutRegion?t.cut():t.settledWindow&&this.settleOn(t.settledWindow)},relayoutFrom(o){let r=t.host?st(t.host):void 0;return r&&!t.regionTooLarge&&(t.cutChangedFrom(o)||z(o).cutMargins!==z(t.chosenLayoutMode).cutMargins)?t.recutAt(r):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({async fetchHaplotypeNames(o,r){try{let n=await L(t).rpcManager.call(le(t),"GetGraphHaplotypes",{adapterConfig:o,signal:r});q(t)&&t.sourceAdapter===o&&t.setHaplotypeNames(n)}catch(n){r?.aborted||console.warn("[LinearGraphDisplay] no haplotype names",n)}}})).actions(t=>({stretchWithHost(o,r){let n=t.layoutResult,a=t.layoutBounds;if(!n||!a||n.referenceAxis||n.pixelRows||n.tubeMap||t.facetGrid)return;t.viewportOwner==="fit"&&(t.viewportOwner="user");let i=o.bpPerPx/r.bpPerPx,p=t.translateY+t.scaleY*(a.minY+a.h/2);t.scale*=i,t.translateX=i*(t.translateX+o.offsetPx)-r.offsetPx,t.translateY=p-i*(p-t.translateY)}})).actions(t=>({forceLoad(){let o=t.settledWindow;o&&(t.setMaxRegionBp(Math.ceil(o.end-o.start)),t.settleOn(o))},afterAttach(){t.cutRegion&&!t.graph&&t.cut();let o;A(t,()=>{o?.abort()}),A(t,V(()=>{let n=t.sourceAdapter;return n&&Oo(n)?n:void 0},n=>{o?.abort(),o=void 0,t.setHaplotypeNames(void 0),n&&(o=new AbortController,t.fetchHaplotypeNames(n,o.signal))},{fireImmediately:!0,name:"GraphHaplotypeNames"})),A(t,V(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),A(t,V(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,a)=>n?.scale===a?.scale&&n?.translateX===a?.translateX,fireImmediately:!0,name:"GraphHostFrame"}));let r;A(t,V(()=>t.host&&!t.hostPlacesX?{bpPerPx:t.host.bpPerPx,offsetPx:t.host.offsetPx}:void 0,n=>{let a=r;r=n,n&&a&&n.bpPerPx>0&&t.stretchWithHost(a,n)},{equals:(n,a)=>n?.bpPerPx===a?.bpPerPx&&n?.offsetPx===a?.offsetPx,fireImmediately:!0,name:"GraphHostStretch"})),A(t,V(()=>`${t.facetSetting.field} ${t.facetPlacement?.count}`,()=>{let n=(t.facetGridIn(t.paneCeiling-pt)?.total??0)+pt;(t.facetGrid?.total??0)+pt>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),A(t,V(()=>t.host?.coarseDynamicBlocks,n=>{let{host:a}=t,i=n&&a?st(a):void 0;i&&t.settleOn(i)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let o=t.host?st(t.host):void 0,r=t.sourceTrackId;if(!o||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge||Kt(t.dense,o))return;let n=Math.floor(o.start),a=Math.ceil(o.end);return{...mi(t),loadedTrackId:r,loadedRegion:{refName:o.refName,assemblyName:o.assemblyName,start:n,end:a},subgraphHaplotypes:t.cutHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-n),...t.grammar,layoutMode:t.chosenLayoutMode,connectedViewId:t.host?.id}}})).actions(t=>({openGraphView(){let o=t.graphViewSpec;o&&L(t).addView("GraphGenomeView",o)}})).views(t=>({cutMenuItems(){let o=t.sourceAdapter,r=t.sourceTrack;if(!o||!r||!Wo(o))return[];let n=Fe(o),a=Tt(r),i=t.haplotypeNames,p=t.subgraphHaplotypes,s=c=>{t.setSubgraphHaplotypes(c),t.recut()};return[{type:"subHeader",label:"Load"},{type:"radio",label:i?`Every haplotype in the graph (${i.length.toLocaleString()})`:"Every haplotype in the graph",checked:p?p.length===0:!n&&!a,onClick:()=>{s([])}},...n||a?[{type:"radio",label:n?"The track's default haplotypes":`The track's ${a?.length} assemblies`,checked:p===void 0,onClick:()=>{s(void 0)}}]:[],{type:"radio",label:"Chosen in Graph settings...",checked:(p?.length??0)>0,onClick:()=>{this.openSettings()}}]},openSettings(){L(t).queueDialog(o=>[hi,{model:t,open:!0,onClose:o}])},async renderSvg(o){let{renderGraphTrackSvg:r}=await import("./chunks/renderSvg-GGJXJHCS.js");return r(t,o)},trackMenuItems(){let o=t.launchMenuItems();gt(o,{label:"Graph genome view",icon:dt,disabled:!t.graphViewSpec,disabledHelpText:"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}});let r=[...this.cutMenuItems(),...t.highlightMenuItems()];return[...r.length>0?[{label:"Haplotypes",icon:tn,subMenu:r}]:[],...t.graphMenuItems(),{label:"Graph settings...",icon:on,helpText:"Subgraph, drawing and force-directed layout",onClick:()=>{this.openSettings()}},...o,...ra(t)]}}))}function Zt(e){e.addDisplayType(()=>{let t=ea();return Object.assign(new Zn({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:sa(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:pe(()=>import("./chunks/LinearGraphDisplay-QLPIRKPR.js"))}),{adapterCapabilities:["getSubgraph"]})})}function gi(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:o},index:He(t,o,r)}:e}var bi=Y("MinigraphBubbleAdapter",{bubblesLocation:D("/path/to/graph.bb.bed.gz"),index:Z("MinigraphBubbleIndex","/path/to/graph.bb.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:gi}),pa=bi;function Qt(e){e.addAdapterType(()=>new ce({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",configSchema:pa,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-HW7XQMAI.js").then(t=>t.default)}))}function ca(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:o},segmentsIndex:He(`${t}.segs.bed.gz`,o,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:o},linksIndex:He(`${t}.links.bed.gz`,o,r)}:e}function yi(e){let{coarse:t,baseUri:o,csi:r}=e;return Ke(ca(typeof t=="object"&&t!==null?{...e,coarse:ca({baseUri:o,csi:r,...t})}:e))}var fi=Y("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},foldBelowBp:{type:"maybeNumber"},segmentsLocation:D("/path/to/graph.tier.segs.bed.gz"),segmentsIndex:Z("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:D("/path/to/graph.tier.links.bed.gz"),linksIndex:Z("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),wi=Y("RgfaTabixAdapter",{segmentsLocation:D("/path/to/graph.segs.bed.gz"),segmentsIndex:Z("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:D("/path/to/graph.links.bed.gz"),linksIndex:Z("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),walksLocation:D(""),walksIndex:Z("RgfaWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Pe.stepBudget},walkByteBudget:{type:"integer",defaultValue:Pe.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:fi},{explicitlyTyped:!0,preProcessSnapshot:yi}),da=wi;function eo(e){e.addAdapterType(()=>new ce({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",configSchema:da,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-PSKYWD2X.js").then(t=>t.default)}))}var Mi=Y("WalkTabixSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},walksLocation:D("/path/to/graph.walks.bed.gz"),walksIndex:Z("WalkTabixWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Pe.stepBudget},walkByteBudget:{type:"integer",defaultValue:Pe.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},samplesTsvLocation:D(""),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Ke}),ua=Mi;function to(e){e.addAdapterType(()=>new ce({name:"WalkTabixSyntenyAdapter",displayName:"Walk-indexed graph adapter",configSchema:ua,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/WalkTabixSyntenyAdapter-GH6NYQTF.js").then(t=>t.default)}))}var ki=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Si(e){return ko(e).toLowerCase().endsWith(".gbz.db")}function Ri(e){let t=e.adapter;return t?.type==="GbzBaseSyntenyAdapter"&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function xi(e,t,o){let r=n=>Po({choice:n,loc:e,indexLoc:t,assembly:"",sample:""});if((!o||o==="GbzBaseSyntenyAdapter")&&Si(e))return r("GbzBaseSyntenyAdapter");if((!o||o==="RgfaTabixAdapter")&&vo(e))return r("RgfaTabixAdapter")}function oo(e){e.addToExtensionPoint("Core-preProcessTrackConfig",Ri),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(o,r,n)=>xi(o,r,n)??t(o,r,n)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(o,r)=>ki.has(o)?"GraphTrack":t(o,r))}function ma(e){let t;if(Q(e)){let{refName:o,start:r,end:n,assemblyName:a}=e;typeof o=="string"&&typeof r=="number"&&typeof n=="number"&&(t={refName:o,start:r,end:n,assemblyName:typeof a=="string"?a:void 0})}return t}function Ti(e,t,o){let r=e.connectedViewId;return r===void 0||r===t||!o.has(r)}function la(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Gi(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(o=>Q(o)&&Array.isArray(o.displays)?o.displays.filter(r=>Q(r)&&r.type==="LinearGraphDisplay"):[])}function ha(e,t,o){let r=[],n=rt(e),a=new Set(n.map(i=>Q(i)?i.id:void 0));for(let i of n){if(Q(i)&&i.id===t)for(let p of Gi(i)){let s=ma(p.hoverHighlight);s&&la(s,o)&&r.push({key:typeof p.id=="string"?p.id:"graph-track",region:s})}if(Q(i)&&i.type==="GraphGenomeView"&&Ti(i,t,a)){let p=ma(i.hoverHighlight);p&&la(p,o)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:p})}}return r}var Li=en()(e=>({highlight:{height:"100%",position:"absolute",background:qe(e.palette.primary.main,.08),borderLeft:`1px solid ${qe(e.palette.primary.main,.4)}`,borderRight:`1px solid ${qe(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),vi=St(function({model:t,region:o}){let{classes:r}=Li(),n=t.getHighlightCoords(o);return n?N("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:n.left,width:n.width}}):null}),Pi=St(function({model:t}){let{views:o}=L(t);return N(uo,{children:ha([...o],t.id,t.assemblyNames).map(({key:r,region:n})=>N(vi,{model:t,region:n},`graph-hover-${r}`))})}),ga=Pi;var Ai="LinearGenomeView-TracksContainerComponent";function ro(e){e.contributeToExtensionPoint(Ai,({model:t})=>N(ga,{model:t},"graphgenomeview-hover-highlight"))}function Ci(e){return e.views(t=>({get adapterConfig(){return Jr(t,t.parentTrack.configuration)}}))}function no(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof cn&&Yt.includes(t.name)&&t.extendStateModel(Ci),t))}var ba="GraphGenomeView";var ya="7.1.3";var ao=class extends nn{constructor(){super(...arguments);this.name=ba;this.version=ya}install(o){Jt(o),Zt(o),Xt(o),Ut(o),ro(o),eo(o),Qt(o),Nt(o),to(o),Ht(o),oo(o),no(o),o.addRpcMethod(()=>new Je(o)),o.addRpcMethod(()=>new $e(o)),o.addRpcMethod(()=>new ze(o)),o.addRpcMethod(()=>new _e(o))}configure(o){try{so(o.rootModel)&&o.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:dt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{ao as default};
7
7
  //# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map