jbrowse-plugin-graphgenomeviewer 7.4.2 → 7.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +45 -19
  2. package/dist/chunks/{GbzBaseSyntenyAdapter-BVLBK4OO.js → GbzBaseSyntenyAdapter-EKLUEECW.js} +2 -2
  3. package/dist/chunks/{GbzBaseSyntenyAdapter-BVLBK4OO.js.map → GbzBaseSyntenyAdapter-EKLUEECW.js.map} +1 -1
  4. package/dist/chunks/{GraphGenomeView-UCOAMRF7.js → GraphGenomeView-P3XMSKUQ.js} +2 -2
  5. package/dist/chunks/{GraphTrackSettingsDialog-MR7X75EY.js → GraphTrackSettingsDialog-UTYH6HEC.js} +2 -2
  6. package/dist/chunks/{HighlightColorDialog-ZBAZDYIR.js → HighlightColorDialog-G6AFRYUD.js} +2 -2
  7. package/dist/chunks/{LinearGraphDisplay-AJ5OZN27.js → LinearGraphDisplay-O4SQSXJJ.js} +2 -2
  8. package/dist/chunks/{MinigraphBubbleAdapter-PEQK5NII.js → MinigraphBubbleAdapter-3NJ2VLN2.js} +2 -2
  9. package/dist/chunks/{RgfaTabixAdapter-Q63YLPK4.js → RgfaTabixAdapter-55DGDID2.js} +2 -2
  10. package/dist/chunks/{WalkTabixSyntenyAdapter-N5PFI4LS.js → WalkTabixSyntenyAdapter-NHNSZZBX.js} +2 -2
  11. package/dist/chunks/{chunk-S75MFZDE.js → chunk-4I3K4RHE.js} +2 -2
  12. package/dist/chunks/{chunk-S75MFZDE.js.map → chunk-4I3K4RHE.js.map} +2 -2
  13. package/dist/chunks/{chunk-MEMUEG5Z.js → chunk-6OXXT2YP.js} +2 -2
  14. package/dist/chunks/{chunk-MEMUEG5Z.js.map → chunk-6OXXT2YP.js.map} +1 -1
  15. package/dist/chunks/{chunk-U5PIXAF2.js → chunk-CNNZDE6I.js} +2 -2
  16. package/dist/chunks/{chunk-U5PIXAF2.js.map → chunk-CNNZDE6I.js.map} +1 -1
  17. package/dist/chunks/{chunk-2XZYJLCE.js → chunk-CXOMX2I6.js} +1 -1
  18. package/dist/chunks/{chunk-2XZYJLCE.js.map → chunk-CXOMX2I6.js.map} +1 -1
  19. package/dist/chunks/{chunk-LFTZNUXB.js → chunk-DUPBXBYE.js} +2 -2
  20. package/dist/chunks/{chunk-LFTZNUXB.js.map → chunk-DUPBXBYE.js.map} +1 -1
  21. package/dist/chunks/{chunk-HI3YK2SO.js → chunk-F2DMEJEK.js} +2 -2
  22. package/dist/chunks/{chunk-RCXOOBLX.js → chunk-K4TFAHGC.js} +1 -1
  23. package/dist/chunks/{chunk-RCXOOBLX.js.map → chunk-K4TFAHGC.js.map} +1 -1
  24. package/dist/chunks/{chunk-DXNE2CFX.js → chunk-MCE6STZR.js} +2 -2
  25. package/dist/chunks/{chunk-DXNE2CFX.js.map → chunk-MCE6STZR.js.map} +1 -1
  26. package/dist/chunks/{chunk-SFYSQ52W.js → chunk-MNCPMOHJ.js} +2 -2
  27. package/dist/chunks/chunk-NFH2U74B.js +2 -0
  28. package/dist/chunks/{chunk-PUREF4BM.js → chunk-NPV7SRJD.js} +2 -2
  29. package/dist/chunks/{chunk-PUREF4BM.js.map → chunk-NPV7SRJD.js.map} +1 -1
  30. package/dist/chunks/{chunk-62AHPP6H.js → chunk-OKRGO7XA.js} +2 -2
  31. package/dist/chunks/{chunk-62AHPP6H.js.map → chunk-OKRGO7XA.js.map} +1 -1
  32. package/dist/chunks/{chunk-FWVXBJ64.js → chunk-P7VMOTUM.js} +2 -2
  33. package/dist/chunks/{chunk-FWVXBJ64.js.map → chunk-P7VMOTUM.js.map} +2 -2
  34. package/dist/chunks/{chunk-AWGMTI73.js → chunk-RU4WSKBO.js} +2 -2
  35. package/dist/chunks/{chunk-ZG2CQXOW.js → chunk-TGSDXZXI.js} +1 -1
  36. package/dist/chunks/{chunk-ZG2CQXOW.js.map → chunk-TGSDXZXI.js.map} +1 -1
  37. package/dist/chunks/{chunk-JSRGX4TC.js → chunk-UOFWYS6T.js} +1 -1
  38. package/dist/chunks/{chunk-JSRGX4TC.js.map → chunk-UOFWYS6T.js.map} +1 -1
  39. package/dist/chunks/{chunk-Q3BXNKEL.js → chunk-WGTLNVST.js} +2 -2
  40. package/dist/chunks/{chunk-Q3BXNKEL.js.map → chunk-WGTLNVST.js.map} +3 -3
  41. package/dist/chunks/{chunk-WJGCVNGH.js → chunk-XQFBLJU5.js} +2 -2
  42. package/dist/chunks/chunk-Y5DNBFDY.js +3 -0
  43. package/dist/chunks/chunk-Y5DNBFDY.js.map +7 -0
  44. package/dist/chunks/{chunk-WY5W5X62.js → chunk-ZAYC5OMQ.js} +2 -2
  45. package/dist/chunks/{chunk-WY5W5X62.js.map → chunk-ZAYC5OMQ.js.map} +1 -1
  46. package/dist/chunks/{renderSvg-Z7YIXVQ5.js → renderSvg-7G6NWBXF.js} +2 -2
  47. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -4
  48. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  49. package/package.json +2 -2
  50. package/src/GraphGenomeView/pane/loadActions.ts +1 -1
  51. package/src/version.ts +1 -1
  52. package/dist/chunks/chunk-55DIX25J.js +0 -3
  53. package/dist/chunks/chunk-55DIX25J.js.map +0 -7
  54. package/dist/chunks/chunk-J3AXN7JQ.js +0 -2
  55. /package/dist/chunks/{GraphGenomeView-UCOAMRF7.js.map → GraphGenomeView-P3XMSKUQ.js.map} +0 -0
  56. /package/dist/chunks/{GraphTrackSettingsDialog-MR7X75EY.js.map → GraphTrackSettingsDialog-UTYH6HEC.js.map} +0 -0
  57. /package/dist/chunks/{HighlightColorDialog-ZBAZDYIR.js.map → HighlightColorDialog-G6AFRYUD.js.map} +0 -0
  58. /package/dist/chunks/{LinearGraphDisplay-AJ5OZN27.js.map → LinearGraphDisplay-O4SQSXJJ.js.map} +0 -0
  59. /package/dist/chunks/{MinigraphBubbleAdapter-PEQK5NII.js.map → MinigraphBubbleAdapter-3NJ2VLN2.js.map} +0 -0
  60. /package/dist/chunks/{RgfaTabixAdapter-Q63YLPK4.js.map → RgfaTabixAdapter-55DGDID2.js.map} +0 -0
  61. /package/dist/chunks/{WalkTabixSyntenyAdapter-N5PFI4LS.js.map → WalkTabixSyntenyAdapter-NHNSZZBX.js.map} +0 -0
  62. /package/dist/chunks/{chunk-HI3YK2SO.js.map → chunk-F2DMEJEK.js.map} +0 -0
  63. /package/dist/chunks/{chunk-SFYSQ52W.js.map → chunk-MNCPMOHJ.js.map} +0 -0
  64. /package/dist/chunks/{chunk-J3AXN7JQ.js.map → chunk-NFH2U74B.js.map} +0 -0
  65. /package/dist/chunks/{chunk-AWGMTI73.js.map → chunk-RU4WSKBO.js.map} +0 -0
  66. /package/dist/chunks/{chunk-WJGCVNGH.js.map → chunk-XQFBLJU5.js.map} +0 -0
  67. /package/dist/chunks/{renderSvg-Z7YIXVQ5.js.map → renderSvg-7G6NWBXF.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{h as B,k as M,n as F}from"./chunk-ZG2CQXOW.js";import{b as O,h as _}from"./chunk-2XZYJLCE.js";import{H as b,N as A}from"./chunk-Q3BXNKEL.js";import{e as R}from"./chunk-YU7T5WOQ.js";import{D as P,E,H as m,d as v,o as T,q as I,r as L,s as w,t as N,w as x,y as D,z as G}from"./chunk-UGCNPRKC.js";import{b as t,c as i,d as k}from"./chunk-JMBDTNUR.js";var S=[{value:0,label:"Fastest"},{value:1,label:"Fast"},{value:2,label:"Default"},{value:3,label:"Fine"},{value:4,label:"Best"}];function f({label:o,value:n,options:e,testId:s,size:c,sx:d,disabled:a,title:h,shown:g,onChange:Q}){let C=R();return i(w,{size:c,sx:d,disabled:a,title:h,children:[t(x,{id:C,shrink:!0,children:o}),t(P,{labelId:C,value:n,label:o,notched:!0,displayEmpty:!0,"data-testid":s,renderValue:l=>g??e.find(z=>z.value===l)?.label??l,onChange:l=>{Q(l.target.value)},children:e.map(l=>t(G,{value:l.value,disabled:l.disabled,title:l.disabled?void 0:l.description,children:t(D,{primary:l.label,secondary:l.disabled?l.description:void 0})},l.value))})]})}var u=F()({section:{marginBottom:24},group:{marginBottom:16},heading:{marginBottom:8}});function r({warn:o=!1,children:n}){return t(m,{variant:"caption",component:"div",color:o?"warning.main":"text.secondary",children:n})}function y({title:o,children:n}){let{classes:e}=u();return i("section",{className:e.group,children:[t(m,{variant:"subtitle1",className:e.heading,children:o}),n]})}function U({label:o,checked:n,onChange:e,children:s}){let{classes:c}=u();return i("div",{className:c.section,children:[t(N,{control:t(E,{checked:n,onChange:d=>{e(d.target.checked)}}),label:o}),s]})}function p({children:o,...n}){let{classes:e}=u();return i("div",{className:e.section,children:[t(f,{sx:{minWidth:200},...n}),o]})}var Y=[5e3,2e4,5e4,1e5];function H(o){return[...new Set([...Y,o])].sort((n,e)=>n-e).map(n=>({value:String(n),label:n.toLocaleString()}))}function W({label:o,choices:n,stored:e,auto:s,testId:c,onChange:d,children:a}){return n.length>0?t(p,{label:o,value:n.some(h=>h.trackId===e)?e:"",options:[{value:"",label:`Automatic (${s?.name??"none"})`},...n.map(({trackId:h,name:g})=>({value:h,label:g}))],testId:c,onChange:d,children:a}):null}var $=k(function(n){let{model:e,onClose:s,children:c}=n,{classes:d}=u();return i(v,{open:!0,onClose:s,title:"Graph settings",children:[i(L,{children:[i(y,{title:"Subgraph",children:[c,t(p,{label:"Node limit",value:String(e.maxGraphNodes),options:H(e.maxGraphNodes),testId:"graph-node-limit-select",onChange:a=>{e.setMaxGraphNodes(Number(a))},children:t(r,{children:"The most nodes a layout draws; past it the graph is declined. Walk rows take no limit."})})]}),i(y,{title:"Drawing",children:[e.anchorPaths.length>1?t(p,{label:"Reference path",value:e.activeReferencePath??"",options:e.anchorPaths.map(({name:a})=>({value:a,label:a})),testId:"graph-reference-path-select",onChange:a=>{e.setReferencePath(a),e.recomputeLayout()},children:t(r,{children:"The path the anchored layouts place x along"})}):null,t(p,{label:"Node width",value:e.nodeWidth,options:A,testId:"graph-node-width-select",onChange:a=>{e.setNodeWidth(a)},children:t(r,{children:"Depth as width. In a cut with walks, depth is how many haplotypes carry the node."})}),i(U,{label:"Draw paths",checked:e.drawPaths,onChange:a=>{e.setLayer("paths",a)},children:[t(r,{children:"Color each node by the paths through it, one lane per path"}),e.drawPaths&&!e.effectiveDrawPaths?t(r,{warn:!0,children:e.pathCount>b?`Off: ${e.pathCount.toLocaleString()} paths is past the ${b} this can tell apart`:"Off: this graph states no paths"}):null]}),t(W,{label:"Gene track",choices:e.geneTrackChoices,stored:e.geneTrackId,auto:M(e.geneTrackChoices,""),testId:"graph-gene-track-select",onChange:a=>{e.setGeneTrackId(a)},children:t(r,{children:"Where genes on the backbone come from"})}),t(W,{label:"Repeat track",choices:e.repeatTrackChoices,stored:e.repeatTrackId,auto:B(e.repeatTrackChoices,""),testId:"graph-repeat-track-select",onChange:a=>{e.setRepeatTrackId(a)},children:t(r,{children:"The tandem repeat annotation walk rows measure and tile by"})})]}),i(y,{title:"Force-directed layout",children:[e.hasGraph&&!e.usesLayoutEngine?t("div",{className:d.section,children:t(r,{warn:!0,children:"No effect on the current layout until Layout is Force-directed"})}):null,t(p,{label:"Engine",value:e.layoutEngine,options:O,testId:"graph-layout-engine-select",onChange:a=>{e.setLayoutEngine(a)},children:t(r,{children:"Stress keeps the reference straight, so a zoom keeps the picture; FMMM lets the whole graph settle."})}),t(p,{label:"Layout quality",value:String(e.layoutQuality),options:S.map(a=>({value:String(a.value),label:a.label})),testId:"graph-layout-quality-select",onChange:a=>{e.setLayoutQuality(Number(a))},children:t(r,{children:"The engine's iteration budget; higher is slower"})}),t(p,{label:"Bubble spread",value:e.bubbleSpread,options:_,testId:"graph-bubble-spread-select",onChange:a=>{e.setBubbleSpread(a)},children:t(r,{children:"How far the layout opens a bubble"})}),e.layoutEngine==="stress"?null:t(U,{label:"Linear layout",checked:e.linearLayout,onChange:a=>{e.setLinearLayout(a)},children:t(r,{children:"Keeps a chain of nodes on one line where it can"})})]})]}),t(I,{children:t(T,{variant:"contained",color:"primary",onClick:s,children:"Close"})})]})}),he=$;export{f as a,he as b};
2
- //# sourceMappingURL=chunk-WY5W5X62.js.map
1
+ import{h as B,k as M,n as F}from"./chunk-TGSDXZXI.js";import{b as O,h as _}from"./chunk-CXOMX2I6.js";import{H as b,N as A}from"./chunk-WGTLNVST.js";import{e as R}from"./chunk-YU7T5WOQ.js";import{D as P,E,H as m,d as v,o as T,q as I,r as L,s as w,t as N,w as x,y as D,z as G}from"./chunk-UGCNPRKC.js";import{b as t,c as i,d as k}from"./chunk-JMBDTNUR.js";var S=[{value:0,label:"Fastest"},{value:1,label:"Fast"},{value:2,label:"Default"},{value:3,label:"Fine"},{value:4,label:"Best"}];function f({label:o,value:n,options:e,testId:s,size:c,sx:d,disabled:a,title:h,shown:g,onChange:Q}){let C=R();return i(w,{size:c,sx:d,disabled:a,title:h,children:[t(x,{id:C,shrink:!0,children:o}),t(P,{labelId:C,value:n,label:o,notched:!0,displayEmpty:!0,"data-testid":s,renderValue:l=>g??e.find(z=>z.value===l)?.label??l,onChange:l=>{Q(l.target.value)},children:e.map(l=>t(G,{value:l.value,disabled:l.disabled,title:l.disabled?void 0:l.description,children:t(D,{primary:l.label,secondary:l.disabled?l.description:void 0})},l.value))})]})}var u=F()({section:{marginBottom:24},group:{marginBottom:16},heading:{marginBottom:8}});function r({warn:o=!1,children:n}){return t(m,{variant:"caption",component:"div",color:o?"warning.main":"text.secondary",children:n})}function y({title:o,children:n}){let{classes:e}=u();return i("section",{className:e.group,children:[t(m,{variant:"subtitle1",className:e.heading,children:o}),n]})}function U({label:o,checked:n,onChange:e,children:s}){let{classes:c}=u();return i("div",{className:c.section,children:[t(N,{control:t(E,{checked:n,onChange:d=>{e(d.target.checked)}}),label:o}),s]})}function p({children:o,...n}){let{classes:e}=u();return i("div",{className:e.section,children:[t(f,{sx:{minWidth:200},...n}),o]})}var Y=[5e3,2e4,5e4,1e5];function H(o){return[...new Set([...Y,o])].sort((n,e)=>n-e).map(n=>({value:String(n),label:n.toLocaleString()}))}function W({label:o,choices:n,stored:e,auto:s,testId:c,onChange:d,children:a}){return n.length>0?t(p,{label:o,value:n.some(h=>h.trackId===e)?e:"",options:[{value:"",label:`Automatic (${s?.name??"none"})`},...n.map(({trackId:h,name:g})=>({value:h,label:g}))],testId:c,onChange:d,children:a}):null}var $=k(function(n){let{model:e,onClose:s,children:c}=n,{classes:d}=u();return i(v,{open:!0,onClose:s,title:"Graph settings",children:[i(L,{children:[i(y,{title:"Subgraph",children:[c,t(p,{label:"Node limit",value:String(e.maxGraphNodes),options:H(e.maxGraphNodes),testId:"graph-node-limit-select",onChange:a=>{e.setMaxGraphNodes(Number(a))},children:t(r,{children:"The most nodes a layout draws; past it the graph is declined. Walk rows take no limit."})})]}),i(y,{title:"Drawing",children:[e.anchorPaths.length>1?t(p,{label:"Reference path",value:e.activeReferencePath??"",options:e.anchorPaths.map(({name:a})=>({value:a,label:a})),testId:"graph-reference-path-select",onChange:a=>{e.setReferencePath(a),e.recomputeLayout()},children:t(r,{children:"The path the anchored layouts place x along"})}):null,t(p,{label:"Node width",value:e.nodeWidth,options:A,testId:"graph-node-width-select",onChange:a=>{e.setNodeWidth(a)},children:t(r,{children:"Depth as width. In a cut with walks, depth is how many haplotypes carry the node."})}),i(U,{label:"Draw paths",checked:e.drawPaths,onChange:a=>{e.setLayer("paths",a)},children:[t(r,{children:"Color each node by the paths through it, one lane per path"}),e.drawPaths&&!e.effectiveDrawPaths?t(r,{warn:!0,children:e.pathCount>b?`Off: ${e.pathCount.toLocaleString()} paths is past the ${b} this can tell apart`:"Off: this graph states no paths"}):null]}),t(W,{label:"Gene track",choices:e.geneTrackChoices,stored:e.geneTrackId,auto:M(e.geneTrackChoices,""),testId:"graph-gene-track-select",onChange:a=>{e.setGeneTrackId(a)},children:t(r,{children:"Where genes on the backbone come from"})}),t(W,{label:"Repeat track",choices:e.repeatTrackChoices,stored:e.repeatTrackId,auto:B(e.repeatTrackChoices,""),testId:"graph-repeat-track-select",onChange:a=>{e.setRepeatTrackId(a)},children:t(r,{children:"The tandem repeat annotation walk rows measure and tile by"})})]}),i(y,{title:"Force-directed layout",children:[e.hasGraph&&!e.usesLayoutEngine?t("div",{className:d.section,children:t(r,{warn:!0,children:"No effect on the current layout until Layout is Force-directed"})}):null,t(p,{label:"Engine",value:e.layoutEngine,options:O,testId:"graph-layout-engine-select",onChange:a=>{e.setLayoutEngine(a)},children:t(r,{children:"Stress keeps the reference straight, so a zoom keeps the picture; FMMM lets the whole graph settle."})}),t(p,{label:"Layout quality",value:String(e.layoutQuality),options:S.map(a=>({value:String(a.value),label:a.label})),testId:"graph-layout-quality-select",onChange:a=>{e.setLayoutQuality(Number(a))},children:t(r,{children:"The engine's iteration budget; higher is slower"})}),t(p,{label:"Bubble spread",value:e.bubbleSpread,options:_,testId:"graph-bubble-spread-select",onChange:a=>{e.setBubbleSpread(a)},children:t(r,{children:"How far the layout opens a bubble"})}),e.layoutEngine==="stress"?null:t(U,{label:"Linear layout",checked:e.linearLayout,onChange:a=>{e.setLinearLayout(a)},children:t(r,{children:"Keeps a chain of nodes on one line where it can"})})]})]}),t(I,{children:t(T,{variant:"contained",color:"primary",onClick:s,children:"Close"})})]})}),he=$;export{f as a,he as b};
2
+ //# sourceMappingURL=chunk-ZAYC5OMQ.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-K5SIJGAE.js", "../../src/GraphGenomeView/components/LabelledSelect.tsx", "../../src/GraphGenomeView/components/GraphSettingsDialog.tsx"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.7.3/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-K5SIJGAE.js", "../../src/GraphGenomeView/components/LabelledSelect.tsx", "../../src/GraphGenomeView/components/GraphSettingsDialog.tsx"],
4
4
  "sourcesContent": ["// src/layoutQualities.ts\nvar LAYOUT_QUALITIES = [\n { value: 0, label: \"Fastest\" },\n { value: 1, label: \"Fast\" },\n { value: 2, label: \"Default\" },\n { value: 3, label: \"Fine\" },\n { value: 4, label: \"Best\" }\n];\n\nexport {\n LAYOUT_QUALITIES\n};\n", "import { useId } from 'react'\n\nimport {\n FormControl,\n InputLabel,\n ListItemText,\n MenuItem,\n Select,\n} from '@mui/material'\n\nimport type { SxProps } from '@mui/material'\n\ninterface SelectOption<T extends string> {\n value: T\n label: string\n // an option's tooltip, and the reason under a disabled one, whose tooltip\n // cannot open\n description?: string\n disabled?: boolean\n}\n\n// One dropdown with its label tied to it, so a screen reader names the combobox\nexport default function LabelledSelect<T extends string>({\n label,\n value,\n options,\n testId,\n size,\n sx,\n disabled,\n title,\n shown,\n onChange,\n}: {\n label: string\n value: T\n options: readonly SelectOption<T>[]\n testId?: string\n size?: 'small' | 'medium'\n sx?: SxProps\n disabled?: boolean\n title?: string\n // what the closed select reads, when not the picked option's label\n shown?: string\n onChange: (value: T) => void\n}) {\n const labelId = useId()\n return (\n <FormControl size={size} sx={sx} disabled={disabled} title={title}>\n <InputLabel id={labelId} shrink>\n {label}\n </InputLabel>\n <Select\n labelId={labelId}\n value={value}\n label={label}\n notched\n displayEmpty\n data-testid={testId}\n renderValue={picked =>\n shown ?? options.find(o => o.value === picked)?.label ?? picked\n }\n onChange={e => {\n onChange(e.target.value as T)\n }}\n >\n {options.map(o => (\n <MenuItem\n key={o.value}\n value={o.value}\n disabled={o.disabled}\n title={o.disabled ? undefined : o.description}\n >\n <ListItemText\n primary={o.label}\n secondary={o.disabled ? o.description : undefined}\n />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )\n}\n", "import type { ReactNode } from 'react'\n\nimport { BUBBLE_SPREADS } from '@jbrowse/bandage-core/bubbleSpreads'\nimport { LAYOUT_ENGINES } from '@jbrowse/bandage-core/layoutEngines'\nimport { LAYOUT_QUALITIES } from '@jbrowse/bandage-core/layoutQualities'\nimport { NODE_WIDTHS } from '@jbrowse/bandage-core/nodeWidths'\nimport { MAX_PATH_COLORS } from '@jbrowse/bandage-core/pathColors'\nimport { Dialog } from '@jbrowse/core/ui'\nimport {\n Button,\n DialogActions,\n DialogContent,\n FormControlLabel,\n Switch,\n Typography,\n} from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\nimport LabelledSelect from './LabelledSelect'\nimport { pickGeneTrack } from '../genes/geneFeatures'\nimport { pickRepeatTrack } from '../repeats/repeatFeatures'\n\nimport type { GraphPaneModel } from '../model'\n\nconst useStyles = makeStyles()({\n section: {\n marginBottom: 24,\n },\n group: {\n marginBottom: 16,\n },\n heading: {\n marginBottom: 8,\n },\n})\n\nfunction Caption({\n warn = false,\n children,\n}: {\n warn?: boolean\n children: ReactNode\n}) {\n return (\n <Typography\n variant=\"caption\"\n component=\"div\"\n color={warn ? 'warning.main' : 'text.secondary'}\n >\n {children}\n </Typography>\n )\n}\n\nfunction Group({ title, children }: { title: string; children: ReactNode }) {\n const { classes } = useStyles()\n return (\n <section className={classes.group}>\n <Typography variant=\"subtitle1\" className={classes.heading}>\n {title}\n </Typography>\n {children}\n </section>\n )\n}\n\nfunction SettingSwitch({\n label,\n checked,\n onChange,\n children,\n}: {\n label: string\n checked: boolean\n onChange: (checked: boolean) => void\n children?: ReactNode\n}) {\n const { classes } = useStyles()\n return (\n <div className={classes.section}>\n <FormControlLabel\n control={\n <Switch\n checked={checked}\n onChange={e => {\n onChange(e.target.checked)\n }}\n />\n }\n label={label}\n />\n {children}\n </div>\n )\n}\n\n// one dropdown setting, at the dialog's width, and its caption\nfunction SettingSelect<T extends string>({\n children,\n ...props\n}: Omit<Parameters<typeof LabelledSelect<T>>[0], 'size' | 'sx'> & {\n children?: ReactNode\n}) {\n const { classes } = useStyles()\n return (\n <div className={classes.section}>\n <LabelledSelect sx={{ minWidth: 200 }} {...props} />\n {children}\n </div>\n )\n}\n\nconst NODE_LIMITS = [5000, 20_000, 50_000, 100_000]\n\n// the presets, with a limit a session states among them\nfunction nodeLimitOptions(current: number) {\n return [...new Set([...NODE_LIMITS, current])]\n .sort((a, b) => a - b)\n .map(limit => ({ value: String(limit), label: limit.toLocaleString() }))\n}\n\ninterface NamedTrack {\n trackId: string\n name: string\n}\n\n// '' leaves the pick to the heuristic, so a session can go back to it\nfunction TrackPickSetting({\n label,\n choices,\n stored,\n auto,\n testId,\n onChange,\n children,\n}: {\n label: string\n choices: NamedTrack[]\n stored: string\n auto: NamedTrack | undefined\n testId: string\n onChange: (trackId: string) => void\n children: ReactNode\n}) {\n return choices.length > 0 ? (\n <SettingSelect\n label={label}\n value={choices.some(t => t.trackId === stored) ? stored : ''}\n options={[\n { value: '', label: `Automatic (${auto?.name ?? 'none'})` },\n ...choices.map(({ trackId, name }) => ({\n value: trackId,\n label: name,\n })),\n ]}\n testId={testId}\n onChange={onChange}\n >\n {children}\n </SettingSelect>\n ) : null\n}\n\n// Toggles the menus already offer (halos, genes, color) stay out of here.\n// `children` is the host's own part of the subgraph group.\nconst GraphSettingsDialog = observer(function GraphSettingsDialog(props: {\n model: GraphPaneModel\n onClose: () => void\n children?: ReactNode\n}) {\n const { model, onClose, children } = props\n const { classes } = useStyles()\n\n return (\n <Dialog open onClose={onClose} title=\"Graph settings\">\n <DialogContent>\n <Group title=\"Subgraph\">\n {children}\n <SettingSelect\n label=\"Node limit\"\n value={String(model.maxGraphNodes)}\n options={nodeLimitOptions(model.maxGraphNodes)}\n testId=\"graph-node-limit-select\"\n onChange={limit => {\n model.setMaxGraphNodes(Number(limit))\n }}\n >\n <Caption>\n The most nodes a layout draws; past it the graph is declined. Walk\n rows take no limit.\n </Caption>\n </SettingSelect>\n </Group>\n\n <Group title=\"Drawing\">\n {model.anchorPaths.length > 1 ? (\n <SettingSelect\n label=\"Reference path\"\n value={model.activeReferencePath ?? ''}\n options={model.anchorPaths.map(({ name }) => ({\n value: name,\n label: name,\n }))}\n testId=\"graph-reference-path-select\"\n onChange={name => {\n model.setReferencePath(name)\n void model.recomputeLayout()\n }}\n >\n <Caption>The path the anchored layouts place x along</Caption>\n </SettingSelect>\n ) : null}\n\n <SettingSelect\n label=\"Node width\"\n value={model.nodeWidth}\n options={NODE_WIDTHS}\n testId=\"graph-node-width-select\"\n onChange={width => {\n model.setNodeWidth(width)\n }}\n >\n <Caption>\n Depth as width. In a cut with walks, depth is how many haplotypes\n carry the node.\n </Caption>\n </SettingSelect>\n\n <SettingSwitch\n label=\"Draw paths\"\n checked={model.drawPaths}\n onChange={draw => {\n model.setLayer('paths', draw)\n }}\n >\n <Caption>\n Color each node by the paths through it, one lane per path\n </Caption>\n {model.drawPaths && !model.effectiveDrawPaths ? (\n <Caption warn>\n {model.pathCount > MAX_PATH_COLORS\n ? `Off: ${model.pathCount.toLocaleString()} paths is past the ${MAX_PATH_COLORS} this can tell apart`\n : 'Off: this graph states no paths'}\n </Caption>\n ) : null}\n </SettingSwitch>\n\n <TrackPickSetting\n label=\"Gene track\"\n choices={model.geneTrackChoices}\n stored={model.geneTrackId}\n auto={pickGeneTrack(model.geneTrackChoices, '')}\n testId=\"graph-gene-track-select\"\n onChange={trackId => {\n model.setGeneTrackId(trackId)\n }}\n >\n <Caption>Where genes on the backbone come from</Caption>\n </TrackPickSetting>\n\n <TrackPickSetting\n label=\"Repeat track\"\n choices={model.repeatTrackChoices}\n stored={model.repeatTrackId}\n auto={pickRepeatTrack(model.repeatTrackChoices, '')}\n testId=\"graph-repeat-track-select\"\n onChange={trackId => {\n model.setRepeatTrackId(trackId)\n }}\n >\n <Caption>\n The tandem repeat annotation walk rows measure and tile by\n </Caption>\n </TrackPickSetting>\n </Group>\n\n <Group title=\"Force-directed layout\">\n {model.hasGraph && !model.usesLayoutEngine ? (\n <div className={classes.section}>\n <Caption warn>\n No effect on the current layout until Layout is Force-directed\n </Caption>\n </div>\n ) : null}\n\n <SettingSelect\n label=\"Engine\"\n value={model.layoutEngine}\n options={LAYOUT_ENGINES}\n testId=\"graph-layout-engine-select\"\n onChange={engine => {\n model.setLayoutEngine(engine)\n }}\n >\n <Caption>\n Stress keeps the reference straight, so a zoom keeps the picture;\n FMMM lets the whole graph settle.\n </Caption>\n </SettingSelect>\n\n <SettingSelect\n label=\"Layout quality\"\n value={String(model.layoutQuality)}\n options={LAYOUT_QUALITIES.map(q => ({\n value: String(q.value),\n label: q.label,\n }))}\n testId=\"graph-layout-quality-select\"\n onChange={quality => {\n model.setLayoutQuality(Number(quality))\n }}\n >\n <Caption>\n The engine&apos;s iteration budget; higher is slower\n </Caption>\n </SettingSelect>\n\n <SettingSelect\n label=\"Bubble spread\"\n value={model.bubbleSpread}\n options={BUBBLE_SPREADS}\n testId=\"graph-bubble-spread-select\"\n onChange={spread => {\n model.setBubbleSpread(spread)\n }}\n >\n <Caption>How far the layout opens a bubble</Caption>\n </SettingSelect>\n\n {model.layoutEngine === 'stress' ? null : (\n <SettingSwitch\n label=\"Linear layout\"\n checked={model.linearLayout}\n onChange={linear => {\n model.setLinearLayout(linear)\n }}\n >\n <Caption>Keeps a chain of nodes on one line where it can</Caption>\n </SettingSwitch>\n )}\n </Group>\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n})\n\nexport default GraphSettingsDialog\n"],
5
5
  "mappings": "kWACA,IAAIA,EAAmB,CACrB,CAAE,MAAO,EAAG,MAAO,SAAU,EAC7B,CAAE,MAAO,EAAG,MAAO,MAAO,EAC1B,CAAE,MAAO,EAAG,MAAO,SAAU,EAC7B,CAAE,MAAO,EAAG,MAAO,MAAO,EAC1B,CAAE,MAAO,EAAG,MAAO,MAAO,CAC5B,ECee,SAARC,EAAkD,CACvD,MAAAC,EACA,MAAAC,EACA,QAAAC,EACA,OAAAC,EACA,KAAAC,EACA,GAAAC,EACA,SAAAC,EACA,MAAAC,EACA,MAAAC,EACA,SAAAC,CACF,EAYG,CACD,IAAMC,EAAUC,EAAM,EACtB,OACEC,EAACC,EAAA,CAAY,KAAMT,EAAM,GAAIC,EAAI,SAAUC,EAAU,MAAOC,EAC1D,UAAAO,EAACC,EAAA,CAAW,GAAIL,EAAS,OAAM,GAC5B,SAAAV,EACH,EACAc,EAACE,EAAA,CACC,QAASN,EACT,MAAOT,EACP,MAAOD,EACP,QAAO,GACP,aAAY,GACZ,cAAaG,EACb,YAAac,GACXT,GAASN,EAAQ,KAAKgB,GAAKA,EAAE,QAAUD,CAAM,GAAG,OAASA,EAE3D,SAAUE,GAAK,CACbV,EAASU,EAAE,OAAO,KAAU,CAC9B,EAEC,SAAAjB,EAAQ,IAAIgB,GACXJ,EAACM,EAAA,CAEC,MAAOF,EAAE,MACT,SAAUA,EAAE,SACZ,MAAOA,EAAE,SAAW,OAAYA,EAAE,YAElC,SAAAJ,EAACO,EAAA,CACC,QAASH,EAAE,MACX,UAAWA,EAAE,SAAWA,EAAE,YAAc,OAC1C,GARKA,EAAE,KAST,CACD,EACH,GACF,CAEJ,CCzDA,IAAMI,EAAYC,EAAW,EAAE,CAC7B,QAAS,CACP,aAAc,EAChB,EACA,MAAO,CACL,aAAc,EAChB,EACA,QAAS,CACP,aAAc,CAChB,CACF,CAAC,EAED,SAASC,EAAQ,CACf,KAAAC,EAAO,GACP,SAAAC,CACF,EAGG,CACD,OACEC,EAACC,EAAA,CACC,QAAQ,UACR,UAAU,MACV,MAAOH,EAAO,eAAiB,iBAE9B,SAAAC,EACH,CAEJ,CAEA,SAASG,EAAM,CAAE,MAAAC,EAAO,SAAAJ,CAAS,EAA2C,CAC1E,GAAM,CAAE,QAAAK,CAAQ,EAAIT,EAAU,EAC9B,OACEU,EAAC,WAAQ,UAAWD,EAAQ,MAC1B,UAAAJ,EAACC,EAAA,CAAW,QAAQ,YAAY,UAAWG,EAAQ,QAChD,SAAAD,EACH,EACCJ,GACH,CAEJ,CAEA,SAASO,EAAc,CACrB,MAAAC,EACA,QAAAC,EACA,SAAAC,EACA,SAAAV,CACF,EAKG,CACD,GAAM,CAAE,QAAAK,CAAQ,EAAIT,EAAU,EAC9B,OACEU,EAAC,OAAI,UAAWD,EAAQ,QACtB,UAAAJ,EAACU,EAAA,CACC,QACEV,EAACW,EAAA,CACC,QAASH,EACT,SAAUI,GAAK,CACbH,EAASG,EAAE,OAAO,OAAO,CAC3B,EACF,EAEF,MAAOL,EACT,EACCR,GACH,CAEJ,CAGA,SAASc,EAAgC,CACvC,SAAAd,EACA,GAAGe,CACL,EAEG,CACD,GAAM,CAAE,QAAAV,CAAQ,EAAIT,EAAU,EAC9B,OACEU,EAAC,OAAI,UAAWD,EAAQ,QACtB,UAAAJ,EAACe,EAAA,CAAe,GAAI,CAAE,SAAU,GAAI,EAAI,GAAGD,EAAO,EACjDf,GACH,CAEJ,CAEA,IAAMiB,EAAc,CAAC,IAAM,IAAQ,IAAQ,GAAO,EAGlD,SAASC,EAAiBC,EAAiB,CACzC,MAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAGF,EAAaE,CAAO,CAAC,CAAC,EAC1C,KAAK,CAACC,EAAGC,IAAMD,EAAIC,CAAC,EACpB,IAAIC,IAAU,CAAE,MAAO,OAAOA,CAAK,EAAG,MAAOA,EAAM,eAAe,CAAE,EAAE,CAC3E,CAQA,SAASC,EAAiB,CACxB,MAAAf,EACA,QAAAgB,EACA,OAAAC,EACA,KAAAC,EACA,OAAAC,EACA,SAAAjB,EACA,SAAAV,CACF,EAQG,CACD,OAAOwB,EAAQ,OAAS,EACtBvB,EAACa,EAAA,CACC,MAAON,EACP,MAAOgB,EAAQ,KAAKI,GAAKA,EAAE,UAAYH,CAAM,EAAIA,EAAS,GAC1D,QAAS,CACP,CAAE,MAAO,GAAI,MAAO,cAAcC,GAAM,MAAQ,MAAM,GAAI,EAC1D,GAAGF,EAAQ,IAAI,CAAC,CAAE,QAAAK,EAAS,KAAAC,CAAK,KAAO,CACrC,MAAOD,EACP,MAAOC,CACT,EAAE,CACJ,EACA,OAAQH,EACR,SAAUjB,EAET,SAAAV,EACH,EACE,IACN,CAIA,IAAM+B,EAAsBC,EAAS,SAA6BjB,EAI/D,CACD,GAAM,CAAE,MAAAkB,EAAO,QAAAC,EAAS,SAAAlC,CAAS,EAAIe,EAC/B,CAAE,QAAAV,CAAQ,EAAIT,EAAU,EAE9B,OACEU,EAAC6B,EAAA,CAAO,KAAI,GAAC,QAASD,EAAS,MAAM,iBACnC,UAAA5B,EAAC8B,EAAA,CACC,UAAA9B,EAACH,EAAA,CAAM,MAAM,WACV,UAAAH,EACDC,EAACa,EAAA,CACC,MAAM,aACN,MAAO,OAAOmB,EAAM,aAAa,EACjC,QAASf,EAAiBe,EAAM,aAAa,EAC7C,OAAO,0BACP,SAAUX,GAAS,CACjBW,EAAM,iBAAiB,OAAOX,CAAK,CAAC,CACtC,EAEA,SAAArB,EAACH,EAAA,CAAQ,kGAGT,EACF,GACF,EAEAQ,EAACH,EAAA,CAAM,MAAM,UACV,UAAA8B,EAAM,YAAY,OAAS,EAC1BhC,EAACa,EAAA,CACC,MAAM,iBACN,MAAOmB,EAAM,qBAAuB,GACpC,QAASA,EAAM,YAAY,IAAI,CAAC,CAAE,KAAAH,CAAK,KAAO,CAC5C,MAAOA,EACP,MAAOA,CACT,EAAE,EACF,OAAO,8BACP,SAAUA,GAAQ,CAChBG,EAAM,iBAAiBH,CAAI,EACtBG,EAAM,gBAAgB,CAC7B,EAEA,SAAAhC,EAACH,EAAA,CAAQ,uDAA2C,EACtD,EACE,KAEJG,EAACa,EAAA,CACC,MAAM,aACN,MAAOmB,EAAM,UACb,QAASI,EACT,OAAO,0BACP,SAAUC,GAAS,CACjBL,EAAM,aAAaK,CAAK,CAC1B,EAEA,SAAArC,EAACH,EAAA,CAAQ,6FAGT,EACF,EAEAQ,EAACC,EAAA,CACC,MAAM,aACN,QAAS0B,EAAM,UACf,SAAUM,GAAQ,CAChBN,EAAM,SAAS,QAASM,CAAI,CAC9B,EAEA,UAAAtC,EAACH,EAAA,CAAQ,sEAET,EACCmC,EAAM,WAAa,CAACA,EAAM,mBACzBhC,EAACH,EAAA,CAAQ,KAAI,GACV,SAAAmC,EAAM,UAAYO,EACf,QAAQP,EAAM,UAAU,eAAe,CAAC,sBAAsBO,CAAe,uBAC7E,kCACN,EACE,MACN,EAEAvC,EAACsB,EAAA,CACC,MAAM,aACN,QAASU,EAAM,iBACf,OAAQA,EAAM,YACd,KAAMQ,EAAcR,EAAM,iBAAkB,EAAE,EAC9C,OAAO,0BACP,SAAUJ,GAAW,CACnBI,EAAM,eAAeJ,CAAO,CAC9B,EAEA,SAAA5B,EAACH,EAAA,CAAQ,iDAAqC,EAChD,EAEAG,EAACsB,EAAA,CACC,MAAM,eACN,QAASU,EAAM,mBACf,OAAQA,EAAM,cACd,KAAMS,EAAgBT,EAAM,mBAAoB,EAAE,EAClD,OAAO,4BACP,SAAUJ,GAAW,CACnBI,EAAM,iBAAiBJ,CAAO,CAChC,EAEA,SAAA5B,EAACH,EAAA,CAAQ,sEAET,EACF,GACF,EAEAQ,EAACH,EAAA,CAAM,MAAM,wBACV,UAAA8B,EAAM,UAAY,CAACA,EAAM,iBACxBhC,EAAC,OAAI,UAAWI,EAAQ,QACtB,SAAAJ,EAACH,EAAA,CAAQ,KAAI,GAAC,0EAEd,EACF,EACE,KAEJG,EAACa,EAAA,CACC,MAAM,SACN,MAAOmB,EAAM,aACb,QAASU,EACT,OAAO,6BACP,SAAUC,GAAU,CAClBX,EAAM,gBAAgBW,CAAM,CAC9B,EAEA,SAAA3C,EAACH,EAAA,CAAQ,+GAGT,EACF,EAEAG,EAACa,EAAA,CACC,MAAM,iBACN,MAAO,OAAOmB,EAAM,aAAa,EACjC,QAASY,EAAiB,IAAIC,IAAM,CAClC,MAAO,OAAOA,EAAE,KAAK,EACrB,MAAOA,EAAE,KACX,EAAE,EACF,OAAO,8BACP,SAAUC,GAAW,CACnBd,EAAM,iBAAiB,OAAOc,CAAO,CAAC,CACxC,EAEA,SAAA9C,EAACH,EAAA,CAAQ,2DAET,EACF,EAEAG,EAACa,EAAA,CACC,MAAM,gBACN,MAAOmB,EAAM,aACb,QAASe,EACT,OAAO,6BACP,SAAUC,GAAU,CAClBhB,EAAM,gBAAgBgB,CAAM,CAC9B,EAEA,SAAAhD,EAACH,EAAA,CAAQ,6CAAiC,EAC5C,EAECmC,EAAM,eAAiB,SAAW,KACjChC,EAACM,EAAA,CACC,MAAM,gBACN,QAAS0B,EAAM,aACf,SAAUiB,GAAU,CAClBjB,EAAM,gBAAgBiB,CAAM,CAC9B,EAEA,SAAAjD,EAACH,EAAA,CAAQ,2DAA+C,EAC1D,GAEJ,GACF,EAEAG,EAACkD,EAAA,CACC,SAAAlD,EAACmD,EAAA,CAAO,QAAQ,YAAY,MAAM,UAAU,QAASlB,EAAS,iBAE9D,EACF,GACF,CAEJ,CAAC,EAEMmB,GAAQtB",
6
6
  "names": ["LAYOUT_QUALITIES", "LabelledSelect", "label", "value", "options", "testId", "size", "sx", "disabled", "title", "shown", "onChange", "labelId", "useId", "jsxs", "FormControl", "jsx", "InputLabel", "Select", "picked", "o", "e", "MenuItem", "ListItemText", "useStyles", "makeStyles", "Caption", "warn", "children", "jsx", "Typography", "Group", "title", "classes", "jsxs", "SettingSwitch", "label", "checked", "onChange", "FormControlLabel", "Switch", "e", "SettingSelect", "props", "LabelledSelect", "NODE_LIMITS", "nodeLimitOptions", "current", "a", "b", "limit", "TrackPickSetting", "choices", "stored", "auto", "testId", "t", "trackId", "name", "GraphSettingsDialog", "observer", "model", "onClose", "Dialog", "DialogContent", "NODE_WIDTHS", "width", "draw", "MAX_PATH_COLORS", "pickGeneTrack", "pickRepeatTrack", "LAYOUT_ENGINES", "engine", "LAYOUT_QUALITIES", "q", "quality", "BUBBLE_SPREADS", "spread", "linear", "DialogActions", "Button", "GraphSettingsDialog_default"]
@@ -1,2 +1,2 @@
1
- import{d as B,g as C,i as $,j as O,k as j,l as W,n as X,p as H,q as A,s as z,u as F}from"./chunk-WJGCVNGH.js";import{Eb as E,Fb as M,M as S,N as L,Nb as R}from"./chunk-55DIX25J.js";import"./chunk-S75MFZDE.js";import"./chunk-2XZYJLCE.js";import{m as P}from"./chunk-Q3BXNKEL.js";import"./chunk-JSRGX4TC.js";import"./chunk-LFTZNUXB.js";import"./chunk-MEMUEG5Z.js";import"./chunk-U5PIXAF2.js";import"./chunk-RCXOOBLX.js";import"./chunk-IKJZPPOA.js";import"./chunk-NDRLCGPC.js";import"./chunk-YU7T5WOQ.js";import{a as v,b as e,c as f}from"./chunk-JMBDTNUR.js";var m=JBrowseExports["@jbrowse/display-kit/renderDisplaySvg"],U=t=>m!=null&&t in Object(m)?m[t]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+t+"' from '@jbrowse/display-kit/renderDisplaySvg' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:t});var Y=U("renderDisplaySvg");var ot=m&&m.__esModule?m.default:m;var w=JBrowseExports["@jbrowse/core/util/paintLayer"],Z=t=>w!=null&&t in Object(w)?w[t]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+t+"' from '@jbrowse/core/util/paintLayer' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:t}),G=Z("PaintLayer"),lt=w&&w.__esModule?w.default:w;var k={fontFamily:"sans-serif",fontSize:11},x=16,q=2,J=t=>t;function N({model:t,lift:n,drawPaths:o,width:r,height:a,rasterize:i}){let p=t.buildDrawing(n,o);if(!p)return null;let c=i?q:1,d=i?void 0:M(r,a),h=d?.canvas??document.createElement("canvas");d||(h.width=Math.round(r*c),h.height=Math.round(a*c));let{scaleX:u,scaleY:y,translateX:l,translateY:s}=t.screenTransform,g=new E(h);return g.uploadGeometry(p.batch),g.updateTransform({scaleX:u*c,scaleY:y*c,translateX:l*c,translateY:s*c,dpr:c}),g.render([0,0,0,0]),d?e("svg",{width:r,height:a,overflow:"hidden",children:e("g",{dangerouslySetInnerHTML:{__html:d.markup()}})}):e("image",{width:r,height:a,href:h.toDataURL("image/png")})}function D(t,n){if(!t.swatch)return{key:t.key,width:t.label.length*P,height:x,draw:i=>e("text",{...k,x:i,y:0,fill:"#666",children:t.label},t.key)};let o=t.swatch,r=C(o),a=(t.strong??"")+t.label;return{key:t.key,width:Math.max(r+5+a.length*P,(t.under?.length??0)*P),height:t.under?x*2:x,draw:i=>f("g",{...k,children:[e(W,{swatch:o,x:i,id:n}),f("text",{x:i+r+5,y:0,children:[t.strong?e("tspan",{fontWeight:"bold",children:t.strong}):null,t.label]}),t.under?e("text",{x:i,y:x,children:t.under}):null]},t.key)}}function Q({model:t,idPrefix:n}){let o=j(t).map(({testid:l,rows:s})=>s.map((g,b)=>D(g,`${n}-${l}-${b}`)));if(o.length===0)return null;let r=6,a=o.flat(),i=a.reduce((l,s)=>Math.max(l,s.width),-1/0)+r*2,p=a.reduce((l,s)=>l+s.height,0)+o.length*r,d=t.paneWidth-R-i+r,h=R+t.referenceStripZonePx,u=[],y=h+12-r/2;for(let l of o){y+=r;for(let s of l)u.push({row:s,y}),y+=s.height}return f("g",{"data-testid":"graph-svg-keys",children:[e("rect",{x:d-r,y:h,width:i,height:p,rx:3,fill:"#fff",fillOpacity:.82}),u.map(({row:l,y:s})=>e("g",{transform:`translate(0 ${s})`,children:l.draw(d)},l.key))]})}function K({x:t,y:n,text:o,fontSize:r,anchor:a,bold:i}){let p=o.length*r*.56+6,c=a==="middle"?t-p/2:t-3;return f(v,{children:[e("rect",{x:c,y:n-r*.65,width:p,height:r*1.3,rx:3,fill:"#fff",fillOpacity:.8}),e("text",{x:t,y:n+r*.35,textAnchor:a,fontSize:r,fontWeight:i?600:void 0,fill:"#18181c",children:o})]})}function tt({model:t}){return e("g",{fontFamily:k.fontFamily,children:t.overlayLabels.sizes.map(({key:n,text:o,x:r,y:a,kind:i,leader:p})=>f("g",{children:[p?e("line",{x1:p.arcX,y1:p.arcY,x2:p.labelX,y2:p.labelY,stroke:"#18181c"}):null,e(K,{x:r,y:a,text:o,fontSize:10,anchor:"middle",bold:i==="deletion"})]},n))})}function et({model:t}){return e("g",{fontFamily:k.fontFamily,children:t.visibleRowLabels.map(({label:n,y:o,top:r})=>e(K,{x:10,y:r,text:n,fontSize:11,anchor:"start"},o))})}function rt({model:t,rasterize:n,idPrefix:o}){let r=t.facetPanels,a=t.facetGrid,i=t.facetPlacement;if(!r||!a||!i)return null;let{columns:p,width:c,height:d}=a,h=a.total+S+14,u=O(t).map((l,s)=>D(l,`${o}-facet-key-${s}`)),y=u.map((l,s)=>u.slice(0,s).reduce((g,b)=>g+b.width+14,6));return f(v,{children:[e("g",{transform:`translate(0 ${h})`,children:u.map((l,s)=>l.draw(y[s]))}),r.map((l,s)=>{let g=i.cells[s],b=g%p*(c+S),I=Math.floor(g/p)*(L+d+S),_=l.walks[0],V=D($(t,_),`${o}-facet-${s}`);return f("g",{transform:`translate(${b} ${I})`,children:[e("g",{transform:`translate(0 ${x-2})`,children:V.draw(6)}),e("g",{transform:`translate(0 ${L})`,children:e(N,{model:t,lift:l,drawPaths:!1,width:c,height:d,rasterize:n})})]},_.name)})]})}function T({model:t,rasterize:n=!1,idPrefix:o}){let r=t.paneWidth,a=t.canvasHeight,i=!!t.layoutResult?.tubeMap,p={rasterizeLayers:n};return f("g",{"data-testid":"graph-pane-svg",children:[t.facetPanels?e(rt,{model:t,rasterize:n,idPrefix:o}):i?e(G,{width:r,height:a,opts:p,paint:c=>{z(J(c),t,{highlightNode:null})}}):e(N,{model:t,lift:t.drawnHighlight,drawPaths:t.effectiveDrawPaths,width:r,height:a,rasterize:n}),t.facetPanels?null:f(v,{children:[e(B,{model:t}),e(X,{model:t}),e(tt,{model:t}),e(H,{model:t}),e(F,{model:t,vector:!0}),e(et,{model:t})]}),t.referenceStripShown?e(G,{width:r,height:a,opts:p,paint:c=>{A(J(c),t,{lit:void 0,dpr:1})}}):null,t.facetPanels?null:e(Q,{model:t,idPrefix:o})]})}function nt({model:t,opts:n}){return e(T,{model:t,rasterize:!!n?.rasterizeLayers,idPrefix:`graph-${t.id}`})}function Gt(t,n){return Y(t,n,nt)}export{Gt as renderGraphTrackSvg};
2
- //# sourceMappingURL=renderSvg-Z7YIXVQ5.js.map
1
+ import{d as B,g as C,i as $,j as O,k as j,l as W,n as X,p as H,q as A,s as z,u as F}from"./chunk-XQFBLJU5.js";import{Eb as E,Fb as M,M as S,N as L,Nb as R}from"./chunk-Y5DNBFDY.js";import"./chunk-4I3K4RHE.js";import"./chunk-CXOMX2I6.js";import{m as P}from"./chunk-WGTLNVST.js";import"./chunk-UOFWYS6T.js";import"./chunk-DUPBXBYE.js";import"./chunk-6OXXT2YP.js";import"./chunk-CNNZDE6I.js";import"./chunk-K4TFAHGC.js";import"./chunk-IKJZPPOA.js";import"./chunk-NDRLCGPC.js";import"./chunk-YU7T5WOQ.js";import{a as v,b as e,c as f}from"./chunk-JMBDTNUR.js";var m=JBrowseExports["@jbrowse/display-kit/renderDisplaySvg"],U=t=>m!=null&&t in Object(m)?m[t]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+t+"' from '@jbrowse/display-kit/renderDisplaySvg' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:t});var Y=U("renderDisplaySvg");var ot=m&&m.__esModule?m.default:m;var w=JBrowseExports["@jbrowse/core/util/paintLayer"],Z=t=>w!=null&&t in Object(w)?w[t]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+t+"' from '@jbrowse/core/util/paintLayer' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:t}),G=Z("PaintLayer"),lt=w&&w.__esModule?w.default:w;var k={fontFamily:"sans-serif",fontSize:11},x=16,q=2,J=t=>t;function N({model:t,lift:n,drawPaths:o,width:r,height:a,rasterize:i}){let p=t.buildDrawing(n,o);if(!p)return null;let c=i?q:1,d=i?void 0:M(r,a),h=d?.canvas??document.createElement("canvas");d||(h.width=Math.round(r*c),h.height=Math.round(a*c));let{scaleX:u,scaleY:y,translateX:l,translateY:s}=t.screenTransform,g=new E(h);return g.uploadGeometry(p.batch),g.updateTransform({scaleX:u*c,scaleY:y*c,translateX:l*c,translateY:s*c,dpr:c}),g.render([0,0,0,0]),d?e("svg",{width:r,height:a,overflow:"hidden",children:e("g",{dangerouslySetInnerHTML:{__html:d.markup()}})}):e("image",{width:r,height:a,href:h.toDataURL("image/png")})}function D(t,n){if(!t.swatch)return{key:t.key,width:t.label.length*P,height:x,draw:i=>e("text",{...k,x:i,y:0,fill:"#666",children:t.label},t.key)};let o=t.swatch,r=C(o),a=(t.strong??"")+t.label;return{key:t.key,width:Math.max(r+5+a.length*P,(t.under?.length??0)*P),height:t.under?x*2:x,draw:i=>f("g",{...k,children:[e(W,{swatch:o,x:i,id:n}),f("text",{x:i+r+5,y:0,children:[t.strong?e("tspan",{fontWeight:"bold",children:t.strong}):null,t.label]}),t.under?e("text",{x:i,y:x,children:t.under}):null]},t.key)}}function Q({model:t,idPrefix:n}){let o=j(t).map(({testid:l,rows:s})=>s.map((g,b)=>D(g,`${n}-${l}-${b}`)));if(o.length===0)return null;let r=6,a=o.flat(),i=a.reduce((l,s)=>Math.max(l,s.width),-1/0)+r*2,p=a.reduce((l,s)=>l+s.height,0)+o.length*r,d=t.paneWidth-R-i+r,h=R+t.referenceStripZonePx,u=[],y=h+12-r/2;for(let l of o){y+=r;for(let s of l)u.push({row:s,y}),y+=s.height}return f("g",{"data-testid":"graph-svg-keys",children:[e("rect",{x:d-r,y:h,width:i,height:p,rx:3,fill:"#fff",fillOpacity:.82}),u.map(({row:l,y:s})=>e("g",{transform:`translate(0 ${s})`,children:l.draw(d)},l.key))]})}function K({x:t,y:n,text:o,fontSize:r,anchor:a,bold:i}){let p=o.length*r*.56+6,c=a==="middle"?t-p/2:t-3;return f(v,{children:[e("rect",{x:c,y:n-r*.65,width:p,height:r*1.3,rx:3,fill:"#fff",fillOpacity:.8}),e("text",{x:t,y:n+r*.35,textAnchor:a,fontSize:r,fontWeight:i?600:void 0,fill:"#18181c",children:o})]})}function tt({model:t}){return e("g",{fontFamily:k.fontFamily,children:t.overlayLabels.sizes.map(({key:n,text:o,x:r,y:a,kind:i,leader:p})=>f("g",{children:[p?e("line",{x1:p.arcX,y1:p.arcY,x2:p.labelX,y2:p.labelY,stroke:"#18181c"}):null,e(K,{x:r,y:a,text:o,fontSize:10,anchor:"middle",bold:i==="deletion"})]},n))})}function et({model:t}){return e("g",{fontFamily:k.fontFamily,children:t.visibleRowLabels.map(({label:n,y:o,top:r})=>e(K,{x:10,y:r,text:n,fontSize:11,anchor:"start"},o))})}function rt({model:t,rasterize:n,idPrefix:o}){let r=t.facetPanels,a=t.facetGrid,i=t.facetPlacement;if(!r||!a||!i)return null;let{columns:p,width:c,height:d}=a,h=a.total+S+14,u=O(t).map((l,s)=>D(l,`${o}-facet-key-${s}`)),y=u.map((l,s)=>u.slice(0,s).reduce((g,b)=>g+b.width+14,6));return f(v,{children:[e("g",{transform:`translate(0 ${h})`,children:u.map((l,s)=>l.draw(y[s]))}),r.map((l,s)=>{let g=i.cells[s],b=g%p*(c+S),I=Math.floor(g/p)*(L+d+S),_=l.walks[0],V=D($(t,_),`${o}-facet-${s}`);return f("g",{transform:`translate(${b} ${I})`,children:[e("g",{transform:`translate(0 ${x-2})`,children:V.draw(6)}),e("g",{transform:`translate(0 ${L})`,children:e(N,{model:t,lift:l,drawPaths:!1,width:c,height:d,rasterize:n})})]},_.name)})]})}function T({model:t,rasterize:n=!1,idPrefix:o}){let r=t.paneWidth,a=t.canvasHeight,i=!!t.layoutResult?.tubeMap,p={rasterizeLayers:n};return f("g",{"data-testid":"graph-pane-svg",children:[t.facetPanels?e(rt,{model:t,rasterize:n,idPrefix:o}):i?e(G,{width:r,height:a,opts:p,paint:c=>{z(J(c),t,{highlightNode:null})}}):e(N,{model:t,lift:t.drawnHighlight,drawPaths:t.effectiveDrawPaths,width:r,height:a,rasterize:n}),t.facetPanels?null:f(v,{children:[e(B,{model:t}),e(X,{model:t}),e(tt,{model:t}),e(H,{model:t}),e(F,{model:t,vector:!0}),e(et,{model:t})]}),t.referenceStripShown?e(G,{width:r,height:a,opts:p,paint:c=>{A(J(c),t,{lit:void 0,dpr:1})}}):null,t.facetPanels?null:e(Q,{model:t,idPrefix:o})]})}function nt({model:t,opts:n}){return e(T,{model:t,rasterize:!!n?.rasterizeLayers,idPrefix:`graph-${t.id}`})}function Gt(t,n){return Y(t,n,nt)}export{Gt as renderGraphTrackSvg};
2
+ //# sourceMappingURL=renderSvg-7G6NWBXF.js.map
@@ -1,7 +1,7 @@
1
- import{A as fr,B as Mr,C as kr,D as Bt,E as Er,F as Xe,G as Yr,H as Ur,I as Xr,J as Kr,K as Qr,L as en,M as tn,P as qe,Q as on,S as rn,U as an,V as sn,a as D,b as Wo,c as Do,d as ze,e as F,f as zo,g as $o,l as Ko,n as Rt,o as z,p as $e,q as Pe,r as Tt,s as Je,t as qo,u as Zo,v as Qo,w as Gt,x as tr,y as br,z as wr}from"./chunks/chunk-FWVXBJ64.js";import{a as xt,b as Jo,c as Yo,d as Ae,e as Uo,f as Xo,i as qr,m as Zr,n as nn}from"./chunks/chunk-ZG2CQXOW.js";import{$a as Br,Ab as zr,Bb as $r,Ca as hr,Cb as Jr,Da as Be,Ea as yr,Ia as Pt,Ja as Ct,Ka as Sr,La as It,Oa as xr,Pa as Rr,Q as er,Ra as Tr,Sa as Gr,T as Ye,V as or,Va as Lr,Wa as vr,X as rr,Xa as Ar,Y as nr,Za as Pr,_a as Cr,a as ve,ab as Ir,b as yt,ba as ar,bb as Nr,c as C,ca as ir,d as ie,db as Vr,dc as Ke,g as Oo,ja as se,jb as Nt,ka as sr,la as pr,lb as Hr,ma as cr,mb as Fr,na as ur,o as St,oa as dr,ob as jr,p as _o,pa as mr,qa as Lt,qb as Or,sa as lr,ub as Ue,va as gr,vb as Wr,wa as Ce,wb as Dr,xa as vt,xb as _r,ya as pe,za as ce}from"./chunks/chunk-55DIX25J.js";import"./chunks/chunk-S75MFZDE.js";import{c as Fo,d as jo}from"./chunks/chunk-2XZYJLCE.js";import{B as kt,f as _e,u as ft,v as Mt}from"./chunks/chunk-Q3BXNKEL.js";import{b as At}from"./chunks/chunk-JSRGX4TC.js";import{j as je}from"./chunks/chunk-PUREF4BM.js";import{e as dt}from"./chunks/chunk-DXNE2CFX.js";import{a as mt}from"./chunks/chunk-LFTZNUXB.js";import{s as wt}from"./chunks/chunk-M2D7NUOY.js";import"./chunks/chunk-YBLNN5FU.js";import{i as ht,m as Bo}from"./chunks/chunk-MEMUEG5Z.js";import{a as Mo,c as ko,g as K,r as Le,t as Co,u as We}from"./chunks/chunk-U5PIXAF2.js";import{f as ke,l as N,m as _,n as Ge,o as Oe}from"./chunks/chunk-AWGMTI73.js";import"./chunks/chunk-YBLNN5FU.js";import{a as xo,b as j,d as Z,e as Q,f as Ro}from"./chunks/chunk-MVVXRZXV.js";import{a as So}from"./chunks/chunk-RCXOOBLX.js";import{a as Vo,g as Ho}from"./chunks/chunk-QJ43NDYS.js";import{b as Go,c as Lo,e as vo,f as Ao,g as lt,h as Po}from"./chunks/chunk-IKJZPPOA.js";import{a as Io}from"./chunks/chunk-7WIBGKBU.js";import{a as gt}from"./chunks/chunk-OGQ6OQDN.js";import{a as G,b as O,c as Te,e as H,f as To,g as M}from"./chunks/chunk-NDRLCGPC.js";import{i as ae,j as x,k as yo,l as bo,n as wo}from"./chunks/chunk-TENPGIPX.js";import{b as ee}from"./chunks/chunk-YU7T5WOQ.js";import{I as De,i as No,l as Eo}from"./chunks/chunk-UGCNPRKC.js";import{a as fo,b as A,d as bt}from"./chunks/chunk-JMBDTNUR.js";var Ze=JBrowseExports["@jbrowse/core/Plugin"];var pn=Ze&&Ze.__esModule?Ze.default:Ze;var Qe=D([A("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),A("circle",{cx:"14.8",cy:"18",r:"2"},"1"),A("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var et=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"];var te=et&&et.__esModule?et.default:et;var fa=j("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:N("/path/to/graph.gbz.db"),haplotypeIndexLocation:N(""),readsLocation:N(""),readsIndex:_("GbzBaseReadsIndex"),samplesTsvLocation:N(""),subgraphSnarls:{type:"stringEnum",model:M.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:je.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:je.context,advanced:!0},nodeLimit:{type:"number",defaultValue:je.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},...Ma(r,o)}:{}}}});function Ma(e,t){let{name:o,query:r}=Ao(e);return o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi${r}`,baseUri:t}}}:{}}var cn=fa;function Et(e){e.addAdapterType(()=>new te({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:cn,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-BVLBK4OO.js").then(t=>t.default)}))}var ue=JBrowseExports["@jbrowse/core/pluggableElementTypes"],oe=e=>ue!=null&&e in Object(ue)?ue[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 un=oe("AddTrackWorkflowType");var dn=oe("BaseDisplay");var mn=oe("DisplayType");var Se=oe("RpcMethodType"),ln=oe("RpcMethodTypeWithRenameRegion");var gn=oe("TrackType");var hn=oe("createBaseTrackConfig"),yn=oe("createBaseTrackModel");var _i=ue&&ue.__esModule?ue.default:ue;var de=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"],ka=e=>de!=null&&e in Object(de)?de[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 bn=ka("getAdapter"),$i=de&&de.__esModule?de.default:de;async function xe(e,{sessionId:t,adapterConfig:o},r){let{dataAdapter:n}=await bn(e,t,o);return{adapter:typeof n[r]=="function"?n:void 0,name:n.constructor.name}}var Ie=class extends Se{constructor(){super(...arguments);this.name="GetGraphHaplotypes"}async execute(o){let{adapter:r}=await xe(this.pluginManager,o,"getHaplotypeNames");return r?.getHaplotypeNames({signal:o.signal})}};function wn(e){return typeof e.reads=="string"&&e.reads!==""||vo(e.readsLocation)}var Ne=class extends Se{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(o){let{nodeNames:r,signal:n}=o,{adapter:a}=await xe(this.pluginManager,o,"getReads");return a?a.getReads(r,{signal:n}):{records:[],total:0}}};var me=JBrowseExports["@jbrowse/core/util/librpc"],Sa=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 Vt=Sa("rpcResultWithArrayBuffers");var is=me&&me.__esModule?me.default:me;var Ee=class extends ln{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(o){let{region:r,opts:n,signal:a}=o,{adapter:i,name:s}=await xe(this.pluginManager,o,"getSubgraph");if(i){let p=await i.getSubgraph(r,{...n,signal:a});if(typeof p!="string")return Vt(p);let u=p?mt(p):void 0;return u?Vt(u):p}return console.warn(`[GetSubgraph] ${s} does not implement getSubgraph`),""}};var xa=ee(()=>import("./chunks/AddTrackWorkflow-LK25EC3H.js"));function Ht(e){e.addAddTrackWorkflowType(()=>new un({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:xa,stateModel:M.model({})}))}var Ve=class extends Se{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(o){let{graph:r,options:n,statusCallback:a}=o;return a?.("Computing layout"),jo({graph:r,options:n})}};var tt=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"];var fn=tt&&tt.__esModule?tt.default:tt;var le=JBrowseExports["@jbrowse/core/util/withLaunchInput"],Ra=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}),Mn=Ra("defineLaunchKeys");var ks=le&&le.__esModule?le.default:le;var ge=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"],Ta=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 kn=Ta("BaseViewModel");var xs=ge&&ge.__esModule?ge.default:ge;var Re=["off","nodes","everything"];var Sn=D(A("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy");var xn=D(A("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 Rn=D(A("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 Tn=D([A("circle",{cx:"12",cy:"12",r:"3.2"},"0"),A("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 jt(e,t){if(!(t>0)||e.paths?.length||!e.nodes.some(b=>K(b)))return e;let{nodes:o,edges:r}=Ga(e),n=new Map(o.map((b,L)=>[b.id,L])),a=r.map(vn),i=va(o.length,r,a,n),s=Pa(o,r,a,n),p=ko(s.keys(),b=>s[b]),u=new Uint8Array(o.length),g=[];for(let b of p.values())if(Ca(b,o,i,s)>=t){for(let L of b)u[L]=1;K(o[b[0]])||g.push(b)}let{dist:T,pred:v}=Na(o,i);for(let b of g)for(let[L,I]of Ba(b,o,i,s)){let l=Ia(L,I,i,s,T,o);for(;l!==void 0&&!u[l];)u[l]=1,l=K(o[l])?void 0:v[l]}let y=r.filter((b,L)=>{let I=n.get(b.from),l=n.get(b.to);if(I===void 0||l===void 0)return!1;let h=Aa(o[I],a[L].from,o[l],a[L].to);return u[I]&&u[l]&&!(h>0&&h<t)});return Va({...e,nodes:o,edges:y},u,s)}function Ga({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??_e(n);return o.has(n)?La(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 La(e){return e==="+"?"-":"+"}function vn(e){return{from:(e.fromStrand??_e(e.from))==="+"?"e":"s",to:(e.toStrand??_e(e.to))==="+"?"s":"e"}}function va(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:u,to:g}=o[i];n[s].push({other:p,side:u,otherSide:g}),n[p].push({other:s,side:g,otherSide:u})}}),n}function An(e,t){let o=e.stable,r=t.stable;return o&&r?.refName===o.refName&&r.rank===o.rank?[o,r]:void 0}function Ot(e,t,o,r){let n=An(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 Aa(e,t,o,r){let n=An(e,o);if(!n||Ot(e,t,o,r))return 0;let[a,i]=n;return Math.abs(Ft(i,o,r)-Ft(a,e,t))}function Ft({start:e},t,o){return o==="s"?e:e+t.length}function Pa(e,t,o,r){let n=e.map((i,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),u=r.get(i.to);p!==void 0&&u!==void 0&&Ot(e[p],o[s].from,e[u],o[s].to)&&(n[a(p)]=a(u))}),e.map((i,s)=>a(s))}function Ca(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 u of e){n+=t[u].length;for(let{other:g,otherSide:T}of o[u]){let v=t[g];if(r[g]!==r[u]&&K(v)){a??=v.stable.refName,p&&=v.stable.refName===a;let y=Ft(v.stable,v,T);i=Math.min(i,y),s=Math.max(s,y)}}}return p&&s>i?Math.max(n,s-i):n}function Ba(e,t,o,r){let n=u=>t[u].stable?.start??0,a=u=>n(u)+t[u].length,i=e[0],s=e[0];for(let u of e)n(u)<n(i)&&(i=u),a(u)>a(s)&&(s=u);let p=[];for(let u of new Set([i,s]))for(let g of["s","e"])o[u].some(T=>T.side===g&&r[T.other]===r[u])||p.push([u,g]);return p}function Ia(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 Na(e,t){let o=new Float64Array(e.length).fill(1/0),r=new Int32Array(e.length).fill(-1),n=new Ea(([a,i],[s,p])=>a-s||Gn(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 u=i+e[p].length;u<o[p]?(o[p]=u,r[p]=s,n.push([u,p])):u===o[p]&&Gn(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 Gn(e,t){return e<t?-1:e>t?1:0}var Ea=class{constructor(e){this.order=e,this.items=[]}push(e){let{items:t}=this;t.push(e);let o=t.length-1;for(;o>0;){let r=o-1>>1;if(this.order(t[o],t[r])>=0)break;[t[o],t[r]]=[t[r],t[o]],o=r}}pop(){let{items:e}=this,t=e[0],o=e.pop();if(e.length>0&&o!==void 0){e[0]=o;let r=0;for(;;){let n=2*r+1,a=n+1,i=r;if(n<e.length&&this.order(e[n],e[i])<0&&(i=n),a<e.length&&this.order(e[a],e[i])<0&&(i=a),i===r)break;[e[r],e[i]]=[e[i],e[r]],r=i}}return t}};function Va(e,t,o){let{nodes:r,edges:n}=e,a=new Map(r.map((l,h)=>[l.id,h])),i=n.map(vn),s=n.map((l,h)=>[{i:a.get(l.from),side:i[h].from},{i:a.get(l.to),side:i[h].to}]),p=new Map,u=(l,h)=>`${l}${h}`;for(let l of s)for(let{i:h,side:P}of l)p.set(u(h,P),(p.get(u(h,P))??0)+1);let g=new Map,T=new Set,v=new Set;s.forEach(([l,h],P)=>{if(l.i!==h.i&&o[l.i]===o[h.i]&&Ot(r[l.i],l.side,r[h.i],h.side)&&p.get(u(l.i,l.side))===1&&p.get(u(h.i,h.side))===1){let[$,B]=l.side==="e"?[l,h]:[h,l];g.set($.i,{j:B.i,out:$.side,in:B.side}),T.add(B.i),v.add(P)}});let y=r.map((l,h)=>h),b=new Map,L=new Map;r.forEach((l,h)=>{if(!t[h]||T.has(h)||!g.has(h))return;let P=[h],$=Ln(g.get(h).out);b.set(u(h,$),"s");for(let B=g.get(h);B;B=g.get(B.j))P.push(B.j),$=B.in;b.set(u(P.at(-1),Ln($)),"e");for(let B of P)y[B]=h;L.set(h,Ha(P.map(B=>r[B])))});let I=({i:l,side:h})=>({id:r[y[l]].id,side:y[l]===l&&!L.has(l)?h:b.get(u(l,h))});return{...e,nodes:r.flatMap((l,h)=>!t[h]||y[h]!==h?[]:[L.get(h)??l]),edges:n.flatMap((l,h)=>{if(v.has(h))return[];let[P,$]=s[h];if(!L.has(y[P.i])&&!L.has(y[$.i]))return[l];let B=I(P),He=I($);return[{...l,from:B.id,to:He.id,fromStrand:B.side==="e"?"+":"-",toStrand:He.side==="s"?"+":"-"}]})}}function Ln(e){return e==="s"?"e":"s"}function Ha(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 Wt(e,t=()=>"",o=!0){let r=e.paths??[],n=Oo(e),a=new Map;r.forEach((y,b)=>{Mo(a,Le(y.name).name,b)});let i=y=>n[y].map(b=>`${b.node.id}${b.strand}`).join(","),s=y=>a.get(y).map(b=>r[b]),p=new Map,u=new Map;for(let[y,b]of a){let L=y===e.referencePath?`\0${y}`:b.map(i).join("|"),I=t(y),l=p.get(L)??p.size;p.set(L,l);let h=`${L} ${I}`,P=u.get(h);P?P.walks.push(y):u.set(h,{rank:l,group:I,walks:[y]})}if(o&&u.size===a.size)return e;let g=[...u.values()].sort((y,b)=>y.rank-b.rank||y.group.localeCompare(b.group));if(!o)return{...e,paths:g.flatMap(({walks:y})=>y.flatMap(s))};let T=g.flatMap(({walks:y})=>s(y[0]).map(b=>y.length>1?{...b,members:y}:b)),v=new Set(g.map(y=>y.walks[0]));return{...e,paths:T,anchorPaths:e.anchorPaths?.filter(y=>v.has(y.name)),pathVisits:e.pathVisits?.filter(y=>v.has(y))}}function Pn(e,t,o){let r=Math.min(48,t,o);return Math.max(0,r-(e+t))-Math.max(0,e-(o-r))}function Cn(e,t,o){return{translateX:t.translateX+Pn(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,o.width),translateY:t.translateY+Pn(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,o.height)}}function Bn(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 Fa=.05,ot=9;function ja(e,t){let{minY:o,maxY:r}=e.layout.bounds,n=r-o;return e.columns&&n>0?Math.max(Fa,Math.min(1,t/n)):1}function rt(e,t){let{scaleX:o,translateX:r,translateY:n}=t,a=t.scaleY*ja(e,t.usableHeight),i=p=>(p-e.yOffset)*a+n,{columns:s}=e;if(s){let p=Lr(s,u=>u*o+r);return{x:u=>vr(p,u),y:i,yScale:a}}return{x:p=>p*o+r,y:i,yScale:a}}function Dt(e,{x:t,y:o},r,n){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-ot)<=r&&r<=t(i.x+i.pixelWidth+ot)&&o(i.y-ot)<=n&&n<=o(i.y+i.contentHeight+ot)&&(a=i.name)}),a}var In=20,Oa=.05,Nn=6;function Wa(e){let t=e.length-Nn;return t>0?`${e.slice(0,Nn).join(", ")} and ${t} more`:e.join(", ")}function Da(e){if(e.kind==="deletion")return`deletion of ${kt(e.length)}`;if(e.kind==="substitution")return`substitution ${e.seq}`;let t=e.seq??"",o=t.length>In?`${t.slice(0,In)}\u2026`:t;return`insertion of ${kt(t.length)} ${o}`.trim()}function _a(e,t,o){let r={substitution:!1,insertion:!1,deletion:!1};if(e&&t&&Cr(t.yScale)){let n=3;for(let a of e.mismatches)if(!r[a.kind]&&Br(a,{x:t.x,width:o})&&(r[a.kind]=!0,--n===0))break}return r}var En=on.views(e=>({get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?rt(t,{...e.screenTransform,usableHeight:e.usableHeight}):void 0},get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX&&!e.layoutResult?.tubeMapPanels?It(t):void 0},get tubeMapPanelRulerBoxes(){let{layoutResult:t}=e,o=t?.tubeMapPanels?.at(-1);return o&&t?.referenceAxis&&!e.hostPlacesX?It(Sr(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?xr(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:Ar(n),tubeColors:e.tubeColorsOf(a,n.pathColors),nodeColors:e.tubeMapNodeColors?Er(a,e.effectiveColorScheme,e.referenceRamp):void 0,deviations:i?Gr(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?Dr(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=Wr(a,r);return i?{box:i,..._r(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*Nt,a=t.reduce((u,g)=>u+g.panel.height,0),i=e.usableHeight-n,s=e.scaleY*(r.referenceAxis&&a>0?Math.max(Oa,Math.min(1,i/a)):1),p=e.translateY;return t.map((u,g)=>{let{panel:T}=u,v=T.result.extent?.minY??0,y=p,b=y+Nt;return p=b+T.height*s,{...u,tubeColors:o[g],frame:rt(T.result.tubeMap,{scaleX:e.scaleX,translateX:e.translateX,scaleY:s,translateY:b-v*s,usableHeight:1/0}),titleTop:y,top:b,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 u=e.tubeMapPanelViews;u?zr(i,u,e.tubeMapPanelHover,{width:e.paneWidth,lit:a!==null}):Pr(i,r,{...n,width:e.paneWidth,highlightNode:a}),Tr(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,Lt]])),t.setEdgeHighlight(e.hoveredEdge,Lt),t.updateTransform(e.paintTransform),t.renderHighlights()}})).views(e=>{let t=(n,a)=>JSON.stringify(n)===JSON.stringify(a),o=yt(()=>_a(e.layoutResult?.tubeMapPanels!==void 0?void 0:e.tubeMapPicture,e.tubeMapFrame,e.paneWidth),{equals:t}),r=yt(()=>{let n=e.layoutResult,i=n?.tubeMapPanels!==void 0?[]:n?.tubeMap?.layout.reads??[],s=e.drawnGraph?.paths??[],p=e.tubeMapColoring,u=e.tubeColorKind;return{bundled:s.some(g=>g.members),values:u==="value"&&p?[...[...p.palette].map(([g,T])=>({value:g,color:T})),...p.unvalued?[{value:`${p.field}: none`,color:Or}]:[]]:void 0,roles:u==="role"||u==="tinted",haplotypeTube:u==="tinted"?Fr[0]:Hr,logWidths:n?.tubeMap!==void 0&&!n.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:i.some(g=>!g.is_reverse),reverseReads:i.some(g=>g.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?Dt(r.drawing,r.frame,t,o):null)??Rr(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=Nr(n,a,t,o),s=i?.readId??Ir(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?[Da(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: ${Wa(a.map(i=>e.walkLabel(i)))}`}:n?{label:e.walkLabel(n.name),readout:"haplotype"}:void 0}}));var Vn=En.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=Cn(t,e,o);e.viewportOwner!=="host"&&(e.translateX=r.translateX),e.translateY=r.translateY}})).actions(e=>{let t;return{setColorScheme(o){(e.statedColorDomain||e.chosenColorScheme==="reference-position")&&(t=e.statedColorDomain),e.writeGrammar({color:en(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=We(o,t);Be.inherit(o,r),e.graph=r}},setLayer(t,o){e.writeGrammar({layers:Qr(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:tn(t,e.contigThickness)})},setTubeMapFold(t){e.tubeMapFold=t},setTubeMapRoutes(t){e.tubeMapRoutes=t},setTubeMapColorBy(t){e.tubeMapColorBy=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let o=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>o.get(r)??{walk:r})},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,domain:t===o.field?o.domain:[]}})},toggleWalk(t){let o=e.walkLayers;e.walkLayers=o.some(r=>r.walk===t)?o.filter(r=>r.walk!==t):[...o,{walk:t}]},setWalkColor(t,o){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...o}}:r)},setWalkRowSamples(t){e.writeGrammar({rows:t?{kept:t}:{}})},setWalkRowGroupBy(t){(t||e.walkRowGroupBy)&&e.writeGrammar({facet:t??{}})},pairWithLinearView(t){let o=e.connectedViewId;o!==void 0&&$e([...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)},setHoveredRowWalks(t){t.join(`
1
+ import{A as wr,B as Mr,C as kr,D as It,E as Er,F as Ke,G as Yr,H as Ur,I as Xr,J as Kr,K as Qr,L as en,M as tn,P as Ze,Q as on,S as rn,U as an,V as sn,a as z,b as Wo,c as Do,d as $e,e as O,f as zo,g as $o,l as Ko,n as Tt,o as J,p as Je,q as Be,r as Gt,s as Ye,t as qo,u as Zo,v as Qo,w as Lt,x as tr,y as br,z as fr}from"./chunks/chunk-P7VMOTUM.js";import{a as Rt,b as Jo,c as Yo,d as Ce,e as Uo,f as Xo,i as qr,m as Zr,n as nn}from"./chunks/chunk-TGSDXZXI.js";import{$a as Br,Ab as zr,Bb as $r,Ca as hr,Cb as Jr,Da as Ne,Ea as yr,Ia as Ct,Ja as Bt,Ka as Sr,La as Nt,Oa as xr,Pa as Rr,Q as er,Ra as Tr,Sa as Gr,T as Ue,V as or,Va as Lr,Wa as vr,X as rr,Xa as Ar,Y as nr,Za as Pr,_a as Cr,a as Pe,ab as Ir,b as bt,ba as ar,bb as Nr,c as I,ca as ir,d as se,db as Vr,dc as qe,g as Oo,ja as pe,jb as Et,ka as sr,la as pr,lb as Hr,ma as cr,mb as Fr,na as ur,o as xt,oa as dr,ob as jr,p as _o,pa as mr,qa as vt,qb as Or,sa as lr,ub as Xe,va as gr,vb as Wr,wa as Ie,wb as Dr,xa as At,xb as _r,ya as ce,za as ue}from"./chunks/chunk-Y5DNBFDY.js";import"./chunks/chunk-4I3K4RHE.js";import{c as Fo,d as jo}from"./chunks/chunk-CXOMX2I6.js";import{B as St,f as ze,u as Mt,v as kt}from"./chunks/chunk-WGTLNVST.js";import{b as Pt}from"./chunks/chunk-UOFWYS6T.js";import{j as Oe}from"./chunks/chunk-NPV7SRJD.js";import{e as mt}from"./chunks/chunk-MCE6STZR.js";import{a as lt}from"./chunks/chunk-DUPBXBYE.js";import{s as wt}from"./chunks/chunk-M2D7NUOY.js";import"./chunks/chunk-YBLNN5FU.js";import{i as yt,m as Bo}from"./chunks/chunk-6OXXT2YP.js";import{a as Mo,c as ko,g as q,r as Ae,t as Co,u as De}from"./chunks/chunk-CNNZDE6I.js";import{f as xe,l as E,m as $,n as ve,o as We}from"./chunks/chunk-RU4WSKBO.js";import"./chunks/chunk-YBLNN5FU.js";import{a as xo,b as W,d as Q,e as ee,f as Ro}from"./chunks/chunk-MVVXRZXV.js";import{a as So}from"./chunks/chunk-K4TFAHGC.js";import{a as Vo,g as Ho}from"./chunks/chunk-QJ43NDYS.js";import{b as Go,c as Lo,e as vo,f as Ao,g as gt,h as Po}from"./chunks/chunk-IKJZPPOA.js";import{a as Io}from"./chunks/chunk-7WIBGKBU.js";import{a as ht}from"./chunks/chunk-OGQ6OQDN.js";import{a as A,b as D,c as Le,e as j,f as To,g as M}from"./chunks/chunk-NDRLCGPC.js";import{i as ie,j as R,k as yo,l as bo,n as fo}from"./chunks/chunk-TENPGIPX.js";import{b as te}from"./chunks/chunk-YU7T5WOQ.js";import{I as _e,i as No,l as Eo}from"./chunks/chunk-UGCNPRKC.js";import{a as wo,b as C,d as ft}from"./chunks/chunk-JMBDTNUR.js";var Qe=JBrowseExports["@jbrowse/core/Plugin"];var pn=Qe&&Qe.__esModule?Qe.default:Qe;var et=z([C("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),C("circle",{cx:"14.8",cy:"18",r:"2"},"1"),C("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var tt=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"];var oe=tt&&tt.__esModule?tt.default:tt;var wa=W("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:E("/path/to/graph.gbz.db"),haplotypeIndexLocation:E(""),readsLocation:E(""),readsIndex:$("GbzBaseReadsIndex"),samplesTsvLocation:E(""),subgraphSnarls:{type:"stringEnum",model:M.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:Oe.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:Oe.context,advanced:!0},nodeLimit:{type:"number",defaultValue:Oe.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},...Ma(r,o)}:{}}}});function Ma(e,t){let{name:o,query:r}=Ao(e);return o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi${r}`,baseUri:t}}}:{}}var cn=wa;function Vt(e){e.addAdapterType(()=>new oe({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:cn,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-EKLUEECW.js").then(t=>t.default)}))}var de=JBrowseExports["@jbrowse/core/pluggableElementTypes"],re=e=>de!=null&&e in Object(de)?de[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 un=re("AddTrackWorkflowType");var dn=re("BaseDisplay");var mn=re("DisplayType");var Re=re("RpcMethodType"),ln=re("RpcMethodTypeWithRenameRegion");var gn=re("TrackType");var hn=re("createBaseTrackConfig"),yn=re("createBaseTrackModel");var zi=de&&de.__esModule?de.default:de;var me=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"],ka=e=>me!=null&&e in Object(me)?me[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 bn=ka("getAdapter"),Ji=me&&me.__esModule?me.default:me;async function Te(e,{sessionId:t,adapterConfig:o},r){let{dataAdapter:n}=await bn(e,t,o);return{adapter:typeof n[r]=="function"?n:void 0,name:n.constructor.name}}var Ee=class extends Re{constructor(){super(...arguments);this.name="GetGraphHaplotypes"}async execute(o){let{adapter:r}=await Te(this.pluginManager,o,"getHaplotypeNames");return r?.getHaplotypeNames({signal:o.signal})}};function fn(e){return typeof e.reads=="string"&&e.reads!==""||vo(e.readsLocation)}var Ve=class extends Re{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(o){let{nodeNames:r,signal:n}=o,{adapter:a}=await Te(this.pluginManager,o,"getReads");return a?a.getReads(r,{signal:n}):{records:[],total:0}}};var le=JBrowseExports["@jbrowse/core/util/librpc"],Sa=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/librpc' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Ht=Sa("rpcResultWithArrayBuffers");var ss=le&&le.__esModule?le.default:le;var He=class extends ln{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(o){let{region:r,opts:n,signal:a}=o,{adapter:i,name:s}=await Te(this.pluginManager,o,"getSubgraph");if(i){let p=await i.getSubgraph(r,{...n,signal:a});if(typeof p!="string")return Ht(p);let u=p?lt(p):void 0;return u?Ht(u):p}return console.warn(`[GetSubgraph] ${s} does not implement getSubgraph`),""}};var xa=te(()=>import("./chunks/AddTrackWorkflow-LK25EC3H.js"));function Ft(e){e.addAddTrackWorkflowType(()=>new un({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:xa,stateModel:M.model({})}))}var Fe=class extends Re{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(o){let{graph:r,options:n,statusCallback:a}=o;return a?.("Computing layout"),jo({graph:r,options:n})}};var ot=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"];var wn=ot&&ot.__esModule?ot.default:ot;var ge=JBrowseExports["@jbrowse/core/util/withLaunchInput"],Ra=e=>ge!=null&&e in Object(ge)?ge[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}),Mn=Ra("defineLaunchKeys");var Ss=ge&&ge.__esModule?ge.default:ge;var he=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"],Ta=e=>he!=null&&e in Object(he)?he[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 kn=Ta("BaseViewModel");var Rs=he&&he.__esModule?he.default:he;var Ge=["off","nodes","everything"];var Sn=z(C("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"}),"ContentCopy");var xn=z(C("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 Rn=z(C("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 Tn=z([C("circle",{cx:"12",cy:"12",r:"3.2"},"0"),C("path",{d:"M9 2 7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5"},"1")],"PhotoCamera");function Ot(e,t,{cut:o=!1}={}){if(!(t>0)||e.paths?.length||!e.nodes.some(y=>q(y)))return e;let{nodes:r,edges:n}=La(e),a=new Map(r.map((y,T)=>[y.id,T])),i=n.map(vn),s=Aa(r.length,n,i,a),p=Ca(r,n,i,a),u=ko(p.keys(),y=>p[y]),l=new Uint8Array(r.length),G=[];for(let y of u.values())if(Ba(y,r,s,p)>=t){for(let T of y)l[T]=1;q(r[y[0]])||G.push(y)}let{dist:P,pred:h}=Ea(r,s);for(let y of G)for(let[T,L]of Ia(y,r,s,p)){let N=Na(T,L,s,p,P,r);for(;N!==void 0&&!l[N];)l[N]=1,N=q(r[N])?void 0:h[N]}let S=n.map(y=>[a.get(y.from),a.get(y.to)]),B=n.map((y,T)=>{let[L,N]=S[T];return L!==void 0&&N!==void 0&&!!l[L]&&!!l[N]}),V=n.flatMap((y,T)=>{let[L,N]=S[T];if(!B[T])return[];let ke=Pa(r[L],i[T].from,r[N],i[T].to);return ke>0&&ke<t?[{k:T,bp:ke}]:[]}).sort((y,T)=>y.bp-T.bp).map(({k:y})=>y);for(let y of V)B[y]=!1;let b=new Set(o?Ga(r.length,S,B,V):[]),g=n.flatMap((y,T)=>b.has(T)?[{...y,foldBridge:!0}]:B[T]?[y]:[]);return Ha({...e,nodes:r,edges:g},l,p)}function Ga(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,u]=t[s],[l,G]=[a(p),a(u)];return n[l]=G,l!==G};return o.forEach((s,p)=>{s&&i(p)}),r.filter(i)}function La({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??ze(n);return o.has(n)?va(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 va(e){return e==="+"?"-":"+"}function vn(e){return{from:(e.fromStrand??ze(e.from))==="+"?"e":"s",to:(e.toStrand??ze(e.to))==="+"?"s":"e"}}function Aa(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:u,to:l}=o[i];n[s].push({other:p,side:u,otherSide:l}),n[p].push({other:s,side:l,otherSide:u})}}),n}function An(e,t){let o=e.stable,r=t.stable;return o&&r?.refName===o.refName&&r.rank===o.rank?[o,r]:void 0}function Wt(e,t,o,r){let n=An(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 Pa(e,t,o,r){let n=An(e,o);if(!n||Wt(e,t,o,r))return 0;let[a,i]=n;return Math.abs(jt(i,o,r)-jt(a,e,t))}function jt({start:e},t,o){return o==="s"?e:e+t.length}function Ca(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),u=r.get(i.to);p!==void 0&&u!==void 0&&Wt(e[p],o[s].from,e[u],o[s].to)&&(n[a(p)]=a(u))}),e.map((i,s)=>a(s))}function Ba(e,t,o,r){if(q(t[e[0]]))return 1/0;let n=0,a,i=1/0,s=-1/0,p=!0;for(let u of e){n+=t[u].length;for(let{other:l,otherSide:G}of o[u]){let P=t[l];if(r[l]!==r[u]&&q(P)){a??=P.stable.refName,p&&=P.stable.refName===a;let h=jt(P.stable,P,G);i=Math.min(i,h),s=Math.max(s,h)}}}return p&&s>i?Math.max(n,s-i):n}function Ia(e,t,o,r){let n=u=>t[u].stable?.start??0,a=u=>n(u)+t[u].length,i=e[0],s=e[0];for(let u of e)n(u)<n(i)&&(i=u),a(u)>a(s)&&(s=u);let p=[];for(let u of new Set([i,s]))for(let l of["s","e"])o[u].some(G=>G.side===l&&r[G.other]===r[u])||p.push([u,l]);return p}function Na(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 Ea(e,t){let o=new Float64Array(e.length).fill(1/0),r=new Int32Array(e.length).fill(-1),n=new Va(([a,i],[s,p])=>a-s||Gn(e[i].name,e[p].name));e.forEach((a,i)=>{q(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(q(e[p]))continue;let u=i+e[p].length;u<o[p]?(o[p]=u,r[p]=s,n.push([u,p])):u===o[p]&&Gn(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 Gn(e,t){return e<t?-1:e>t?1:0}var Va=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 Ha(e,t,o){let{nodes:r,edges:n}=e,a=new Map(r.map((b,g)=>[b.id,g])),i=n.map(vn),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,u=(b,g)=>`${b}${g}`;for(let b of s)for(let{i:g,side:y}of b)p.set(u(g,y),(p.get(u(g,y))??0)+1);let l=new Map,G=new Set,P=new Set;s.forEach(([b,g],y)=>{if(b.i!==g.i&&o[b.i]===o[g.i]&&Wt(r[b.i],b.side,r[g.i],g.side)&&p.get(u(b.i,b.side))===1&&p.get(u(g.i,g.side))===1){let[T,L]=b.side==="e"?[b,g]:[g,b];l.set(T.i,{j:L.i,out:T.side,in:L.side}),G.add(L.i),P.add(y)}});let h=r.map((b,g)=>g),S=new Map,B=new Map;r.forEach((b,g)=>{if(!t[g]||G.has(g)||!l.has(g))return;let y=[g],T=Ln(l.get(g).out);S.set(u(g,T),"s");for(let L=l.get(g);L;L=l.get(L.j))y.push(L.j),T=L.in;S.set(u(y.at(-1),Ln(T)),"e");for(let L of y)h[L]=g;B.set(g,Fa(y.map(L=>r[L])))});let V=({i:b,side:g})=>({id:r[h[b]].id,side:h[b]===b&&!B.has(b)?g:S.get(u(b,g))});return{...e,nodes:r.flatMap((b,g)=>!t[g]||h[g]!==g?[]:[B.get(g)??b]),edges:n.flatMap((b,g)=>{if(P.has(g))return[];let[y,T]=s[g];if(!B.has(h[y.i])&&!B.has(h[T.i]))return[b];let L=V(y),N=V(T);return[{...b,from:L.id,to:N.id,fromStrand:L.side==="e"?"+":"-",toStrand:N.side==="s"?"+":"-"}]})}}function Ln(e){return e==="s"?"e":"s"}function Fa(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 Dt(e,t=()=>"",o=!0){let r=e.paths??[],n=Oo(e),a=new Map;r.forEach((h,S)=>{Mo(a,Ae(h.name).name,S)});let i=h=>n[h].map(S=>`${S.node.id}${S.strand}`).join(","),s=h=>a.get(h).map(S=>r[S]),p=new Map,u=new Map;for(let[h,S]of a){let B=h===e.referencePath?`\0${h}`:S.map(i).join("|"),V=t(h),b=p.get(B)??p.size;p.set(B,b);let g=`${B} ${V}`,y=u.get(g);y?y.walks.push(h):u.set(g,{rank:b,group:V,walks:[h]})}if(o&&u.size===a.size)return e;let l=[...u.values()].sort((h,S)=>h.rank-S.rank||h.group.localeCompare(S.group));if(!o)return{...e,paths:l.flatMap(({walks:h})=>h.flatMap(s))};let G=l.flatMap(({walks:h})=>s(h[0]).map(S=>h.length>1?{...S,members:h}:S)),P=new Set(l.map(h=>h.walks[0]));return{...e,paths:G,anchorPaths:e.anchorPaths?.filter(h=>P.has(h.name)),pathVisits:e.pathVisits?.filter(h=>P.has(h))}}function Pn(e,t,o){let r=Math.min(48,t,o);return Math.max(0,r-(e+t))-Math.max(0,e-(o-r))}function Cn(e,t,o){return{translateX:t.translateX+Pn(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,o.width),translateY:t.translateY+Pn(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,o.height)}}function Bn(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 ja=.05,rt=9;function Oa(e,t){let{minY:o,maxY:r}=e.layout.bounds,n=r-o;return e.columns&&n>0?Math.max(ja,Math.min(1,t/n)):1}function nt(e,t){let{scaleX:o,translateX:r,translateY:n}=t,a=t.scaleY*Oa(e,t.usableHeight),i=p=>(p-e.yOffset)*a+n,{columns:s}=e;if(s){let p=Lr(s,u=>u*o+r);return{x:u=>vr(p,u),y:i,yScale:a}}return{x:p=>p*o+r,y:i,yScale:a}}function _t(e,{x:t,y:o},r,n){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-rt)<=r&&r<=t(i.x+i.pixelWidth+rt)&&o(i.y-rt)<=n&&n<=o(i.y+i.contentHeight+rt)&&(a=i.name)}),a}var In=20,Wa=.05,Nn=6;function Da(e){let t=e.length-Nn;return t>0?`${e.slice(0,Nn).join(", ")} and ${t} more`:e.join(", ")}function _a(e){if(e.kind==="deletion")return`deletion of ${St(e.length)}`;if(e.kind==="substitution")return`substitution ${e.seq}`;let t=e.seq??"",o=t.length>In?`${t.slice(0,In)}\u2026`:t;return`insertion of ${St(t.length)} ${o}`.trim()}function za(e,t,o){let r={substitution:!1,insertion:!1,deletion:!1};if(e&&t&&Cr(t.yScale)){let n=3;for(let a of e.mismatches)if(!r[a.kind]&&Br(a,{x:t.x,width:o})&&(r[a.kind]=!0,--n===0))break}return r}var En=on.views(e=>({get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?nt(t,{...e.screenTransform,usableHeight:e.usableHeight}):void 0},get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX&&!e.layoutResult?.tubeMapPanels?Nt(t):void 0},get tubeMapPanelRulerBoxes(){let{layoutResult:t}=e,o=t?.tubeMapPanels?.at(-1);return o&&t?.referenceAxis&&!e.hostPlacesX?Nt(Sr(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?xr(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:Ar(n),tubeColors:e.tubeColorsOf(a,n.pathColors),nodeColors:e.tubeMapNodeColors?Er(a,e.effectiveColorScheme,e.referenceRamp):void 0,deviations:i?Gr(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?Dr(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=Wr(a,r);return i?{box:i,..._r(a.graph,i)}:void 0})},get tubeMapPanelTubeColors(){return e.tubeMapPanelPictures?.map(({panel:t,tubeColors:o})=>{let{graph:r}=t.result.tubeMap;return e.fadeUnhovered(o,r.paths??[],r.referencePath)})},get tubeMapPanelViews(){let t=e.tubeMapPanelPictures,o=this.tubeMapPanelTubeColors,r=e.layoutResult;if(!t||!o||!r)return;let n=t.length*Et,a=t.reduce((u,l)=>u+l.panel.height,0),i=e.usableHeight-n,s=e.scaleY*(r.referenceAxis&&a>0?Math.max(Wa,Math.min(1,i/a)):1),p=e.translateY;return t.map((u,l)=>{let{panel:G}=u,P=G.result.extent?.minY??0,h=p,S=h+Et;return p=S+G.height*s,{...u,tubeColors:o[l],frame:nt(G.result.tubeMap,{scaleX:e.scaleX,translateX:e.translateX,scaleY:s,translateY:S-P*s,usableHeight:1/0}),titleTop:h,top:S,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=qe(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 u=e.tubeMapPanelViews;u?zr(i,u,e.tubeMapPanelHover,{width:e.paneWidth,lit:a!==null}):Pr(i,r,{...n,width:e.paneWidth,highlightNode:a}),Tr(i,e.tubeMapConnectors,e.connectorZoneBottom,a),i.setTransform(1,0,0,1,0,0)}else t.uploadGeometry(o),t.setNodeHighlights(a===null?new Map:new Map([[a,vt]])),t.setEdgeHighlight(e.hoveredEdge,vt),t.updateTransform(e.paintTransform),t.renderHighlights()}})).views(e=>{let t=(n,a)=>JSON.stringify(n)===JSON.stringify(a),o=bt(()=>za(e.layoutResult?.tubeMapPanels!==void 0?void 0:e.tubeMapPicture,e.tubeMapFrame,e.paneWidth),{equals:t}),r=bt(()=>{let n=e.layoutResult,i=n?.tubeMapPanels!==void 0?[]:n?.tubeMap?.layout.reads??[],s=e.drawnGraph?.paths??[],p=e.tubeMapColoring,u=e.tubeColorKind;return{bundled:s.some(l=>l.members),values:u==="value"&&p?[...[...p.palette].map(([l,G])=>({value:l,color:G})),...p.unvalued?[{value:`${p.field}: none`,color:Or}]:[]]:void 0,roles:u==="role"||u==="tinted",haplotypeTube:u==="tinted"?Fr[0]:Hr,logWidths:n?.tubeMap!==void 0&&!n.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:i.some(l=>!l.is_reverse),reverseReads:i.some(l=>l.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?_t(r.drawing,r.frame,t,o):null)??Rr(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=Nr(n,a,t,o),s=i?.readId??Ir(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?[_a(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: ${Da(a.map(i=>e.walkLabel(i)))}`}:n?{label:e.walkLabel(n.name),readout:"haplotype"}:void 0}}));var Vn=En.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=Cn(t,e,o);e.viewportOwner!=="host"&&(e.translateX=r.translateX),e.translateY=r.translateY}})).actions(e=>{let t;return{setColorScheme(o){(e.statedColorDomain||e.chosenColorScheme==="reference-position")&&(t=e.statedColorDomain),e.writeGrammar({color:en(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=De(o,t);Ne.inherit(o,r),e.graph=r}},setLayer(t,o){e.writeGrammar({layers:Qr(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:tn(t,e.contigThickness)})},setTubeMapFold(t){e.tubeMapFold=t},setTubeMapRoutes(t){e.tubeMapRoutes=t},setTubeMapColorBy(t){e.tubeMapColorBy=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let o=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>o.get(r)??{walk:r})},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,domain:t===o.field?o.domain:[]}})},toggleWalk(t){let o=e.walkLayers;e.walkLayers=o.some(r=>r.walk===t)?o.filter(r=>r.walk!==t):[...o,{walk:t}]},setWalkColor(t,o){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...o}}:r)},setWalkRowSamples(t){e.writeGrammar({rows:t?{kept:t}:{}})},setWalkRowGroupBy(t){(t||e.walkRowGroupBy)&&e.writeGrammar({facet:t??{}})},pairWithLinearView(t){let o=e.connectedViewId;o!==void 0&&Je([...R(e).views]).some(n=>n.id===o)||(e.connectedViewId=t)},setHoveredNode(t,o){e.hoveredNode=t,e.hoveredAt=t===null?null:o??null},setHoveredPanel(t){e.hoveredPanel=t},setHoveredTube(t){let o=e.hoveredTube;(t?.track!==o?.track||t?.mismatch!==o?.mismatch)&&(e.hoveredTube=t)},setHoveredRowWalks(t){t.join(`
2
2
  `)!==e.hoveredRowWalks.join(`
3
- `)&&(e.hoveredRowWalks=t)},setHoveredWalkRow(t){e.hoveredWalkRow=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){this.setLayer("walkStrip",t),e.stripHover=null},setStripHover(t){e.stripHover=t;let o=e.walkStripRows,r=e.walkStripFrame,n=t&&o?[o.reference,...o.rows].find(i=>i.name===t.row):void 0,a=n&&r&&e.graph?$o(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;bo(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:Rt(o)?.sample,contributingHaplotype:Rt(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=rr(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=ir(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=nr(o,r,e.scaleY,e.fitPads.top));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,o){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=o,r&&e.zoomToFit()},followNewLayout(t){let o=e.layoutBounds;if(e.viewportOwner!=="user"||!o||t===e.layoutResult)return;let r=t?.referenceAxis===!0&&e.xIsReferenceBp;t===void 0||r&&(!e.paneMeasured||Bn(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(()=>{H(e)&&e.setViewportDirty()},lr)}function o(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{H(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 u=r&&i?structuredClone(i.nodePositions):i?.nodePositions;a();let g=e.graph;if(!i||!u||!p||!g||!fr(i,p,g.nodes.length,!!e.facetGrid)||!Mr())return;e.viewportOwner==="fit"&&e.zoomToFit();let T=p.deletionRoutes??{},v=structuredClone({nodes:p.nodePositions,routes:T}),y=br(u,s,p.nodePositions,e.screenTransform,g.edges),b={nodes:y,routes:wr(T,g.edges,y,v.nodes)},L=new Set(Object.keys(p.nodePositions).filter(l=>!u[l])),I=l=>{Bt(p.nodePositions,b.nodes,v.nodes,l),Bt(T,b.routes,v.routes,l),H(e)&&e.setMorphFrame(l<1&&L.size>0?{layout:p,ids:L,alpha:l}:void 0)};I(0),r=kr(I,()=>H(e)&&e.layoutResult===p,()=>{r=void 0})},finishMorph:a,moveNode(i,s,p){a();let u=e.layoutResult?.nodePositions;if(u?.[i]){for(let g of u[i])g.x+=s,g.y+=p;o()}},scheduleViewportDirty:t}});var he=JBrowseExports["@jbrowse/core/util/unzip"],za=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}),Hn=za("unzip"),Oc=he&&he.__esModule?he.default:he;async function _t(e){let t=e[0]===31&&e[1]===139;return new TextDecoder().decode(t?await Hn(e):e)}function Fn(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=Ye(a,t,{referencePath:o}),s=new Int32Array(e.nodes.names.length);for(let u of r.steps)s[u]++;i.nodes.forEach((u,g)=>{u.depth=Math.max(s[g],1)});let p=r.names.slice(1).flatMap((u,g)=>r.offsets[g+2]>r.offsets[g+1]?[{...ht(r,g+1),nodeIds:[]}]:[]);return i.paths=[...i.paths??[],...p],i}var $a=Vn.views(e=>({get engineSettings(){return or({engine:e.layoutEngine,quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}})),jn=$a.actions(e=>{let t,o,r,n=new WeakMap;function a(c,d){let{rpcManager:m}=x(e);return m.call(ae(e),"GraphComputeLayout",{...c,signal:t?.signal,statusCallback:k=>{d===r&&e.setStatusMessage(wo(k)??"")}})}function*i(c){let d=performance.now(),m=se.has(e.chosenLayoutMode),k=e.graphRegion,f=m&&k?ft(c,k):c,w=m&&e.tubeMapFold>0&&!f.reads?Ct(f,e.tubeMapFold):void 0,S=w?.graph??f,R=J=>m&&e.tubeMapRoutes!=="each"?Wt(J,e.tubeMapColoring?.valueOf,e.tubeMapRoutes==="bundled"):J,V=e.walkCut?.walkRowRuns,E=e.chosenLayoutMode==="walkrows"&&V?Wo(c,Bo(V),e.graphRegion):F(e.chosenLayoutMode).run(R(S),e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(E){let J=U=>w&&U.tubeMap?{...U,tubeMap:{...U.tubeMap,coarse:w}}:U,Fe=J(E),Me=e.tubeMapPanelSplit;return{result:m&&Me?Jr(Fe,Ue(S,Me).map(U=>{let ho=F(e.chosenLayoutMode).run(R($r(S,U.paths)),e.graphRegion);return{...U,result:ho&&J(ho)}})):Fe,duration:performance.now()-d,mode:e.chosenLayoutMode}}let W=e.engineSettings,re=Be.ready(c,W);if(re)return{result:re,duration:performance.now()-d,mode:"force"};let ne={},X=Be.layout(c,W,J=>a(J,ne));return r=n.get(X)??ne,n.set(X,r),{...yield X,mode:"force"}}let s=0,p=!1,u,g,T=new Map;function v(){e.graph!==g&&(g=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0)}function*y(c){let d=++s;p=!0,r=void 0;let m=()=>e.graph===c&&d===s,k=t?.signal,f;try{if(e.modeDrawsNodes&&c.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${c.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.`);f=yield*i(c)}catch(S){if(!m()||k?.aborted)return!1;throw u=S,v(),S}finally{d===s&&(p=!1,B())}let w=m();if(w){u!==void 0&&e.error===u&&(e.error=void 0),u=void 0;let S=e.layoutResult,R=e.screenTransform;g=c,e.layoutResult=f.result,e.drawnLayoutMode=f.mode,e.setLayoutMs(f.duration),e.followNewLayout(S),e.morphFrom(S,R)}return w}function b(c,d){let m=c.anchorPaths;return c.anchoredBy==="paths"&&m?(dt(c,e.assemblySpellings(d.assemblyName))??Co(m,d.assemblyName))?.name:void 0}function L(c,d,m,k=!1){let f=e.referencePath||m?.assemblyName,w=typeof c!="string"&&c.walkRowRuns&&!k?Fn(c,d,f):Ye(c,d,{referencePath:f});return w.anchoredBy==="tags"&&!w.referencePath&&w.paths?.length&&m&&(w.referencePath=dt(w,e.assemblySpellings(m.assemblyName))?.name),w}function I(c){e.graph=c?.graph,e.walkCut=c?.walkCut,e.graphRegion=c?.region,e.loadedReferencePath=c?.loadedReferencePath,e.foldedBelowBp=c?.foldedBelowBp,e.readsShown=c?.readsShown,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,T.clear(),e.repeatArrays=void 0,e.clearInteractionState()}function*l(c,d,m,k=!1,f,w=0,S){let R=t?.signal,V=typeof c!="string"&&c.walkRowRuns?c:void 0,E=L(c,d,m),W=m?b(E,m):void 0,re=!e.referencePath&&W!==void 0&&W!==E.referencePath?We(E,W):E,ne=w>0&&!f?jt(re,w):re,X=m&&ne!==re?Mt(ne,m,w):ne,ut;if(f){e.setStatusMessage("Reading alignments");try{let{records:Y,total:U}=yield f(X);X.reads=Y,ut={shown:Y.length,total:U}}catch(Y){if(R?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",Y)}if(R?.aborted)return}let J=k?e.selectedNode:null;I({graph:X,walkCut:V,region:m,loadedReferencePath:W,foldedBelowBp:ne===re?void 0:w,readsShown:ut});let Fe=new Set(X.nodes.map(Y=>Y.name));e.openBubbles=e.openBubbles.filter(Y=>Pt(Y).some(U=>Fe.has(U))),J!==null&&X.nodes.some(Y=>Y.id===J)&&(e.selectedNode=J),e.setStatusMessage("Computing layout");let Me=S?.();Me?.catch(()=>{}),yield*y(X),Me&&!R?.aborted&&(e.setStatusMessage("Reading annotations"),yield Me)}let h=0,P;function $(){let c=++h;return t?.abort(),t=new AbortController,P=c,e.loadCanceled=!1,{isLive:()=>c===h,signal:t.signal}}function B(){P===void 0&&!p&&e.finishLoading()}function He(){P=void 0,B()}function*io(c,d){let m=$();e.isLoading=!0,e.error=void 0;try{yield*d(m)}catch(k){m.isLive()&&(console.error(`[GraphGenomeView.${c}]`,k),e.error=k)}finally{m.isLive()&&He()}}function*so(c,d,m,k){try{return yield x(e).rpcManager.call(ae(e),"CoreGetFeatures",{adapterConfig:c,regions:[d],signal:k})}catch(f){console.warn(`[GraphGenomeView] no ${m} for this graph`,f);return}}function*ba(c,d,m,k,f=0){let w=mr(c);if(c.type!=="RgfaTabixAdapter"||w===void 0)return;let S=yield*so({type:"MinigraphBubbleAdapter",uri:`${w}.bubbles.bed.gz`,baseUri:c.baseUri,assemblyNameToPanSN:c.assemblyNameToPanSN},d,"bubble index",k);S&&m()&&(e.indexBubbles=S.flatMap(R=>{let V=R.get("start"),E=R.get("end"),W=R.get("longestAlleleLength");return Math.max(E-V,W)<f?[]:[{refName:d.refName,start:V,end:E,segmentCount:R.get("segmentCount"),pathCount:R.get("pathCount")??0,inversion:R.get("inversion"),shortestAlleleLength:R.get("shortestAlleleLength"),longestAlleleLength:W,segments:R.get("segments"),shortestAllele:void 0,longestAllele:void 0}]}))}function*po(c,d,m,k){let f=c?e.sessionTrack(c):void 0;if(f)return yield*so(Q(f,"adapter"),d,m,k)}let co={genes:{trackId:()=>e.geneTrack?.trackId,set:c=>{e.geneTrackFeatures=c}},repeats:{trackId:()=>e.repeatTrack?.trackId,set:c=>{e.repeatArrays=c&&qr(c)}}};function*uo(c,d,m,k){let{trackId:f,set:w}=co[c],S=f(),R=yield*po(S,d,c,k);R&&m()&&f()===S&&w(R)}function mo(c,d,m){return["genes","repeats"].map(k=>O(uo)(k,c,d,m))}function*lo(c){let d=e.graphRegion;d&&(co[c].set(void 0),yield*uo(c,d,()=>e.graphRegion===d))}function*pt(c,d,m){yield*io("loadWholeGFA",function*({isLive:k,signal:f}){let w=typeof d=="string"?d:yield d(f);k()&&(yield*l(w,c,m,!1,void 0,0,m&&(()=>Promise.all(mo(m,k,f)))))})}function ct(){t?.abort(),t=void 0,P=void 0,h++,s++,p=!1,r=void 0}function wa(){let c=e.walkCut,d=e.graph;if(!c||!d||e.chosenLayoutMode==="walkrows")return d;let m=L(c,d.name,e.graphRegion,!0);return e.graph=m,e.walkCut=void 0,m}function go(){ct(),e.finishMorph(),e.morphEntering=void 0,e.drawnBatch=Ce,e.paintedViewport=void 0,I(),g=void 0,u=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(){go()},cancelLoad(){e.canCancelLoad&&(go(),e.loadCanceled=!0)},stopLoad(){ct(),v(),e.layoutResult||I(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){ct()},loadGFA:O(function*(c,d="Imported GFA"){yield*pt(d,c)}),loadGFAFile:O(function*(c,d){e.setStatusMessage("Reading file"),yield*pt(d,()=>c.arrayBuffer().then(m=>_t(new Uint8Array(m))))}),loadGFAFromLocation:O(function*(c,d){e.setStatusMessage("Fetching GFA"),yield*pt(ce(c)||"GFA",m=>gt(c,Te(e).pluginManager).readFile({signal:m}).then(_t),d)}),cutSubgraph:O(function*(c,d,m={},k=0){yield*io("cutSubgraph",function*({isLive:f,signal:w}){e.setStatusMessage("Fetching subgraph");let S=performance.now(),R=yield x(e).rpcManager.call(ae(e),"GetSubgraph",{adapterConfig:c,region:d,opts:m,signal:w});if(f()){if(e.setFetchMs(performance.now()-S),!R)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");yield*l(R,Ko(d),d,!0,wn(c)?V=>x(e).rpcManager.call(ae(e),"GetGraphReads",{adapterConfig:c,nodeNames:V.nodes.map(E=>E.name),signal:w}):void 0,k,()=>Promise.all([m.tier==="coarse"?void 0:O(ba)(c,d,f,w,e.foldedBelowBp),...mo(d,f,w)]))}})}),reloadRepeats:O(function*(){yield*lo("repeats")}),reloadGenes:O(function*(){yield*lo("genes")}),loadWalkRowSampleTable:O(function*(){let c=e.walkRowSamplesTsv,d=c?JSON.stringify(c):void 0;if(d!==o&&(o=d,e.walkRowSampleTable=void 0,!!c))try{let m=yield gt(c,Te(e).pluginManager).readFile("utf8");H(e)&&d===o&&(e.walkRowSampleTable=Vr(m))}catch(m){H(e)&&d===o&&(o=void 0,x(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(m)})`,"warning"))}}),loadWalkGenes:O(function*(){let c=e.walkGeneReads?.reads??[],d=JSON.stringify(c),m=e.graph,k=new Map;yield Promise.all(c.map(({row:f,trackId:w,region:S})=>O(function*(){let R=`${w} ${S.refName}:${S.start}-${S.end}`,V=T.get(R);if(!V){let E=yield*po(w,S,"haplotype genes");if(!E)return;V=Zr(E).map(W=>({...W,refName:S.refName})),T.set(R,V)}k.set(f,V)})())),H(e)&&e.graph===m&&JSON.stringify(e.walkGeneReads?.reads??[])===d&&(e.walkGeneFeatures=c.length?k:void 0)}),toggleBubble(c){let d=e.openBubbles,m=d.findIndex(S=>At(S,c));if(m>=0){e.openBubbles=d.slice(0,m);return}let k=new Set(Pt(c));if(!e.graph?.nodes.some(S=>k.has(S.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,w=f.length-1;for(;w>=0&&!f[w].some(S=>At(S,c));)w--;e.openBubbles=[...d.slice(0,w+1),c]},closeBubbles(){e.openBubbles.length>0&&(e.openBubbles=[])},recomputeLayout:O(function*(){let c=wa();if(c){e.isLoading=!0,e.setStatusMessage("Computing layout");try{yield*y(c)}catch(d){console.error("[GraphGenomeView.recomputeLayout]",d),e.error=d}}})}});function Ja(e){return z(e)&&typeof e.get=="function"}function Ya(e){let t=Ja(e)?e.get("name"):z(e)?e.name:void 0;return typeof t=="string"?t:void 0}function On(e){let t;if(z(e)&&z(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:Ya(e.hoverFeature)})}return t}function Wn(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Dn({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}var Ua=/^(.+) HP(\d+)$/,Xa=/^(.+)\.(\d+)$/;function Ka(e){let t=Ua.exec(e),o=Xa.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 qa(e){return Le(e).name.split("#")[1]}function _n(e,t){let o=t.map(r=>r.name);for(let{sample:r,haplotype:n}of Ka(e)){let a=o.filter(i=>So(Le(i).name)===r&&(n===void 0||qa(i)===n));if(a.length>0)return a}return[]}var zn=jn.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){G(e,ve(()=>{e.fittedTransform&&ie(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),G(e,C(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),G(e,C(()=>{let r=e.facetGrid;return r?`${e.facetSetting.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),G(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})),G(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})),G(e,C(()=>`${e.fitPadTop} ${e.layoutBounds?.h} ${e.usableHeight}`,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),G(e,ve(()=>{let r=On(x(e).hovered),n=e.hoverLightsEverything;ie(()=>{let a=e.graphRegion,i=e.graph,s=r&&a&&Wn(r,a)?r:void 0,p=s?.featureName&&i?.paths?_n(s.featureName,i.paths):[];a&&i&&!e.pointerInPane&&e.setHoveredNode(s&&n&&p.length===0?Dn({hover:s,nodes:i.nodes}):null),e.setHoveredRowWalks(p)})})),G(e,C(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.clearHover()},{name:"GraphClearHoverOnViewportChange"}));let o=!0;G(e,ve(()=>{let{scale:r}=e,n=hr(e);if(o){o=!1;return}let a=ie(()=>e.builtViewport);a?.scale===r&&ar(a.bounds,n)||e.scheduleViewportDirty()})),G(e,ve(()=>{let r=e.currentRenderingBackend;r&&(e.applySelection(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:o=>{if(vt(Ke()),o.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap||e.facetPanels)return vt(e.viewportDirty),o.uploadGeometry(Ce),e.setGeometryMetrics(0,Ce,{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()]])G(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}));G(e,C(()=>e.chosenLayoutMode,(t,o)=>{t!==e.handledLayoutMode&&e.relayout(o)})),G(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})),G(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=>({expandWalk(t){e.expandedWalks.includes(t)||(e.expandedWalks=e.expandedWalks.concat(t),e.retryLoad())}}));var Za="FeatureTrack";function $n({session:e,assemblyName:t,first:o}){let r=Pe(e,t),n=[];for(let a of e.tracks){let i=Q(a,"trackId");Q(a,"type")===Za&&typeof i=="string"&&i!==o&&Je(e,a).includes(r)&&n.push(i)}return o?[o,...n]:n}var Jn=D(A("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 nt(e,t){Eo(e,t);let o=e.find(r=>"subMenu"in r&&r.label===No);o&&!o.icon&&(o.icon=Jn)}var Qa="SyntenyTrack",ei="Synteny adapters";function ti(e){if(Q(e,"type")===Qa)return!0;let t=e.adapter?.type;if(typeof t!="string"||!To(e))return!1;let{pluginManager:o}=Te(e);return!!o?.hasAdapterType(t)&&o.getAdapterType(t).adapterMetadata?.category===ei}function Yn(e,t){let o=new Set(t),r=[];for(let n of e.tracks){let a=Q(n,"trackId");if(ti(n)&&typeof a=="string"){let i=Je(e,n).filter(s=>o.has(s)).length;i>=2&&r.push({trackId:a,name:Io(n,e),coverage:i})}}return r.sort((n,a)=>a.coverage-n.coverage)}function Un(e,t,o="image/svg+xml"){let r=URL.createObjectURL(new Blob([e],{type:o})),n=document.createElement("a");n.href=r,n.download=t,n.click(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}var Xn=[["fmmm","FMMM"],["stress","stress"]],zt=e=>e.label.replace(/ layout$/,"");function q(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 Kn=zn.actions(e=>({showInLinearView(t){let o=x(e),r=t.assembly===e.graphRegion?.assemblyName,n=qo({session:o,location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId,tracks:$n({session:o,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(n)},highlightInLinearView(t){Zo({session:x(e),location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId})},showSyntenyView(t){Qo({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?Yn(x(e),t):[]}})).views(e=>({walkRowSampleMenuItems(){let{disagreeing:t}=e.walkRowSampleChoices,o=e.walkRowSamples,r=n=>n.join(`
3
+ `)&&(e.hoveredRowWalks=t)},setHoveredWalkRow(t){e.hoveredWalkRow=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){this.setLayer("walkStrip",t),e.stripHover=null},setStripHover(t){e.stripHover=t;let o=e.walkStripRows,r=e.walkStripFrame,n=t&&o?[o.reference,...o.rows].find(i=>i.name===t.row):void 0,a=n&&r&&e.graph?$o(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=R(e),n=e.graphRegion,a=n?e.nodeSpan(t):void 0;bo(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:Tt(o)?.sample,contributingHaplotype:Tt(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=rr(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=ir(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=nr(o,r,e.scaleY,e.fitPads.top));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>({hostTransform(t,o){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=o,r&&e.zoomToFit()},followNewLayout(t){let o=e.layoutBounds;if(e.viewportOwner!=="user"||!o||t===e.layoutResult)return;let r=t?.referenceAxis===!0&&e.xIsReferenceBp;t===void 0||r&&(!e.paneMeasured||Bn(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(()=>{j(e)&&e.setViewportDirty()},lr)}function o(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{j(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 u=r&&i?structuredClone(i.nodePositions):i?.nodePositions;a();let l=e.graph;if(!i||!u||!p||!l||!wr(i,p,l.nodes.length,!!e.facetGrid)||!Mr())return;e.viewportOwner==="fit"&&e.zoomToFit();let G=p.deletionRoutes??{},P=structuredClone({nodes:p.nodePositions,routes:G}),h=br(u,s,p.nodePositions,e.screenTransform,l.edges),S={nodes:h,routes:fr(G,l.edges,h,P.nodes)},B=new Set(Object.keys(p.nodePositions).filter(b=>!u[b])),V=b=>{It(p.nodePositions,S.nodes,P.nodes,b),It(G,S.routes,P.routes,b),j(e)&&e.setMorphFrame(b<1&&B.size>0?{layout:p,ids:B,alpha:b}:void 0)};V(0),r=kr(V,()=>j(e)&&e.layoutResult===p,()=>{r=void 0})},finishMorph:a,moveNode(i,s,p){a();let u=e.layoutResult?.nodePositions;if(u?.[i]){for(let l of u[i])l.x+=s,l.y+=p;o()}},scheduleViewportDirty:t}});var ye=JBrowseExports["@jbrowse/core/util/unzip"],$a=e=>ye!=null&&e in Object(ye)?ye[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}),Hn=$a("unzip"),Wc=ye&&ye.__esModule?ye.default:ye;async function zt(e){let t=e[0]===31&&e[1]===139;return new TextDecoder().decode(t?await Hn(e):e)}function Fn(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=Ue(a,t,{referencePath:o}),s=new Int32Array(e.nodes.names.length);for(let u of r.steps)s[u]++;i.nodes.forEach((u,l)=>{u.depth=Math.max(s[l],1)});let p=r.names.slice(1).flatMap((u,l)=>r.offsets[l+2]>r.offsets[l+1]?[{...yt(r,l+1),nodeIds:[]}]:[]);return i.paths=[...i.paths??[],...p],i}var Ja=Vn.views(e=>({get engineSettings(){return or({engine:e.layoutEngine,quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}})),jn=Ja.actions(e=>{let t,o,r,n=new WeakMap;function a(c,d){let{rpcManager:m}=R(e);return m.call(ie(e),"GraphComputeLayout",{...c,signal:t?.signal,statusCallback:k=>{d===r&&e.setStatusMessage(fo(k)??"")}})}function*i(c){let d=performance.now(),m=pe.has(e.chosenLayoutMode),k=e.graphRegion,w=m&&k?Mt(c,k):c,f=m&&e.tubeMapFold>0&&!w.reads?Bt(w,e.tubeMapFold):void 0,x=f?.graph??w,v=Y=>m&&e.tubeMapRoutes!=="each"?Dt(Y,e.tubeMapColoring?.valueOf,e.tubeMapRoutes==="bundled"):Y,F=e.walkCut?.walkRowRuns,H=e.chosenLayoutMode==="walkrows"&&F?Wo(c,Bo(F),e.graphRegion):O(e.chosenLayoutMode).run(v(x),e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(H){let Y=X=>f&&X.tubeMap?{...X,tubeMap:{...X.tubeMap,coarse:f}}:X,je=Y(H),Se=e.tubeMapPanelSplit;return{result:m&&Se?Jr(je,Xe(x,Se).map(X=>{let ho=O(e.chosenLayoutMode).run(v($r(x,X.paths)),e.graphRegion);return{...X,result:ho&&Y(ho)}})):je,duration:performance.now()-d,mode:e.chosenLayoutMode}}let _=e.engineSettings,ne=Ne.ready(c,_);if(ne)return{result:ne,duration:performance.now()-d,mode:"force"};let ae={},K=Ne.layout(c,_,Y=>a(Y,ae));return r=n.get(K)??ae,n.set(K,r),{...yield K,mode:"force"}}let s=0,p=!1,u,l,G=new Map;function P(){e.graph!==l&&(l=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0)}function*h(c){let d=++s;p=!0,r=void 0;let m=()=>e.graph===c&&d===s,k=t?.signal,w;try{if(e.modeDrawsNodes&&c.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${c.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.`);w=yield*i(c)}catch(x){if(!m()||k?.aborted)return!1;throw u=x,P(),x}finally{d===s&&(p=!1,L())}let f=m();if(f){u!==void 0&&e.error===u&&(e.error=void 0),u=void 0;let x=e.layoutResult,v=e.screenTransform;l=c,e.layoutResult=w.result,e.drawnLayoutMode=w.mode,e.setLayoutMs(w.duration),e.followNewLayout(x),e.morphFrom(x,v)}return f}function S(c,d){let m=c.anchorPaths;return c.anchoredBy==="paths"&&m?(mt(c,e.assemblySpellings(d.assemblyName))??Co(m,d.assemblyName))?.name:void 0}function B(c,d,m,k=!1){let w=e.referencePath||m?.assemblyName,f=typeof c!="string"&&c.walkRowRuns&&!k?Fn(c,d,w):Ue(c,d,{referencePath:w});return f.anchoredBy==="tags"&&!f.referencePath&&f.paths?.length&&m&&(f.referencePath=mt(f,e.assemblySpellings(m.assemblyName))?.name),f}function V(c){e.graph=c?.graph,e.walkCut=c?.walkCut,e.graphRegion=c?.region,e.loadedReferencePath=c?.loadedReferencePath,e.foldedBelowBp=c?.foldedBelowBp,e.readsShown=c?.readsShown,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,G.clear(),e.repeatArrays=void 0,e.clearInteractionState()}function*b(c,d,m,k=!1,w,f=0,x){let v=t?.signal,F=typeof c!="string"&&c.walkRowRuns?c:void 0,H=B(c,d,m),_=m?S(H,m):void 0,ne=!e.referencePath&&_!==void 0&&_!==H.referencePath?De(H,_):H,ae=f>0&&!w?Ot(ne,f,{cut:!0}):ne,K=m&&ae!==ne?kt(ae,m,f):ae,dt;if(w){e.setStatusMessage("Reading alignments");try{let{records:U,total:X}=yield w(K);K.reads=U,dt={shown:U.length,total:X}}catch(U){if(v?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",U)}if(v?.aborted)return}let Y=k?e.selectedNode:null;V({graph:K,walkCut:F,region:m,loadedReferencePath:_,foldedBelowBp:ae===ne?void 0:f,readsShown:dt});let je=new Set(K.nodes.map(U=>U.name));e.openBubbles=e.openBubbles.filter(U=>Ct(U).some(X=>je.has(X))),Y!==null&&K.nodes.some(U=>U.id===Y)&&(e.selectedNode=Y),e.setStatusMessage("Computing layout");let Se=x?.();Se?.catch(()=>{}),yield*h(K),Se&&!v?.aborted&&(e.setStatusMessage("Reading annotations"),yield Se)}let g=0,y;function T(){let c=++g;return t?.abort(),t=new AbortController,y=c,e.loadCanceled=!1,{isLive:()=>c===g,signal:t.signal}}function L(){y===void 0&&!p&&e.finishLoading()}function N(){y=void 0,L()}function*ke(c,d){let m=T();e.isLoading=!0,e.error=void 0;try{yield*d(m)}catch(k){m.isLive()&&(console.error(`[GraphGenomeView.${c}]`,k),e.error=k)}finally{m.isLive()&&N()}}function*so(c,d,m,k){try{return yield R(e).rpcManager.call(ie(e),"CoreGetFeatures",{adapterConfig:c,regions:[d],signal:k})}catch(w){console.warn(`[GraphGenomeView] no ${m} for this graph`,w);return}}function*ba(c,d,m,k,w=0){let f=mr(c);if(c.type!=="RgfaTabixAdapter"||f===void 0)return;let x=yield*so({type:"MinigraphBubbleAdapter",uri:`${f}.bubbles.bed.gz`,baseUri:c.baseUri,assemblyNameToPanSN:c.assemblyNameToPanSN},d,"bubble index",k);x&&m()&&(e.indexBubbles=x.flatMap(v=>{let F=v.get("start"),H=v.get("end"),_=v.get("longestAlleleLength");return Math.max(H-F,_)<w?[]:[{refName:d.refName,start:F,end:H,segmentCount:v.get("segmentCount"),pathCount:v.get("pathCount")??0,inversion:v.get("inversion"),shortestAlleleLength:v.get("shortestAlleleLength"),longestAlleleLength:_,segments:v.get("segments"),shortestAllele:void 0,longestAllele:void 0}]}))}function*po(c,d,m,k){let w=c?e.sessionTrack(c):void 0;if(w)return yield*so(ee(w,"adapter"),d,m,k)}let co={genes:{trackId:()=>e.geneTrack?.trackId,set:c=>{e.geneTrackFeatures=c}},repeats:{trackId:()=>e.repeatTrack?.trackId,set:c=>{e.repeatArrays=c&&qr(c)}}};function*uo(c,d,m,k){let{trackId:w,set:f}=co[c],x=w(),v=yield*po(x,d,c,k);v&&m()&&w()===x&&f(v)}function mo(c,d,m){return["genes","repeats"].map(k=>D(uo)(k,c,d,m))}function*lo(c){let d=e.graphRegion;d&&(co[c].set(void 0),yield*uo(c,d,()=>e.graphRegion===d))}function*ct(c,d,m){yield*ke("loadWholeGFA",function*({isLive:k,signal:w}){let f=typeof d=="string"?d:yield d(w);k()&&(yield*b(f,c,m,!1,void 0,0,m&&(()=>Promise.all(mo(m,k,w)))))})}function ut(){t?.abort(),t=void 0,y=void 0,g++,s++,p=!1,r=void 0}function fa(){let c=e.walkCut,d=e.graph;if(!c||!d||e.chosenLayoutMode==="walkrows")return d;let m=B(c,d.name,e.graphRegion,!0);return e.graph=m,e.walkCut=void 0,m}function go(){ut(),e.finishMorph(),e.morphEntering=void 0,e.drawnBatch=Ie,e.paintedViewport=void 0,V(),l=void 0,u=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(){go()},cancelLoad(){e.canCancelLoad&&(go(),e.loadCanceled=!0)},stopLoad(){ut(),P(),e.layoutResult||V(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){ut()},loadGFA:D(function*(c,d="Imported GFA"){yield*ct(d,c)}),loadGFAFile:D(function*(c,d){e.setStatusMessage("Reading file"),yield*ct(d,()=>c.arrayBuffer().then(m=>zt(new Uint8Array(m))))}),loadGFAFromLocation:D(function*(c,d){e.setStatusMessage("Fetching GFA"),yield*ct(ue(c)||"GFA",m=>ht(c,Le(e).pluginManager).readFile({signal:m}).then(zt),d)}),cutSubgraph:D(function*(c,d,m={},k=0){yield*ke("cutSubgraph",function*({isLive:w,signal:f}){e.setStatusMessage("Fetching subgraph");let x=performance.now(),v=yield R(e).rpcManager.call(ie(e),"GetSubgraph",{adapterConfig:c,region:d,opts:m,signal:f});if(w()){if(e.setFetchMs(performance.now()-x),!v)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");yield*b(v,Ko(d),d,!0,fn(c)?F=>R(e).rpcManager.call(ie(e),"GetGraphReads",{adapterConfig:c,nodeNames:F.nodes.map(H=>H.name),signal:f}):void 0,k,()=>Promise.all([m.tier==="coarse"?void 0:D(ba)(c,d,w,f,e.foldedBelowBp),...mo(d,w,f)]))}})}),reloadRepeats:D(function*(){yield*lo("repeats")}),reloadGenes:D(function*(){yield*lo("genes")}),loadWalkRowSampleTable:D(function*(){let c=e.walkRowSamplesTsv,d=c?JSON.stringify(c):void 0;if(d!==o&&(o=d,e.walkRowSampleTable=void 0,!!c))try{let m=yield ht(c,Le(e).pluginManager).readFile("utf8");j(e)&&d===o&&(e.walkRowSampleTable=Vr(m))}catch(m){j(e)&&d===o&&(o=void 0,R(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(m)})`,"warning"))}}),loadWalkGenes:D(function*(){let c=e.walkGeneReads?.reads??[],d=JSON.stringify(c),m=e.graph,k=new Map;yield Promise.all(c.map(({row:w,trackId:f,region:x})=>D(function*(){let v=`${f} ${x.refName}:${x.start}-${x.end}`,F=G.get(v);if(!F){let H=yield*po(f,x,"haplotype genes");if(!H)return;F=Zr(H).map(_=>({..._,refName:x.refName})),G.set(v,F)}k.set(w,F)})())),j(e)&&e.graph===m&&JSON.stringify(e.walkGeneReads?.reads??[])===d&&(e.walkGeneFeatures=c.length?k:void 0)}),toggleBubble(c){let d=e.openBubbles,m=d.findIndex(x=>Pt(x,c));if(m>=0){e.openBubbles=d.slice(0,m);return}let k=new Set(Ct(c));if(!e.graph?.nodes.some(x=>k.has(x.name))){R(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let w=e.openBubbleInsides,f=w.length-1;for(;f>=0&&!w[f].some(x=>Pt(x,c));)f--;e.openBubbles=[...d.slice(0,f+1),c]},closeBubbles(){e.openBubbles.length>0&&(e.openBubbles=[])},recomputeLayout:D(function*(){let c=fa();if(c){e.isLoading=!0,e.setStatusMessage("Computing layout");try{yield*h(c)}catch(d){console.error("[GraphGenomeView.recomputeLayout]",d),e.error=d}}})}});function Ya(e){return J(e)&&typeof e.get=="function"}function Ua(e){let t=Ya(e)?e.get("name"):J(e)?e.name:void 0;return typeof t=="string"?t:void 0}function On(e){let t;if(J(e)&&J(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:Ua(e.hoverFeature)})}return t}function Wn(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function Dn({hover:e,nodes:t}){let o,r;for(let n of t)n.name===e.featureName?o=n.id:r===void 0&&q(n)&&e.coord>=n.stable.start&&e.coord<n.stable.start+n.length&&(r=n.id);return o??r??null}var Xa=/^(.+) HP(\d+)$/,Ka=/^(.+)\.(\d+)$/;function qa(e){let t=Xa.exec(e),o=Ka.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 Za(e){return Ae(e).name.split("#")[1]}function _n(e,t){let o=t.map(r=>r.name);for(let{sample:r,haplotype:n}of qa(e)){let a=o.filter(i=>So(Ae(i).name)===r&&(n===void 0||Za(i)===n));if(a.length>0)return a}return[]}var zn=jn.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){A(e,Pe(()=>{e.fittedTransform&&se(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),A(e,I(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),A(e,I(()=>{let r=e.facetGrid;return r?`${e.facetSetting.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),A(e,I(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),A(e,I(()=>e.hasGraph&&(e.chosenLayoutMode==="walkrows"||pe.has(e.chosenLayoutMode))?JSON.stringify(e.walkRowSamplesTsv??null):void 0,r=>{r!==void 0&&e.loadWalkRowSampleTable()},{fireImmediately:!0})),A(e,I(()=>`${e.fitPadTop} ${e.layoutBounds?.h} ${e.usableHeight}`,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),A(e,Pe(()=>{let r=On(R(e).hovered),n=e.hoverLightsEverything;se(()=>{let a=e.graphRegion,i=e.graph,s=r&&a&&Wn(r,a)?r:void 0,p=s?.featureName&&i?.paths?_n(s.featureName,i.paths):[];a&&i&&!e.pointerInPane&&e.setHoveredNode(s&&n&&p.length===0?Dn({hover:s,nodes:i.nodes}):null),e.setHoveredRowWalks(p)})})),A(e,I(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.clearHover()},{name:"GraphClearHoverOnViewportChange"}));let o=!0;A(e,Pe(()=>{let{scale:r}=e,n=hr(e);if(o){o=!1;return}let a=se(()=>e.builtViewport);a?.scale===r&&ar(a.bounds,n)||e.scheduleViewportDirty()})),A(e,Pe(()=>{let r=e.currentRenderingBackend;r&&(e.applySelection(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:o=>{if(At(qe()),o.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap||e.facetPanels)return At(e.viewportDirty),o.uploadGeometry(Ie),e.setGeometryMetrics(0,Ie,{scale:se(()=>e.scale),bounds:se(()=>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:se(()=>e.scale),bounds:n.viewportBounds}),!0):!1},render:o=>e.nodePositions?(e.paint(o),e.markPainted(),!0):!1,releaseTargets:o=>{o.releaseOffscreenTargets()}}))}})).actions(e=>({relayoutFrom(t){return e.recomputeLayout()}})).actions(e=>({relayout(t){return e.handledLayoutMode=e.chosenLayoutMode,e.relayoutFrom(t)}})).actions(e=>({switchLayout(t){let o=e.chosenLayoutMode;return e.setLayoutMode(t),e.relayout(o)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user");for(let[t,o]of[[()=>e.geneTrack?.trackId,()=>e.reloadGenes()],[()=>e.repeatTrack?.trackId,()=>e.reloadRepeats()]])A(e,I(()=>({track:t(),region:e.graphRegion}),(r,n)=>{r.region&&r.region===n.region&&o()},{equals:(r,n)=>r.track===n.track&&r.region===n.region}));A(e,I(()=>e.chosenLayoutMode,(t,o)=>{t!==e.handledLayoutMode&&e.relayout(o)})),A(e,I(()=>({mode:e.chosenLayoutMode,engine:JSON.stringify(e.engineSettings),maxNodes:e.maxGraphNodes}),(t,o)=>{e.graph&&t.mode===o.mode&&(t.engine!==o.engine&&e.usesLayoutEngine||t.maxNodes!==o.maxNodes&&e.modeDrawsNodes)&&e.recomputeLayout()},{equals:(t,o)=>t.mode===o.mode&&t.engine===o.engine&&t.maxNodes===o.maxNodes})),A(e,I(()=>pe.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=>({expandWalk(t){e.expandedWalks.includes(t)||(e.expandedWalks=e.expandedWalks.concat(t),e.retryLoad())}}));var Qa="FeatureTrack";function $n({session:e,assemblyName:t,first:o}){let r=Be(e,t),n=[];for(let a of e.tracks){let i=ee(a,"trackId");ee(a,"type")===Qa&&typeof i=="string"&&i!==o&&Ye(e,a).includes(r)&&n.push(i)}return o?[o,...n]:n}var Jn=z(C("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 at(e,t){Eo(e,t);let o=e.find(r=>"subMenu"in r&&r.label===No);o&&!o.icon&&(o.icon=Jn)}var ei="SyntenyTrack",ti="Synteny adapters";function oi(e){if(ee(e,"type")===ei)return!0;let t=e.adapter?.type;if(typeof t!="string"||!To(e))return!1;let{pluginManager:o}=Le(e);return!!o?.hasAdapterType(t)&&o.getAdapterType(t).adapterMetadata?.category===ti}function Yn(e,t){let o=new Set(t),r=[];for(let n of e.tracks){let a=ee(n,"trackId");if(oi(n)&&typeof a=="string"){let i=Ye(e,n).filter(s=>o.has(s)).length;i>=2&&r.push({trackId:a,name:Io(n,e),coverage:i})}}return r.sort((n,a)=>a.coverage-n.coverage)}function Un(e,t,o="image/svg+xml"){let r=URL.createObjectURL(new Blob([e],{type:o})),n=document.createElement("a");n.href=r,n.download=t,n.click(),setTimeout(()=>{URL.revokeObjectURL(r)},0)}var Xn=[["fmmm","FMMM"],["stress","stress"]],$t=e=>e.label.replace(/ layout$/,"");function Z(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 Kn=zn.actions(e=>({showInLinearView(t){let o=R(e),r=t.assembly===e.graphRegion?.assemblyName,n=qo({session:o,location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId,tracks:$n({session:o,assemblyName:t.assembly,first:r?e.sourceTrackId:void 0})});r&&e.pairWithLinearView(n)},highlightInLinearView(t){Zo({session:R(e),location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId})},showSyntenyView(t){Qo({session:R(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?Yn(R(e),t):[]}})).views(e=>({walkRowSampleMenuItems(){let{disagreeing:t}=e.walkRowSampleChoices,o=e.walkRowSamples,r=n=>n.join(`
4
4
  `)===o?.join(`
5
- `);return[{type:"radio",label:"Every sample",checked:o===void 0,onClick:()=>{e.setWalkRowSamples(void 0)}},...t.length>0?[{type:"radio",label:"Where walk and call disagree",checked:r(t),onClick:()=>{e.setWalkRowSamples(t)}}]:[],{type:"radio",label:"Choose samples...",checked:o!==void 0&&!r(t),onClick:()=>{x(e).queueDialog(n=>[sr,{model:e,onClose:n}])}}]},walkRowGroupMenuItems(){let t=e.walkRowGroups?e.walkRowGroupBy?.field:void 0;return q([{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&&Ue(t,i).length>1;return[...q(jr.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)}),...q(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:q(dr.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:q(gr,e.tubeMapRoutes,e.setTubeMapRoutes)},...e.walkRowGroupFields.length>0?[{label:"Tube color",subMenu:q(["",...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:q(e.repeatOptions,e.selectedRepeat?.key??"",e.setRepeatKey)}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars?[{label:"Samples",subMenu:this.walkRowSampleMenuItems()}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars&&e.walkRowGroupFields.length>0?[{label:"Group by...",subMenu:this.walkRowGroupMenuItems()}]:[]]},showMenuItems(){let t=(o,r)=>({type:"checkbox",label:o,checked:e.layerSet.has(r),onClick:()=>{e.setLayer(r,!e.layerSet.has(r))}});return[t("Show bubble halos","bubbles"),t("Show deletion edges","deletions"),{label:"Hover highlight",subMenu:q(Re.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:Tn,disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let t=e.figure();t&&Un(t,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}},{label:"Copy figure spec",icon:Sn,disabled:e.figureSpecUnavailable!==void 0,disabledHelpText:e.figureSpecUnavailable,onClick:()=>{let t=e.figureSpec(),o=x(e);navigator.clipboard.writeText(`${JSON.stringify(t,null,2)}
6
- `).then(()=>{o.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(r=>{o.notify(`Could not copy the figure spec: ${String(r)}`)})}}]},highlightMenuItems({picks:t=!0}={}){let o=t?e.walkChoices:[];if(e.walkChoices.length===0||!e.liftsWalks||!t&&e.walkLayers.length===0)return[];let r=a=>e.walkLayers.some(i=>i.walk===a),n=o.length>ur;return[{type:"subHeader",label:"Highlight"},...n?[{label:"Choose haplotypes...",onClick:()=>{x(e).queueDialog(a=>[pr,{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=>[cr,{model:e,onClose:a}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...q(er.map(({value:a,label:i})=>({value:a,label:a==="walk"?"A panel per haplotype":i})),e.facetSetting.field,e.setFacet)]:[]]},colorSchemeLabel(t){let o=Gt.find(r=>r.value===t)?.label??t;return t==="auto"?`${o} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:o},graphMenuItems(){let t=this.layoutOptionMenuItems(),o=F(e.chosenLayoutMode),r=Xn.find(([n])=>n===e.layoutEngine)[1];return[{label:`Layout: ${zt(o)}${o.value==="force"?` (${r})`:""}`,icon:xn,subMenu:[...Do.flatMap(n=>{let a={type:"radio",disabled:e.graph?!n.available(e.graph):!1,disabledHelpText:n.description};return n.value==="force"?Xn.map(([i,s])=>({...a,label:`${zt(n)} (${s})`,checked:e.chosenLayoutMode===n.value&&e.layoutEngine===i,onClick:()=>{e.switchForceEngine(i)}})):[{...a,label:zt(n),checked:e.chosenLayoutMode===n.value,onClick:()=>{e.switchLayout(n.value)}}]}),...t.length>0?[{type:"divider"},...t]:[],...e.hostPlacesX?[]:[{type:"divider"},{label:"Zoom to fit",onClick:()=>{e.refitView()}}]]},{label:`Color: ${e.colorSchemeLock?.value??this.colorSchemeLabel(e.chosenColorScheme)}`,icon:Rn,disabled:e.colorSchemeLock!==void 0,disabledHelpText:e.colorSchemeLock?.why,subMenu:q(Gt.map(({value:n})=>({value:n,label:this.colorSchemeLabel(n)})),e.chosenColorScheme,e.setColorScheme)},{label:"Show...",icon:tr,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[],o=e.launchableAssemblies,r=e.graphRegion?.assemblyName;for(let n of rn({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)}}))nt(t,n);return t}}));var at=Kn.views(e=>({get trackHaplotypes(){let t=e.sourceAdapter;return t&&Ae(t)}})).views(e=>({get cutHaplotypes(){return e.subgraphHaplotypes??e.trackHaplotypes},offReference(t){let o=e.sourceTrack,r=o&&Uo(o),n=x(e);return r===void 0?void 0:Xo(Pe(n,r),Pe(n,t.assemblyName))},cutChangedFrom(t){let o=zo(F(t),{walkStrip:e.walkStrip,host:!!e.host});return e.cutsWholeWalks!==o||t==="walkrows"!=(e.chosenLayoutMode==="walkrows")}})).views(e=>({get cutOptions(){return{hops:e.subgraphContext,haplotypes:e.cutHaplotypes,...e.chosenLayoutMode==="walkrows"?{walkRows:!0}:{},...e.cutsWholeWalks?{snarls:"overlapping"}:{},...e.expandedWalks.length>0?{expand:e.expandedWalks}:{}}}}));function $t(){return M.compose("GraphGenomeView",kn,at,M.model({type:M.literal("GraphGenomeView"),gfaLocation:M.maybe(M.frozen()),loadedRegion:M.maybe(M.frozen()),loadedTrackId:M.optional(M.string,""),layoutMode:St(ze),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:St(Re)})).views(e=>({get grammar(){return{layoutMode:e.layoutMode,color:e.color,size:e.size,layers:e.layers,facet:e.facet,rows:e.rows,hover:e.hover}}})).actions(e=>({writeGrammar(t){Object.assign(e,t)}})).volatile(()=>({widthMeasured:!1})).actions(e=>{let t=e.setWidth;return{setWidth(o){t(o),e.widthMeasured=!0}}}).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get paneMeasured(){return e.widthMeasured},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?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(ce(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===ce(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(Tt(n,r)):void 0):o(r&&Tt(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),H(e)&&e.hasGraph&&(this.setGfaLocation(t),e.displayName||e.setDisplayName(ce(t)))},afterAttach(){e.graph||e.load(),G(e,C(()=>e.walkStrip,()=>{e.loadedTrackId&&!F(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var oi=Mn()({});function Jt(e){e.addViewType(()=>new fn({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:$t(),launchKeys:oi,ReactComponent:ee(()=>import("./chunks/GraphGenomeView-UCOAMRF7.js"))}))}var Yt=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function ri(e){let t=e.getElementTypesInGroup("display"),o=n=>t.find(a=>a.name===n),r=n=>n&&Object.assign(Object.create(n),{adapterCapabilities:["headerLanes"]});return[o("LinearGraphDisplay"),o("LinearBasicDisplay"),...Yt.map(n=>r(o(n)))].filter(n=>n!==void 0)}function Ut(e){e.addTrackType(()=>{let t=j("GraphTrack",{},{baseConfiguration:hn(e),explicitIdentifier:"trackId"}),o=new gn({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:yn(e,"GraphTrack",t)});for(let r of ri(e))o.addDisplayType(r);return o})}function Xt(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:o,...r}=t;return o.addView("GraphGenomeView",r),t})}var it=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"];var qn=it&&it.__esModule?it.default:it;var ye=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"],ni=e=>ye!=null&&e in Object(ye)?ye[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}),Zn=ni("trackHeightConfigSchemaFields"),em=ye&&ye.__esModule?ye.default:ye;function Qn(){return j("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:M.enumeration("LayoutMode",ze),defaultValue:"auto"},color:{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",Re),defaultValue:"nodes"},...Zn({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var be=JBrowseExports["@jbrowse/core/svg/svgReady"],ai=e=>be!=null&&e in Object(be)?be[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 ea=ai("computeSvgReady");var pm=be&&be.__esModule?be.default:be;var st=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"];var ta=st&&st.__esModule?st.default:st;var we=JBrowseExports["@jbrowse/display-kit/plotMenu"],ii=e=>we!=null&&e in Object(we)?we[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}),oa=ii("editPlotMenuItems");var dm=we&&we.__esModule?we.default:we;var fe=JBrowseExports["@jbrowse/render-core/displayPhase"],ra=e=>fe!=null&&e in Object(fe)?fe[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}),na=ra("computeActivityPhase");var aa=ra("computeDisplayStatusPhase"),lm=fe&&fe.__esModule?fe.default:fe;function Kt(e,t){if(e?.refName!==t.refName||e.assemblyName!==t.assemblyName)return!1;let o=e.end-e.start;return t.end-t.start>=o&&t.end>e.start-o&&t.start<e.end+o}var si=new Set(["scale","translateX","translateY"]);function pi(e){return Object.fromEntries(Object.keys(yr.properties).filter(t=>!si.has(t)).map(t=>[t,e[t]]))}var qt=10;function ci(e){let{aboveBpPerPx:t,foldBelowBp:o}=e??{};return typeof t=="number"?t:typeof o=="number"&&o>0?o/qt:void 0}var ui=ee(()=>import("./chunks/GraphTrackSettingsDialog-MR7X75EY.js"));function ia(e){return M.compose("LinearGraphDisplay",dn,ta(),at,M.model({type:M.literal("LinearGraphDisplay"),configuration:xo(e),layoutEngine:_o(Fo,"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:Z(t,"layoutMode"),color:Z(t,"color"),size:Z(t,"size"),layers:Z(t,"layers"),facet:Z(t,"facet"),rows:Z(t,"rows"),hover:Z(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&&Ae(o))??(r&&xt(r))},get coarseAboveBpPerPx(){return ci(t.sourceAdapter?.coarse)}})).views(t=>({tierAt(o){let r=t.coarseAboveBpPerPx;return r!==void 0&&o>r?"coarse":"fine"},capFor(o){return o==="coarse"?1/0:t.maxRegionBp},foldDrifted(o){let r=qt*o,n=t.cutFoldBp;return!t.graph?.paths?.length&&(r>=2*Math.max(n,1)||t.foldedBelowBp!==void 0&&r<=n/2)},get cutTier(){return t.coarseCut&&t.coarseAboveBpPerPx!==void 0?"coarse":"fine"}})).views(t=>({get settledCapBp(){let o=t.settledWindow;return o?t.capFor(t.tierAt(o.bpPerPx)):1/0}})).views(t=>({get regionTooLarge(){let o=t.settledWindow;return o!==void 0&&o.end-o.start>t.settledCapBp},get regionTooLargeReason(){let o=t.settledWindow;return o?`Region too large for a graph cut (${pe(o.end-o.start)}, max ${pe(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get svgReady(){return ea({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return aa({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>na({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({writeGrammar(o){for(let[r,n]of Object.entries(o))Ro(t,r,n)},setSubgraphContext(o){t.subgraphContext=o,t.dense=void 0},setSubgraphHaplotypes(o){t.subgraphHaplotypes=o,t.dense=void 0},setDense(o){t.dense=o},setHaplotypeNames(o){t.haplotypeNames=o},setMaxRegionBp(o){t.maxRegionBp=o},cut(){let o=t.cutRegion,r=t.sourceAdapter;if(!o||!r)return;let n=t.offReference(o);if(n){t.clearGraph(),t.setError(new Error(n));return}let a=t.cutTier==="coarse";return t.cutFoldBp=Math.round(qt*(t.settledWindow?.bpPerPx??t.host?.bpPerPx??0)),t.cutSubgraph(r,o,{...t.cutOptions,tier:a?"coarse":void 0},t.cutFoldBp)}})).actions(t=>({recutAt(o){let r=t.tierAt(o.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=Yr(o,t.capFor(r),F(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(o){t.settledWindow=o;let r=F(t.chosenLayoutMode).cutMargins;if(t.regionTooLarge||Kt(t.dense,o)||!t.loadCanceled&&t.tierAt(o.bpPerPx)===t.cutTier&&Ur(t.cutRegion,o,r)&&!t.foldDrifted(o.bpPerPx))return!1;let n=t.recutAt(o),a=t.recuts;return Promise.resolve(n).then(()=>{H(t)&&t.recuts===a&&wt(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?Xe(t.host):void 0;return r&&!t.regionTooLarge&&(t.cutChangedFrom(o)||F(o).cutMargins!==F(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});H(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;G(t,()=>{o?.abort()}),G(t,C(()=>{let n=t.sourceAdapter;return n&&Jo(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"})),G(t,C(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),G(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;G(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"})),G(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"})),G(t,C(()=>t.host?.coarseDynamicBlocks,n=>{let{host:a}=t,i=n&&a?Xe(a):void 0;i&&t.settleOn(i)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let o=t.host?Xe(t.host):void 0,r=t.sourceTrackId;if(!o||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge||Kt(t.dense,o))return;let n=Math.floor(o.start),a=Math.ceil(o.end);return{...pi(t),loadedTrackId:r,loadedRegion:{refName:o.refName,assemblyName:o.assemblyName,start:n,end:a},subgraphHaplotypes:t.cutHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-n),...t.grammar,layoutMode:t.chosenLayoutMode,connectedViewId:t.host?.id}}})).actions(t=>({openGraphView(){let o=t.graphViewSpec;o&&x(t).addView("GraphGenomeView",o)}})).views(t=>({cutMenuItems(){let o=t.sourceAdapter,r=t.sourceTrack;if(!o||!r||!Yo(o))return[];let n=Ae(o),a=xt(r),i=t.haplotypeNames,s=t.subgraphHaplotypes,p=u=>{t.setSubgraphHaplotypes(u),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=>[ui,{model:t,onClose:o}])},async renderSvg(o){let{renderGraphTrackSvg:r}=await import("./chunks/renderSvg-Z7YIXVQ5.js");return r(t,o)},trackMenuItems(){let o=t.launchMenuItems();nt(o,{label:"Graph genome view",icon:Qe,disabled:!t.graphViewSpec,disabledHelpText:t.error&&!wt(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:an,subMenu:r}]:[],...t.graphMenuItems(),{label:"Graph settings...",icon:sn,helpText:"Subgraph, drawing and force-directed layout",onClick:()=>{this.openSettings()}},...o,...oa(t)]}}))}function Zt(e){e.addDisplayType(()=>{let t=Qn();return Object.assign(new qn({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:ia(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:ee(()=>import("./chunks/LinearGraphDisplay-AJ5OZN27.js"))}),{adapterCapabilities:["getSubgraph"]})})}function di(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:o},index:Ge(t,o,r)}:e}var mi=j("MinigraphBubbleAdapter",{bubblesLocation:N("/path/to/graph.bb.bed.gz"),index:_("MinigraphBubbleIndex","/path/to/graph.bb.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:di}),sa=mi;function Qt(e){e.addAdapterType(()=>new te({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",configSchema:sa,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-PEQK5NII.js").then(t=>t.default)}))}function pa(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:o},segmentsIndex:Ge(`${t}.segs.bed.gz`,o,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:o},linksIndex:Ge(`${t}.links.bed.gz`,o,r)}:e}function li(e){let{coarse:t,baseUri:o,csi:r}=e;return Oe(pa(typeof t=="object"&&t!==null?{...e,coarse:pa({baseUri:o,csi:r,...t})}:e))}var gi=j("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},foldBelowBp:{type:"maybeNumber"},segmentsLocation:N("/path/to/graph.tier.segs.bed.gz"),segmentsIndex:_("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:N("/path/to/graph.tier.links.bed.gz"),linksIndex:_("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),hi=j("RgfaTabixAdapter",{segmentsLocation:N("/path/to/graph.segs.bed.gz"),segmentsIndex:_("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:N("/path/to/graph.links.bed.gz"),linksIndex:_("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),walksLocation:N(""),walksIndex:_("RgfaWalksIndex"),walkStepBudget:{type:"integer",defaultValue:ke.stepBudget},walkByteBudget:{type:"integer",defaultValue:ke.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:gi},{explicitlyTyped:!0,preProcessSnapshot:li}),ca=hi;function eo(e){e.addAdapterType(()=>new te({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",configSchema:ca,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-Q63YLPK4.js").then(t=>t.default)}))}var yi=j("WalkTabixSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},walksLocation:N("/path/to/graph.walks.bed.gz"),walksIndex:_("WalkTabixWalksIndex"),walkStepBudget:{type:"integer",defaultValue:ke.stepBudget},walkByteBudget:{type:"integer",defaultValue:ke.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},samplesTsvLocation:N(""),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Oe}),ua=yi;function to(e){e.addAdapterType(()=>new te({name:"WalkTabixSyntenyAdapter",displayName:"Walk-indexed graph adapter",configSchema:ua,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/WalkTabixSyntenyAdapter-N5PFI4LS.js").then(t=>t.default)}))}var bi=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function wi(e){return lt(e).toLowerCase().endsWith(".gbz.db")}function fi(e){let t=e.adapter;return t?.type!==void 0&&Xr.has(t.type)&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function Mi(e){let t=e.adapter,[o]=Array.isArray(e.assemblyNames)?e.assemblyNames:[],r=t?.type==="RgfaTabixAdapter"&&t.walksLocation?Lo(t.walksLocation):void 0;return o&&r&&r!==o&&t?.assemblyNameToPanSN===void 0?{...e,adapter:{...t,assemblyNameToPanSN:{[o]:r}}}:e}function ki(e,t,o){let r=n=>Ho({choice:n,loc:e,indexLoc:t,assembly:"",sample:""});if((!o||o==="GbzBaseSyntenyAdapter")&&wi(e))return r("GbzBaseSyntenyAdapter");if(!o||o==="RgfaTabixAdapter"){if(Vo(e))return r("RgfaTabixAdapter");if(lt(e).endsWith(Go)&&(t!==void 0||Po(e)))return r("RgfaTabixWalks")}}function oo(e){e.addToExtensionPoint("Core-preProcessTrackConfig",fi),e.addToExtensionPoint("Core-preProcessTrackConfig",Mi),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(o,r,n)=>ki(o,r,n)??t(o,r,n)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(o,r)=>bi.has(o)?"GraphTrack":t(o,r))}function da(e){let t;if(z(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 Si(e,t,o){let r=e.connectedViewId;return r===void 0||r===t||!o.has(r)}function ma(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function xi(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(o=>z(o)&&Array.isArray(o.displays)?o.displays.filter(r=>z(r)&&r.type==="LinearGraphDisplay"):[])}function la(e,t,o){let r=[],n=$e(e),a=new Set(n.map(i=>z(i)?i.id:void 0));for(let i of n){if(z(i)&&i.id===t)for(let s of xi(i)){let p=da(s.hoverHighlight);p&&ma(p,o)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:p})}if(z(i)&&i.type==="GraphGenomeView"&&Si(i,t,a)){let s=da(i.hoverHighlight);s&&ma(s,o)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var Ri=nn()(e=>({highlight:{height:"100%",position:"absolute",background:De(e.palette.primary.main,.08),borderLeft:`1px solid ${De(e.palette.primary.main,.4)}`,borderRight:`1px solid ${De(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),Ti=bt(function({model:t,region:o}){let{classes:r}=Ri(),n=t.getHighlightCoords(o);return n?A("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:n.left,width:n.width}}):null}),Gi=bt(function({model:t}){let{views:o}=x(t);return A(fo,{children:la([...o],t.id,t.assemblyNames).map(({key:r,region:n})=>A(Ti,{model:t,region:n},`graph-hover-${r}`))})}),ga=Gi;var Li="LinearGenomeView-TracksContainerComponent";function ro(e){e.contributeToExtensionPoint(Li,({model:t})=>A(ga,{model:t},"graphgenomeview-hover-highlight"))}function vi(e){return e.views(t=>({get adapterConfig(){return Kr(t,t.parentTrack.configuration)}}))}function no(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof mn&&Yt.includes(t.name)&&t.extendStateModel(vi),t))}var ha="GraphGenomeView";var ya="7.4.2";var ao=class extends pn{constructor(){super(...arguments);this.name=ha;this.version=ya}install(o){Jt(o),Zt(o),Ut(o),Xt(o),ro(o),eo(o),Qt(o),Et(o),to(o),Ht(o),oo(o),no(o),o.addRpcMethod(()=>new Ve(o)),o.addRpcMethod(()=>new Ee(o)),o.addRpcMethod(()=>new Ne(o)),o.addRpcMethod(()=>new Ie(o))}configure(o){try{yo(o.rootModel)&&o.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:Qe,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{ao as default};
5
+ `);return[{type:"radio",label:"Every sample",checked:o===void 0,onClick:()=>{e.setWalkRowSamples(void 0)}},...t.length>0?[{type:"radio",label:"Where walk and call disagree",checked:r(t),onClick:()=>{e.setWalkRowSamples(t)}}]:[],{type:"radio",label:"Choose samples...",checked:o!==void 0&&!r(t),onClick:()=>{R(e).queueDialog(n=>[sr,{model:e,onClose:n}])}}]},walkRowGroupMenuItems(){let t=e.walkRowGroups?e.walkRowGroupBy?.field:void 0;return Z([{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&&Xe(t,i).length>1;return[...Z(jr.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)}),...Z(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[...pe.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:Z(dr.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:Z(gr,e.tubeMapRoutes,e.setTubeMapRoutes)},...e.walkRowGroupFields.length>0?[{label:"Tube color",subMenu:Z(["",...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:Z(e.repeatOptions,e.selectedRepeat?.key??"",e.setRepeatKey)}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars?[{label:"Samples",subMenu:this.walkRowSampleMenuItems()}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars&&e.walkRowGroupFields.length>0?[{label:"Group by...",subMenu:this.walkRowGroupMenuItems()}]:[]]},showMenuItems(){let t=(o,r)=>({type:"checkbox",label:o,checked:e.layerSet.has(r),onClick:()=>{e.setLayer(r,!e.layerSet.has(r))}});return[t("Show bubble halos","bubbles"),t("Show deletion edges","deletions"),{label:"Hover highlight",subMenu:Z(Ge.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:Tn,disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let t=e.figure();t&&Un(t,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}},{label:"Copy figure spec",icon:Sn,disabled:e.figureSpecUnavailable!==void 0,disabledHelpText:e.figureSpecUnavailable,onClick:()=>{let t=e.figureSpec(),o=R(e);navigator.clipboard.writeText(`${JSON.stringify(t,null,2)}
6
+ `).then(()=>{o.notify("Figure spec copied. Save it as spec.json and run: npx -p @jbrowse/bandage-core bandage-figure spec.json -o figure.svg","info")}).catch(r=>{o.notify(`Could not copy the figure spec: ${String(r)}`)})}}]},highlightMenuItems({picks:t=!0}={}){let o=t?e.walkChoices:[];if(e.walkChoices.length===0||!e.liftsWalks||!t&&e.walkLayers.length===0)return[];let r=a=>e.walkLayers.some(i=>i.walk===a),n=o.length>ur;return[{type:"subHeader",label:"Highlight"},...n?[{label:"Choose haplotypes...",onClick:()=>{R(e).queueDialog(a=>[pr,{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:()=>{R(e).queueDialog(a=>[cr,{model:e,onClose:a}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...Z(er.map(({value:a,label:i})=>({value:a,label:a==="walk"?"A panel per haplotype":i})),e.facetSetting.field,e.setFacet)]:[]]},colorSchemeLabel(t){let o=Lt.find(r=>r.value===t)?.label??t;return t==="auto"?`${o} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:o},graphMenuItems(){let t=this.layoutOptionMenuItems(),o=O(e.chosenLayoutMode),r=Xn.find(([n])=>n===e.layoutEngine)[1];return[{label:`Layout: ${$t(o)}${o.value==="force"?` (${r})`:""}`,icon:xn,subMenu:[...Do.flatMap(n=>{let a={type:"radio",disabled:e.graph?!n.available(e.graph):!1,disabledHelpText:n.description};return n.value==="force"?Xn.map(([i,s])=>({...a,label:`${$t(n)} (${s})`,checked:e.chosenLayoutMode===n.value&&e.layoutEngine===i,onClick:()=>{e.switchForceEngine(i)}})):[{...a,label:$t(n),checked:e.chosenLayoutMode===n.value,onClick:()=>{e.switchLayout(n.value)}}]}),...t.length>0?[{type:"divider"},...t]:[],...e.hostPlacesX?[]:[{type:"divider"},{label:"Zoom to fit",onClick:()=>{e.refitView()}}]]},{label:`Color: ${e.colorSchemeLock?.value??this.colorSchemeLabel(e.chosenColorScheme)}`,icon:Rn,disabled:e.colorSchemeLock!==void 0,disabledHelpText:e.colorSchemeLock?.why,subMenu:Z(Lt.map(({value:n})=>({value:n,label:this.colorSchemeLabel(n)})),e.chosenColorScheme,e.setColorScheme)},{label:"Show...",icon:tr,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[],o=e.launchableAssemblies,r=e.graphRegion?.assemblyName;for(let n of rn({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)}}))at(t,n);return t}}));var it=Kn.views(e=>({get trackHaplotypes(){let t=e.sourceAdapter;return t&&Ce(t)}})).views(e=>({get cutHaplotypes(){return e.subgraphHaplotypes??e.trackHaplotypes},offReference(t){let o=e.sourceTrack,r=o&&Uo(o),n=R(e);return r===void 0?void 0:Xo(Be(n,r),Be(n,t.assemblyName))},cutChangedFrom(t){let o=zo(O(t),{walkStrip:e.walkStrip,host:!!e.host});return e.cutsWholeWalks!==o||t==="walkrows"!=(e.chosenLayoutMode==="walkrows")}})).views(e=>({get cutOptions(){return{hops:e.subgraphContext,haplotypes:e.cutHaplotypes,...e.chosenLayoutMode==="walkrows"?{walkRows:!0}:{},...e.cutsWholeWalks?{snarls:"overlapping"}:{},...e.expandedWalks.length>0?{expand:e.expandedWalks}:{}}}}));function Jt(){return M.compose("GraphGenomeView",kn,it,M.model({type:M.literal("GraphGenomeView"),gfaLocation:M.maybe(M.frozen()),loadedRegion:M.maybe(M.frozen()),loadedTrackId:M.optional(M.string,""),layoutMode:xt($e),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:xt(Ge)})).views(e=>({get grammar(){return{layoutMode:e.layoutMode,color:e.color,size:e.size,layers:e.layers,facet:e.facet,rows:e.rows,hover:e.hover}}})).actions(e=>({writeGrammar(t){Object.assign(e,t)}})).volatile(()=>({widthMeasured:!1})).actions(e=>{let t=e.setWidth;return{setWidth(o){t(o),e.widthMeasured=!0}}}).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get paneMeasured(){return e.widthMeasured},get sourceGfaLocation(){return e.gfaLocation},get sourceTrack(){return e.loadedTrackId?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(ue(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 (${ce(a)}) \u2014 zoom in to view graph (max ${ce(e.maxRegionBp)})`));else return e.cutSubgraph(n,r,e.cutOptions)}return{clearGraph(){t(),e.gfaLocation&&e.displayName===ue(e.gfaLocation)&&(e.displayName=void 0),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let r=e.loadedRegion,n=R(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(Gt(n,r)):void 0):o(r&&Gt(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),j(e)&&e.hasGraph&&(this.setGfaLocation(t),e.displayName||e.setDisplayName(ue(t)))},afterAttach(){e.graph||e.load(),A(e,I(()=>e.walkStrip,()=>{e.loadedTrackId&&!O(e.chosenLayoutMode).wholeWalks&&e.load()}))}}))}var ri=Mn()({});function Yt(e){e.addViewType(()=>new wn({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Jt(),launchKeys:ri,ReactComponent:te(()=>import("./chunks/GraphGenomeView-P3XMSKUQ.js"))}))}var Ut=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function ni(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"),...Ut.map(n=>r(o(n)))].filter(n=>n!==void 0)}function Xt(e){e.addTrackType(()=>{let t=W("GraphTrack",{},{baseConfiguration:hn(e),explicitIdentifier:"trackId"}),o=new gn({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:yn(e,"GraphTrack",t)});for(let r of ni(e))o.addDisplayType(r);return o})}function Kt(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:o,...r}=t;return o.addView("GraphGenomeView",r),t})}var st=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"];var qn=st&&st.__esModule?st.default:st;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}),Zn=ai("trackHeightConfigSchemaFields"),tm=be&&be.__esModule?be.default:be;function Qn(){return W("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:M.enumeration("LayoutMode",$e),defaultValue:"auto"},color:{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",Ge),defaultValue:"nodes"},...Zn({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId"})}var fe=JBrowseExports["@jbrowse/core/svg/svgReady"],ii=e=>fe!=null&&e in Object(fe)?fe[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 ea=ii("computeSvgReady");var cm=fe&&fe.__esModule?fe.default:fe;var pt=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"];var ta=pt&&pt.__esModule?pt.default:pt;var we=JBrowseExports["@jbrowse/display-kit/plotMenu"],si=e=>we!=null&&e in Object(we)?we[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}),oa=si("editPlotMenuItems");var mm=we&&we.__esModule?we.default:we;var Me=JBrowseExports["@jbrowse/render-core/displayPhase"],ra=e=>Me!=null&&e in Object(Me)?Me[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}),na=ra("computeActivityPhase");var aa=ra("computeDisplayStatusPhase"),gm=Me&&Me.__esModule?Me.default:Me;function qt(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 pi=new Set(["scale","translateX","translateY"]);function ci(e){return Object.fromEntries(Object.keys(yr.properties).filter(t=>!pi.has(t)).map(t=>[t,e[t]]))}var Zt=10;function ui(e){let{aboveBpPerPx:t,foldBelowBp:o}=e??{};return typeof t=="number"?t:typeof o=="number"&&o>0?o/Zt:void 0}var di=te(()=>import("./chunks/GraphTrackSettingsDialog-UTYH6HEC.js"));function ia(e){return M.compose("LinearGraphDisplay",dn,ta(),it,M.model({type:M.literal("LinearGraphDisplay"),configuration:xo(e),layoutEngine:_o(Fo,"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:Q(t,"layoutMode"),color:Q(t,"color"),size:Q(t,"size"),layers:Q(t,"layers"),facet:Q(t,"facet"),rows:Q(t,"rows"),hover:Q(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&&Ce(o))??(r&&Rt(r))},get coarseAboveBpPerPx(){return ui(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=Zt*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 (${ce(o.end-o.start)}, max ${ce(t.settledCapBp)})`:""},get zoomCanReleaseGate(){return!0},get fetchCanceled(){return t.loadCanceled}})).views(t=>({get svgReady(){return ea({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return aa({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>na({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted&&t.geometryPainted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({writeGrammar(o){for(let[r,n]of Object.entries(o))Ro(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(Zt*(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=Yr(o,t.capFor(r),O(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(o){t.settledWindow=o;let r=O(t.chosenLayoutMode).cutMargins;if(t.regionTooLarge||qt(t.dense,o)||!t.loadCanceled&&t.tierAt(o.bpPerPx)===t.cutTier&&Ur(t.cutRegion,o,r)&&!t.foldDrifted(o.bpPerPx))return!1;let n=t.recutAt(o),a=t.recuts;return Promise.resolve(n).then(()=>{j(t)&&t.recuts===a&&wt(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?Ke(t.host):void 0;return r&&!t.regionTooLarge&&(t.cutChangedFrom(o)||O(o).cutMargins!==O(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 R(t).rpcManager.call(ie(t),"GetGraphHaplotypes",{adapterConfig:o,signal:r});j(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;A(t,()=>{o?.abort()}),A(t,I(()=>{let n=t.sourceAdapter;return n&&Jo(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"})),A(t,I(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),A(t,I(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,a)=>n?.scale===a?.scale&&n?.translateX===a?.translateX,fireImmediately:!0,name:"GraphHostFrame"}));let r;A(t,I(()=>t.host&&!t.hostPlacesX?{bpPerPx:t.host.bpPerPx,offsetPx:t.host.offsetPx}:void 0,n=>{let a=r;r=n,n&&a&&n.bpPerPx>0&&t.stretchWithHost(a,n)},{equals:(n,a)=>n?.bpPerPx===a?.bpPerPx&&n?.offsetPx===a?.offsetPx,fireImmediately:!0,name:"GraphHostStretch"})),A(t,I(()=>`${t.facetSetting.field} ${t.facetPlacement?.count}`,()=>{let n=(t.facetGridIn(t.paneCeiling-Ze)?.total??0)+Ze;(t.facetGrid?.total??0)+Ze>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),A(t,I(()=>t.host?.coarseDynamicBlocks,n=>{let{host:a}=t,i=n&&a?Ke(a):void 0;i&&t.settleOn(i)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let o=t.host?Ke(t.host):void 0,r=t.sourceTrackId;if(!o||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge||qt(t.dense,o))return;let n=Math.floor(o.start),a=Math.ceil(o.end);return{...ci(t),loadedTrackId:r,loadedRegion:{refName:o.refName,assemblyName:o.assemblyName,start:n,end:a},subgraphHaplotypes:t.cutHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-n),...t.grammar,layoutMode:t.chosenLayoutMode,connectedViewId:t.host?.id}}})).actions(t=>({openGraphView(){let o=t.graphViewSpec;o&&R(t).addView("GraphGenomeView",o)}})).views(t=>({cutMenuItems(){let o=t.sourceAdapter,r=t.sourceTrack;if(!o||!r||!Yo(o))return[];let n=Ce(o),a=Rt(r),i=t.haplotypeNames,s=t.subgraphHaplotypes,p=u=>{t.setSubgraphHaplotypes(u),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(){R(t).queueDialog(o=>[di,{model:t,onClose:o}])},async renderSvg(o){let{renderGraphTrackSvg:r}=await import("./chunks/renderSvg-7G6NWBXF.js");return r(t,o)},trackMenuItems(){let o=t.launchMenuItems();at(o,{label:"Graph genome view",icon:et,disabled:!t.graphViewSpec,disabledHelpText:t.error&&!wt(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:an,subMenu:r}]:[],...t.graphMenuItems(),{label:"Graph settings...",icon:sn,helpText:"Subgraph, drawing and force-directed layout",onClick:()=>{this.openSettings()}},...o,...oa(t)]}}))}function Qt(e){e.addDisplayType(()=>{let t=Qn();return Object.assign(new qn({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:ia(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:te(()=>import("./chunks/LinearGraphDisplay-O4SQSXJJ.js"))}),{adapterCapabilities:["getSubgraph"]})})}function mi(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:o},index:ve(t,o,r)}:e}var li=W("MinigraphBubbleAdapter",{bubblesLocation:E("/path/to/graph.bb.bed.gz"),index:$("MinigraphBubbleIndex","/path/to/graph.bb.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:mi}),sa=li;function eo(e){e.addAdapterType(()=>new oe({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",configSchema:sa,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-3NJ2VLN2.js").then(t=>t.default)}))}function pa(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,segmentsLocation:{uri:`${t}.segs.bed.gz`,baseUri:o},segmentsIndex:ve(`${t}.segs.bed.gz`,o,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:o},linksIndex:ve(`${t}.links.bed.gz`,o,r)}:e}function gi(e){let{coarse:t,baseUri:o,csi:r}=e;return We(pa(typeof t=="object"&&t!==null?{...e,coarse:pa({baseUri:o,csi:r,...t})}:e))}var hi=W("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},foldBelowBp:{type:"maybeNumber"},segmentsLocation:E("/path/to/graph.tier.segs.bed.gz"),segmentsIndex:$("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:E("/path/to/graph.tier.links.bed.gz"),linksIndex:$("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),yi=W("RgfaTabixAdapter",{segmentsLocation:E("/path/to/graph.segs.bed.gz"),segmentsIndex:$("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:E("/path/to/graph.links.bed.gz"),linksIndex:$("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),walksLocation:E(""),walksIndex:$("RgfaWalksIndex"),walkStepBudget:{type:"integer",defaultValue:xe.stepBudget},walkByteBudget:{type:"integer",defaultValue:xe.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:hi},{explicitlyTyped:!0,preProcessSnapshot:gi}),ca=yi;function to(e){e.addAdapterType(()=>new oe({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",configSchema:ca,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-55DGDID2.js").then(t=>t.default)}))}var bi=W("WalkTabixSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},walksLocation:E("/path/to/graph.walks.bed.gz"),walksIndex:$("WalkTabixWalksIndex"),walkStepBudget:{type:"integer",defaultValue:xe.stepBudget},walkByteBudget:{type:"integer",defaultValue:xe.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},samplesTsvLocation:E(""),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:We}),ua=bi;function oo(e){e.addAdapterType(()=>new oe({name:"WalkTabixSyntenyAdapter",displayName:"Walk-indexed graph adapter",configSchema:ua,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/WalkTabixSyntenyAdapter-NHNSZZBX.js").then(t=>t.default)}))}var fi=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function wi(e){return gt(e).toLowerCase().endsWith(".gbz.db")}function Mi(e){let t=e.adapter;return t?.type!==void 0&&Xr.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?Lo(t.walksLocation):void 0;return o&&r&&r!==o&&t?.assemblyNameToPanSN===void 0?{...e,adapter:{...t,assemblyNameToPanSN:{[o]:r}}}:e}function Si(e,t,o){let r=n=>Ho({choice:n,loc:e,indexLoc:t,assembly:"",sample:""});if((!o||o==="GbzBaseSyntenyAdapter")&&wi(e))return r("GbzBaseSyntenyAdapter");if(!o||o==="RgfaTabixAdapter"){if(Vo(e))return r("RgfaTabixAdapter");if(gt(e).endsWith(Go)&&(t!==void 0||Po(e)))return r("RgfaTabixWalks")}}function ro(e){e.addToExtensionPoint("Core-preProcessTrackConfig",Mi),e.addToExtensionPoint("Core-preProcessTrackConfig",ki),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(o,r,n)=>Si(o,r,n)??t(o,r,n)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(o,r)=>fi.has(o)?"GraphTrack":t(o,r))}function da(e){let t;if(J(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 xi(e,t,o){let r=e.connectedViewId;return r===void 0||r===t||!o.has(r)}function ma(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Ri(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(o=>J(o)&&Array.isArray(o.displays)?o.displays.filter(r=>J(r)&&r.type==="LinearGraphDisplay"):[])}function la(e,t,o){let r=[],n=Je(e),a=new Set(n.map(i=>J(i)?i.id:void 0));for(let i of n){if(J(i)&&i.id===t)for(let s of Ri(i)){let p=da(s.hoverHighlight);p&&ma(p,o)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:p})}if(J(i)&&i.type==="GraphGenomeView"&&xi(i,t,a)){let s=da(i.hoverHighlight);s&&ma(s,o)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var Ti=nn()(e=>({highlight:{height:"100%",position:"absolute",background:_e(e.palette.primary.main,.08),borderLeft:`1px solid ${_e(e.palette.primary.main,.4)}`,borderRight:`1px solid ${_e(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),Gi=ft(function({model:t,region:o}){let{classes:r}=Ti(),n=t.getHighlightCoords(o);return n?C("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:n.left,width:n.width}}):null}),Li=ft(function({model:t}){let{views:o}=R(t);return C(wo,{children:la([...o],t.id,t.assemblyNames).map(({key:r,region:n})=>C(Gi,{model:t,region:n},`graph-hover-${r}`))})}),ga=Li;var vi="LinearGenomeView-TracksContainerComponent";function no(e){e.contributeToExtensionPoint(vi,({model:t})=>C(ga,{model:t},"graphgenomeview-hover-highlight"))}function Ai(e){return e.views(t=>({get adapterConfig(){return Kr(t,t.parentTrack.configuration)}}))}function ao(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof mn&&Ut.includes(t.name)&&t.extendStateModel(Ai),t))}var ha="GraphGenomeView";var ya="7.4.3";var io=class extends pn{constructor(){super(...arguments);this.name=ha;this.version=ya}install(o){Yt(o),Qt(o),Xt(o),Kt(o),no(o),to(o),eo(o),Vt(o),oo(o),Ft(o),ro(o),ao(o),o.addRpcMethod(()=>new Fe(o)),o.addRpcMethod(()=>new He(o)),o.addRpcMethod(()=>new Ve(o)),o.addRpcMethod(()=>new Ee(o))}configure(o){try{yo(o.rootModel)&&o.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:et,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{io as default};
7
7
  //# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map