jbrowse-plugin-graphgenomeviewer 8.2.0 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import{b as J,c as D,d as V,e as X,f as q,h as K}from"./chunk-5FNGR33G.js";import"./chunk-3VGXCEMQ.js";import"./chunk-6VNDP3UB.js";import"./chunk-OGQ6OQDN.js";import{d as M,e as P}from"./chunk-3WG3GF2A.js";import{b as w,h as v,j as A,m as x}from"./chunk-J5RMHLFJ.js";import{i as o}from"./chunk-NIEZKWQV.js";import{A as O,B as j,C as z,F as h,a as H,f as E,g as c,o as B,s as N,t as W,u as _}from"./chunk-5Z4VIKXZ.js";import{b as a,c as f,d as I}from"./chunk-JMBDTNUR.js";var n=JBrowseExports["@jbrowse/core/util/tss-react"],oe=s=>n!=null&&s in Object(n)?n[s]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+s+"' from '@jbrowse/core/util/tss-react' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:s});var Q=oe("makeStyles"),ie=n&&n.__esModule?n.default:n;var se=Q()(s=>({paper:{margin:s.spacing(),padding:s.spacing()},field:{marginTop:s.spacing(2)},submit:{marginTop:25,marginBottom:100,display:"block"}})),re=["RgfaTabixAdapter","RgfaTabixWalks","GbzBaseSyntenyAdapter","MinigraphBubbleAdapter"],ne=I(function({model:t}){let{classes:i}=se(),y=A(t),d=M(t),[r,U]=o("RgfaTabixAdapter"),[l,Y]=o(),[k,G]=o(),[T,Z]=o(),m=r==="GbzBaseSyntenyAdapter",u=r==="RgfaTabixWalks",[C,$]=o(""),[R,ee]=o(""),[b,ae]=o("Pangenome graph"),[S,g]=o(),[F,L]=o(!1);async function te(){if(!l||!t.assembly)return;g(void 0),L(!0);let e=r==="RgfaTabixAdapter"?await J(l,v(t).pluginManager):void 0;if(L(!1),!(!P(t)||!t.assembly))try{let p=b.trim();w({model:t,session:y,conf:K({choice:r,loc:l,indexLoc:k,readsLoc:m?T:void 0,manifest:e,assembly:t.assembly,sample:C,haplotypes:u?q(R):void 0,trackId:x({name:p}),name:p})})}catch(p){g(p)}}return f(O,{className:i.paper,children:[S?a(E,{error:S}):null,f(N,{children:[a(_,{children:"File type"}),a(z,{value:r,onChange:e=>{U(e.target.value),G(void 0),g(void 0)},children:re.map(e=>a(W,{value:e,control:a(j,{}),label:D[e]},e))})]}),a(c,{location:l,name:V[r],rootModel:d,setLocation:Y}),a(c,{location:k,name:X[r],rootModel:d,setLocation:G}),m?a(c,{location:T,name:"Path to reads aligned to the graph as GAF (optional; a .gz is read by the .tbi beside it)",rootModel:d,setLocation:Z}):null,a(h,{className:i.field,value:C,onChange:e=>{$(e.target.value)},label:"Sample name in the graph",slotProps:{htmlInput:{"data-testid":"graph-sample-input"}},helperText:m?"Optional. The graph's sample for this assembly, e.g. GRCh38 where the assembly is hg38; leave blank when they share a name or the graph has one reference sample":u?"Optional. The PanSN sample this assembly is in the graph; blank takes it from the file name, GRCh38 in chr22.GRCh38.walks.bed.gz":"Optional. The PanSN prefix the graph gives this assembly, e.g. GRCh38 for HPRC's GRCh38#0#chr1; leave blank when the graph's stable names are bare",placeholder:"GRCh38",fullWidth:!0}),u?a(h,{className:i.field,value:R,onChange:e=>{ee(e.target.value)},label:"Haplotypes",slotProps:{htmlInput:{"data-testid":"graph-haplotypes-input"}},helperText:"Optional. The haplotypes the track cuts for until you pick others in its menu, as PanSN names separated by commas (HG002#1, or HG002 for both); blank is every haplotype in the file",placeholder:"HG002, HG00733",fullWidth:!0}):null,a(h,{className:i.field,value:b,label:"Track name",slotProps:{htmlInput:{"data-testid":"graph-track-name-input"}},onChange:e=>{ae(e.target.value)}}),a(H,{session:y,helperText:"Select assembly to add track to",selected:t.assembly,onChange:e=>{t.setAssembly(e)},fullWidth:!0}),a(B,{variant:"contained",className:i.submit,disabled:!l||!b.trim()||!t.assembly||F,onClick:()=>{te()},children:F?"Reading graph.json\u2026":"Submit"})]})}),ye=ne;export{ye as default};
2
- //# sourceMappingURL=AddTrackWorkflow-7CXTSSMR.js.map
1
+ import{b as J,c as D,d as V,e as X,f as q,h as K}from"./chunk-ZEE3HTOT.js";import"./chunk-3VGXCEMQ.js";import"./chunk-6VNDP3UB.js";import"./chunk-OGQ6OQDN.js";import{d as M,e as P}from"./chunk-3WG3GF2A.js";import{b as w,h as v,j as A,m as x}from"./chunk-J5RMHLFJ.js";import{i as o}from"./chunk-NIEZKWQV.js";import{A as O,B as j,C as z,F as h,a as H,f as E,g as c,o as B,s as N,t as W,u as _}from"./chunk-5Z4VIKXZ.js";import{b as a,c as f,d as I}from"./chunk-JMBDTNUR.js";var n=JBrowseExports["@jbrowse/core/util/tss-react"],oe=s=>n!=null&&s in Object(n)?n[s]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+s+"' from '@jbrowse/core/util/tss-react' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:s});var Q=oe("makeStyles"),ie=n&&n.__esModule?n.default:n;var se=Q()(s=>({paper:{margin:s.spacing(),padding:s.spacing()},field:{marginTop:s.spacing(2)},submit:{marginTop:25,marginBottom:100,display:"block"}})),re=["RgfaTabixAdapter","RgfaTabixWalks","GbzBaseSyntenyAdapter","MinigraphBubbleAdapter"],ne=I(function({model:t}){let{classes:i}=se(),y=A(t),d=M(t),[r,U]=o("RgfaTabixAdapter"),[l,Y]=o(),[k,G]=o(),[T,Z]=o(),m=r==="GbzBaseSyntenyAdapter",u=r==="RgfaTabixWalks",[C,$]=o(""),[R,ee]=o(""),[b,ae]=o("Pangenome graph"),[S,g]=o(),[F,L]=o(!1);async function te(){if(!l||!t.assembly)return;g(void 0),L(!0);let e=r==="RgfaTabixAdapter"?await J(l,v(t).pluginManager):void 0;if(L(!1),!(!P(t)||!t.assembly))try{let p=b.trim();w({model:t,session:y,conf:K({choice:r,loc:l,indexLoc:k,readsLoc:m?T:void 0,manifest:e,assembly:t.assembly,sample:C,haplotypes:u?q(R):void 0,trackId:x({name:p}),name:p})})}catch(p){g(p)}}return f(O,{className:i.paper,children:[S?a(E,{error:S}):null,f(N,{children:[a(_,{children:"File type"}),a(z,{value:r,onChange:e=>{U(e.target.value),G(void 0),g(void 0)},children:re.map(e=>a(W,{value:e,control:a(j,{}),label:D[e]},e))})]}),a(c,{location:l,name:V[r],rootModel:d,setLocation:Y}),a(c,{location:k,name:X[r],rootModel:d,setLocation:G}),m?a(c,{location:T,name:"Path to reads aligned to the graph as GAF (optional; a .gz is read by the .tbi beside it)",rootModel:d,setLocation:Z}):null,a(h,{className:i.field,value:C,onChange:e=>{$(e.target.value)},label:"Sample name in the graph",slotProps:{htmlInput:{"data-testid":"graph-sample-input"}},helperText:m?"Optional. The graph's sample for this assembly, e.g. GRCh38 where the assembly is hg38; leave blank when they share a name or the graph has one reference sample":u?"Optional. The PanSN sample this assembly is in the graph; blank takes it from the file name, GRCh38 in chr22.GRCh38.walks.bed.gz":"Optional. The PanSN prefix the graph gives this assembly, e.g. GRCh38 for HPRC's GRCh38#0#chr1; leave blank when the graph's stable names are bare",placeholder:"GRCh38",fullWidth:!0}),u?a(h,{className:i.field,value:R,onChange:e=>{ee(e.target.value)},label:"Haplotypes",slotProps:{htmlInput:{"data-testid":"graph-haplotypes-input"}},helperText:"Optional. The haplotypes the track cuts for until you pick others in its menu, as PanSN names separated by commas (HG002#1, or HG002 for both); blank is every haplotype in the file",placeholder:"HG002, HG00733",fullWidth:!0}):null,a(h,{className:i.field,value:b,label:"Track name",slotProps:{htmlInput:{"data-testid":"graph-track-name-input"}},onChange:e=>{ae(e.target.value)}}),a(H,{session:y,helperText:"Select assembly to add track to",selected:t.assembly,onChange:e=>{t.setAssembly(e)},fullWidth:!0}),a(B,{variant:"contained",className:i.submit,disabled:!l||!b.trim()||!t.assembly||F,onClick:()=>{te()},children:F?"Reading graph.json\u2026":"Submit"})]})}),ye=ne;export{ye as default};
2
+ //# sourceMappingURL=AddTrackWorkflow-JAIB6H2T.js.map
@@ -0,0 +1,2 @@
1
+ import{c as y}from"./chunk-3VGXCEMQ.js";import{a as p,b as f,c as x,d as A,h as a,i as g,j as d}from"./chunk-6VNDP3UB.js";import{a as T}from"./chunk-OGQ6OQDN.js";var z=5e3;function G(e){return typeof e=="string"&&/^[\w+-][\w.+-]*$/.test(e)}function F(e){return e==null}function M(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function L(e){return M(e)&&G(e.prefix)&&typeof e.foldBelowBp=="number"&&Number.isFinite(e.foldBelowBp)&&e.foldBelowBp>0}function P(e){let n;try{n=JSON.parse(e)}catch{return}if(!M(n)||n.schema!==1)return;let{reference:t,tier:i,index:r,contig:o,bubbles:s,alleles:l}=n;if((F(t)||typeof t=="string"&&t.trim()!=="")&&(F(i)||L(i))&&[r,o,s,l].every(k=>F(k)||G(k)))return{...typeof t=="string"?{reference:t.trim()}:{},...L(i)?{tier:{prefix:i.prefix,foldBelowBp:i.foldBelowBp,...i.format===2?{format:2}:{}}}:{}}}function u(e,n){return d(e,t=>t.replace(/[^/\\]*$/,n))}function R(e){let n=a(e);return[p,f].find(t=>n.endsWith(t))}function N(e){return g(e)&&R(e)!==void 0}function B(e,n){let t=R(e)??p;return d(e,i=>`${i.slice(0,-t.length)}${n}`)}function _(e){return N(e)?B(e,".graph.json"):void 0}async function X(e,n){let t=_(e);if(t)try{let i=await T(t,n).readFile({encoding:"utf8",signal:AbortSignal.timeout(z)});return P(i)}catch{return}}var J={RgfaTabixAdapter:"Indexed GFA (gfa-to-tabix .segs.bed.gz or .graph.bed.gz)",RgfaTabixWalks:"Haplotype walks (.walks.bed.gz)",GbzBaseSyntenyAdapter:"GBZ database (.gbz.db)",MinigraphBubbleAdapter:"Minigraph bubbles (tabix BED)"},K={RgfaTabixAdapter:"Path to segments BED (.segs.bed.gz from gfa-to-tabix; the .links.bed.gz, its index and any .graph.json are read beside it), or format 2's .graph.bed.gz",RgfaTabixWalks:"Path to a walk file (<prefix>.<sample>.walks.bed.gz from gfa-to-tabix --walks, for the sample this assembly is)",GbzBaseSyntenyAdapter:"Path to the .gbz.db written by gbz-base construct",MinigraphBubbleAdapter:"Path to bubbles BED (.bed.gz from gfatools bubble)"},w="Path to tabix index (optional; the sibling .tbi is assumed, a .csi is recognised by name)",Z={RgfaTabixAdapter:w,RgfaTabixWalks:w,GbzBaseSyntenyAdapter:"Path to the haplotype index (optional; graph.haplotype-index.db beside the database is assumed)",MinigraphBubbleAdapter:w};function h(e,n){return d(e,t=>t+n)}function C(e){if(!a(e).endsWith(p))throw new Error(`Expected a segments BED ending in ${p}, got ${a(e)}`);return B(e,".links.bed.gz")}function b(e,n){return n?{location:n,indexType:y(a(n),"CSI","TBI")}:{location:h(e,".tbi"),indexType:"TBI"}}function c(e,n){return n!==void 0&&y(a(n),"CSI","TBI")==="CSI"?{location:h(e,".csi"),indexType:"CSI"}:{location:h(e,".tbi"),indexType:"TBI"}}function S(e,n){let t=n.trim();return t&&e?{assemblyNameToPanSN:{[e]:t}}:{}}function E(e,n,t){if(!t)return{};if(t.format===2){let o=u(e,`${t.prefix}${f}`);return{coarse:{foldBelowBp:t.foldBelowBp,graphLocation:o,graphIndex:c(o,n)}}}let i=u(e,`${t.prefix}${p}`),r=u(e,`${t.prefix}.links.bed.gz`);return{coarse:{foldBelowBp:t.foldBelowBp,segmentsLocation:i,segmentsIndex:c(i,n),linksLocation:r,linksIndex:c(r,n)}}}function I(e,n,t){let i=t===e?void 0:t;return S(e,n.trim()||i||"")}function $(e){return e?{readsLocation:e,...a(e).endsWith(".gz")&&g(e)?{readsIndex:{location:h(e,".tbi")}}:{}}:{}}function q(e){return e.split(/[\s,]+/).filter(n=>n!=="")}function W({choice:e,loc:n,indexLoc:t,readsLoc:i,manifest:r,assembly:o,sample:s,haplotypes:l=[]}){if(e==="RgfaTabixWalks"){if(!a(n).endsWith(x))throw new Error(`Expected a walk file ending in ${x}, got ${a(n)}`);return{type:"RgfaTabixAdapter",walksLocation:n,walksIndex:b(n,t),...I(o,s,A(n)),...l.length>0?{defaultHaplotypes:l}:{}}}if(e==="GbzBaseSyntenyAdapter")return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:n,...t?{haplotypeIndexLocation:t}:{},...$(i),...S(o,s)};if(e==="MinigraphBubbleAdapter")return{type:"MinigraphBubbleAdapter",bubblesLocation:n,index:b(n,t),...S(o,s)};if(a(n).endsWith(f))return{type:"RgfaTabixAdapter",graphLocation:n,graphIndex:b(n,t),...I(o,s,r?.reference),...E(n,t,r?.tier)};let m=C(n);return{type:"RgfaTabixAdapter",segmentsLocation:n,segmentsIndex:b(n,t),linksLocation:m,linksIndex:c(m,t),...I(o,s,r?.reference),...E(n,t,r?.tier)}}function Q(e){let{choice:n,assembly:t,trackId:i,name:r}=e;return{type:n==="MinigraphBubbleAdapter"?"FeatureTrack":"GraphTrack",trackId:i,name:r,assemblyNames:[t],adapter:W(e),...n==="RgfaTabixAdapter"||n==="RgfaTabixWalks"?{displayDefaults:{labels:{name:{show:!1},description:{show:!1}}}}:{}}}export{N as a,X as b,J as c,K as d,Z as e,q as f,W as g,Q as h};
2
+ //# sourceMappingURL=chunk-ZEE3HTOT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/GraphAddTrackWorkflow/graphManifest.ts", "../../src/GraphAddTrackWorkflow/buildTrackConfig.ts"],
4
+ "sourcesContent": ["import { openLocation } from '@jbrowse/core/util/io'\n\nimport {\n GRAPH_SUFFIX,\n SEGMENTS_SUFFIX,\n locationName,\n readsSiblings,\n renamed,\n} from '../locationName'\n\nimport type PluginManager from '@jbrowse/core/PluginManager'\nimport type { FileLocation } from '@jbrowse/core/util'\n\n// The part of `<prefix>.graph.json`, written by `gfa-to-tabix build`, that\n// Open track reads\nexport interface GraphManifest {\n reference?: string\n // `format: 2` when the tier is one `<prefix>.graph.bed.gz`, as gfa-to-tabix\n // 2 writes it, rather than a segments and links pair\n tier?: { prefix: string; foldBelowBp: number; format?: 2 }\n}\n\nconst FETCH_TIMEOUT_MS = 5000\n\n// A bare file name beside the manifest: no directory, scheme or leading dot\nfunction isSiblingName(name: unknown): name is string {\n return typeof name === 'string' && /^[\\w+-][\\w.+-]*$/.test(name)\n}\n\nfunction isAbsent(value: unknown) {\n return value === undefined || value === null\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isTier(tier: unknown): tier is NonNullable<GraphManifest['tier']> {\n return (\n isPlainRecord(tier) &&\n isSiblingName(tier.prefix) &&\n typeof tier.foldBelowBp === 'number' &&\n Number.isFinite(tier.foldBelowBp) &&\n tier.foldBelowBp > 0\n )\n}\n\nexport function parseGraphManifest(text: string): GraphManifest | undefined {\n let json: unknown\n try {\n json = JSON.parse(text)\n } catch {\n return undefined\n }\n if (!isPlainRecord(json) || json.schema !== 1) {\n return undefined\n }\n const { reference, tier, index, contig, bubbles, alleles } = json\n const valid =\n (isAbsent(reference) ||\n (typeof reference === 'string' && reference.trim() !== '')) &&\n (isAbsent(tier) || isTier(tier)) &&\n [index, contig, bubbles, alleles].every(\n f => isAbsent(f) || isSiblingName(f),\n )\n if (!valid) {\n return undefined\n }\n return {\n ...(typeof reference === 'string' ? { reference: reference.trim() } : {}),\n ...(isTier(tier)\n ? {\n tier: {\n prefix: tier.prefix,\n foldBelowBp: tier.foldBelowBp,\n ...(tier.format === 2 ? { format: 2 as const } : {}),\n },\n }\n : {}),\n }\n}\n\n// A file the manifest names, in the directory of the segments file opened\nexport function besideSegments(segs: FileLocation, fileName: string) {\n return renamed(segs, name => name.replace(/[^/\\\\]*$/, fileName))\n}\n\n// The suffix of a gfa-to-tabix index file: format 1's segments BED or format\n// 2's graph BED\nfunction indexSuffix(loc: FileLocation) {\n const name = locationName(loc)\n return [SEGMENTS_SUFFIX, GRAPH_SUFFIX].find(suffix => name.endsWith(suffix))\n}\n\n// A segments BED, or format 2's graph BED, the rest of the index and the\n// manifest can be found beside\nexport function isGraphIndexLocation(loc: FileLocation) {\n return readsSiblings(loc) && indexSuffix(loc) !== undefined\n}\n\n// `<prefix><suffix>` beside `<prefix>.segs.bed.gz` or `<prefix>.graph.bed.gz`\nexport function segmentsSibling(segs: FileLocation, suffix: string) {\n const own = indexSuffix(segs) ?? SEGMENTS_SUFFIX\n return renamed(segs, name => `${name.slice(0, -own.length)}${suffix}`)\n}\n\nexport function manifestLocation(segs: FileLocation) {\n return isGraphIndexLocation(segs)\n ? segmentsSibling(segs, '.graph.json')\n : undefined\n}\n\n// Undefined for a manifest that is missing, unreadable or not schema 1, so\n// Open track falls back to the files beside the segments alone\nexport async function readGraphManifest(\n segs: FileLocation,\n pluginManager?: PluginManager,\n) {\n const loc = manifestLocation(segs)\n if (!loc) {\n return undefined\n }\n try {\n const text = await openLocation(loc, pluginManager).readFile({\n encoding: 'utf8',\n signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),\n })\n return parseGraphManifest(text)\n } catch {\n return undefined\n }\n}\n", "import { makeIndexType } from '@jbrowse/core/util/tracks'\n\nimport { besideSegments, segmentsSibling } from './graphManifest'\nimport {\n GRAPH_SUFFIX,\n SEGMENTS_SUFFIX,\n WALKS_SUFFIX,\n locationName,\n readsSiblings,\n renamed,\n walkFileSample,\n} from '../locationName'\n\nimport type { GraphManifest } from './graphManifest'\nimport type { FileLocation } from '@jbrowse/core/util'\n\n// 'RgfaTabixWalks' is an RgfaTabixAdapter read from a walk file\nexport type GraphFileChoice =\n | 'RgfaTabixAdapter'\n | 'RgfaTabixWalks'\n | 'GbzBaseSyntenyAdapter'\n | 'MinigraphBubbleAdapter'\n\nexport const GRAPH_FILE_LABELS: Record<GraphFileChoice, string> = {\n RgfaTabixAdapter: 'Indexed GFA (gfa-to-tabix .segs.bed.gz or .graph.bed.gz)',\n RgfaTabixWalks: 'Haplotype walks (.walks.bed.gz)',\n GbzBaseSyntenyAdapter: 'GBZ database (.gbz.db)',\n MinigraphBubbleAdapter: 'Minigraph bubbles (tabix BED)',\n}\n\nexport const GRAPH_FILE_FIELDS: Record<GraphFileChoice, string> = {\n RgfaTabixAdapter:\n \"Path to segments BED (.segs.bed.gz from gfa-to-tabix; the .links.bed.gz, its index and any .graph.json are read beside it), or format 2's .graph.bed.gz\",\n RgfaTabixWalks:\n 'Path to a walk file (<prefix>.<sample>.walks.bed.gz from gfa-to-tabix --walks, for the sample this assembly is)',\n GbzBaseSyntenyAdapter: 'Path to the .gbz.db written by gbz-base construct',\n MinigraphBubbleAdapter: 'Path to bubbles BED (.bed.gz from gfatools bubble)',\n}\n\nconst TABIX_INDEX_FIELD =\n 'Path to tabix index (optional; the sibling .tbi is assumed, a .csi is recognised by name)'\n\nexport const GRAPH_INDEX_FIELDS: Record<GraphFileChoice, string> = {\n RgfaTabixAdapter: TABIX_INDEX_FIELD,\n RgfaTabixWalks: TABIX_INDEX_FIELD,\n GbzBaseSyntenyAdapter:\n 'Path to the haplotype index (optional; graph.haplotype-index.db beside the database is assumed)',\n MinigraphBubbleAdapter: TABIX_INDEX_FIELD,\n}\n\nfunction sibling(loc: FileLocation, suffix: string) {\n return renamed(loc, name => name + suffix)\n}\n\nfunction linksLocation(loc: FileLocation) {\n if (!locationName(loc).endsWith(SEGMENTS_SUFFIX)) {\n throw new Error(\n `Expected a segments BED ending in ${SEGMENTS_SUFFIX}, got ${locationName(loc)}`,\n )\n }\n return segmentsSibling(loc, '.links.bed.gz')\n}\n\nfunction tabixIndex(loc: FileLocation, indexLoc: FileLocation | undefined) {\n return indexLoc\n ? {\n location: indexLoc,\n indexType: makeIndexType(locationName(indexLoc), 'CSI', 'TBI'),\n }\n : { location: sibling(loc, '.tbi'), indexType: 'TBI' }\n}\n\n// The links file's index is assumed beside it, of the kind the segments' is.\nfunction siblingIndex(loc: FileLocation, indexLoc: FileLocation | undefined) {\n const csi =\n indexLoc !== undefined &&\n makeIndexType(locationName(indexLoc), 'CSI', 'TBI') === 'CSI'\n return csi\n ? { location: sibling(loc, '.csi'), indexType: 'CSI' }\n : { location: sibling(loc, '.tbi'), indexType: 'TBI' }\n}\n\n// none for a guessed config, which knows no assembly yet; see withWalkReference\nfunction panSN(assembly: string, sample: string) {\n const name = sample.trim()\n return name && assembly ? { assemblyNameToPanSN: { [assembly]: name } } : {}\n}\n\nfunction coarseTier(\n loc: FileLocation,\n indexLoc: FileLocation | undefined,\n tier: GraphManifest['tier'],\n) {\n if (!tier) {\n return {}\n }\n if (tier.format === 2) {\n const graph = besideSegments(loc, `${tier.prefix}${GRAPH_SUFFIX}`)\n return {\n coarse: {\n foldBelowBp: tier.foldBelowBp,\n graphLocation: graph,\n graphIndex: siblingIndex(graph, indexLoc),\n },\n }\n }\n const segs = besideSegments(loc, `${tier.prefix}${SEGMENTS_SUFFIX}`)\n const links = besideSegments(loc, `${tier.prefix}.links.bed.gz`)\n return {\n coarse: {\n foldBelowBp: tier.foldBelowBp,\n segmentsLocation: segs,\n segmentsIndex: siblingIndex(segs, indexLoc),\n linksLocation: links,\n linksIndex: siblingIndex(links, indexLoc),\n },\n }\n}\n\n// The user's sample wins; the reference the graph's files name (a manifest's,\n// or a walk file's own) stands in when blank\nfunction referencePanSN(\n assembly: string,\n sample: string,\n reference: string | undefined,\n) {\n const fromManifest = reference === assembly ? undefined : reference\n return panSN(assembly, sample.trim() || fromManifest || '')\n}\n\n// a bgzipped GAF is read by its tabix index, a plain one whole\nfunction readsConfig(readsLoc: FileLocation | undefined) {\n return readsLoc\n ? {\n readsLocation: readsLoc,\n ...(locationName(readsLoc).endsWith('.gz') && readsSiblings(readsLoc)\n ? { readsIndex: { location: sibling(readsLoc, '.tbi') } }\n : {}),\n }\n : {}\n}\n\n// Names typed as a list, by comma or space\nexport function parseHaplotypes(text: string) {\n return text.split(/[\\s,]+/).filter(name => name !== '')\n}\n\nexport function buildAdapterConfig({\n choice,\n loc,\n indexLoc,\n readsLoc,\n manifest,\n assembly,\n sample,\n haplotypes = [],\n}: {\n choice: GraphFileChoice\n loc: FileLocation\n indexLoc: FileLocation | undefined\n // a GBZ track's GAF reads, which no other choice takes\n readsLoc?: FileLocation\n // the `.graph.json` beside an rGFA segments file\n manifest?: GraphManifest\n assembly: string\n sample: string\n // a walk file's haplotypes to cut for until the user picks others\n haplotypes?: string[]\n}) {\n if (choice === 'RgfaTabixWalks') {\n if (!locationName(loc).endsWith(WALKS_SUFFIX)) {\n throw new Error(\n `Expected a walk file ending in ${WALKS_SUFFIX}, got ${locationName(loc)}`,\n )\n }\n return {\n type: 'RgfaTabixAdapter',\n walksLocation: loc,\n walksIndex: tabixIndex(loc, indexLoc),\n ...referencePanSN(assembly, sample, walkFileSample(loc)),\n ...(haplotypes.length > 0 ? { defaultHaplotypes: haplotypes } : {}),\n }\n }\n if (choice === 'GbzBaseSyntenyAdapter') {\n return {\n type: 'GbzBaseSyntenyAdapter',\n gbzDbLocation: loc,\n ...(indexLoc ? { haplotypeIndexLocation: indexLoc } : {}),\n ...readsConfig(readsLoc),\n ...panSN(assembly, sample),\n }\n }\n if (choice === 'MinigraphBubbleAdapter') {\n return {\n type: 'MinigraphBubbleAdapter',\n bubblesLocation: loc,\n index: tabixIndex(loc, indexLoc),\n ...panSN(assembly, sample),\n }\n }\n if (locationName(loc).endsWith(GRAPH_SUFFIX)) {\n return {\n type: 'RgfaTabixAdapter',\n graphLocation: loc,\n graphIndex: tabixIndex(loc, indexLoc),\n ...referencePanSN(assembly, sample, manifest?.reference),\n ...coarseTier(loc, indexLoc, manifest?.tier),\n }\n }\n const links = linksLocation(loc)\n return {\n type: 'RgfaTabixAdapter',\n segmentsLocation: loc,\n segmentsIndex: tabixIndex(loc, indexLoc),\n linksLocation: links,\n linksIndex: siblingIndex(links, indexLoc),\n ...referencePanSN(assembly, sample, manifest?.reference),\n ...coarseTier(loc, indexLoc, manifest?.tier),\n }\n}\n\nexport function buildTrackConfig(args: {\n choice: GraphFileChoice\n loc: FileLocation\n indexLoc: FileLocation | undefined\n readsLoc?: FileLocation\n manifest?: GraphManifest\n assembly: string\n sample: string\n haplotypes?: string[]\n trackId: string\n name: string\n}) {\n const { choice, assembly, trackId, name } = args\n return {\n type: choice === 'MinigraphBubbleAdapter' ? 'FeatureTrack' : 'GraphTrack',\n trackId,\n name,\n assemblyNames: [assembly],\n adapter: buildAdapterConfig(args),\n ...(choice === 'RgfaTabixAdapter' || choice === 'RgfaTabixWalks'\n ? {\n displayDefaults: {\n labels: { name: { show: false }, description: { show: false } },\n },\n }\n : {}),\n }\n}\n"],
5
+ "mappings": "kKAsBA,IAAMA,EAAmB,IAGzB,SAASC,EAAcC,EAA+B,CACpD,OAAO,OAAOA,GAAS,UAAY,mBAAmB,KAAKA,CAAI,CACjE,CAEA,SAASC,EAASC,EAAgB,CAChC,OAA8BA,GAAU,IAC1C,CAEA,SAASC,EAAcD,EAAkD,CACvE,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,CAAC,MAAM,QAAQA,CAAK,CAC5E,CAEA,SAASE,EAAOC,EAA2D,CACzE,OACEF,EAAcE,CAAI,GAClBN,EAAcM,EAAK,MAAM,GACzB,OAAOA,EAAK,aAAgB,UAC5B,OAAO,SAASA,EAAK,WAAW,GAChCA,EAAK,YAAc,CAEvB,CAEO,SAASC,EAAmBC,EAAyC,CAC1E,IAAIC,EACJ,GAAI,CACFA,EAAO,KAAK,MAAMD,CAAI,CACxB,MAAQ,CACN,MACF,CACA,GAAI,CAACJ,EAAcK,CAAI,GAAKA,EAAK,SAAW,EAC1C,OAEF,GAAM,CAAE,UAAAC,EAAW,KAAAJ,EAAM,MAAAK,EAAO,OAAAC,EAAQ,QAAAC,EAAS,QAAAC,CAAQ,EAAIL,EAQ7D,IANGP,EAASQ,CAAS,GAChB,OAAOA,GAAc,UAAYA,EAAU,KAAK,IAAM,MACxDR,EAASI,CAAI,GAAKD,EAAOC,CAAI,IAC9B,CAACK,EAAOC,EAAQC,EAASC,CAAO,EAAE,MAChCC,GAAKb,EAASa,CAAC,GAAKf,EAAce,CAAC,CACrC,EAIF,MAAO,CACL,GAAI,OAAOL,GAAc,SAAW,CAAE,UAAWA,EAAU,KAAK,CAAE,EAAI,CAAC,EACvE,GAAIL,EAAOC,CAAI,EACX,CACE,KAAM,CACJ,OAAQA,EAAK,OACb,YAAaA,EAAK,YAClB,GAAIA,EAAK,SAAW,EAAI,CAAE,OAAQ,CAAW,EAAI,CAAC,CACpD,CACF,EACA,CAAC,CACP,CACF,CAGO,SAASU,EAAeC,EAAoBC,EAAkB,CACnE,OAAOC,EAAQF,EAAMhB,GAAQA,EAAK,QAAQ,WAAYiB,CAAQ,CAAC,CACjE,CAIA,SAASE,EAAYC,EAAmB,CACtC,IAAMpB,EAAOqB,EAAaD,CAAG,EAC7B,MAAO,CAACE,EAAiBC,CAAY,EAAE,KAAKC,GAAUxB,EAAK,SAASwB,CAAM,CAAC,CAC7E,CAIO,SAASC,EAAqBL,EAAmB,CACtD,OAAOM,EAAcN,CAAG,GAAKD,EAAYC,CAAG,IAAM,MACpD,CAGO,SAASO,EAAgBX,EAAoBQ,EAAgB,CAClE,IAAMI,EAAMT,EAAYH,CAAI,GAAKM,EACjC,OAAOJ,EAAQF,EAAMhB,GAAQ,GAAGA,EAAK,MAAM,EAAG,CAAC4B,EAAI,MAAM,CAAC,GAAGJ,CAAM,EAAE,CACvE,CAEO,SAASK,EAAiBb,EAAoB,CACnD,OAAOS,EAAqBT,CAAI,EAC5BW,EAAgBX,EAAM,aAAa,EACnC,MACN,CAIA,eAAsBc,EACpBd,EACAe,EACA,CACA,IAAMX,EAAMS,EAAiBb,CAAI,EACjC,GAAKI,EAGL,GAAI,CACF,IAAMb,EAAO,MAAMyB,EAAaZ,EAAKW,CAAa,EAAE,SAAS,CAC3D,SAAU,OACV,OAAQ,YAAY,QAAQjC,CAAgB,CAC9C,CAAC,EACD,OAAOQ,EAAmBC,CAAI,CAChC,MAAQ,CACN,MACF,CACF,CC5GO,IAAM0B,EAAqD,CAChE,iBAAkB,2DAClB,eAAgB,kCAChB,sBAAuB,yBACvB,uBAAwB,+BAC1B,EAEaC,EAAqD,CAChE,iBACE,0JACF,eACE,kHACF,sBAAuB,oDACvB,uBAAwB,oDAC1B,EAEMC,EACJ,4FAEWC,EAAsD,CACjE,iBAAkBD,EAClB,eAAgBA,EAChB,sBACE,kGACF,uBAAwBA,CAC1B,EAEA,SAASE,EAAQC,EAAmBC,EAAgB,CAClD,OAAOC,EAAQF,EAAKG,GAAQA,EAAOF,CAAM,CAC3C,CAEA,SAASG,EAAcJ,EAAmB,CACxC,GAAI,CAACK,EAAaL,CAAG,EAAE,SAASM,CAAe,EAC7C,MAAM,IAAI,MACR,qCAAqCA,CAAe,SAASD,EAAaL,CAAG,CAAC,EAChF,EAEF,OAAOO,EAAgBP,EAAK,eAAe,CAC7C,CAEA,SAASQ,EAAWR,EAAmBS,EAAoC,CACzE,OAAOA,EACH,CACE,SAAUA,EACV,UAAWC,EAAcL,EAAaI,CAAQ,EAAG,MAAO,KAAK,CAC/D,EACA,CAAE,SAAUV,EAAQC,EAAK,MAAM,EAAG,UAAW,KAAM,CACzD,CAGA,SAASW,EAAaX,EAAmBS,EAAoC,CAI3E,OAFEA,IAAa,QACbC,EAAcL,EAAaI,CAAQ,EAAG,MAAO,KAAK,IAAM,MAEtD,CAAE,SAAUV,EAAQC,EAAK,MAAM,EAAG,UAAW,KAAM,EACnD,CAAE,SAAUD,EAAQC,EAAK,MAAM,EAAG,UAAW,KAAM,CACzD,CAGA,SAASY,EAAMC,EAAkBC,EAAgB,CAC/C,IAAMX,EAAOW,EAAO,KAAK,EACzB,OAAOX,GAAQU,EAAW,CAAE,oBAAqB,CAAE,CAACA,CAAQ,EAAGV,CAAK,CAAE,EAAI,CAAC,CAC7E,CAEA,SAASY,EACPf,EACAS,EACAO,EACA,CACA,GAAI,CAACA,EACH,MAAO,CAAC,EAEV,GAAIA,EAAK,SAAW,EAAG,CACrB,IAAMC,EAAQC,EAAelB,EAAK,GAAGgB,EAAK,MAAM,GAAGG,CAAY,EAAE,EACjE,MAAO,CACL,OAAQ,CACN,YAAaH,EAAK,YAClB,cAAeC,EACf,WAAYN,EAAaM,EAAOR,CAAQ,CAC1C,CACF,CACF,CACA,IAAMW,EAAOF,EAAelB,EAAK,GAAGgB,EAAK,MAAM,GAAGV,CAAe,EAAE,EAC7De,EAAQH,EAAelB,EAAK,GAAGgB,EAAK,MAAM,eAAe,EAC/D,MAAO,CACL,OAAQ,CACN,YAAaA,EAAK,YAClB,iBAAkBI,EAClB,cAAeT,EAAaS,EAAMX,CAAQ,EAC1C,cAAeY,EACf,WAAYV,EAAaU,EAAOZ,CAAQ,CAC1C,CACF,CACF,CAIA,SAASa,EACPT,EACAC,EACAS,EACA,CACA,IAAMC,EAAeD,IAAcV,EAAW,OAAYU,EAC1D,OAAOX,EAAMC,EAAUC,EAAO,KAAK,GAAKU,GAAgB,EAAE,CAC5D,CAGA,SAASC,EAAYC,EAAoC,CACvD,OAAOA,EACH,CACE,cAAeA,EACf,GAAIrB,EAAaqB,CAAQ,EAAE,SAAS,KAAK,GAAKC,EAAcD,CAAQ,EAChE,CAAE,WAAY,CAAE,SAAU3B,EAAQ2B,EAAU,MAAM,CAAE,CAAE,EACtD,CAAC,CACP,EACA,CAAC,CACP,CAGO,SAASE,EAAgBC,EAAc,CAC5C,OAAOA,EAAK,MAAM,QAAQ,EAAE,OAAO1B,GAAQA,IAAS,EAAE,CACxD,CAEO,SAAS2B,EAAmB,CACjC,OAAAC,EACA,IAAA/B,EACA,SAAAS,EACA,SAAAiB,EACA,SAAAM,EACA,SAAAnB,EACA,OAAAC,EACA,WAAAmB,EAAa,CAAC,CAChB,EAYG,CACD,GAAIF,IAAW,iBAAkB,CAC/B,GAAI,CAAC1B,EAAaL,CAAG,EAAE,SAASkC,CAAY,EAC1C,MAAM,IAAI,MACR,kCAAkCA,CAAY,SAAS7B,EAAaL,CAAG,CAAC,EAC1E,EAEF,MAAO,CACL,KAAM,mBACN,cAAeA,EACf,WAAYQ,EAAWR,EAAKS,CAAQ,EACpC,GAAGa,EAAeT,EAAUC,EAAQqB,EAAenC,CAAG,CAAC,EACvD,GAAIiC,EAAW,OAAS,EAAI,CAAE,kBAAmBA,CAAW,EAAI,CAAC,CACnE,CACF,CACA,GAAIF,IAAW,wBACb,MAAO,CACL,KAAM,wBACN,cAAe/B,EACf,GAAIS,EAAW,CAAE,uBAAwBA,CAAS,EAAI,CAAC,EACvD,GAAGgB,EAAYC,CAAQ,EACvB,GAAGd,EAAMC,EAAUC,CAAM,CAC3B,EAEF,GAAIiB,IAAW,yBACb,MAAO,CACL,KAAM,yBACN,gBAAiB/B,EACjB,MAAOQ,EAAWR,EAAKS,CAAQ,EAC/B,GAAGG,EAAMC,EAAUC,CAAM,CAC3B,EAEF,GAAIT,EAAaL,CAAG,EAAE,SAASmB,CAAY,EACzC,MAAO,CACL,KAAM,mBACN,cAAenB,EACf,WAAYQ,EAAWR,EAAKS,CAAQ,EACpC,GAAGa,EAAeT,EAAUC,EAAQkB,GAAU,SAAS,EACvD,GAAGjB,EAAWf,EAAKS,EAAUuB,GAAU,IAAI,CAC7C,EAEF,IAAMX,EAAQjB,EAAcJ,CAAG,EAC/B,MAAO,CACL,KAAM,mBACN,iBAAkBA,EAClB,cAAeQ,EAAWR,EAAKS,CAAQ,EACvC,cAAeY,EACf,WAAYV,EAAaU,EAAOZ,CAAQ,EACxC,GAAGa,EAAeT,EAAUC,EAAQkB,GAAU,SAAS,EACvD,GAAGjB,EAAWf,EAAKS,EAAUuB,GAAU,IAAI,CAC7C,CACF,CAEO,SAASI,EAAiBC,EAW9B,CACD,GAAM,CAAE,OAAAN,EAAQ,SAAAlB,EAAU,QAAAyB,EAAS,KAAAnC,CAAK,EAAIkC,EAC5C,MAAO,CACL,KAAMN,IAAW,yBAA2B,eAAiB,aAC7D,QAAAO,EACA,KAAAnC,EACA,cAAe,CAACU,CAAQ,EACxB,QAASiB,EAAmBO,CAAI,EAChC,GAAIN,IAAW,oBAAsBA,IAAW,iBAC5C,CACE,gBAAiB,CACf,OAAQ,CAAE,KAAM,CAAE,KAAM,EAAM,EAAG,YAAa,CAAE,KAAM,EAAM,CAAE,CAChE,CACF,EACA,CAAC,CACP,CACF",
6
+ "names": ["FETCH_TIMEOUT_MS", "isSiblingName", "name", "isAbsent", "value", "isPlainRecord", "isTier", "tier", "parseGraphManifest", "text", "json", "reference", "index", "contig", "bubbles", "alleles", "f", "besideSegments", "segs", "fileName", "renamed", "indexSuffix", "loc", "locationName", "SEGMENTS_SUFFIX", "GRAPH_SUFFIX", "suffix", "isGraphIndexLocation", "readsSiblings", "segmentsSibling", "own", "manifestLocation", "readGraphManifest", "pluginManager", "openLocation", "GRAPH_FILE_LABELS", "GRAPH_FILE_FIELDS", "TABIX_INDEX_FIELD", "GRAPH_INDEX_FIELDS", "sibling", "loc", "suffix", "renamed", "name", "linksLocation", "locationName", "SEGMENTS_SUFFIX", "segmentsSibling", "tabixIndex", "indexLoc", "makeIndexType", "siblingIndex", "panSN", "assembly", "sample", "coarseTier", "tier", "graph", "besideSegments", "GRAPH_SUFFIX", "segs", "links", "referencePanSN", "reference", "fromManifest", "readsConfig", "readsLoc", "readsSiblings", "parseHaplotypes", "text", "buildAdapterConfig", "choice", "manifest", "haplotypes", "WALKS_SUFFIX", "walkFileSample", "buildTrackConfig", "args", "trackId"]
7
+ }
@@ -1,9 +1,9 @@
1
- import{A as Nr,B as Hr,C as Nt,D as Kr,E as cn,F as Te,G as un,H as mn,I as ln,J as gn,K as fn,L as wn,M as jt,P as Qe,Q as kn,S as Mn,U as xn,V as Rn,a as q,b as or,c as rr,d as Ue,e as Q,f as cr,h as At,i as I,j as Re,k as Ee,l as Pt,m as ur,n as mr,o as lr,p as gr,q as Ct,r as br,s as Br,x as Ir,y as Er,z as Fr}from"./chunks/chunk-OLZZDBQJ.js";import{a as vt,b as ar,c as ir,d as Ie,e as sr,f as pr,g as dr,j as hn,k as bn,o as yn,p as Sn}from"./chunks/chunk-WUOXZAGN.js";import{$a as Ur,Ab as sn,B as fr,Bb as pn,C as wr,Cb as dn,H as kr,I as Mr,Ka as Vr,La as Ht,Oa as jr,P as se,Pa as Wr,Q as Sr,R as xr,Ra as Or,S as Rr,Sa as Dr,T as Tr,U as Gr,V as Lr,Va as _r,W as Bt,Wa as zr,Xa as $r,Y as vr,Za as Jr,_a as Yr,a as Be,aa as Ar,ab as Xr,b as Mt,ba as Fe,bb as qr,c as C,ca as It,d as ie,da as pe,db as Qr,ea as de,ga as Pr,gc as Ke,h as tr,ha as Ne,ia as Cr,jb as Vt,lb as Zr,ma as Et,mb as en,na as Ft,o as Lt,ob as tn,p as nr,qb as on,u as hr,ub as qe,vb as rn,wb as nn,x as Xe,xb as an,z as yr}from"./chunks/chunk-SL4JJJQJ.js";import"./chunks/chunk-W7IHIVSE.js";import{c as Zo,d as er}from"./chunks/chunk-T2VC3EEL.js";import{E as Gt,h as Ye,w as Rt,x as Tt}from"./chunks/chunk-CVHKXFVS.js";import{b as He}from"./chunks/chunk-BJHWGRMP.js";import{a as Tn,b as Gn,c as Ze,d as Ln,e as vn}from"./chunks/chunk-PTOKTIQG.js";import{j as ze}from"./chunks/chunk-CNCYMJ5E.js";import{s as xt}from"./chunks/chunk-M2D7NUOY.js";import{e as ht,g as bt}from"./chunks/chunk-OGXVDZPS.js";import"./chunks/chunk-YBLNN5FU.js";import{i as kt,m as Jo}from"./chunks/chunk-CZI7IP5S.js";import{a as Eo,c as Fo,g as K,r as Ce,t as $o,u as $e}from"./chunks/chunk-IK3MQ4ZJ.js";import{A as B,B as j,C as Se,D as xe,j as Me}from"./chunks/chunk-CZXJXNZN.js";import"./chunks/chunk-YBLNN5FU.js";import{a as Ho,b as O,c as te,d as Vo,e as jo}from"./chunks/chunk-ROZPEXN4.js";import{a as _e,c as No}from"./chunks/chunk-VKZALU57.js";import{a as Ko,g as Qo}from"./chunks/chunk-5FNGR33G.js";import{b as Yo,d as Uo}from"./chunks/chunk-3VGXCEMQ.js";import{b as yt,c as Wo,d as Oo,f as Do,g as _o,h as ft,i as zo}from"./chunks/chunk-6VNDP3UB.js";import{a as wt}from"./chunks/chunk-OGQ6OQDN.js";import{a as L,b as D,c as Pe,e as V,f as M}from"./chunks/chunk-3WG3GF2A.js";import{g as Ao,i as ae,j as x,k as Po,l as Co,n as Bo}from"./chunks/chunk-J5RMHLFJ.js";import{c as oe}from"./chunks/chunk-NIEZKWQV.js";import{I as Je,i as Xo,l as qo}from"./chunks/chunk-5Z4VIKXZ.js";import{a as Io,b as F,d as St}from"./chunks/chunk-JMBDTNUR.js";var et=JBrowseExports["@jbrowse/core/Plugin"];var An=et&&et.__esModule?et.default:et;var tt=q([F("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),F("circle",{cx:"14.8",cy:"18",r:"2"},"1"),F("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var ot=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"];var Z=ot&&ot.__esModule?ot.default:ot;var _a=O("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:B("/path/to/graph.gbz.db"),haplotypeIndexLocation:B(""),readsLocation:B(""),readsIndex:j("GbzBaseReadsIndex"),samplesTsvLocation:B(""),subgraphSnarls:{type:"stringEnum",model:M.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:ze.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:ze.context,advanced:!0},nodeLimit:{type:"number",defaultValue:ze.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},...za(r,o)}:{}}}});function za(e,t){let{name:o,query:r}=_o(e);return o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi${r}`,baseUri:t}}}:{}}var Pn=_a;function Wt(e){e.addAdapterType(()=>new Z({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:Pn,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-EJIR3HZM.js").then(t=>t.default)}))}var ce=JBrowseExports["@jbrowse/core/pluggableElementTypes"],re=e=>ce!=null&&e in Object(ce)?ce[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 Cn=re("AddTrackWorkflowType");var Bn=re("BaseDisplay");var rt=re("DisplayType");var Ge=re("RpcMethodType"),In=re("RpcMethodTypeWithRenameRegion");var En=re("TrackType");var Fn=re("createBaseTrackConfig"),Nn=re("createBaseTrackModel");var ws=ce&&ce.__esModule?ce.default:ce;var ue=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"],$a=e=>ue!=null&&e in Object(ue)?ue[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=$a("getAdapter");var Ms=ue&&ue.__esModule?ue.default:ue;async function Le(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 Ve=class extends Ge{constructor(){super(...arguments);this.name="GetGraphHaplotypes"}async execute(o){let{adapter:r}=await Le(this.pluginManager,o,"getHaplotypeNames");return r?.getHaplotypeNames({signal:o.signal})}};function Vn(e){return typeof e.reads=="string"&&e.reads!==""||Do(e.readsLocation)}var je=class extends Ge{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(o){let{nodeNames:r,signal:n}=o,{adapter:a}=await Le(this.pluginManager,o,"getReads");return a?a.getReads(r,{signal:n}):{records:[],total:0}}};var me=JBrowseExports["@jbrowse/core/util/librpc"],Ja=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/librpc' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Ot=Ja("rpcResultWithArrayBuffers");var Ns=me&&me.__esModule?me.default:me;var We=class extends In{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(o){let{region:r,opts:n,signal:a}=o,{adapter:i,name:s}=await Le(this.pluginManager,o,"getSubgraph");if(i){let p=await i.getSubgraph(r,{...n,signal:a});if(typeof p!="string")return Ot(p);let c=p?bt(p):void 0;return c?Ot(c):p}return console.warn(`[GetSubgraph] ${s} does not implement getSubgraph`),""}};var Ya=oe(()=>import("./chunks/AddTrackWorkflow-7CXTSSMR.js"));function Dt(e){e.addAddTrackWorkflowType(()=>new Cn({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Ya,stateModel:M.model({})}))}var Oe=class extends Ge{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(o){let{graph:r,options:n,signal:a,statusCallback:i}=o;return a?.throwIfAborted(),i?.("Computing layout"),er({graph:r,options:n})}};var nt=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"];var jn=nt&&nt.__esModule?nt.default:nt;var le=JBrowseExports["@jbrowse/core/util/withLaunchInput"],Ua=e=>le!=null&&e in Object(le)?le[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}),Wn=Ua("defineLaunchKeys");var Ks=le&&le.__esModule?le.default:le;var ge=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"],Xa=e=>ge!=null&&e in Object(ge)?ge[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 On=Xa("BaseViewModel");var Zs=ge&&ge.__esModule?ge.default:ge;var ve=["off","nodes","everything"];var Dn=q(F("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 _n=q(F("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10c1.38 0 2.5-1.12 2.5-2.5 0-.61-.23-1.2-.64-1.67-.08-.1-.13-.21-.13-.33 0-.28.22-.5.5-.5H16c3.31 0 6-2.69 6-6 0-4.96-4.49-9-10-9m5.5 11c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5m-3-4c-.83 0-1.5-.67-1.5-1.5S13.67 6 14.5 6s1.5.67 1.5 1.5S15.33 9 14.5 9M5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S7.33 13 6.5 13 5 12.33 5 11.5m6-4c0 .83-.67 1.5-1.5 1.5S8 8.33 8 7.5 8.67 6 9.5 6s1.5.67 1.5 1.5"}),"Palette");var zn=q([F("circle",{cx:"12",cy:"12",r:"3.2"},"0"),F("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 zt(e,t,{cut:o=!1}={}){if(!(t>0)||e.paths?.length||!e.nodes.some(y=>K(y)))return e;let{nodes:r,edges:n}=Ka(e),a=new Map(r.map((y,R)=>[y.id,R])),i=n.map(Yn),s=Za(r.length,n,i,a),p=ti(r,n,i,a),c=Fo(p.keys(),y=>p[y]),m=new Uint8Array(r.length),S=[];for(let y of c.values())if(oi(y,r,s,p)>=t){for(let R of y)m[R]=1;K(r[y[0]])||S.push(y)}let{dist:A,pred:h}=ai(r,s);for(let y of S)for(let[R,v]of ri(y,r,s,p)){let N=ni(R,v,s,p,A,r);for(;N!==void 0&&!m[N];)m[N]=1,N=K(r[N])?void 0:h[N]}let T=n.map(y=>[a.get(y.from),a.get(y.to)]),E=n.map((y,R)=>{let[v,N]=T[R];return v!==void 0&&N!==void 0&&!!m[v]&&!!m[N]}),_=n.flatMap((y,R)=>{let[v,N]=T[R];if(!E[R])return[];let Ae=ei(r[v],i[R].from,r[N],i[R].to);return Ae>0&&Ae<t?[{k:R,bp:Ae}]:[]}).sort((y,R)=>y.bp-R.bp).map(({k:y})=>y);for(let y of _)E[y]=!1;let b=new Set(o?qa(r.length,T,E,_):[]),g=n.flatMap((y,R)=>b.has(R)?[{...y,foldBridge:!0}]:E[R]?[y]:[]);return si({...e,nodes:r,edges:g},m,p)}function qa(e,t,o,r){let n=Array.from({length:e},(s,p)=>p),a=s=>{for(;n[s]!==s;)n[s]=n[n[s]],s=n[s];return s},i=s=>{let[p,c]=t[s],[m,S]=[a(p),a(c)];return n[m]=S,m!==S};return o.forEach((s,p)=>{s&&i(p)}),r.filter(i)}function Ka({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??Ye(n);return o.has(n)?Qa(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 Qa(e){return e==="+"?"-":"+"}function Yn(e){return{from:(e.fromStrand??Ye(e.from))==="+"?"e":"s",to:(e.toStrand??Ye(e.to))==="+"?"s":"e"}}function Za(e,t,o,r){let n=Array.from({length:e},()=>[]);return t.forEach((a,i)=>{let s=r.get(a.from),p=r.get(a.to);if(s!==void 0&&p!==void 0){let{from:c,to:m}=o[i];n[s].push({other:p,side:c,otherSide:m}),n[p].push({other:s,side:m,otherSide:c})}}),n}function Un(e,t){let o=e.stable,r=t.stable;return o&&r?.refName===o.refName&&r.rank===o.rank?[o,r]:void 0}function $t(e,t,o,r){let n=Un(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 ei(e,t,o,r){let n=Un(e,o);if(!n||$t(e,t,o,r))return 0;let[a,i]=n;return Math.abs(_t(i,o,r)-_t(a,e,t))}function _t({start:e},t,o){return o==="s"?e:e+t.length}function ti(e,t,o,r){let n=e.map((i,s)=>s),a=i=>{for(;n[i]!==i;)n[i]=n[n[i]],i=n[i];return i};return t.forEach((i,s)=>{let p=r.get(i.from),c=r.get(i.to);p!==void 0&&c!==void 0&&$t(e[p],o[s].from,e[c],o[s].to)&&(n[a(p)]=a(c))}),e.map((i,s)=>a(s))}function oi(e,t,o,r){if(K(t[e[0]]))return 1/0;let n=0,a,i=1/0,s=-1/0,p=!0;for(let c of e){n+=t[c].length;for(let{other:m,otherSide:S}of o[c]){let A=t[m];if(r[m]!==r[c]&&K(A)){a??=A.stable.refName,p&&=A.stable.refName===a;let h=_t(A.stable,A,S);i=Math.min(i,h),s=Math.max(s,h)}}}return p&&s>i?Math.max(n,s-i):n}function ri(e,t,o,r){let n=c=>t[c].stable?.start??0,a=c=>n(c)+t[c].length,i=e[0],s=e[0];for(let c of e)n(c)<n(i)&&(i=c),a(c)>a(s)&&(s=c);let p=[];for(let c of new Set([i,s]))for(let m of["s","e"])o[c].some(S=>S.side===m&&r[S.other]===r[c])||p.push([c,m]);return p}function ni(e,t,o,r,n,a){let i;for(let s of o[e]){let p=s.other;s.side===t&&r[p]!==r[e]&&Number.isFinite(n[p])&&(i===void 0||n[p]<n[i]||n[p]===n[i]&&a[p].name<a[i].name)&&(i=p)}return i}function ai(e,t){let o=new Float64Array(e.length).fill(1/0),r=new Int32Array(e.length).fill(-1),n=new ii(([a,i],[s,p])=>a-s||$n(e[i].name,e[p].name));e.forEach((a,i)=>{K(a)&&(o[i]=0,n.push([0,i]))});for(let a=n.pop();a!==void 0;a=n.pop()){let[i,s]=a;if(!(i>o[s]))for(let{other:p}of t[s]){if(K(e[p]))continue;let c=i+e[p].length;c<o[p]?(o[p]=c,r[p]=s,n.push([c,p])):c===o[p]&&$n(e[s].name,e[r[p]].name)<0&&(r[p]=s)}}return{dist:o,pred:Array.from(r,a=>a<0?void 0:a)}}function $n(e,t){return e<t?-1:e>t?1:0}var ii=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 si(e,t,o){let{nodes:r,edges:n}=e,a=new Map(r.map((b,g)=>[b.id,g])),i=n.map(Yn),s=n.map((b,g)=>[{i:a.get(b.from),side:i[g].from},{i:a.get(b.to),side:i[g].to}]),p=new Map,c=(b,g)=>`${b}${g}`;for(let b of s)for(let{i:g,side:y}of b)p.set(c(g,y),(p.get(c(g,y))??0)+1);let m=new Map,S=new Set,A=new Set;s.forEach(([b,g],y)=>{if(b.i!==g.i&&o[b.i]===o[g.i]&&$t(r[b.i],b.side,r[g.i],g.side)&&p.get(c(b.i,b.side))===1&&p.get(c(g.i,g.side))===1){let[R,v]=b.side==="e"?[b,g]:[g,b];m.set(R.i,{j:v.i,out:R.side,in:v.side}),S.add(v.i),A.add(y)}});let h=r.map((b,g)=>g),T=new Map,E=new Map;r.forEach((b,g)=>{if(!t[g]||S.has(g)||!m.has(g))return;let y=[g],R=Jn(m.get(g).out);T.set(c(g,R),"s");for(let v=m.get(g);v;v=m.get(v.j))y.push(v.j),R=v.in;T.set(c(y.at(-1),Jn(R)),"e");for(let v of y)h[v]=g;E.set(g,pi(y.map(v=>r[v])))});let _=({i:b,side:g})=>({id:r[h[b]].id,side:h[b]===b&&!E.has(b)?g:T.get(c(b,g))});return{...e,nodes:r.flatMap((b,g)=>!t[g]||h[g]!==g?[]:[E.get(g)??b]),edges:n.flatMap((b,g)=>{if(A.has(g))return[];let[y,R]=s[g];if(!E.has(h[y.i])&&!E.has(h[R.i]))return[b];let v=_(y),N=_(R);return[{...b,from:v.id,to:N.id,fromStrand:v.side==="e"?"+":"-",toStrand:N.side==="s"?"+":"-"}]})}}function Jn(e){return e==="s"?"e":"s"}function pi(e){let{samples:t,...o}=e[0],r=e.reduce((i,s)=>i+s.length,0),n=r>0?e.reduce((i,s)=>i+s.depth*s.length,0)/r:o.depth,a=e.every(i=>i.samples)?e.reduce((i,s)=>i.filter(p=>s.samples.includes(p)),t):void 0;return a?{...o,length:r,depth:n,samples:a}:{...o,length:r,depth:n}}function Jt(e,t=()=>"",o=!0){let r=e.paths??[],n=tr(e),a=new Map;r.forEach((h,T)=>{Eo(a,Ce(h.name).name,T)});let i=h=>n[h].map(T=>`${T.node.id}${T.strand}`).join(","),s=h=>a.get(h).map(T=>r[T]),p=new Map,c=new Map;for(let[h,T]of a){let E=h===e.referencePath?`\0${h}`:T.map(i).join("|"),_=t(h),b=p.get(E)??p.size;p.set(E,b);let g=`${E} ${_}`,y=c.get(g);y?y.walks.push(h):c.set(g,{rank:b,group:_,walks:[h]})}if(o&&c.size===a.size)return e;let m=[...c.values()].sort((h,T)=>h.rank-T.rank||h.group.localeCompare(T.group));if(!o)return{...e,paths:m.flatMap(({walks:h})=>h.flatMap(s))};let S=m.flatMap(({walks:h})=>s(h[0]).map(T=>h.length>1?{...T,members:h}:T)),A=new Set(m.map(h=>h.walks[0]));return{...e,paths:S,anchorPaths:e.anchorPaths?.filter(h=>A.has(h.name)),pathVisits:e.pathVisits?.filter(h=>A.has(h))}}function Xn(e,t,o){let r=Math.min(48,t,o);return Math.max(0,r-(e+t))-Math.max(0,e-(o-r))}function qn(e,t,o){return{translateX:t.translateX+Xn(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,o.width),translateY:t.translateY+Xn(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,o.height)}}function Kn(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 di=.05,at=9;function ci(e,t){let{minY:o,maxY:r}=e.layout.bounds,n=r-o;return e.columns&&n>0?Math.max(di,Math.min(1,t/n)):1}function it(e,t){let{scaleX:o,translateX:r,translateY:n}=t,a=t.scaleY*ci(e,t.usableHeight),i=p=>(p-e.yOffset)*a+n,{columns:s}=e;if(s){let p=_r(s,c=>c*o+r);return{x:c=>zr(p,c),y:i,yScale:a}}return{x:p=>p*o+r,y:i,yScale:a}}function Yt(e,{x:t,y:o},r,n){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-at)<=r&&r<=t(i.x+i.pixelWidth+at)&&o(i.y-at)<=n&&n<=o(i.y+i.contentHeight+at)&&(a=i.name)}),a}var Qn=20,ui=.05,Zn=6;function mi(e){let t=e.length-Zn;return t>0?`${e.slice(0,Zn).join(", ")} and ${t} more`:e.join(", ")}function li(e){if(e.kind==="deletion")return`deletion of ${Gt(e.length)}`;if(e.kind==="substitution")return`substitution ${e.seq}`;let t=e.seq??"",o=t.length>Qn?`${t.slice(0,Qn)}\u2026`:t;return`insertion of ${Gt(t.length)} ${o}`.trim()}function gi(e,t,o){let r={substitution:!1,insertion:!1,deletion:!1};if(e&&t&&Yr(t.yScale)){let n=3;for(let a of e.mismatches)if(!r[a.kind]&&Ur(a,{x:t.x,width:o})&&(r[a.kind]=!0,--n===0))break}return r}var ea=kn.views(e=>({get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?it(t,{...e.screenTransform,usableHeight:e.usableHeight}):void 0},get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX&&!e.layoutResult?.tubeMapPanels?Ht(t):void 0},get tubeMapPanelRulerBoxes(){let{layoutResult:t}=e,o=t?.tubeMapPanels?.at(-1);return o&&t?.referenceAxis&&!e.hostPlacesX?Ht(Vr(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?jr(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:$r(n),tubeColors:e.tubeColorsOf(a,n.pathColors),nodeColors:e.tubeMapNodeColors?Kr(a,e.effectiveColorScheme,e.referenceRamp):void 0,deviations:i?Dr(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(p=>{p.name===t&&(i=p)}),(r&&a&&i?nn(o,p=>e.nodeSpan(p),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=rn(a,r);return i?{box:i,...an(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*Vt,a=t.reduce((c,m)=>c+m.panel.height,0),i=e.usableHeight-n,s=e.scaleY*(r.referenceAxis&&a>0?Math.max(ui,Math.min(1,i/a)):1),p=e.translateY;return t.map((c,m)=>{let{panel:S}=c,A=S.result.extent?.minY??0,h=p,T=h+Vt;return p=T+S.height*s,{...c,tubeColors:o[m],frame:it(S.result.tubeMap,{scaleX:e.scaleX,translateX:e.translateX,scaleY:s,translateY:T-A*s,usableHeight:1/0}),titleTop:h,top:T,bottom:p}})},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:s}=t,p=Ke(e.paneWidth,e.canvasHeight);i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,s.width,s.height),i.setTransform(p,0,0,p,0,0);let c=e.tubeMapPanelViews;c?sn(i,c,e.tubeMapPanelHover,{width:e.paneWidth,lit:a!==null}):Jr(i,r,{...n,width:e.paneWidth,highlightNode:a}),Or(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,Bt]])),t.setEdgeHighlight(e.hoveredEdge,Bt),t.updateTransform(e.paintTransform),t.renderHighlights()}})).views(e=>{let t=(n,a)=>JSON.stringify(n)===JSON.stringify(a),o=Mt(()=>gi(e.layoutResult?.tubeMapPanels!==void 0?void 0:e.tubeMapPicture,e.tubeMapFrame,e.paneWidth),{equals:t}),r=Mt(()=>{let n=e.layoutResult,i=n?.tubeMapPanels!==void 0?[]:n?.tubeMap?.layout.reads??[],s=e.drawnGraph?.paths??[],p=e.tubeMapColoring,c=e.tubeColorKind;return{bundled:s.some(m=>m.members),values:c==="value"&&p?[...[...p.palette].map(([m,S])=>({value:m,color:S})),...p.unvalued?[{value:`${p.field}: none`,color:on}]:[]]:void 0,roles:c==="role"||c==="tinted",haplotypeTube:c==="tinted"?en[0]:Zr,logWidths:n?.tubeMap!==void 0&&!n.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:i.some(m=>!m.is_reverse),reverseReads:i.some(m=>m.is_reverse)}},{equals:t});return{get tubeMapKeys(){return{...r.get(),...o.get()}}}}).views(e=>({tubeMapUnder(t){let o=e.tubeMapPanelViews;if(o){let i=e.tubeMapPanelAt(t),s=i===null?void 0:o[i];return s&&{drawing:s.panel.result.tubeMap,...s}}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?Yt(r.drawing,r.frame,t,o):null)??Wr(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=qr(n,a,t,o),s=i?.readId??Xr(n,a,t,o);return s===void 0?null:{track:s,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?[li(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: ${mi(a.map(i=>e.walkLabel(i)))}`}:n?{label:e.walkLabel(n.name),readout:"haplotype"}:void 0}}));var hi=80,ta=ea.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=qn(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({encoding:{color:wn(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=$e(o,t);Ne.inherit(o,r),e.graph=r}},setLayer(t,o){e.writeGrammar({layers:fn(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:jt({width:t,px:e.contigThickness,links:e.linkWidth})})},setLinkWidth(t){e.writeGrammar({size:jt({width:e.nodeWidth,px:e.contigThickness,links:t})})},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})},liftAmongChoices(t){let o=new Set(e.walkChoices.map(r=>r.name));this.liftWalks([...t,...e.walkLayers.map(r=>r.walk).filter(r=>!o.has(r))])},setFacet(t){let o=e.facetSetting;t===""?o.field!==""&&e.writeGrammar({facet:{}}):e.writeGrammar({facet:{...o,field:t,sort:t===o.field?o.sort:[]}})},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)},setWalkRowSamples(t){let o=e.walkRowOrder;e.writeGrammar({rows:{...t?{kept:t}:{},...o?{order:o}:{}}})},setWalkRowOrder(t){let o=e.walkRowSamples;e.writeGrammar({rows:{...o?{kept:o}:{},...t?{order:t}:{}}})},setWalkRowGroupBy(t){(t||e.walkRowGroupBy)&&e.writeGrammar({facet:t??{}})},pairWithLinearView(t){let o=e.connectedViewId;o!==void 0&&Re([...x(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)},applyHoveredRowWalks(t){t.join(`
1
+ import{A as Nr,B as Hr,C as Nt,D as Kr,E as cn,F as Te,G as un,H as mn,I as ln,J as gn,K as fn,L as wn,M as jt,P as Qe,Q as kn,S as Mn,U as xn,V as Rn,a as q,b as or,c as rr,d as Ue,e as Q,f as cr,h as At,i as I,j as Re,k as Ee,l as Pt,m as ur,n as mr,o as lr,p as gr,q as Ct,r as br,s as Br,x as Ir,y as Er,z as Fr}from"./chunks/chunk-OLZZDBQJ.js";import{a as vt,b as ar,c as ir,d as Ie,e as sr,f as pr,g as dr,j as hn,k as bn,o as yn,p as Sn}from"./chunks/chunk-WUOXZAGN.js";import{$a as Ur,Ab as sn,B as fr,Bb as pn,C as wr,Cb as dn,H as kr,I as Mr,Ka as Vr,La as Ht,Oa as jr,P as se,Pa as Wr,Q as Sr,R as xr,Ra as Or,S as Rr,Sa as Dr,T as Tr,U as Gr,V as Lr,Va as _r,W as Bt,Wa as zr,Xa as $r,Y as vr,Za as Jr,_a as Yr,a as Be,aa as Ar,ab as Xr,b as Mt,ba as Fe,bb as qr,c as C,ca as It,d as ie,da as pe,db as Qr,ea as de,ga as Pr,gc as Ke,h as tr,ha as Ne,ia as Cr,jb as Vt,lb as Zr,ma as Et,mb as en,na as Ft,o as Lt,ob as tn,p as nr,qb as on,u as hr,ub as qe,vb as rn,wb as nn,x as Xe,xb as an,z as yr}from"./chunks/chunk-SL4JJJQJ.js";import"./chunks/chunk-W7IHIVSE.js";import{c as Zo,d as er}from"./chunks/chunk-T2VC3EEL.js";import{E as Gt,h as Ye,w as Rt,x as Tt}from"./chunks/chunk-CVHKXFVS.js";import{b as He}from"./chunks/chunk-BJHWGRMP.js";import{a as Tn,b as Gn,c as Ze,d as Ln,e as vn}from"./chunks/chunk-PTOKTIQG.js";import{j as ze}from"./chunks/chunk-CNCYMJ5E.js";import{s as xt}from"./chunks/chunk-M2D7NUOY.js";import{e as ht,g as bt}from"./chunks/chunk-OGXVDZPS.js";import"./chunks/chunk-YBLNN5FU.js";import{i as kt,m as Jo}from"./chunks/chunk-CZI7IP5S.js";import{a as Eo,c as Fo,g as K,r as Ce,t as $o,u as $e}from"./chunks/chunk-IK3MQ4ZJ.js";import{A as B,B as j,C as Se,D as xe,j as Me}from"./chunks/chunk-CZXJXNZN.js";import"./chunks/chunk-YBLNN5FU.js";import{a as Ho,b as O,c as te,d as Vo,e as jo}from"./chunks/chunk-ROZPEXN4.js";import{a as _e,c as No}from"./chunks/chunk-VKZALU57.js";import{a as Ko,g as Qo}from"./chunks/chunk-ZEE3HTOT.js";import{b as Yo,d as Uo}from"./chunks/chunk-3VGXCEMQ.js";import{b as yt,c as Wo,d as Oo,f as Do,g as _o,h as ft,i as zo}from"./chunks/chunk-6VNDP3UB.js";import{a as wt}from"./chunks/chunk-OGQ6OQDN.js";import{a as L,b as D,c as Pe,e as V,f as M}from"./chunks/chunk-3WG3GF2A.js";import{g as Ao,i as ae,j as x,k as Po,l as Co,n as Bo}from"./chunks/chunk-J5RMHLFJ.js";import{c as oe}from"./chunks/chunk-NIEZKWQV.js";import{I as Je,i as Xo,l as qo}from"./chunks/chunk-5Z4VIKXZ.js";import{a as Io,b as F,d as St}from"./chunks/chunk-JMBDTNUR.js";var et=JBrowseExports["@jbrowse/core/Plugin"];var An=et&&et.__esModule?et.default:et;var tt=q([F("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),F("circle",{cx:"14.8",cy:"18",r:"2"},"1"),F("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var ot=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"];var Z=ot&&ot.__esModule?ot.default:ot;var _a=O("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:B("/path/to/graph.gbz.db"),haplotypeIndexLocation:B(""),readsLocation:B(""),readsIndex:j("GbzBaseReadsIndex"),samplesTsvLocation:B(""),subgraphSnarls:{type:"stringEnum",model:M.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:ze.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:ze.context,advanced:!0},nodeLimit:{type:"number",defaultValue:ze.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},...za(r,o)}:{}}}});function za(e,t){let{name:o,query:r}=_o(e);return o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi${r}`,baseUri:t}}}:{}}var Pn=_a;function Wt(e){e.addAdapterType(()=>new Z({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:Pn,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-EJIR3HZM.js").then(t=>t.default)}))}var ce=JBrowseExports["@jbrowse/core/pluggableElementTypes"],re=e=>ce!=null&&e in Object(ce)?ce[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 Cn=re("AddTrackWorkflowType");var Bn=re("BaseDisplay");var rt=re("DisplayType");var Ge=re("RpcMethodType"),In=re("RpcMethodTypeWithRenameRegion");var En=re("TrackType");var Fn=re("createBaseTrackConfig"),Nn=re("createBaseTrackModel");var ws=ce&&ce.__esModule?ce.default:ce;var ue=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"],$a=e=>ue!=null&&e in Object(ue)?ue[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=$a("getAdapter");var Ms=ue&&ue.__esModule?ue.default:ue;async function Le(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 Ve=class extends Ge{constructor(){super(...arguments);this.name="GetGraphHaplotypes"}async execute(o){let{adapter:r}=await Le(this.pluginManager,o,"getHaplotypeNames");return r?.getHaplotypeNames({signal:o.signal})}};function Vn(e){return typeof e.reads=="string"&&e.reads!==""||Do(e.readsLocation)}var je=class extends Ge{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(o){let{nodeNames:r,signal:n}=o,{adapter:a}=await Le(this.pluginManager,o,"getReads");return a?a.getReads(r,{signal:n}):{records:[],total:0}}};var me=JBrowseExports["@jbrowse/core/util/librpc"],Ja=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/librpc' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Ot=Ja("rpcResultWithArrayBuffers");var Ns=me&&me.__esModule?me.default:me;var We=class extends In{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(o){let{region:r,opts:n,signal:a}=o,{adapter:i,name:s}=await Le(this.pluginManager,o,"getSubgraph");if(i){let p=await i.getSubgraph(r,{...n,signal:a});if(typeof p!="string")return Ot(p);let c=p?bt(p):void 0;return c?Ot(c):p}return console.warn(`[GetSubgraph] ${s} does not implement getSubgraph`),""}};var Ya=oe(()=>import("./chunks/AddTrackWorkflow-JAIB6H2T.js"));function Dt(e){e.addAddTrackWorkflowType(()=>new Cn({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Ya,stateModel:M.model({})}))}var Oe=class extends Ge{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(o){let{graph:r,options:n,signal:a,statusCallback:i}=o;return a?.throwIfAborted(),i?.("Computing layout"),er({graph:r,options:n})}};var nt=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"];var jn=nt&&nt.__esModule?nt.default:nt;var le=JBrowseExports["@jbrowse/core/util/withLaunchInput"],Ua=e=>le!=null&&e in Object(le)?le[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}),Wn=Ua("defineLaunchKeys");var Ks=le&&le.__esModule?le.default:le;var ge=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"],Xa=e=>ge!=null&&e in Object(ge)?ge[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 On=Xa("BaseViewModel");var Zs=ge&&ge.__esModule?ge.default:ge;var ve=["off","nodes","everything"];var Dn=q(F("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 _n=q(F("path",{d:"M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10c1.38 0 2.5-1.12 2.5-2.5 0-.61-.23-1.2-.64-1.67-.08-.1-.13-.21-.13-.33 0-.28.22-.5.5-.5H16c3.31 0 6-2.69 6-6 0-4.96-4.49-9-10-9m5.5 11c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5m-3-4c-.83 0-1.5-.67-1.5-1.5S13.67 6 14.5 6s1.5.67 1.5 1.5S15.33 9 14.5 9M5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S7.33 13 6.5 13 5 12.33 5 11.5m6-4c0 .83-.67 1.5-1.5 1.5S8 8.33 8 7.5 8.67 6 9.5 6s1.5.67 1.5 1.5"}),"Palette");var zn=q([F("circle",{cx:"12",cy:"12",r:"3.2"},"0"),F("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 zt(e,t,{cut:o=!1}={}){if(!(t>0)||e.paths?.length||!e.nodes.some(y=>K(y)))return e;let{nodes:r,edges:n}=Ka(e),a=new Map(r.map((y,R)=>[y.id,R])),i=n.map(Yn),s=Za(r.length,n,i,a),p=ti(r,n,i,a),c=Fo(p.keys(),y=>p[y]),m=new Uint8Array(r.length),S=[];for(let y of c.values())if(oi(y,r,s,p)>=t){for(let R of y)m[R]=1;K(r[y[0]])||S.push(y)}let{dist:A,pred:h}=ai(r,s);for(let y of S)for(let[R,v]of ri(y,r,s,p)){let N=ni(R,v,s,p,A,r);for(;N!==void 0&&!m[N];)m[N]=1,N=K(r[N])?void 0:h[N]}let T=n.map(y=>[a.get(y.from),a.get(y.to)]),E=n.map((y,R)=>{let[v,N]=T[R];return v!==void 0&&N!==void 0&&!!m[v]&&!!m[N]}),_=n.flatMap((y,R)=>{let[v,N]=T[R];if(!E[R])return[];let Ae=ei(r[v],i[R].from,r[N],i[R].to);return Ae>0&&Ae<t?[{k:R,bp:Ae}]:[]}).sort((y,R)=>y.bp-R.bp).map(({k:y})=>y);for(let y of _)E[y]=!1;let b=new Set(o?qa(r.length,T,E,_):[]),g=n.flatMap((y,R)=>b.has(R)?[{...y,foldBridge:!0}]:E[R]?[y]:[]);return si({...e,nodes:r,edges:g},m,p)}function qa(e,t,o,r){let n=Array.from({length:e},(s,p)=>p),a=s=>{for(;n[s]!==s;)n[s]=n[n[s]],s=n[s];return s},i=s=>{let[p,c]=t[s],[m,S]=[a(p),a(c)];return n[m]=S,m!==S};return o.forEach((s,p)=>{s&&i(p)}),r.filter(i)}function Ka({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??Ye(n);return o.has(n)?Qa(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 Qa(e){return e==="+"?"-":"+"}function Yn(e){return{from:(e.fromStrand??Ye(e.from))==="+"?"e":"s",to:(e.toStrand??Ye(e.to))==="+"?"s":"e"}}function Za(e,t,o,r){let n=Array.from({length:e},()=>[]);return t.forEach((a,i)=>{let s=r.get(a.from),p=r.get(a.to);if(s!==void 0&&p!==void 0){let{from:c,to:m}=o[i];n[s].push({other:p,side:c,otherSide:m}),n[p].push({other:s,side:m,otherSide:c})}}),n}function Un(e,t){let o=e.stable,r=t.stable;return o&&r?.refName===o.refName&&r.rank===o.rank?[o,r]:void 0}function $t(e,t,o,r){let n=Un(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 ei(e,t,o,r){let n=Un(e,o);if(!n||$t(e,t,o,r))return 0;let[a,i]=n;return Math.abs(_t(i,o,r)-_t(a,e,t))}function _t({start:e},t,o){return o==="s"?e:e+t.length}function ti(e,t,o,r){let n=e.map((i,s)=>s),a=i=>{for(;n[i]!==i;)n[i]=n[n[i]],i=n[i];return i};return t.forEach((i,s)=>{let p=r.get(i.from),c=r.get(i.to);p!==void 0&&c!==void 0&&$t(e[p],o[s].from,e[c],o[s].to)&&(n[a(p)]=a(c))}),e.map((i,s)=>a(s))}function oi(e,t,o,r){if(K(t[e[0]]))return 1/0;let n=0,a,i=1/0,s=-1/0,p=!0;for(let c of e){n+=t[c].length;for(let{other:m,otherSide:S}of o[c]){let A=t[m];if(r[m]!==r[c]&&K(A)){a??=A.stable.refName,p&&=A.stable.refName===a;let h=_t(A.stable,A,S);i=Math.min(i,h),s=Math.max(s,h)}}}return p&&s>i?Math.max(n,s-i):n}function ri(e,t,o,r){let n=c=>t[c].stable?.start??0,a=c=>n(c)+t[c].length,i=e[0],s=e[0];for(let c of e)n(c)<n(i)&&(i=c),a(c)>a(s)&&(s=c);let p=[];for(let c of new Set([i,s]))for(let m of["s","e"])o[c].some(S=>S.side===m&&r[S.other]===r[c])||p.push([c,m]);return p}function ni(e,t,o,r,n,a){let i;for(let s of o[e]){let p=s.other;s.side===t&&r[p]!==r[e]&&Number.isFinite(n[p])&&(i===void 0||n[p]<n[i]||n[p]===n[i]&&a[p].name<a[i].name)&&(i=p)}return i}function ai(e,t){let o=new Float64Array(e.length).fill(1/0),r=new Int32Array(e.length).fill(-1),n=new ii(([a,i],[s,p])=>a-s||$n(e[i].name,e[p].name));e.forEach((a,i)=>{K(a)&&(o[i]=0,n.push([0,i]))});for(let a=n.pop();a!==void 0;a=n.pop()){let[i,s]=a;if(!(i>o[s]))for(let{other:p}of t[s]){if(K(e[p]))continue;let c=i+e[p].length;c<o[p]?(o[p]=c,r[p]=s,n.push([c,p])):c===o[p]&&$n(e[s].name,e[r[p]].name)<0&&(r[p]=s)}}return{dist:o,pred:Array.from(r,a=>a<0?void 0:a)}}function $n(e,t){return e<t?-1:e>t?1:0}var ii=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 si(e,t,o){let{nodes:r,edges:n}=e,a=new Map(r.map((b,g)=>[b.id,g])),i=n.map(Yn),s=n.map((b,g)=>[{i:a.get(b.from),side:i[g].from},{i:a.get(b.to),side:i[g].to}]),p=new Map,c=(b,g)=>`${b}${g}`;for(let b of s)for(let{i:g,side:y}of b)p.set(c(g,y),(p.get(c(g,y))??0)+1);let m=new Map,S=new Set,A=new Set;s.forEach(([b,g],y)=>{if(b.i!==g.i&&o[b.i]===o[g.i]&&$t(r[b.i],b.side,r[g.i],g.side)&&p.get(c(b.i,b.side))===1&&p.get(c(g.i,g.side))===1){let[R,v]=b.side==="e"?[b,g]:[g,b];m.set(R.i,{j:v.i,out:R.side,in:v.side}),S.add(v.i),A.add(y)}});let h=r.map((b,g)=>g),T=new Map,E=new Map;r.forEach((b,g)=>{if(!t[g]||S.has(g)||!m.has(g))return;let y=[g],R=Jn(m.get(g).out);T.set(c(g,R),"s");for(let v=m.get(g);v;v=m.get(v.j))y.push(v.j),R=v.in;T.set(c(y.at(-1),Jn(R)),"e");for(let v of y)h[v]=g;E.set(g,pi(y.map(v=>r[v])))});let _=({i:b,side:g})=>({id:r[h[b]].id,side:h[b]===b&&!E.has(b)?g:T.get(c(b,g))});return{...e,nodes:r.flatMap((b,g)=>!t[g]||h[g]!==g?[]:[E.get(g)??b]),edges:n.flatMap((b,g)=>{if(A.has(g))return[];let[y,R]=s[g];if(!E.has(h[y.i])&&!E.has(h[R.i]))return[b];let v=_(y),N=_(R);return[{...b,from:v.id,to:N.id,fromStrand:v.side==="e"?"+":"-",toStrand:N.side==="s"?"+":"-"}]})}}function Jn(e){return e==="s"?"e":"s"}function pi(e){let{samples:t,...o}=e[0],r=e.reduce((i,s)=>i+s.length,0),n=r>0?e.reduce((i,s)=>i+s.depth*s.length,0)/r:o.depth,a=e.every(i=>i.samples)?e.reduce((i,s)=>i.filter(p=>s.samples.includes(p)),t):void 0;return a?{...o,length:r,depth:n,samples:a}:{...o,length:r,depth:n}}function Jt(e,t=()=>"",o=!0){let r=e.paths??[],n=tr(e),a=new Map;r.forEach((h,T)=>{Eo(a,Ce(h.name).name,T)});let i=h=>n[h].map(T=>`${T.node.id}${T.strand}`).join(","),s=h=>a.get(h).map(T=>r[T]),p=new Map,c=new Map;for(let[h,T]of a){let E=h===e.referencePath?`\0${h}`:T.map(i).join("|"),_=t(h),b=p.get(E)??p.size;p.set(E,b);let g=`${E} ${_}`,y=c.get(g);y?y.walks.push(h):c.set(g,{rank:b,group:_,walks:[h]})}if(o&&c.size===a.size)return e;let m=[...c.values()].sort((h,T)=>h.rank-T.rank||h.group.localeCompare(T.group));if(!o)return{...e,paths:m.flatMap(({walks:h})=>h.flatMap(s))};let S=m.flatMap(({walks:h})=>s(h[0]).map(T=>h.length>1?{...T,members:h}:T)),A=new Set(m.map(h=>h.walks[0]));return{...e,paths:S,anchorPaths:e.anchorPaths?.filter(h=>A.has(h.name)),pathVisits:e.pathVisits?.filter(h=>A.has(h))}}function Xn(e,t,o){let r=Math.min(48,t,o);return Math.max(0,r-(e+t))-Math.max(0,e-(o-r))}function qn(e,t,o){return{translateX:t.translateX+Xn(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,o.width),translateY:t.translateY+Xn(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,o.height)}}function Kn(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 di=.05,at=9;function ci(e,t){let{minY:o,maxY:r}=e.layout.bounds,n=r-o;return e.columns&&n>0?Math.max(di,Math.min(1,t/n)):1}function it(e,t){let{scaleX:o,translateX:r,translateY:n}=t,a=t.scaleY*ci(e,t.usableHeight),i=p=>(p-e.yOffset)*a+n,{columns:s}=e;if(s){let p=_r(s,c=>c*o+r);return{x:c=>zr(p,c),y:i,yScale:a}}return{x:p=>p*o+r,y:i,yScale:a}}function Yt(e,{x:t,y:o},r,n){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-at)<=r&&r<=t(i.x+i.pixelWidth+at)&&o(i.y-at)<=n&&n<=o(i.y+i.contentHeight+at)&&(a=i.name)}),a}var Qn=20,ui=.05,Zn=6;function mi(e){let t=e.length-Zn;return t>0?`${e.slice(0,Zn).join(", ")} and ${t} more`:e.join(", ")}function li(e){if(e.kind==="deletion")return`deletion of ${Gt(e.length)}`;if(e.kind==="substitution")return`substitution ${e.seq}`;let t=e.seq??"",o=t.length>Qn?`${t.slice(0,Qn)}\u2026`:t;return`insertion of ${Gt(t.length)} ${o}`.trim()}function gi(e,t,o){let r={substitution:!1,insertion:!1,deletion:!1};if(e&&t&&Yr(t.yScale)){let n=3;for(let a of e.mismatches)if(!r[a.kind]&&Ur(a,{x:t.x,width:o})&&(r[a.kind]=!0,--n===0))break}return r}var ea=kn.views(e=>({get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?it(t,{...e.screenTransform,usableHeight:e.usableHeight}):void 0},get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX&&!e.layoutResult?.tubeMapPanels?Ht(t):void 0},get tubeMapPanelRulerBoxes(){let{layoutResult:t}=e,o=t?.tubeMapPanels?.at(-1);return o&&t?.referenceAxis&&!e.hostPlacesX?Ht(Vr(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?jr(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:$r(n),tubeColors:e.tubeColorsOf(a,n.pathColors),nodeColors:e.tubeMapNodeColors?Kr(a,e.effectiveColorScheme,e.referenceRamp):void 0,deviations:i?Dr(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(p=>{p.name===t&&(i=p)}),(r&&a&&i?nn(o,p=>e.nodeSpan(p),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=rn(a,r);return i?{box:i,...an(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*Vt,a=t.reduce((c,m)=>c+m.panel.height,0),i=e.usableHeight-n,s=e.scaleY*(r.referenceAxis&&a>0?Math.max(ui,Math.min(1,i/a)):1),p=e.translateY;return t.map((c,m)=>{let{panel:S}=c,A=S.result.extent?.minY??0,h=p,T=h+Vt;return p=T+S.height*s,{...c,tubeColors:o[m],frame:it(S.result.tubeMap,{scaleX:e.scaleX,translateX:e.translateX,scaleY:s,translateY:T-A*s,usableHeight:1/0}),titleTop:h,top:T,bottom:p}})},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:s}=t,p=Ke(e.paneWidth,e.canvasHeight);i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,s.width,s.height),i.setTransform(p,0,0,p,0,0);let c=e.tubeMapPanelViews;c?sn(i,c,e.tubeMapPanelHover,{width:e.paneWidth,lit:a!==null}):Jr(i,r,{...n,width:e.paneWidth,highlightNode:a}),Or(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,Bt]])),t.setEdgeHighlight(e.hoveredEdge,Bt),t.updateTransform(e.paintTransform),t.renderHighlights()}})).views(e=>{let t=(n,a)=>JSON.stringify(n)===JSON.stringify(a),o=Mt(()=>gi(e.layoutResult?.tubeMapPanels!==void 0?void 0:e.tubeMapPicture,e.tubeMapFrame,e.paneWidth),{equals:t}),r=Mt(()=>{let n=e.layoutResult,i=n?.tubeMapPanels!==void 0?[]:n?.tubeMap?.layout.reads??[],s=e.drawnGraph?.paths??[],p=e.tubeMapColoring,c=e.tubeColorKind;return{bundled:s.some(m=>m.members),values:c==="value"&&p?[...[...p.palette].map(([m,S])=>({value:m,color:S})),...p.unvalued?[{value:`${p.field}: none`,color:on}]:[]]:void 0,roles:c==="role"||c==="tinted",haplotypeTube:c==="tinted"?en[0]:Zr,logWidths:n?.tubeMap!==void 0&&!n.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:i.some(m=>!m.is_reverse),reverseReads:i.some(m=>m.is_reverse)}},{equals:t});return{get tubeMapKeys(){return{...r.get(),...o.get()}}}}).views(e=>({tubeMapUnder(t){let o=e.tubeMapPanelViews;if(o){let i=e.tubeMapPanelAt(t),s=i===null?void 0:o[i];return s&&{drawing:s.panel.result.tubeMap,...s}}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?Yt(r.drawing,r.frame,t,o):null)??Wr(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=qr(n,a,t,o),s=i?.readId??Xr(n,a,t,o);return s===void 0?null:{track:s,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?[li(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: ${mi(a.map(i=>e.walkLabel(i)))}`}:n?{label:e.walkLabel(n.name),readout:"haplotype"}:void 0}}));var hi=80,ta=ea.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=qn(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({encoding:{color:wn(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=$e(o,t);Ne.inherit(o,r),e.graph=r}},setLayer(t,o){e.writeGrammar({layers:fn(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:jt({width:t,px:e.contigThickness,links:e.linkWidth})})},setLinkWidth(t){e.writeGrammar({size:jt({width:e.nodeWidth,px:e.contigThickness,links:t})})},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})},liftAmongChoices(t){let o=new Set(e.walkChoices.map(r=>r.name));this.liftWalks([...t,...e.walkLayers.map(r=>r.walk).filter(r=>!o.has(r))])},setFacet(t){let o=e.facetSetting;t===""?o.field!==""&&e.writeGrammar({facet:{}}):e.writeGrammar({facet:{...o,field:t,sort:t===o.field?o.sort:[]}})},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)},setWalkRowSamples(t){let o=e.walkRowOrder;e.writeGrammar({rows:{...t?{kept:t}:{},...o?{order:o}:{}}})},setWalkRowOrder(t){let o=e.walkRowSamples;e.writeGrammar({rows:{...o?{kept:o}:{},...t?{order:t}:{}}})},setWalkRowGroupBy(t){(t||e.walkRowGroupBy)&&e.writeGrammar({facet:t??{}})},pairWithLinearView(t){let o=e.connectedViewId;o!==void 0&&Re([...x(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)},applyHoveredRowWalks(t){t.join(`
2
2
  `)!==e.hoveredRowWalks.join(`
3
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?Br(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=x(e),n=e.graphRegion,a=n?e.nodeSpan(t):void 0;Co(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:At(o)?.sample,contributingHaplotype:At(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=fr(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=Mr(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=wr(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=>{let t,o;return{setHoveredRowWalks(r){let n=r.join(`
4
4
  `);n!==o&&(clearTimeout(t),o=void 0,r.length>0&&e.hoveredRowWalks.length>0?(o=n,t=setTimeout(()=>{o=void 0,V(e)&&e.hoveredRowWalks.length>0&&e.applyHoveredRowWalks(r)},hi)):e.applyHoveredRowWalks(r))}}}).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||Kn(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(()=>{V(e)&&e.setViewportDirty()},vr)}function o(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{V(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,s){let p=e.layoutResult;if(i===p)return;let c=r&&i?structuredClone(i.nodePositions):i?.nodePositions;a();let m=e.graph;if(!i||!c||!p||!m||!Fr(i,p,m.nodes.length,!!e.facetGrid)||!Nr())return;e.viewportOwner==="fit"&&e.zoomToFit();let S=p.deletionRoutes??{},A=structuredClone({nodes:p.nodePositions,routes:S}),h=Ir(c,s,p.nodePositions,e.screenTransform,m.edges),T={nodes:h,routes:Er(S,m.edges,h,A.nodes)},E=new Set(Object.keys(p.nodePositions).filter(b=>!c[b])),_=b=>{Nt(p.nodePositions,T.nodes,A.nodes,b),Nt(S,T.routes,A.routes,b),V(e)&&e.setMorphFrame(b<1&&E.size>0?{layout:p,ids:E,alpha:b}:void 0)};_(0),r=Hr(_,()=>V(e)&&e.layoutResult===p,()=>{r=void 0})},finishMorph:a,moveNode(i,s,p){a();let c=e.layoutResult?.nodePositions;if(c?.[i]){for(let m of c[i])m.x+=s,m.y+=p;o()}},scheduleViewportDirty:t}});var he=JBrowseExports["@jbrowse/core/util/unzip"],bi=e=>he!=null&&e in Object(he)?he[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/util/unzip' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),oa=bi("unzip"),lc=he&&he.__esModule?he.default:he;async function Ut(e){let t=e[0]===31&&e[1]===139;return new TextDecoder().decode(t?await oa(e):e)}function ra(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=Xe(a,t,{referencePath:o}),s=new Int32Array(e.nodes.names.length);for(let c of r.steps)s[c]++;i.nodes.forEach((c,m)=>{c.depth=Math.max(s[m],1)});let p=r.names.slice(1).flatMap((c,m)=>r.offsets[m+2]>r.offsets[m+1]?[{...kt(r,m+1),nodeIds:[]}]:[]);return i.paths=[...i.paths??[],...p],i}var yi=ta.views(e=>({get engineSettings(){return yr({engine:e.layoutEngine,quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}})),na=yi.actions(e=>{let t,o,r,n=new WeakMap;function a(d,u){let{rpcManager:l}=x(e);return l.call(ae(e),"GraphComputeLayout",{...d,signal:t?.signal,statusCallback:w=>{u===r&&e.setStatusMessage(Bo(w)??"")}})}function i(d){if(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.`)}function*s(d){let u=performance.now(),l=se.has(e.chosenLayoutMode),w=e.graphRegion,f=l&&w?Rt(d,w):d,k=l&&e.tubeMapFold>0&&!f.reads?Ft(f,e.tubeMapFold):void 0,G=k?.graph??f,P=z=>l&&e.tubeMapRoutes!=="each"?Jt(z,e.tubeMapColoring?.valueOf,e.tubeMapRoutes==="bundled"):z,H=e.walkCut?.walkRowRuns,W=e.chosenLayoutMode==="walkrows"&&H?or(d,Jo(H),e.graphRegion):Q(e.chosenLayoutMode).run(P(G),e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(W){let z=J=>k&&J.tubeMap?{...J,tubeMap:{...J.tubeMap,coarse:k}}:J,De=z(W),ke=e.tubeMapPanelSplit;return{result:l&&ke?dn(De,qe(G,ke).map(J=>{let vo=Q(e.chosenLayoutMode).run(P(pn(G,J.paths)),e.graphRegion);return{...J,result:vo&&z(vo)}})):De,duration:performance.now()-u,mode:e.chosenLayoutMode}}i(d);let Y=e.engineSettings,U=Ne.ready(d,Y);if(U)return{result:U,duration:performance.now()-u,mode:"force"};let ne={},X=Ne.layout(d,Y,z=>a(z,ne));return r=n.get(X)??ne,n.set(X,r),{...yield X,mode:"force"}}let p=0,c=!1,m,S,A=new Map;function h(){e.graph!==S&&(S=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0)}function*T(d){let u=++p;c=!0,r=void 0;let l=()=>e.graph===d&&u===p,w=t?.signal,f;try{e.modeDrawsNodes&&i(d),f=yield*s(d)}catch(G){if(!l()||w?.aborted)return!1;throw m=G,h(),G}finally{u===p&&(c=!1,N())}let k=l();if(k){m!==void 0&&e.error===m&&(e.error=void 0),m=void 0;let G=e.layoutResult,P=e.screenTransform;S=d,e.layoutResult=f.result,e.drawnLayoutMode=f.mode,e.setLayoutMs(f.duration),e.followNewLayout(G),e.morphFrom(G,P)}return k}function E(d,u){let l=d.anchorPaths;return d.anchoredBy==="paths"&&l?(ht(d,e.assemblySpellings(u.assemblyName))??$o(l,u.assemblyName))?.name:void 0}function _(d,u,l,w=!1){let f=e.referencePath||l?.assemblyName,k=typeof d!="string"&&d.walkRowRuns&&!w?ra(d,u,f):Xe(d,u,{referencePath:f});return k.anchoredBy==="tags"&&!k.referencePath&&k.paths?.length&&l&&(k.referencePath=ht(k,e.assemblySpellings(l.assemblyName))?.name),k}function b(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,e.ownGeneFeatures=void 0,A.clear(),e.repeatArrays=void 0,e.clearInteractionState()}function*g(d,u,l,w=!1,f,k=0,G){let P=t?.signal,H=typeof d!="string"&&d.walkRowRuns?d:void 0,W=_(d,u,l),Y=l?E(W,l):void 0,U=!e.referencePath&&Y!==void 0&&Y!==W.referencePath?$e(W,Y):W,ne=k>0&&!f?zt(U,k,{cut:!0}):U,X=l&&ne!==U?Tt(ne,l,k):ne,gt;if(f){e.setStatusMessage("Reading alignments");try{let{records:$,total:J}=yield f(X);X.reads=$,gt={shown:$.length,total:J}}catch($){if(P?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",$)}if(P?.aborted)return}let z=w?e.selectedNode:null;b({graph:X,walkCut:H,region:l,loadedReferencePath:Y,foldedBelowBp:ne===U?void 0:k,readsShown:gt});let De=new Set(X.nodes.map($=>$.name));e.openBubbles=e.openBubbles.filter($=>Et($).some(J=>De.has(J))),z!==null&&X.nodes.some($=>$.id===z)&&(e.selectedNode=z),e.setStatusMessage("Computing layout");let ke=G?.();ke?.catch(()=>{}),yield*T(X),ke&&!P?.aborted&&(e.setStatusMessage("Reading annotations"),yield ke)}let y=0,R;function v(){let d=++y;return t?.abort(),t=new AbortController,R=d,e.loadCanceled=!1,{isLive:()=>d===y,signal:t.signal}}function N(){R===void 0&&!c&&e.finishLoading()}function Ae(){R=void 0,N()}function*fo(d,u){let l=v();e.isLoading=!0,e.error=void 0;try{yield*u(l)}catch(w){l.isLive()&&(console.error(`[GraphGenomeView.${d}]`,w),e.error=w)}finally{l.isLive()&&Ae()}}function*wo(d,u,l,w){try{return yield x(e).rpcManager.call(ae(e),"CoreGetFeatures",{adapterConfig:d,regions:[u],signal:w})}catch(f){w?.aborted||console.warn(`[GraphGenomeView] no ${l} for this graph`,f);return}}let ko=new Set;function*Oa(d,u,l,w,f=0){let k=Lr(d),G=`${k}.bubbles.bed.gz`;if(d.type!=="RgfaTabixAdapter"||k===void 0||ko.has(G))return;let P=yield*wo({type:"MinigraphBubbleAdapter",uri:G,baseUri:d.baseUri,assemblyNameToPanSN:d.assemblyNameToPanSN},u,"bubble index",w);P===void 0&&!w?.aborted&&ko.add(G),P&&l()&&(e.indexBubbles=P.flatMap(H=>{let W=H.get("start"),Y=H.get("end"),U=H.get("longestAlleleLength");return Math.max(Y-W,U)<f?[]:[{refName:u.refName,start:W,end:Y,segmentCount:H.get("segmentCount"),pathCount:H.get("pathCount")??0,inversion:H.get("inversion"),shortestAlleleLength:H.get("shortestAlleleLength"),longestAlleleLength:U,segments:H.get("segments"),shortestAllele:void 0,longestAllele:void 0}]}))}function*Mo(d,u,l,w){let f=d?e.sessionTrack(d):void 0;if(f)return yield*wo(pr(f),u,l,w)}function*So(d,u){let l=`${d} ${u.refName}:${u.start}-${u.end}`,w=A.get(l);if(!w){let f=yield*Mo(d,u,"haplotype genes");if(!f)return;w=yn(f).map(k=>({...k,refName:u.refName})),A.set(l,w)}return w}let xo={genes:{trackId:()=>e.geneTrack?.trackId,set:d=>{e.geneTrackFeatures=d}},repeats:{trackId:()=>e.repeatTrack?.trackId,set:d=>{e.repeatArrays=d&&hn(d)}}};function*Ro(d,u,l,w){let{trackId:f,set:k}=xo[d],G=f(),P=yield*Mo(G,u,d,w);P&&l()&&f()===G&&k(P)}function To(d,u,l){return["genes","repeats"].map(w=>D(Ro)(w,d,u,l))}function*Go(d){let u=e.graphRegion;u&&(xo[d].set(void 0),yield*Ro(d,u,()=>e.graphRegion===u))}function*mt(d,u,l){yield*fo("loadWholeGFA",function*({isLive:w,signal:f}){let k=typeof u=="string"?u:yield u(f);w()&&(yield*g(k,d,l,!1,void 0,0,l&&(()=>Promise.all(To(l,w,f)))))})}function lt(){t?.abort(),t=void 0,R=void 0,y++,p++,c=!1,r=void 0}function Da(){let d=e.walkCut,u=e.graph;if(!d||!u||e.chosenLayoutMode==="walkrows")return u;let l=_(d,u.name,e.graphRegion,!0);return e.graph=l,e.walkCut=void 0,l}function Lo(){lt(),e.finishMorph(),e.morphEntering=void 0,e.drawnBatch=Fe,e.paintedViewport=void 0,b(),S=void 0,m=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(){Lo()},cancelLoad(){e.canCancelLoad&&(Lo(),e.loadCanceled=!0)},stopLoad(){lt(),h(),e.layoutResult||b(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){lt()},loadGFA:D(function*(d,u="Imported GFA"){yield*mt(u,d)}),loadGFAFile:D(function*(d,u){e.setStatusMessage("Reading file"),yield*mt(u,()=>d.arrayBuffer().then(l=>Ut(new Uint8Array(l))))}),loadGFAFromLocation:D(function*(d,u){e.setStatusMessage("Fetching GFA"),yield*mt(de(d)||"GFA",l=>wt(d,Pe(e).pluginManager).readFile({signal:l}).then(Ut),u)}),cutSubgraph:D(function*(d,u,l={},w=0){yield*fo("cutSubgraph",function*({isLive:f,signal:k}){e.setStatusMessage("Fetching subgraph");let G=performance.now(),P=yield x(e).rpcManager.call(ae(e),"GetSubgraph",{adapterConfig:d,region:u,opts:l,signal:k});if(f()){if(e.setFetchMs(performance.now()-G),!P)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");yield*g(P,cr(u),u,!0,Vn(d)?H=>x(e).rpcManager.call(ae(e),"GetGraphReads",{adapterConfig:d,nodeNames:H.nodes.map(W=>W.name),signal:k}):void 0,w,()=>Promise.all([l.tier==="coarse"?void 0:D(Oa)(d,u,f,k,e.foldedBelowBp),...To(u,f,k)]))}})}),reloadRepeats:D(function*(){yield*Go("repeats")}),reloadGenes:D(function*(){yield*Go("genes")}),loadWalkRowSampleTable:D(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 wt(d,Pe(e).pluginManager).readFile("utf8");V(e)&&u===o&&(e.walkRowSampleTable=Qr(l))}catch(l){V(e)&&u===o&&(o=void 0,x(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(l)})`,"warning"))}}),loadWalkGenes:D(function*(){let d=e.walkGeneReads?.reads??[],u=JSON.stringify(d),l=e.graph,w=new Map;yield Promise.all(d.map(({row:f,trackId:k,region:G})=>D(function*(){let P=yield*So(k,G);P&&w.set(f,P)})())),V(e)&&e.graph===l&&JSON.stringify(e.walkGeneReads?.reads??[])===u&&(e.walkGeneFeatures=d.length?w:void 0)}),loadOwnGenes:D(function*(){let d=e.ownGeneReads,u=JSON.stringify(d),l=e.graph,w=yield Promise.all(d.map(({stableRefName:f,trackId:k,region:G})=>D(function*(){let P=yield*So(k,G),H=No(f)??_e(f);return(P??[]).map(W=>({...W,name:`${W.name} \xB7 ${H}`,refName:f}))})()));V(e)&&e.graph===l&&JSON.stringify(e.ownGeneReads)===u&&(e.ownGeneFeatures=d.length?w.flat():void 0)}),toggleBubble(d){let u=e.openBubbles,l=u.findIndex(G=>He(G,d));if(l>=0){e.openBubbles=u.slice(0,l);return}let w=new Set(Et(d));if(!e.graph?.nodes.some(G=>w.has(G.name))){x(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let f=e.openBubbleInsides,k=f.length-1;for(;k>=0&&!f[k].some(G=>He(G,d));)k--;e.openBubbles=[...u.slice(0,k+1),d]},closeBubbles(){e.openBubbles.length>0&&(e.openBubbles=[])},recomputeLayout:D(function*(){let d=Da();if(d){e.isLoading=!0,e.setStatusMessage("Computing layout");try{yield*T(d)}catch(u){console.error("[GraphGenomeView.recomputeLayout]",u),e.error=u}}})}});function aa(e){return I(e)&&typeof e.get=="function"}function st(e,t){let o=aa(e)?e.get(t):I(e)?e[t]:void 0;return typeof o=="string"?o:void 0}function ia(e){let t;if(I(e)&&I(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:st(e.hoverFeature,"name"),featureSegments:st(e.hoverFeature,"segments"),viewId:typeof e.viewId=="string"?e.viewId:void 0})}return t}function sa(e,t,o){return e.viewId===void 0||t===void 0||!o.has(t)||e.viewId===t}function pa(e){if(!aa(e))return;let t=e.get("refName"),o=e.get("start");return typeof t=="string"&&typeof o=="number"?{refName:t,coord:o,featureName:st(e,"name"),featureSegments:st(e,"segments")}:void 0}function Xt(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function da({hover:e,nodes:t}){let o,r;for(let n of t)n.name===e.featureName?o=n.id:r===void 0&&K(n)&&e.coord>=n.stable.start&&e.coord<n.stable.start+n.length&&(r=n.id);return o??r??null}function ca(e){let t=e.key?.split(">")??e.segments.split(",").filter(Boolean);return t.length>=2?[t[0],t.at(-1)].sort().join(" "):void 0}function fi(e){if(e.featureSegments)return ca({segments:e.featureSegments});let t=/^([<>][^<>]+){2}$/.test(e.featureName??"")?e.featureName.split(/[<>]/).filter(Boolean):[];return t.length===2?t.sort().join(" "):void 0}function qt(e,t){let o=fi(e);return o===void 0?void 0:t.find(r=>ca(r)===o)}var wi=/^(.+) HP(\d+)$/,ki=/^(.+)\.(\d+)$/;function Mi(e){let t=wi.exec(e),o=ki.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 Si(e){return Ce(e).name.split("#")[1]}function ua(e,t){let o=t.map(r=>r.name);for(let{sample:r,haplotype:n}of Mi(e)){let a=o.filter(i=>_e(Ce(i).name)===r&&(n===void 0||Si(i)===n));if(a.length>0)return a}return[]}var ma=na.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){L(e,Be(()=>{e.fittedTransform&&ie(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),L(e,C(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),L(e,C(()=>{let r=e.facetGrid;return r?`${e.facetSetting.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),L(e,C(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),L(e,C(()=>({graph:e.graph,reads:JSON.stringify(e.ownGeneReads)}),()=>{e.loadOwnGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),L(e,C(()=>e.hasGraph&&(e.chosenLayoutMode==="walkrows"||se.has(e.chosenLayoutMode))?JSON.stringify(e.walkRowSamplesTsv??null):void 0,r=>{r!==void 0&&e.loadWalkRowSampleTable()},{fireImmediately:!0})),L(e,C(()=>`${e.fitPadTop} ${e.layoutBounds?.h} ${e.usableHeight}`,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),L(e,Be(()=>{let r=ia(x(e).hovered),n=e.hoverLightsEverything;ie(()=>{let a=e.graphRegion,i=e.graph,s=new Set(Re([...x(e).views]).flatMap(S=>I(S)&&typeof S.id=="string"?[S.id]:[])),p=r&&a&&Xt(r,a)&&sa(r,e.pairedViewId,s)?r:void 0,c=p?.featureName&&i?.paths?ua(p.featureName,i.paths):[],m=p&&qt(p,e.bubbles);a&&i&&!e.pointerInPane&&(e.setHoveredBubble(m??null),e.setHoveredNode(p&&n&&c.length===0&&!m?da({hover:p,nodes:i.nodes}):null)),e.setHoveredRowWalks(c)})})),L(e,C(()=>pa(x(e).selection),r=>{let n=e.graphRegion,a=r&&n&&Xt(r,n)&&qt(r,e.bubbles);a&&!e.openBubbles.some(i=>He(i,a))&&e.toggleBubble(a)})),L(e,C(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.clearHover()},{name:"GraphClearHoverOnViewportChange"}));let o=!0;L(e,Be(()=>{let{scale:r}=e,n=Pr(e);if(o){o=!1;return}let a=ie(()=>e.builtViewport);a?.scale===r&&kr(a.bounds,n)||e.scheduleViewportDirty()})),L(e,Be(()=>{let r=e.currentRenderingBackend;r&&(e.applySelection(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:o=>{if(It(Ke()),o.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap||e.facetPanels)return It(e.viewportDirty),o.uploadGeometry(Fe),e.setGeometryMetrics(0,Fe,{scale:ie(()=>e.scale),bounds:ie(()=>e.viewportToBuild())}),!0;let r=performance.now(),n=e.buildDrawing(e.drawnHighlight,e.effectiveDrawPaths);return n?(o.uploadGeometry(n.batch),e.setGeometryMetrics(performance.now()-r,n.batch,{scale:ie(()=>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()]])L(e,C(()=>({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}));L(e,C(()=>e.chosenLayoutMode,(t,o)=>{t!==e.handledLayoutMode&&e.relayout(o)})),L(e,C(()=>({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})),L(e,C(()=>se.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")}})).actions(e=>({expandWalks(t){let o=t.filter(r=>!e.expandedWalks.includes(r));o.length>0&&(e.expandedWalks=e.expandedWalks.concat(o),e.retryLoad())}})).actions(e=>({expandWalk(t){e.expandWalks([t])},afterAttach(){L(e,C(()=>{let t=new Set(e.walkLayers.map(o=>o.walk));return[...new Set((e.graph?.paths??[]).filter(o=>o.abridged&&t.has(o.name)).map(o=>o.name))]},t=>{e.expandWalks(t)},{fireImmediately:!0,equals:(t,o)=>t.join(`
5
5
  `)===o.join(`
6
6
  `)}))}}));var la=q(F("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 pt(e,t){qo(e,t);let o=e.find(r=>"subMenu"in r&&r.label===Xo);o&&!o.icon&&(o.icon=la)}var xi="SyntenyTrack",Ri="Synteny adapters";function Ti(e,t){let{type:o,adapter:r}=Uo(e);if(o===xi)return!0;let n=r?.type;return typeof n=="string"&&t.hasAdapterType(n)&&t.getAdapterType(n).adapterMetadata?.category===Ri}function ga(e,t,o){let r=new Set(t),n=[];for(let a of e.tracks){let{trackId:i}=a;if(Ti(a,o)){let s=ur(e,a).filter(p=>r.has(p)).length;s>=2&&n.push({trackId:i,name:Yo(a,e),coverage:s})}}return n.sort((a,i)=>i.coverage-a.coverage)}function ha(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 ba=[["fmmm","FMMM"],["stress","stress"]],Kt=e=>e.label.replace(/ layout$/,"");function ee(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 ya=ma.actions(e=>({showInLinearView(t){let o=x(e),r=t.assembly===e.graphRegion?.assemblyName,n=Ee(o,t.assembly),a=(r?e.geneTrack:e.geneTracksByAssembly.get(n))??e.sessionTracks.find(s=>s.assemblies.includes(n)&&bn.has(s.adapterType)),i=mr({session:o,location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId,tracks:[...new Set([r?e.sourceTrackId:void 0,a?.trackId].filter(s=>s!==void 0))]});r&&e.pairWithLinearView(i)},highlightInLinearView(t){lr({session:x(e),location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId})},showSyntenyView(t){gr({session:x(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?ga(x(e),t,Pe(e).pluginManager):[]}})).views(e=>({walkRowSampleMenuItems(){let{disagreeing:t}=e.walkRowSampleChoices,o=e.walkRowSamples,r=n=>n.join(`
7
7
  `)===o?.join(`
8
- `);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:()=>{x(e).queueDialog(n=>[Sr,{model:e,onClose:n}])}}]},walkRowGroupMenuItems(){let t=e.walkRowGroups?e.walkRowGroupBy?.field:void 0;return ee([{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&&qe(t,i).length>1;return[...ee(tn.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)}),...ee(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[...se.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:ee(Gr.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:ee(Ar,e.tubeMapRoutes,e.setTubeMapRoutes)},...e.walkRowGroupFields.length>0?[{label:"Tube color",subMenu:ee(["",...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:ee(e.repeatOptions,e.selectedRepeat?.key??"",e.setRepeatKey)}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars?[{label:"Samples",subMenu:this.walkRowSampleMenuItems()},{type:"checkbox",label:"Ribbons between rows",checked:e.walkRibbons,onClick:()=>{e.setLayer("walkRibbons",!e.walkRibbons)}},{type:"checkbox",label:"Letter shared blocks",checked:e.layerSet.has("walkBlocks"),onClick:()=>{e.setLayer("walkBlocks",!e.layerSet.has("walkBlocks"))}},{type:"checkbox",label:"Order rows by shared sequence",checked:e.walkRowOrder==="shared",onClick:()=>{e.setWalkRowOrder(e.walkRowOrder==="shared"?void 0:"shared")}}]:[],...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:ee(ve.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:zn,disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let t=e.figure();t&&ha(t,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}}]},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>Tr;return[{type:"subHeader",label:"Highlight"},...n?[{label:"Choose haplotypes...",onClick:()=>{x(e).queueDialog(a=>[xr,{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:()=>{x(e).queueDialog(a=>[Rr,{model:e,onClose:a}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...ee(hr.map(({value:a,label:i})=>({value:a,label:a==="walk"?"A panel per haplotype":i})),e.facetSetting.field,e.setFacet)]:[]]},colorSchemeLabel(t){let o=Ct.find(r=>r.value===t)?.label??t;return t==="auto"?`${o} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:o},graphMenuItems(){let t=this.layoutOptionMenuItems(),o=Q(e.chosenLayoutMode),r=ba.find(([n])=>n===e.layoutEngine)[1];return[{label:`Layout: ${Kt(o)}${o.value==="force"?` (${r})`:""}`,icon:Dn,subMenu:[...rr.flatMap(n=>{let a={type:"radio",disabled:e.graph?!n.available(e.graph):!1,disabledHelpText:n.description};return n.value==="force"?ba.map(([i,s])=>({...a,label:`${Kt(n)} (${s})`,checked:e.chosenLayoutMode===n.value&&e.layoutEngine===i,onClick:()=>{e.switchForceEngine(i)}})):[{...a,label:Kt(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:_n,disabled:e.colorSchemeLock!==void 0,disabledHelpText:e.colorSchemeLock?.why,subMenu:ee(Ct.map(({value:n})=>({value:n,label:this.colorSchemeLabel(n)})),e.chosenColorScheme,e.setColorScheme)},{label:"Show",icon:br,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[],o=e.launchableAssemblies,r=e.graphRegion?.assemblyName;for(let n of Mn({contributors:o,linearContributors:e.host?o.filter(a=>a.sample!==r):o,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:a=>{e.showInLinearView(a)},onShowSynteny:a=>{e.showSyntenyView(a)}}))pt(t,n);return t}}));var dt=ya.views(e=>({get trackHaplotypes(){let t=e.sourceAdapter;return t&&Ie(t)}})).views(e=>({get cutHaplotypes(){return e.subgraphHaplotypes??e.trackHaplotypes},offReference(t){let o=e.sourceTrack,r=o&&sr(o),n=x(e);return r===void 0?void 0:dr(Ee(n,r),Ee(n,t.assemblyName))},cutChangedFrom(t){return e.cutsWholeWalks!==e.cutsWholeWalksIn(t)||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"}:{},...e.expandedWalks.length>0?{expand:e.expandedWalks}:{}}}}));var fa={scale:["scale","type"],domain:["scale","domain"],range:["scale","range"],labels:["scale","names"],scheme:["scale","scheme"],reverse:["scale","reverse"],domainMin:["scale","domainMin"],domainMax:["scale","domainMax"],domainMid:["scale","domainMid"],domainQuantile:["scale","domainQuantile"],unknown:["scale","unknown"],title:["legend","title"],descending:["legend","descending"]};function Gi(e){return Object.entries(e).some(([t,o])=>t in fa&&!(t==="scale"&&I(o)))}function Qt(e){if(typeof e=="string")return{value:e};if(!I(e)||!Gi(e))return e;let t={},o={scale:{},legend:{}};for(let[r,n]of Object.entries(e)){let a=fa[r];!a||r==="scale"&&I(n)?t[r]=n:n!==void 0&&(o[a[0]][a[1]]=r==="scale"&&n==="categorical"?"ordinal":n)}for(let r of["scale","legend"])if(Object.keys(o[r]).length>0){let n=t[r];t[r]={...o[r],...I(n)?n:{}}}return t}var wa={color:e=>({encoding:{color:Qt(e)}})};function Zt(){return M.compose("GraphGenomeView",On,dt,M.model({type:M.literal("GraphGenomeView"),gfaLocation:M.maybe(M.frozen()),loadedRegion:M.maybe(M.frozen()),loadedTrackId:M.optional(M.string,""),layoutMode:Lt(Ue),color:M.maybe(M.frozen()),size:M.maybe(M.frozen()),layers:M.maybe(M.frozen()),facet:M.maybe(M.frozen()),rows:M.maybe(M.frozen()),hover:Lt(ve)})).preProcessSnapshot(e=>e.color===void 0?e:{...e,color:Qt(e.color)}).views(e=>({get grammar(){return{layoutMode:e.layoutMode,encoding:{color:e.color},size:e.size,layers:e.layers,facet:e.facet,rows:e.rows,hover:e.hover}}})).actions(e=>({writeGrammar({encoding:t,...o}){Object.assign(e,t?{...o,color:t.color}:o)}})).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 sourceTrack(){return e.loadedTrackId?e.sessionTrack(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;function o(r){if(e.gfaLocation)return e.displayName||e.setDisplayName(de(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,r);if(!e.loadedTrackId||!r)return;let n=e.sourceAdapter,a=r.end-r.start,i=e.offReference(r);if(!n)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(i)e.setError(new Error(i));else if(a>e.maxRegionBp)e.setError(new Error(`Region too large (${pe(a)}) \u2014 zoom in to view graph (max ${pe(e.maxRegionBp)})`));else return e.cutSubgraph(n,r,e.cutOptions)}return{clearGraph(){t(),e.gfaLocation&&e.displayName===de(e.gfaLocation)&&(e.displayName=void 0),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let r=e.loadedRegion,n=x(e),{assemblyManager:a}=n,i=r&&a.has(r.assemblyName)?a.get(r.assemblyName):void 0;return r&&i?.initialized===!1?a.waitForAssembly(r.assemblyName).catch(()=>{}).then(()=>e.loadedRegion===r?o(Pt(n,r)):void 0):o(r&&Pt(n,r))}}}).actions(e=>({retryLoad(){e.load()},setGfaLocation(t){e.gfaLocation=t},relayoutFrom(t){return e.loadedTrackId&&e.cutChangedFrom(t)?e.load():e.recomputeLayout()},async openGfaLocation(t){await e.loadGFAFromLocation(t),V(e)&&e.hasGraph&&(this.setGfaLocation(t),e.displayName||e.setDisplayName(de(t)))},afterAttach(){e.graph||e.load(),L(e,C(()=>e.walkStrip,t=>{e.loadedTrackId&&e.cutsWholeWalks!==e.cutsWholeWalksIn(e.chosenLayoutMode,!t)&&e.load()}))}}))}var Li=Wn()({});function eo(e){e.addViewType(()=>new jn({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Zt(),launchKeys:Li,ReactComponent:oe(()=>import("./chunks/GraphGenomeView-2AKRM74B.js"))}))}var to=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function vi(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"),...to.map(n=>r(o(n)))].filter(n=>n!==void 0)}function oo(e){e.addTrackType(()=>{let t=O("GraphTrack",{},{baseConfiguration:Fn(e),explicitIdentifier:"trackId"}),o=new En({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:Nn(e,"GraphTrack",t)});for(let r of vi(e))o.addDisplayType(r);return o})}function ro(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:o,...r}=t;return o.addView("GraphGenomeView",r),t})}var ct=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"];var ka=ct&&ct.__esModule?ct.default:ct;var be=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"],Ai=e=>be!=null&&e in Object(be)?be[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}),Ma=Ai("trackHeightConfigSchemaFields"),Lm=be&&be.__esModule?be.default:be;function Sa(){return O("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:M.enumeration("LayoutMode",Ue),defaultValue:"auto"},encoding:{type:"frozen",defaultValue:{},plot:!0},size:{type:"frozen",defaultValue:{field:"depth",value:6},plot:!0},layers:{type:"frozen",defaultValue:{},plot:!0},facet:{type:"frozen",defaultValue:{},plot:!0},rows:{type:"frozen",defaultValue:{},plot:!0},hover:{type:"stringEnum",model:M.enumeration("HoverHighlight",ve),defaultValue:"nodes"},...Ma({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId",retired:wa})}var ye=JBrowseExports["@jbrowse/core/svg/svgReady"],Pi=e=>ye!=null&&e in Object(ye)?ye[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 xa=Pi("computeSvgReady");var Nm=ye&&ye.__esModule?ye.default:ye;var ut=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"];var Ra=ut&&ut.__esModule?ut.default:ut;var fe=JBrowseExports["@jbrowse/display-kit/plotMenu"],Ci=e=>fe!=null&&e in Object(fe)?fe[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}),Ta=Ci("editPlotMenuItems");var jm=fe&&fe.__esModule?fe.default:fe;var we=JBrowseExports["@jbrowse/render-core/displayPhase"],Ga=e=>we!=null&&e in Object(we)?we[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}),La=Ga("computeActivityPhase"),va=Ga("computeDisplayPhase");var Om=we&&we.__esModule?we.default:we;function no(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 Bi=new Set(["scale","translateX","translateY"]);function Ii(e){return Object.fromEntries(Object.keys(Cr.properties).filter(t=>!Bi.has(t)).map(t=>[t,e[t]]))}var ao=10;function Ei(e){let{aboveBpPerPx:t,foldBelowBp:o}=e??{};return typeof t=="number"?t:typeof o=="number"&&o>0?o/ao:void 0}var Fi=oe(()=>import("./chunks/GraphTrackSettingsDialog-7XRZQW6T.js"));function Aa(e){return M.compose("LinearGraphDisplay",Bn,Ra(),dt,M.model({type:M.literal("LinearGraphDisplay"),configuration:Ho(e),layoutEngine:nr(Zo,"stress"),cutRegion:M.maybe(M.frozen()),coarseCut:M.optional(M.boolean,!1)})).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0,haplotypeNames:void 0,cutFoldBp:0})).views(t=>({get grammar(){return{layoutMode:te(t,"layoutMode"),encoding:te(t,"encoding"),size:te(t,"size"),layers:te(t,"layers"),facet:te(t,"facet"),rows:te(t,"rows"),hover:te(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&&Ie(o))??(r&&vt(r))},get coarseAboveBpPerPx(){return Ei(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=ao*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 (${pe(o.end-o.start)}, max ${pe(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get svgReady(){return xa({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return va({renderError:t.renderError,regionTooLarge:t.regionTooLarge,error:t.error},()=>La({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},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({writeGrammar(o){for(let[r,n]of Object.entries(o))jo(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(ao*(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=un(o,t.capFor(r),Q(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(o){t.settledWindow=o;let r=Q(t.chosenLayoutMode).cutMargins;if(t.regionTooLarge||no(t.dense,o)||!t.loadCanceled&&t.tierAt(o.bpPerPx)===t.cutTier&&mn(t.cutRegion,o,r)&&!t.foldDrifted(o.bpPerPx))return!1;let n=t.recutAt(o),a=t.recuts;return Promise.resolve(n).then(()=>{V(t)&&t.recuts===a&&xt(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?Te(t.host):void 0;return r&&!t.regionTooLarge&&(t.cutChangedFrom(o)||Q(o).cutMargins!==Q(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 x(t).rpcManager.call(ae(t),"GetGraphHaplotypes",{adapterConfig:o,signal:r});V(t)&&!r?.aborted&&t.setHaplotypeNames(n)}catch(n){r?.aborted||console.warn("[LinearGraphDisplay] no haplotype names",n)}}})).actions(t=>({stretchWithHost(o,r){let n=t.layoutBounds;if(!n||!t.followsHostView)return;t.viewportOwner==="fit"&&(t.viewportOwner="user");let a=o.bpPerPx/r.bpPerPx,i=t.translateY+t.scaleY*(n.minY+n.h/2);t.scale*=a,t.translateX=a*(t.translateX+o.offsetPx)-r.offsetPx,t.translateY=i-a*(i-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;L(t,()=>{o?.abort()}),L(t,C(()=>{let n=t.sourceAdapter;return n&&ar(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,equals:(n,a)=>JSON.stringify(n)===JSON.stringify(a),name:"GraphHaplotypeNames"})),L(t,C(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),L(t,C(()=>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;L(t,C(()=>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"})),L(t,C(()=>`${t.facetSetting.field} ${t.facetPlacement?.count}`,()=>{let n=(t.facetGridIn(t.paneCeiling-Qe)?.total??0)+Qe;(t.facetGrid?.total??0)+Qe>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),L(t,C(()=>t.host?.coarseDynamicBlocks,n=>{let{host:a}=t,i=n&&a?Te(a):void 0;i&&t.settleOn(i)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let o=t.host?Te(t.host):void 0,r=t.sourceTrackId;if(!o||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge||no(t.dense,o))return;let n=Math.floor(o.start),a=Math.ceil(o.end),{encoding:i,...s}=t.grammar;return{...Ii(t),loadedTrackId:r,loadedRegion:{refName:o.refName,assemblyName:o.assemblyName,start:n,end:a},subgraphHaplotypes:t.cutHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-n),...s,color:i?.color,layoutMode:t.chosenLayoutMode,connectedViewId:t.host?.id}}})).actions(t=>({openGraphView(){let o=t.graphViewSpec;o&&x(t).addView("GraphGenomeView",o)}})).views(t=>({cutMenuItems(){let o=t.sourceAdapter,r=t.sourceTrack;if(!o||!r||!ir(o))return[];let n=Ie(o),a=vt(r),i=t.haplotypeNames,s=t.subgraphHaplotypes,p=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:s?s.length===0:!n&&!a,onClick:()=>{p([])}},...n||a?[{type:"radio",label:n?"The track's default haplotypes":`The track's ${a?.length} assemblies`,checked:s===void 0,onClick:()=>{p(void 0)}}]:[],{type:"radio",label:"Chosen in Graph settings...",checked:(s?.length??0)>0,onClick:()=>{this.openSettings()}}]},openSettings(){x(t).queueDialog(o=>[Fi,{model:t,onClose:o}])},async renderSvg(o){let{renderGraphTrackSvg:r}=await import("./chunks/renderSvg-E5Q7MLCH.js");return r(t,o)},trackMenuItems(){let o=t.launchMenuItems();pt(o,{label:"Graph genome view",icon:tt,disabled:!t.graphViewSpec,disabledHelpText:t.error&&!xt(t.error)?"The track could not cut a graph here":t.isLoading&&!t.hasGraph?"The track is still cutting its graph":"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}});let r=[...this.cutMenuItems(),...t.highlightMenuItems()];return[...r.length>0?[{label:"Haplotypes",icon:xn,subMenu:r}]:[],...t.graphMenuItems(),{label:"Graph settings...",icon:Rn,helpText:"Subgraph, drawing and force-directed layout",onClick:()=>{this.openSettings()}},...o,...Ta(t)]}}))}function io(e){e.addDisplayType(()=>{let t=Sa();return Object.assign(new ka({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Aa(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:oe(()=>import("./chunks/LinearGraphDisplay-WWQ73BO5.js"))}),{adapterCapabilities:["getSubgraph"]})})}function Ni(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:o},index:Se(t,o,r)}:e}var Hi=O("MinigraphBubbleAdapter",{bubblesLocation:B("/path/to/graph.bb.bed.gz"),index:j("MinigraphBubbleIndex","/path/to/graph.bb.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Ni}),Pa=Hi;function so(e){e.addAdapterType(()=>new Z({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",configSchema:Pa,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-4OOBJ44C.js").then(t=>t.default)}))}function Ca(e){let{uri:t,baseUri:o,csi:r,format:n}=e;return typeof t!="string"?e:n===2?{...e,graphLocation:{uri:`${t}${yt}`,baseUri:o},graphIndex:Se(`${t}${yt}`,o,r)}:{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:o},segmentsIndex:Se(`${t}.segs.bed.gz`,o,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:o},linksIndex:Se(`${t}.links.bed.gz`,o,r)}}function Vi(e){let{coarse:t,baseUri:o,csi:r}=e;return xe(Ca(typeof t=="object"&&t!==null?{...e,coarse:Ca({baseUri:o,csi:r,...t})}:e))}var ji=O("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},foldBelowBp:{type:"maybeNumber"},segmentsLocation:B("/path/to/graph.tier.segs.bed.gz"),segmentsIndex:j("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:B("/path/to/graph.tier.links.bed.gz"),linksIndex:j("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi"),graphLocation:B(""),graphIndex:j("RgfaCoarseGraphIndex")}),Wi=O("RgfaTabixAdapter",{segmentsLocation:B("/path/to/graph.segs.bed.gz"),segmentsIndex:j("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:B("/path/to/graph.links.bed.gz"),linksIndex:j("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),graphLocation:B(""),graphIndex:j("RgfaGraphIndex"),walksLocation:B(""),walksIndex:j("RgfaWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Me.stepBudget},walkByteBudget:{type:"integer",defaultValue:Me.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:ji},{explicitlyTyped:!0,preProcessSnapshot:Vi}),Ba=Wi;function po(e){e.addAdapterType(()=>new Z({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",configSchema:Ba,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-CEGFN2QY.js").then(t=>t.default)}))}var Oi=["LinearMultiSampleVariantDisplay"],Di=[{label:"Auto",value:"auto"},{label:"50 bp",value:50},{label:"1 kb",value:1e3},{label:"10 kb",value:1e4}];function _i(e,t){return e?`Pinned to ${Ze(e)}${t===void 0?"":` \xB7 ${t} form${t===1?"":"s"}`}`:"Not pinned"}function zi(e,t){let o=x(e),r=t.flatMap(n=>n?[Ln(n)]:[]);for(let{message:n}of[...o.snackbarMessages??[]])r.some(a=>n.startsWith(a))&&o.removeSnackbarMessage?.(n)}function $i(e){return e.props({formsPinned:M.maybe(M.frozen()),formsFloorBp:M.maybe(M.frozen())}).views(t=>({get configuredAdapter(){return Vo(t.parentTrack.configuration,"adapter")},get walkForms(){return this.configuredAdapter.type==="WalkFormsAdapter"}})).views(t=>({get adapterConfig(){let o=t.configuredAdapter;return t.walkForms?{...o,...t.formsPinned?{pinned:t.formsPinned}:{},...t.formsFloorBp===void 0?{}:{floorBp:t.formsFloorBp}}:o},get formsWindow(){return Tn(this.adapterConfig.pinned)},get formsFloor(){return Gn(this.adapterConfig.floorBp)},get formsCount(){return t.sourcesBase?.reduce((o,r)=>o+(Number(r.forms)||1),0)},get visibleWindow(){let o=Ao(t),r=cn(o)?Te(o):void 0;return r&&r.end>r.start?{refName:r.refName,start:Math.max(0,Math.floor(r.start)),end:Math.ceil(r.end)}:void 0}})).volatile(()=>({warnedWindow:void 0})).actions(t=>{let{setSources:o}=t,r=()=>{zi(t,[t.warnedWindow,t.formsWindow])};return{setFormsPinned(n){r(),t.formsPinned=n},setFormsFloorBp(n){r(),t.formsFloorBp=n},setSources(n,a){t.walkForms&&(r(),t.warnedWindow=t.formsWindow),o?.(n,a)}}}).views(t=>{let{trackMenuItems:o}=t;return{formsMenuItems(){let r=t.formsWindow,n=t.visibleWindow;return[{label:_i(r,t.formsCount),disabled:!0,onClick:()=>{}},{label:"Re-pin to visible region",helpText:"Cut the forms from the region the view shows. Panning and zooming leave the forms alone",disabled:!n||r!==void 0&&Ze(n)===Ze(r),onClick:()=>{n&&t.setFormsPinned(n)}},{label:"Hide changes under",subMenu:Di.map(({label:a,value:i})=>({label:a,type:"radio",checked:t.formsFloor===i,onClick:()=>{t.setFormsFloorBp(i)}}))}]},trackMenuItems(){return t.walkForms?[...o(),...this.formsMenuItems()]:o()}}})}function co(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rt&&Oi.includes(t.name)&&t.extendStateModel($i),t))}var Ji=O("WalkFormsAdapter",{walksLocation:B("/path/to/graph.walks.bed.gz"),walksIndex:j("WalkFormsWalksIndex"),pinned:{type:"frozen",defaultValue:{}},floorBp:{type:"frozen",defaultValue:"auto"},exclude:{type:"stringArray",defaultValue:[]},maxForms:{type:"integer",defaultValue:vn},walkByteBudget:{type:"integer",defaultValue:1e6}},{explicitlyTyped:!0,preProcessSnapshot:xe}),Ia=Ji;function uo(e){e.addAdapterType(()=>new Z({name:"WalkFormsAdapter",displayName:"Walk-file structural forms adapter",configSchema:Ia,adapterMetadata:{category:"Variant adapters"},getAdapterClass:()=>import("./chunks/WalkFormsAdapter-LTAKACZD.js").then(t=>t.default)}))}var Yi=O("WalkTabixSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},walksLocation:B("/path/to/graph.walks.bed.gz"),walksIndex:j("WalkTabixWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Me.stepBudget},walkByteBudget:{type:"integer",defaultValue:Me.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},samplesTsvLocation:B(""),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:xe}),Ea=Yi;function mo(e){e.addAdapterType(()=>new Z({name:"WalkTabixSyntenyAdapter",displayName:"Walk-indexed graph adapter",configSchema:Ea,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/WalkTabixSyntenyAdapter-B6V3YNW7.js").then(t=>t.default)}))}var Ui=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Xi(e){return ft(e).toLowerCase().endsWith(".gbz.db")}function qi(e){let t=e.adapter;return t?.type!==void 0&&ln.has(t.type)&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function Ki(e){let t=e.adapter,[o]=Array.isArray(e.assemblyNames)?e.assemblyNames:[],r=t?.type==="RgfaTabixAdapter"&&t.walksLocation?Oo(t.walksLocation):void 0;return o&&r&&r!==o&&t?.assemblyNameToPanSN===void 0?{...e,adapter:{...t,assemblyNameToPanSN:{[o]:r}}}:e}function Qi(e,t,o){let r=n=>Qo({choice:n,loc:e,indexLoc:t,assembly:"",sample:""});if((!o||o==="GbzBaseSyntenyAdapter")&&Xi(e))return r("GbzBaseSyntenyAdapter");if(!o||o==="RgfaTabixAdapter"){if(Ko(e))return r("RgfaTabixAdapter");if(ft(e).endsWith(Wo)&&(t!==void 0||zo(e)))return r("RgfaTabixWalks")}}function lo(e){e.addToExtensionPoint("Core-preProcessTrackConfig",qi),e.addToExtensionPoint("Core-preProcessTrackConfig",Ki),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(o,r,n)=>Qi(o,r,n)??t(o,r,n)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(o,r)=>Ui.has(o)?"GraphTrack":t(o,r))}function go(e){let t;if(I(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 Zi(e,t,o){let r=e.connectedViewId;return r===void 0||r===t||!o.has(r)}function Fa(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Na(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(o=>I(o)&&Array.isArray(o.displays)?o.displays.filter(r=>I(r)&&r.type==="LinearGraphDisplay"):[])}function Ha(e,t,o){let r=[],n=Re(e),a=new Set(n.map(i=>I(i)?i.id:void 0));for(let i of n){if(I(i)&&i.id===t)for(let s of Na(i)){let p=go(s.hoverHighlight);p&&Fa(p,o)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:p})}for(let s of I(i)?[...Na(i),...i.type==="GraphGenomeView"?[i]:[]]:[])(Array.isArray(s.assemblyHoverHighlights)?s.assemblyHoverHighlights:[]).forEach((c,m)=>{let S=go(c);S?.assemblyName!==void 0&&o?.includes(S.assemblyName)&&r.push({key:`${typeof s.id=="string"?s.id:"graph"}-${m}`,region:S})});if(I(i)&&i.type==="GraphGenomeView"&&Zi(i,t,a)){let s=go(i.hoverHighlight);s&&Fa(s,o)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var es=Sn()(e=>({highlight:{height:"100%",position:"absolute",background:Je(e.palette.primary.main,.08),borderLeft:`1px solid ${Je(e.palette.primary.main,.4)}`,borderRight:`1px solid ${Je(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),ts=St(function({model:t,region:o}){let{classes:r}=es(),n=t.getHighlightCoords(o);return n?F("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:n.left,width:n.width}}):null}),os=St(function({model:t}){let{views:o}=x(t);return F(Io,{children:Ha([...o],t.id,t.assemblyNames).map(({key:r,region:n})=>F(ts,{model:t,region:n},`graph-hover-${r}`))})}),Va=os;var rs="LinearGenomeView-TracksContainerComponent";function ho(e){e.contributeToExtensionPoint(rs,({model:t})=>F(Va,{model:t},"graphgenomeview-hover-highlight"))}function ns(e){return e.views(t=>({get adapterConfig(){return gn(t,t.parentTrack.configuration)}}))}function bo(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rt&&to.includes(t.name)&&t.extendStateModel(ns),t))}var ja="GraphGenomeView";var Wa="8.2.0";var yo=class extends An{constructor(){super(...arguments);this.name=ja;this.version=Wa}install(o){eo(o),io(o),oo(o),ro(o),ho(o),po(o),so(o),Wt(o),mo(o),uo(o),co(o),Dt(o),lo(o),bo(o),o.addRpcMethod(()=>new Oe(o)),o.addRpcMethod(()=>new We(o)),o.addRpcMethod(()=>new je(o)),o.addRpcMethod(()=>new Ve(o))}configure(o){try{Po(o.rootModel)&&o.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:tt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{yo as default};
8
+ `);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:()=>{x(e).queueDialog(n=>[Sr,{model:e,onClose:n}])}}]},walkRowGroupMenuItems(){let t=e.walkRowGroups?e.walkRowGroupBy?.field:void 0;return ee([{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&&qe(t,i).length>1;return[...ee(tn.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)}),...ee(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[...se.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:ee(Gr.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:ee(Ar,e.tubeMapRoutes,e.setTubeMapRoutes)},...e.walkRowGroupFields.length>0?[{label:"Tube color",subMenu:ee(["",...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:ee(e.repeatOptions,e.selectedRepeat?.key??"",e.setRepeatKey)}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars?[{label:"Samples",subMenu:this.walkRowSampleMenuItems()},{type:"checkbox",label:"Ribbons between rows",checked:e.walkRibbons,onClick:()=>{e.setLayer("walkRibbons",!e.walkRibbons)}},{type:"checkbox",label:"Letter shared blocks",checked:e.layerSet.has("walkBlocks"),onClick:()=>{e.setLayer("walkBlocks",!e.layerSet.has("walkBlocks"))}},{type:"checkbox",label:"Order rows by shared sequence",checked:e.walkRowOrder==="shared",onClick:()=>{e.setWalkRowOrder(e.walkRowOrder==="shared"?void 0:"shared")}}]:[],...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:ee(ve.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:zn,disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let t=e.figure();t&&ha(t,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}}]},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>Tr;return[{type:"subHeader",label:"Highlight"},...n?[{label:"Choose haplotypes...",onClick:()=>{x(e).queueDialog(a=>[xr,{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:()=>{x(e).queueDialog(a=>[Rr,{model:e,onClose:a}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...ee(hr.map(({value:a,label:i})=>({value:a,label:a==="walk"?"A panel per haplotype":i})),e.facetSetting.field,e.setFacet)]:[]]},colorSchemeLabel(t){let o=Ct.find(r=>r.value===t)?.label??t;return t==="auto"?`${o} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:o},graphMenuItems(){let t=this.layoutOptionMenuItems(),o=Q(e.chosenLayoutMode),r=ba.find(([n])=>n===e.layoutEngine)[1];return[{label:`Layout: ${Kt(o)}${o.value==="force"?` (${r})`:""}`,icon:Dn,subMenu:[...rr.flatMap(n=>{let a={type:"radio",disabled:e.graph?!n.available(e.graph):!1,disabledHelpText:n.description};return n.value==="force"?ba.map(([i,s])=>({...a,label:`${Kt(n)} (${s})`,checked:e.chosenLayoutMode===n.value&&e.layoutEngine===i,onClick:()=>{e.switchForceEngine(i)}})):[{...a,label:Kt(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:_n,disabled:e.colorSchemeLock!==void 0,disabledHelpText:e.colorSchemeLock?.why,subMenu:ee(Ct.map(({value:n})=>({value:n,label:this.colorSchemeLabel(n)})),e.chosenColorScheme,e.setColorScheme)},{label:"Show",icon:br,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[],o=e.launchableAssemblies,r=e.graphRegion?.assemblyName;for(let n of Mn({contributors:o,linearContributors:e.host?o.filter(a=>a.sample!==r):o,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:a=>{e.showInLinearView(a)},onShowSynteny:a=>{e.showSyntenyView(a)}}))pt(t,n);return t}}));var dt=ya.views(e=>({get trackHaplotypes(){let t=e.sourceAdapter;return t&&Ie(t)}})).views(e=>({get cutHaplotypes(){return e.subgraphHaplotypes??e.trackHaplotypes},offReference(t){let o=e.sourceTrack,r=o&&sr(o),n=x(e);return r===void 0?void 0:dr(Ee(n,r),Ee(n,t.assemblyName))},cutChangedFrom(t){return e.cutsWholeWalks!==e.cutsWholeWalksIn(t)||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"}:{},...e.expandedWalks.length>0?{expand:e.expandedWalks}:{}}}}));var fa={scale:["scale","type"],domain:["scale","domain"],range:["scale","range"],labels:["scale","names"],scheme:["scale","scheme"],reverse:["scale","reverse"],domainMin:["scale","domainMin"],domainMax:["scale","domainMax"],domainMid:["scale","domainMid"],domainQuantile:["scale","domainQuantile"],unknown:["scale","unknown"],title:["legend","title"],descending:["legend","descending"]};function Gi(e){return Object.entries(e).some(([t,o])=>t in fa&&!(t==="scale"&&I(o)))}function Qt(e){if(typeof e=="string")return{value:e};if(!I(e)||!Gi(e))return e;let t={},o={scale:{},legend:{}};for(let[r,n]of Object.entries(e)){let a=fa[r];!a||r==="scale"&&I(n)?t[r]=n:n!==void 0&&(o[a[0]][a[1]]=r==="scale"&&n==="categorical"?"ordinal":n)}for(let r of["scale","legend"])if(Object.keys(o[r]).length>0){let n=t[r];t[r]={...o[r],...I(n)?n:{}}}return t}var wa={color:e=>({encoding:{color:Qt(e)}})};function Zt(){return M.compose("GraphGenomeView",On,dt,M.model({type:M.literal("GraphGenomeView"),gfaLocation:M.maybe(M.frozen()),loadedRegion:M.maybe(M.frozen()),loadedTrackId:M.optional(M.string,""),layoutMode:Lt(Ue),color:M.maybe(M.frozen()),size:M.maybe(M.frozen()),layers:M.maybe(M.frozen()),facet:M.maybe(M.frozen()),rows:M.maybe(M.frozen()),hover:Lt(ve)})).preProcessSnapshot(e=>e.color===void 0?e:{...e,color:Qt(e.color)}).views(e=>({get grammar(){return{layoutMode:e.layoutMode,encoding:{color:e.color},size:e.size,layers:e.layers,facet:e.facet,rows:e.rows,hover:e.hover}}})).actions(e=>({writeGrammar({encoding:t,...o}){Object.assign(e,t?{...o,color:t.color}:o)}})).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 sourceTrack(){return e.loadedTrackId?e.sessionTrack(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;function o(r){if(e.gfaLocation)return e.displayName||e.setDisplayName(de(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,r);if(!e.loadedTrackId||!r)return;let n=e.sourceAdapter,a=r.end-r.start,i=e.offReference(r);if(!n)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(i)e.setError(new Error(i));else if(a>e.maxRegionBp)e.setError(new Error(`Region too large (${pe(a)}) \u2014 zoom in to view graph (max ${pe(e.maxRegionBp)})`));else return e.cutSubgraph(n,r,e.cutOptions)}return{clearGraph(){t(),e.gfaLocation&&e.displayName===de(e.gfaLocation)&&(e.displayName=void 0),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let r=e.loadedRegion,n=x(e),{assemblyManager:a}=n,i=r&&a.has(r.assemblyName)?a.get(r.assemblyName):void 0;return r&&i?.initialized===!1?a.waitForAssembly(r.assemblyName).catch(()=>{}).then(()=>e.loadedRegion===r?o(Pt(n,r)):void 0):o(r&&Pt(n,r))}}}).actions(e=>({retryLoad(){e.load()},setGfaLocation(t){e.gfaLocation=t},relayoutFrom(t){return e.loadedTrackId&&e.cutChangedFrom(t)?e.load():e.recomputeLayout()},async openGfaLocation(t){await e.loadGFAFromLocation(t),V(e)&&e.hasGraph&&(this.setGfaLocation(t),e.displayName||e.setDisplayName(de(t)))},afterAttach(){e.graph||e.load(),L(e,C(()=>e.walkStrip,t=>{e.loadedTrackId&&e.cutsWholeWalks!==e.cutsWholeWalksIn(e.chosenLayoutMode,!t)&&e.load()}))}}))}var Li=Wn()({});function eo(e){e.addViewType(()=>new jn({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Zt(),launchKeys:Li,ReactComponent:oe(()=>import("./chunks/GraphGenomeView-2AKRM74B.js"))}))}var to=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function vi(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"),...to.map(n=>r(o(n)))].filter(n=>n!==void 0)}function oo(e){e.addTrackType(()=>{let t=O("GraphTrack",{},{baseConfiguration:Fn(e),explicitIdentifier:"trackId"}),o=new En({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:Nn(e,"GraphTrack",t)});for(let r of vi(e))o.addDisplayType(r);return o})}function ro(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:o,...r}=t;return o.addView("GraphGenomeView",r),t})}var ct=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"];var ka=ct&&ct.__esModule?ct.default:ct;var be=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"],Ai=e=>be!=null&&e in Object(be)?be[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}),Ma=Ai("trackHeightConfigSchemaFields"),Lm=be&&be.__esModule?be.default:be;function Sa(){return O("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:M.enumeration("LayoutMode",Ue),defaultValue:"auto"},encoding:{type:"frozen",defaultValue:{},plot:!0},size:{type:"frozen",defaultValue:{field:"depth",value:6},plot:!0},layers:{type:"frozen",defaultValue:{},plot:!0},facet:{type:"frozen",defaultValue:{},plot:!0},rows:{type:"frozen",defaultValue:{},plot:!0},hover:{type:"stringEnum",model:M.enumeration("HoverHighlight",ve),defaultValue:"nodes"},...Ma({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId",retired:wa})}var ye=JBrowseExports["@jbrowse/core/svg/svgReady"],Pi=e=>ye!=null&&e in Object(ye)?ye[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 xa=Pi("computeSvgReady");var Nm=ye&&ye.__esModule?ye.default:ye;var ut=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"];var Ra=ut&&ut.__esModule?ut.default:ut;var fe=JBrowseExports["@jbrowse/display-kit/plotMenu"],Ci=e=>fe!=null&&e in Object(fe)?fe[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}),Ta=Ci("editPlotMenuItems");var jm=fe&&fe.__esModule?fe.default:fe;var we=JBrowseExports["@jbrowse/render-core/displayPhase"],Ga=e=>we!=null&&e in Object(we)?we[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}),La=Ga("computeActivityPhase"),va=Ga("computeDisplayPhase");var Om=we&&we.__esModule?we.default:we;function no(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 Bi=new Set(["scale","translateX","translateY"]);function Ii(e){return Object.fromEntries(Object.keys(Cr.properties).filter(t=>!Bi.has(t)).map(t=>[t,e[t]]))}var ao=10;function Ei(e){let{aboveBpPerPx:t,foldBelowBp:o}=e??{};return typeof t=="number"?t:typeof o=="number"&&o>0?o/ao:void 0}var Fi=oe(()=>import("./chunks/GraphTrackSettingsDialog-7XRZQW6T.js"));function Aa(e){return M.compose("LinearGraphDisplay",Bn,Ra(),dt,M.model({type:M.literal("LinearGraphDisplay"),configuration:Ho(e),layoutEngine:nr(Zo,"stress"),cutRegion:M.maybe(M.frozen()),coarseCut:M.optional(M.boolean,!1)})).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0,haplotypeNames:void 0,cutFoldBp:0})).views(t=>({get grammar(){return{layoutMode:te(t,"layoutMode"),encoding:te(t,"encoding"),size:te(t,"size"),layers:te(t,"layers"),facet:te(t,"facet"),rows:te(t,"rows"),hover:te(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&&Ie(o))??(r&&vt(r))},get coarseAboveBpPerPx(){return Ei(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=ao*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 (${pe(o.end-o.start)}, max ${pe(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get svgReady(){return xa({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return va({renderError:t.renderError,regionTooLarge:t.regionTooLarge,error:t.error},()=>La({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},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({writeGrammar(o){for(let[r,n]of Object.entries(o))jo(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(ao*(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=un(o,t.capFor(r),Q(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(o){t.settledWindow=o;let r=Q(t.chosenLayoutMode).cutMargins;if(t.regionTooLarge||no(t.dense,o)||!t.loadCanceled&&t.tierAt(o.bpPerPx)===t.cutTier&&mn(t.cutRegion,o,r)&&!t.foldDrifted(o.bpPerPx))return!1;let n=t.recutAt(o),a=t.recuts;return Promise.resolve(n).then(()=>{V(t)&&t.recuts===a&&xt(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?Te(t.host):void 0;return r&&!t.regionTooLarge&&(t.cutChangedFrom(o)||Q(o).cutMargins!==Q(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 x(t).rpcManager.call(ae(t),"GetGraphHaplotypes",{adapterConfig:o,signal:r});V(t)&&!r?.aborted&&t.setHaplotypeNames(n)}catch(n){r?.aborted||console.warn("[LinearGraphDisplay] no haplotype names",n)}}})).actions(t=>({stretchWithHost(o,r){let n=t.layoutBounds;if(!n||!t.followsHostView)return;t.viewportOwner==="fit"&&(t.viewportOwner="user");let a=o.bpPerPx/r.bpPerPx,i=t.translateY+t.scaleY*(n.minY+n.h/2);t.scale*=a,t.translateX=a*(t.translateX+o.offsetPx)-r.offsetPx,t.translateY=i-a*(i-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;L(t,()=>{o?.abort()}),L(t,C(()=>{let n=t.sourceAdapter;return n&&ar(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,equals:(n,a)=>JSON.stringify(n)===JSON.stringify(a),name:"GraphHaplotypeNames"})),L(t,C(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),L(t,C(()=>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;L(t,C(()=>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"})),L(t,C(()=>`${t.facetSetting.field} ${t.facetPlacement?.count}`,()=>{let n=(t.facetGridIn(t.paneCeiling-Qe)?.total??0)+Qe;(t.facetGrid?.total??0)+Qe>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),L(t,C(()=>t.host?.coarseDynamicBlocks,n=>{let{host:a}=t,i=n&&a?Te(a):void 0;i&&t.settleOn(i)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let o=t.host?Te(t.host):void 0,r=t.sourceTrackId;if(!o||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge||no(t.dense,o))return;let n=Math.floor(o.start),a=Math.ceil(o.end),{encoding:i,...s}=t.grammar;return{...Ii(t),loadedTrackId:r,loadedRegion:{refName:o.refName,assemblyName:o.assemblyName,start:n,end:a},subgraphHaplotypes:t.cutHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-n),...s,color:i?.color,layoutMode:t.chosenLayoutMode,connectedViewId:t.host?.id}}})).actions(t=>({openGraphView(){let o=t.graphViewSpec;o&&x(t).addView("GraphGenomeView",o)}})).views(t=>({cutMenuItems(){let o=t.sourceAdapter,r=t.sourceTrack;if(!o||!r||!ir(o))return[];let n=Ie(o),a=vt(r),i=t.haplotypeNames,s=t.subgraphHaplotypes,p=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:s?s.length===0:!n&&!a,onClick:()=>{p([])}},...n||a?[{type:"radio",label:n?"The track's default haplotypes":`The track's ${a?.length} assemblies`,checked:s===void 0,onClick:()=>{p(void 0)}}]:[],{type:"radio",label:"Chosen in Graph settings...",checked:(s?.length??0)>0,onClick:()=>{this.openSettings()}}]},openSettings(){x(t).queueDialog(o=>[Fi,{model:t,onClose:o}])},async renderSvg(o){let{renderGraphTrackSvg:r}=await import("./chunks/renderSvg-E5Q7MLCH.js");return r(t,o)},trackMenuItems(){let o=t.launchMenuItems();pt(o,{label:"Graph genome view",icon:tt,disabled:!t.graphViewSpec,disabledHelpText:t.error&&!xt(t.error)?"The track could not cut a graph here":t.isLoading&&!t.hasGraph?"The track is still cutting its graph":"Zoom in until the track cuts a graph",onClick:()=>{t.openGraphView()}});let r=[...this.cutMenuItems(),...t.highlightMenuItems()];return[...r.length>0?[{label:"Haplotypes",icon:xn,subMenu:r}]:[],...t.graphMenuItems(),{label:"Graph settings...",icon:Rn,helpText:"Subgraph, drawing and force-directed layout",onClick:()=>{this.openSettings()}},...o,...Ta(t)]}}))}function io(e){e.addDisplayType(()=>{let t=Sa();return Object.assign(new ka({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:Aa(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:oe(()=>import("./chunks/LinearGraphDisplay-WWQ73BO5.js"))}),{adapterCapabilities:["getSubgraph"]})})}function Ni(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:o},index:Se(t,o,r)}:e}var Hi=O("MinigraphBubbleAdapter",{bubblesLocation:B("/path/to/graph.bb.bed.gz"),index:j("MinigraphBubbleIndex","/path/to/graph.bb.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Ni}),Pa=Hi;function so(e){e.addAdapterType(()=>new Z({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",configSchema:Pa,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-4OOBJ44C.js").then(t=>t.default)}))}function Ca(e){let{uri:t,baseUri:o,csi:r,format:n}=e;return typeof t!="string"?e:n===2?{...e,graphLocation:{uri:`${t}${yt}`,baseUri:o},graphIndex:Se(`${t}${yt}`,o,r)}:{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:o},segmentsIndex:Se(`${t}.segs.bed.gz`,o,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:o},linksIndex:Se(`${t}.links.bed.gz`,o,r)}}function Vi(e){let{coarse:t,baseUri:o,csi:r}=e;return xe(Ca(typeof t=="object"&&t!==null?{...e,coarse:Ca({baseUri:o,csi:r,...t})}:e))}var ji=O("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},foldBelowBp:{type:"maybeNumber"},segmentsLocation:B("/path/to/graph.tier.segs.bed.gz"),segmentsIndex:j("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:B("/path/to/graph.tier.links.bed.gz"),linksIndex:j("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi"),graphLocation:B(""),graphIndex:j("RgfaCoarseGraphIndex")}),Wi=O("RgfaTabixAdapter",{segmentsLocation:B("/path/to/graph.segs.bed.gz"),segmentsIndex:j("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:B("/path/to/graph.links.bed.gz"),linksIndex:j("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),graphLocation:B(""),graphIndex:j("RgfaGraphIndex"),walksLocation:B(""),walksIndex:j("RgfaWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Me.stepBudget},walkByteBudget:{type:"integer",defaultValue:Me.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:ji},{explicitlyTyped:!0,preProcessSnapshot:Vi}),Ba=Wi;function po(e){e.addAdapterType(()=>new Z({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",configSchema:Ba,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-CEGFN2QY.js").then(t=>t.default)}))}var Oi=["LinearMultiSampleVariantDisplay"],Di=[{label:"Auto",value:"auto"},{label:"50 bp",value:50},{label:"1 kb",value:1e3},{label:"10 kb",value:1e4}];function _i(e,t){return e?`Pinned to ${Ze(e)}${t===void 0?"":` \xB7 ${t} form${t===1?"":"s"}`}`:"Not pinned"}function zi(e,t){let o=x(e),r=t.flatMap(n=>n?[Ln(n)]:[]);for(let{message:n}of[...o.snackbarMessages??[]])r.some(a=>n.startsWith(a))&&o.removeSnackbarMessage?.(n)}function $i(e){return e.props({formsPinned:M.maybe(M.frozen()),formsFloorBp:M.maybe(M.frozen())}).views(t=>({get configuredAdapter(){return Vo(t.parentTrack.configuration,"adapter")},get walkForms(){return this.configuredAdapter.type==="WalkFormsAdapter"}})).views(t=>({get adapterConfig(){let o=t.configuredAdapter;return t.walkForms?{...o,...t.formsPinned?{pinned:t.formsPinned}:{},...t.formsFloorBp===void 0?{}:{floorBp:t.formsFloorBp}}:o},get formsWindow(){return Tn(this.adapterConfig.pinned)},get formsFloor(){return Gn(this.adapterConfig.floorBp)},get formsCount(){return t.sourcesBase?.reduce((o,r)=>o+(Number(r.forms)||1),0)},get visibleWindow(){let o=Ao(t),r=cn(o)?Te(o):void 0;return r&&r.end>r.start?{refName:r.refName,start:Math.max(0,Math.floor(r.start)),end:Math.ceil(r.end)}:void 0}})).volatile(()=>({warnedWindow:void 0})).actions(t=>{let{setSources:o}=t,r=()=>{zi(t,[t.warnedWindow,t.formsWindow])};return{setFormsPinned(n){r(),t.formsPinned=n},setFormsFloorBp(n){r(),t.formsFloorBp=n},setSources(n,a){t.walkForms&&(r(),t.warnedWindow=t.formsWindow),o?.(n,a)}}}).views(t=>{let{trackMenuItems:o}=t;return{formsMenuItems(){let r=t.formsWindow,n=t.visibleWindow;return[{label:_i(r,t.formsCount),disabled:!0,onClick:()=>{}},{label:"Re-pin to visible region",helpText:"Cut the forms from the region the view shows. Panning and zooming leave the forms alone",disabled:!n||r!==void 0&&Ze(n)===Ze(r),onClick:()=>{n&&t.setFormsPinned(n)}},{label:"Hide changes under",subMenu:Di.map(({label:a,value:i})=>({label:a,type:"radio",checked:t.formsFloor===i,onClick:()=>{t.setFormsFloorBp(i)}}))}]},trackMenuItems(){return t.walkForms?[...o(),...this.formsMenuItems()]:o()}}})}function co(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rt&&Oi.includes(t.name)&&t.extendStateModel($i),t))}var Ji=O("WalkFormsAdapter",{walksLocation:B("/path/to/graph.walks.bed.gz"),walksIndex:j("WalkFormsWalksIndex"),pinned:{type:"frozen",defaultValue:{}},floorBp:{type:"frozen",defaultValue:"auto"},exclude:{type:"stringArray",defaultValue:[]},maxForms:{type:"integer",defaultValue:vn},walkByteBudget:{type:"integer",defaultValue:1e6}},{explicitlyTyped:!0,preProcessSnapshot:xe}),Ia=Ji;function uo(e){e.addAdapterType(()=>new Z({name:"WalkFormsAdapter",displayName:"Walk-file structural forms adapter",configSchema:Ia,adapterMetadata:{category:"Variant adapters"},getAdapterClass:()=>import("./chunks/WalkFormsAdapter-LTAKACZD.js").then(t=>t.default)}))}var Yi=O("WalkTabixSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},walksLocation:B("/path/to/graph.walks.bed.gz"),walksIndex:j("WalkTabixWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Me.stepBudget},walkByteBudget:{type:"integer",defaultValue:Me.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},samplesTsvLocation:B(""),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:xe}),Ea=Yi;function mo(e){e.addAdapterType(()=>new Z({name:"WalkTabixSyntenyAdapter",displayName:"Walk-indexed graph adapter",configSchema:Ea,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/WalkTabixSyntenyAdapter-B6V3YNW7.js").then(t=>t.default)}))}var Ui=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Xi(e){return ft(e).toLowerCase().endsWith(".gbz.db")}function qi(e){let t=e.adapter;return t?.type!==void 0&&ln.has(t.type)&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function Ki(e){let t=e.adapter,[o]=Array.isArray(e.assemblyNames)?e.assemblyNames:[],r=t?.type==="RgfaTabixAdapter"&&t.walksLocation?Oo(t.walksLocation):void 0;return o&&r&&r!==o&&t?.assemblyNameToPanSN===void 0?{...e,adapter:{...t,assemblyNameToPanSN:{[o]:r}}}:e}function Qi(e,t,o){let r=n=>Qo({choice:n,loc:e,indexLoc:t,assembly:"",sample:""});if((!o||o==="GbzBaseSyntenyAdapter")&&Xi(e))return r("GbzBaseSyntenyAdapter");if(!o||o==="RgfaTabixAdapter"){if(Ko(e))return r("RgfaTabixAdapter");if(ft(e).endsWith(Wo)&&(t!==void 0||zo(e)))return r("RgfaTabixWalks")}}function lo(e){e.addToExtensionPoint("Core-preProcessTrackConfig",qi),e.addToExtensionPoint("Core-preProcessTrackConfig",Ki),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(o,r,n)=>Qi(o,r,n)??t(o,r,n)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(o,r)=>Ui.has(o)?"GraphTrack":t(o,r))}function go(e){let t;if(I(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 Zi(e,t,o){let r=e.connectedViewId;return r===void 0||r===t||!o.has(r)}function Fa(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Na(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(o=>I(o)&&Array.isArray(o.displays)?o.displays.filter(r=>I(r)&&r.type==="LinearGraphDisplay"):[])}function Ha(e,t,o){let r=[],n=Re(e),a=new Set(n.map(i=>I(i)?i.id:void 0));for(let i of n){if(I(i)&&i.id===t)for(let s of Na(i)){let p=go(s.hoverHighlight);p&&Fa(p,o)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:p})}for(let s of I(i)?[...Na(i),...i.type==="GraphGenomeView"?[i]:[]]:[])(Array.isArray(s.assemblyHoverHighlights)?s.assemblyHoverHighlights:[]).forEach((c,m)=>{let S=go(c);S?.assemblyName!==void 0&&o?.includes(S.assemblyName)&&r.push({key:`${typeof s.id=="string"?s.id:"graph"}-${m}`,region:S})});if(I(i)&&i.type==="GraphGenomeView"&&Zi(i,t,a)){let s=go(i.hoverHighlight);s&&Fa(s,o)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var es=Sn()(e=>({highlight:{height:"100%",position:"absolute",background:Je(e.palette.primary.main,.08),borderLeft:`1px solid ${Je(e.palette.primary.main,.4)}`,borderRight:`1px solid ${Je(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),ts=St(function({model:t,region:o}){let{classes:r}=es(),n=t.getHighlightCoords(o);return n?F("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:n.left,width:n.width}}):null}),os=St(function({model:t}){let{views:o}=x(t);return F(Io,{children:Ha([...o],t.id,t.assemblyNames).map(({key:r,region:n})=>F(ts,{model:t,region:n},`graph-hover-${r}`))})}),Va=os;var rs="LinearGenomeView-TracksContainerComponent";function ho(e){e.contributeToExtensionPoint(rs,({model:t})=>F(Va,{model:t},"graphgenomeview-hover-highlight"))}function ns(e){return e.views(t=>({get adapterConfig(){return gn(t,t.parentTrack.configuration)}}))}function bo(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rt&&to.includes(t.name)&&t.extendStateModel(ns),t))}var ja="GraphGenomeView";var Wa="8.3.0";var yo=class extends An{constructor(){super(...arguments);this.name=ja;this.version=Wa}install(o){eo(o),io(o),oo(o),ro(o),ho(o),po(o),so(o),Wt(o),mo(o),uo(o),co(o),Dt(o),lo(o),bo(o),o.addRpcMethod(()=>new Oe(o)),o.addRpcMethod(()=>new We(o)),o.addRpcMethod(()=>new je(o)),o.addRpcMethod(()=>new Ve(o))}configure(o){try{Po(o.rootModel)&&o.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:tt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{yo as default};
9
9
  //# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map