jbrowse-plugin-graphgenomeviewer 8.0.0 → 8.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{AddTrackWorkflow-KT6Z6PSW.js → AddTrackWorkflow-RJSOQZYQ.js} +2 -2
- package/dist/chunks/{ChooseSamplesDialog-YUH6SVEZ.js → ChooseSamplesDialog-LO7FKFSS.js} +2 -2
- package/dist/chunks/{ChooseWalksDialog-2QJKRASB.js → ChooseWalksDialog-JJSOVCEU.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-NPEXW3Z3.js → GbzBaseSyntenyAdapter-EGNUOKB2.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-NPEXW3Z3.js.map → GbzBaseSyntenyAdapter-EGNUOKB2.js.map} +1 -1
- package/dist/chunks/{GraphGenomeView-5LYF6LMA.js → GraphGenomeView-667ZUNDI.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-T5YKMIPH.js → GraphTrackSettingsDialog-7M3Q635V.js} +2 -2
- package/dist/chunks/{GraphTrackSettingsDialog-T5YKMIPH.js.map → GraphTrackSettingsDialog-7M3Q635V.js.map} +1 -1
- package/dist/chunks/{HighlightColorDialog-UGAQFACU.js → HighlightColorDialog-4F34Q4PY.js} +2 -2
- package/dist/chunks/LinearGraphDisplay-BAEMS5WG.js +2 -0
- package/dist/chunks/LinearGraphDisplay-BAEMS5WG.js.map +7 -0
- package/dist/chunks/{MinigraphBubbleAdapter-D57ZFMKV.js → MinigraphBubbleAdapter-G25V6MZL.js} +2 -2
- package/dist/chunks/{RgfaTabixAdapter-HN2NLJJW.js → RgfaTabixAdapter-JPTUWO2Z.js} +2 -2
- package/dist/chunks/{WalkFormsAdapter-ESCQSNEJ.js → WalkFormsAdapter-PBN7BJZW.js} +2 -2
- package/dist/chunks/{WalkTabixSyntenyAdapter-62PJZBRP.js → WalkTabixSyntenyAdapter-27WDE5JF.js} +2 -2
- package/dist/chunks/{chunk-SVLBMU6I.js → chunk-2PNGGCQJ.js} +2 -2
- package/dist/chunks/{chunk-SVLBMU6I.js.map → chunk-2PNGGCQJ.js.map} +1 -1
- package/dist/chunks/{chunk-2VKDQF54.js → chunk-2V75YPTT.js} +2 -2
- package/dist/chunks/{chunk-2VKDQF54.js.map → chunk-2V75YPTT.js.map} +3 -3
- package/dist/chunks/chunk-3EQNVA3F.js +4 -0
- package/dist/chunks/{chunk-H53NTUCD.js.map → chunk-3EQNVA3F.js.map} +4 -4
- package/dist/chunks/{chunk-ON465L7Z.js → chunk-5RHNR3TH.js} +1 -1
- package/dist/chunks/{chunk-ON465L7Z.js.map → chunk-5RHNR3TH.js.map} +1 -1
- package/dist/chunks/{chunk-LR45N54F.js → chunk-CBKSPAUI.js} +2 -2
- package/dist/chunks/{chunk-VCYF5E2N.js → chunk-CJAV55QB.js} +1 -1
- package/dist/chunks/{chunk-VCYF5E2N.js.map → chunk-CJAV55QB.js.map} +1 -1
- package/dist/chunks/{chunk-DKUKQR3S.js → chunk-DG3E6BSX.js} +2 -2
- package/dist/chunks/{chunk-ZKCMVSD4.js → chunk-FY7X6253.js} +2 -2
- package/dist/chunks/{chunk-ZKCMVSD4.js.map → chunk-FY7X6253.js.map} +1 -1
- package/dist/chunks/chunk-HLAQQI6G.js +2 -0
- package/dist/chunks/chunk-HLAQQI6G.js.map +7 -0
- package/dist/chunks/{chunk-NE3OW4WX.js → chunk-I6F25EXY.js} +2 -2
- package/dist/chunks/{chunk-QGLMVXGX.js → chunk-IAXUZMOX.js} +2 -2
- package/dist/chunks/{chunk-QGLMVXGX.js.map → chunk-IAXUZMOX.js.map} +1 -1
- package/dist/chunks/{chunk-56YYNIV3.js → chunk-JMRW3IGK.js} +2 -2
- package/dist/chunks/{chunk-56YYNIV3.js.map → chunk-JMRW3IGK.js.map} +1 -1
- package/dist/chunks/chunk-JOYKGTDE.js +4 -0
- package/dist/chunks/chunk-JOYKGTDE.js.map +7 -0
- package/dist/chunks/chunk-NIEZKWQV.js +2 -0
- package/dist/chunks/{chunk-YU7T5WOQ.js.map → chunk-NIEZKWQV.js.map} +2 -2
- package/dist/chunks/chunk-NLS74JSZ.js +2 -0
- package/dist/chunks/{chunk-26SCNTI3.js.map → chunk-NLS74JSZ.js.map} +1 -1
- package/dist/chunks/{chunk-A4YQH3PN.js → chunk-O5FDMVL3.js} +2 -2
- package/dist/chunks/chunk-Q7QC2EQU.js +2 -0
- package/dist/chunks/chunk-RHYBJCA4.js +2 -0
- package/dist/chunks/chunk-RHYBJCA4.js.map +7 -0
- package/dist/chunks/chunk-X7YIGIYW.js +2 -0
- package/dist/chunks/{chunk-YXN7J6LG.js.map → chunk-X7YIGIYW.js.map} +4 -4
- package/dist/chunks/chunk-XB5KC2EZ.js +2 -0
- package/dist/chunks/{chunk-JSWEU5QG.js.map → chunk-XB5KC2EZ.js.map} +2 -2
- package/dist/chunks/chunk-XWCLYB5C.js +2 -0
- package/dist/chunks/{chunk-KQ6JJDJC.js.map → chunk-XWCLYB5C.js.map} +4 -4
- package/dist/chunks/{chunk-SD7WGQ6Y.js → chunk-ZGTG74GE.js} +3 -3
- package/dist/chunks/{chunk-SD7WGQ6Y.js.map → chunk-ZGTG74GE.js.map} +2 -2
- package/dist/chunks/renderSvg-YNA5VK6A.js +2 -0
- package/dist/chunks/renderSvg-YNA5VK6A.js.map +7 -0
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -4
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
- package/package.json +2 -2
- package/src/GraphGenomeView/components/GraphCanvas.test.tsx +1 -1
- package/src/GraphGenomeView/components/GraphCanvas.tsx +66 -18
- package/src/GraphGenomeView/components/Legend.tsx +81 -34
- package/src/GraphGenomeView/components/LegendSwatch.tsx +13 -30
- package/src/GraphGenomeView/components/PaneSvg.tsx +79 -22
- package/src/GraphGenomeView/components/SettingsMenu.tsx +1 -1
- package/src/GraphGenomeView/components/legendStyles.ts +13 -1
- package/src/GraphGenomeView/legendSections.test.ts +131 -2
- package/src/GraphGenomeView/legendSections.ts +220 -42
- package/src/GraphGenomeView/model.test.ts +7 -8
- package/src/GraphGenomeView/pane/fitViews.ts +6 -57
- package/src/GraphGenomeView/pane/graphViews.ts +23 -1
- package/src/GraphGenomeView/pane/launchActions.ts +1 -1
- package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +19 -1
- package/src/LinearGraphDisplay/components/LinearGraphDisplay.tsx +6 -6
- package/src/LinearGraphDisplay/model.ts +9 -10
- package/src/RgfaTabixAdapter/walkFiles.test.ts +36 -0
- package/src/RgfaTabixAdapter/walkReader.ts +22 -7
- package/src/version.ts +1 -1
- package/dist/chunks/LinearGraphDisplay-YTSXFZED.js +0 -2
- package/dist/chunks/LinearGraphDisplay-YTSXFZED.js.map +0 -7
- package/dist/chunks/chunk-26SCNTI3.js +0 -2
- package/dist/chunks/chunk-AZ3YVI3P.js +0 -2
- package/dist/chunks/chunk-H53NTUCD.js +0 -4
- package/dist/chunks/chunk-JSWEU5QG.js +0 -2
- package/dist/chunks/chunk-JYTZO52E.js +0 -2
- package/dist/chunks/chunk-JYTZO52E.js.map +0 -7
- package/dist/chunks/chunk-KQ6JJDJC.js +0 -2
- package/dist/chunks/chunk-KUT6FNKO.js +0 -4
- package/dist/chunks/chunk-KUT6FNKO.js.map +0 -7
- package/dist/chunks/chunk-LJAPKX5Y.js +0 -2
- package/dist/chunks/chunk-LJAPKX5Y.js.map +0 -7
- package/dist/chunks/chunk-YU7T5WOQ.js +0 -2
- package/dist/chunks/chunk-YXN7J6LG.js +0 -2
- package/dist/chunks/renderSvg-3KAQCRFY.js +0 -2
- package/dist/chunks/renderSvg-3KAQCRFY.js.map +0 -7
- package/src/LinearGraphDisplay/components/GraphStatusChrome.test.tsx +0 -182
- package/src/LinearGraphDisplay/components/GraphStatusChrome.tsx +0 -158
- /package/dist/chunks/{AddTrackWorkflow-KT6Z6PSW.js.map → AddTrackWorkflow-RJSOQZYQ.js.map} +0 -0
- /package/dist/chunks/{ChooseSamplesDialog-YUH6SVEZ.js.map → ChooseSamplesDialog-LO7FKFSS.js.map} +0 -0
- /package/dist/chunks/{ChooseWalksDialog-2QJKRASB.js.map → ChooseWalksDialog-JJSOVCEU.js.map} +0 -0
- /package/dist/chunks/{GraphGenomeView-5LYF6LMA.js.map → GraphGenomeView-667ZUNDI.js.map} +0 -0
- /package/dist/chunks/{HighlightColorDialog-UGAQFACU.js.map → HighlightColorDialog-4F34Q4PY.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-D57ZFMKV.js.map → MinigraphBubbleAdapter-G25V6MZL.js.map} +0 -0
- /package/dist/chunks/{RgfaTabixAdapter-HN2NLJJW.js.map → RgfaTabixAdapter-JPTUWO2Z.js.map} +0 -0
- /package/dist/chunks/{WalkFormsAdapter-ESCQSNEJ.js.map → WalkFormsAdapter-PBN7BJZW.js.map} +0 -0
- /package/dist/chunks/{WalkTabixSyntenyAdapter-62PJZBRP.js.map → WalkTabixSyntenyAdapter-27WDE5JF.js.map} +0 -0
- /package/dist/chunks/{chunk-LR45N54F.js.map → chunk-CBKSPAUI.js.map} +0 -0
- /package/dist/chunks/{chunk-DKUKQR3S.js.map → chunk-DG3E6BSX.js.map} +0 -0
- /package/dist/chunks/{chunk-NE3OW4WX.js.map → chunk-I6F25EXY.js.map} +0 -0
- /package/dist/chunks/{chunk-A4YQH3PN.js.map → chunk-O5FDMVL3.js.map} +0 -0
- /package/dist/chunks/{chunk-AZ3YVI3P.js.map → chunk-Q7QC2EQU.js.map} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{A as N,C as I,d as H,g as _,h as A,i as W,k as X,l as j,m as z,n as F,s as O,t as E,v as Y,x as J,y as K}from"./chunk-JOYKGTDE.js";import{Db as R,Fb as B,Nb as D,q as S,r as M}from"./chunk-ZGTG74GE.js";import"./chunk-XWCLYB5C.js";import"./chunk-XB5KC2EZ.js";import{o as P}from"./chunk-2V75YPTT.js";import"./chunk-CJAV55QB.js";import"./chunk-FY7X6253.js";import"./chunk-X7YIGIYW.js";import"./chunk-JMRW3IGK.js";import"./chunk-5RHNR3TH.js";import"./chunk-IKJZPPOA.js";import"./chunk-3WG3GF2A.js";import"./chunk-NIEZKWQV.js";import{a as k,b as e,c as f}from"./chunk-JMBDTNUR.js";var m=JBrowseExports["@jbrowse/display-kit/renderDisplaySvg"],rt=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 U=rt("renderDisplaySvg");var dt=m&&m.__esModule?m.default:m;var w=JBrowseExports["@jbrowse/core/util/paintLayer"],ot=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}),C=ot("PaintLayer"),yt=w&&w.__esModule?w.default:w;var L={fontFamily:"sans-serif",fontSize:11},Z=16,at=2,V=t=>t;function q({model:t,lift:a,drawPaths:i,width:n,height:r,rasterize:l}){let o=t.buildDrawing(a,i);if(!o)return null;let s=l?at:1,c=l?void 0:R(n,r),y=c?.canvas??document.createElement("canvas");c||(y.width=Math.round(n*s),y.height=Math.round(r*s));let{scaleX:b,scaleY:x,translateX:d,translateY:g}=t.screenTransform,h=new B(y);return h.uploadGeometry(o.batch),h.updateTransform({scaleX:b*s,scaleY:x*s,translateX:d*s,translateY:g*s,dpr:s}),h.render([0,0,0,0]),c?e("svg",{width:n,height:r,overflow:"hidden",children:e("g",{dangerouslySetInnerHTML:{__html:c.markup()}})}):e("image",{width:n,height:r,href:y.toDataURL("image/png")})}function it(t,a,i,n){let r=n?0:E,l=t.toUpperCase();return{key:a,width:l.length*P,height:i+r,draw:o=>e("text",{fontFamily:"sans-serif",fontSize:9.5,fontWeight:600,letterSpacing:"0.06em",x:o,y:r,fill:O,children:l},a)}}function $(t,a,i=Z,n){if(!t.swatch)return{key:t.key,width:t.label.length*P,height:i,draw:c=>e("text",{...L,x:c,y:0,fill:"#666",children:t.label},t.key)};let r=t.swatch,l=n??_(r),o=n===void 0?0:n+5,s=(t.strong??"")+t.label;return{key:t.key,width:Math.max(l+5+s.length*P,o+(t.under?.length??0)*P),height:t.under?i*2:i,draw:c=>f("g",{...L,children:[e(F,{swatch:r,x:c+(l-_(r))/2,id:a}),f("text",{x:c+l+5,y:0,children:[t.strong?e("tspan",{fontWeight:"bold",children:t.strong}):null,t.label]}),t.under?e("text",{x:c+o,y:i,children:t.under}):null]},t.key)}}function st({model:t,idPrefix:a}){let i=z(t);if(i.length===0)return null;let n=i.flatMap(p=>p.rows),r=W(n),l=A(n),o=i.flatMap(({testid:p,rows:u,heading:v,spaced:G},tt)=>[...v?[it(v,`${p}-heading`,r,tt===0)]:[],...G?[{key:`${p}-gap`,width:0,height:E,draw:()=>null}]:[],...u.map((et,nt)=>$(et,`${a}-${p}-${nt}`,r,l))]),s=6,c=o.reduce((p,u)=>Math.max(p,u.width),-1/0)+s*2,y=o.reduce((p,u)=>p+u.height,0)+s,x=t.paneWidth-D-c+s,d=D+t.referenceStripZonePx,g=[],h=d+s/2+r/2+4;for(let p of o)g.push({row:p,y:h}),h+=p.height;return f("g",{"data-testid":"graph-svg-keys",children:[e("rect",{x:x-s,y:d,width:c,height:y,rx:3,fill:"#fff"}),g.map(({row:p,y:u})=>e("g",{transform:`translate(0 ${u})`,children:p.draw(x)},p.key))]})}function Q({x:t,y:a,text:i,fontSize:n,anchor:r,bold:l}){let o=i.length*n*.56+6,s=r==="middle"?t-o/2:t-3;return f(k,{children:[e("rect",{x:s,y:a-n*.65,width:o,height:n*1.3,rx:3,fill:"#fff",fillOpacity:.8}),e("text",{x:t,y:a+n*.35,textAnchor:r,fontSize:n,fontWeight:l?600:void 0,fill:"#18181c",children:i})]})}function lt({model:t}){return e("g",{fontFamily:L.fontFamily,children:t.overlayLabels.sizes.map(({key:a,text:i,x:n,y:r,kind:l,leader:o})=>f("g",{children:[o?e("line",{x1:o.arcX,y1:o.arcY,x2:o.labelX,y2:o.labelY,stroke:"#18181c"}):null,e(Q,{x:n,y:r,text:i,fontSize:10,anchor:"middle",bold:l==="deletion"})]},a))})}function pt({model:t}){return e("g",{fontFamily:L.fontFamily,children:t.visibleRowLabels.map(({label:a,y:i,top:n})=>e(Q,{x:10,y:n,text:a,fontSize:11,anchor:"start"},i))})}function ct({model:t,rasterize:a,idPrefix:i}){let n=t.facetPanels,r=t.facetGrid,l=t.facetPlacement;if(!n||!r||!l)return null;let{columns:o,width:s,height:c}=r,y=r.total+S+14,b=j(t).map((d,g)=>$(d,`${i}-facet-key-${g}`)),x=b.map((d,g)=>b.slice(0,g).reduce((h,p)=>h+p.width+14,6));return f(k,{children:[e("g",{transform:`translate(0 ${y})`,children:b.map((d,g)=>d.draw(x[g]))}),n.map((d,g)=>{let h=l.cells[g],p=h%o*(s+S),u=Math.floor(h/o)*(M+c+S),v=d.walks[0],G=$(X(t,v),`${i}-facet-${g}`);return f("g",{transform:`translate(${p} ${u})`,children:[e("g",{transform:`translate(0 ${Z-2})`,children:G.draw(6)}),e("g",{transform:`translate(0 ${M})`,children:e(q,{model:t,lift:d,drawPaths:!1,width:s,height:c,rasterize:a})})]},v.name)})]})}function T({model:t,rasterize:a=!1,idPrefix:i}){let n=t.paneWidth,r=t.canvasHeight,l=!!t.layoutResult?.tubeMap,o={rasterizeLayers:a};return f("g",{"data-testid":"graph-pane-svg",children:[t.facetPanels?e(ct,{model:t,rasterize:a,idPrefix:i}):l?e(C,{width:n,height:r,opts:o,paint:s=>{N(V(s),t,{highlightNode:null})}}):e(q,{model:t,lift:t.drawnHighlight,drawPaths:t.effectiveDrawPaths,width:n,height:r,rasterize:a}),t.facetPanels?null:f(k,{children:[e(H,{model:t}),e(Y,{model:t}),e(lt,{model:t}),e(J,{model:t}),e(I,{model:t,vector:!0}),e(pt,{model:t})]}),t.referenceStripShown?e(C,{width:n,height:r,opts:o,paint:s=>{K(V(s),t,{lit:void 0,dpr:1})}}):null,t.facetPanels?null:e(st,{model:t,idPrefix:i})]})}function gt({model:t,opts:a}){return e(T,{model:t,rasterize:!!a?.rasterizeLayers,idPrefix:`graph-${t.id}`})}function At(t,a){return U(t,a,gt)}export{At as renderGraphTrackSvg};
|
|
2
|
+
//# sourceMappingURL=renderSvg-YNA5VK6A.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["host:@jbrowse/display-kit/renderDisplaySvg", "host:@jbrowse/core/util/paintLayer", "../../src/GraphGenomeView/components/PaneSvg.tsx", "../../src/LinearGraphDisplay/renderSvg.tsx"],
|
|
4
|
+
"sourcesContent": ["const host = JBrowseExports[\"@jbrowse/display-kit/renderDisplaySvg\"]\nconst read = name =>\n host != null && name in Object(host)\n ? host[name]\n : Object.assign(\n function () {\n throw new Error(\n \"This JBrowse does not provide '\" + name + \"' from '\" + \"@jbrowse/display-kit/renderDisplaySvg\" + \"' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse\",\n )\n },\n { jbrowseHostMissing: name },\n )\nexport const SvgLegend = /* @__PURE__ */ read(\"SvgLegend\")\nexport const SvgPinnedHighlight = /* @__PURE__ */ read(\"SvgPinnedHighlight\")\nexport const SvgYAxis = /* @__PURE__ */ read(\"SvgYAxis\")\nexport const renderDisplaySvg = /* @__PURE__ */ read(\"renderDisplaySvg\")\nexport const svgLegendGutterWidth = /* @__PURE__ */ read(\"svgLegendGutterWidth\")\nexport default host && host.__esModule ? host.default : host", "const host = JBrowseExports[\"@jbrowse/core/util/paintLayer\"]\nconst read = name =>\n host != null && name in Object(host)\n ? host[name]\n : Object.assign(\n function () {\n throw new Error(\n \"This JBrowse does not provide '\" + name + \"' from '\" + \"@jbrowse/core/util/paintLayer\" + \"' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse\",\n )\n },\n { jbrowseHostMissing: name },\n )\nexport const PaintLayer = /* @__PURE__ */ read(\"PaintLayer\")\nexport default host && host.__esModule ? host.default : host", "import { FACET_GAP_PX, FACET_TITLE_PX } from '@jbrowse/bandage-core/facetGrid'\nimport { LEGEND_INSET_PX } from '@jbrowse/bandage-core/labelLayout'\nimport { LABEL_CHAR_PX } from '@jbrowse/bandage-core/overlayLabels'\nimport { Canvas2DRenderer } from '@jbrowse/bandage-core/renderer/Canvas2DRenderer'\nimport { svgCanvas } from '@jbrowse/bandage-core/renderer/svgCanvas'\nimport { PaintLayer } from '@jbrowse/core/util/paintLayer'\n\nimport BubbleHalos from './BubbleHalos'\nimport GenePins from './GenePins'\nimport LabelLayer from './LabelLayer'\nimport { SvgSwatch } from './LegendSwatch'\nimport { paintReferenceStrip } from './ReferenceStripOverlay'\nimport { paintTubeMap } from './TubeMapOverlay'\nimport WalkRowsOverlay from './WalkRowsOverlay'\nimport { HEADING_GAP_PX, HEADING_INK } from './legendStyles'\nimport {\n facetKeyRows,\n legendSections,\n rowPitch,\n swatchColumn,\n swatchWidth,\n walkKeyRow,\n} from '../legendSections'\n\nimport type { LegendRow } from '../legendSections'\nimport type { GraphPaneModel } from '../model'\nimport type { WalkLift } from '@jbrowse/bandage-core/walkHighlight'\nimport type { Ctx2D } from '@jbrowse/core/util/paintLayer'\n\nconst FONT = { fontFamily: 'sans-serif', fontSize: 11 }\nconst ROW_PX = 16\nconst RASTER_SCALE = 2\n\nconst asCanvasCtx = (ctx: Ctx2D) => ctx as CanvasRenderingContext2D\n\n// The drawing's nodes and edges through the pane's own transform, so the\n// export lines up with the linear view's ruler wherever the screen does\nfunction Body({\n model,\n lift,\n drawPaths,\n width,\n height,\n rasterize,\n}: {\n model: GraphPaneModel\n lift: WalkLift | undefined\n drawPaths: boolean\n width: number\n height: number\n rasterize: boolean\n}) {\n const built = model.buildDrawing(lift, drawPaths)\n if (!built) {\n return null\n }\n const k = rasterize ? RASTER_SCALE : 1\n const vector = rasterize ? undefined : svgCanvas(width, height)\n const canvas = vector?.canvas ?? document.createElement('canvas')\n if (!vector) {\n canvas.width = Math.round(width * k)\n canvas.height = Math.round(height * k)\n }\n const { scaleX, scaleY, translateX, translateY } = model.screenTransform\n const renderer = new Canvas2DRenderer(canvas)\n renderer.uploadGeometry(built.batch)\n renderer.updateTransform({\n scaleX: scaleX * k,\n scaleY: scaleY * k,\n translateX: translateX * k,\n translateY: translateY * k,\n dpr: k,\n })\n renderer.render([0, 0, 0, 0])\n return vector ? (\n <svg width={width} height={height} overflow=\"hidden\">\n <g dangerouslySetInnerHTML={{ __html: vector.markup() }} />\n </svg>\n ) : (\n <image width={width} height={height} href={canvas.toDataURL('image/png')} />\n )\n}\n\ninterface KeyRow {\n key: string\n width: number\n height: number\n draw: (left: number) => React.ReactNode\n}\n\n// A group's name in small capitals, a gap below the rows before it\nfunction svgHeading(\n heading: string,\n key: string,\n pitch: number,\n first: boolean,\n): KeyRow {\n const gap = first ? 0 : HEADING_GAP_PX\n const text = heading.toUpperCase()\n return {\n key,\n width: text.length * LABEL_CHAR_PX,\n height: pitch + gap,\n draw: left => (\n <text\n key={key}\n fontFamily=\"sans-serif\"\n fontSize={9.5}\n fontWeight={600}\n letterSpacing=\"0.06em\"\n x={left}\n y={gap}\n fill={HEADING_INK}\n >\n {text}\n </text>\n ),\n }\n}\n\n// A legend row as the screen lays it out: its swatch, then its words, the\n// line under it if any; a note is grey words alone. A `column` is the slot\n// every swatch of the key is centred in.\nfunction svgRow(\n row: LegendRow,\n id: string,\n pitch = ROW_PX,\n column?: number,\n): KeyRow {\n if (!row.swatch) {\n return {\n key: row.key,\n width: row.label.length * LABEL_CHAR_PX,\n height: pitch,\n draw: left => (\n <text key={row.key} {...FONT} x={left} y={0} fill=\"#666\">\n {row.label}\n </text>\n ),\n }\n }\n const swatch = row.swatch\n const sw = column ?? swatchWidth(swatch)\n const indent = column === undefined ? 0 : column + 5\n const words = (row.strong ?? '') + row.label\n return {\n key: row.key,\n width: Math.max(\n sw + 5 + words.length * LABEL_CHAR_PX,\n indent + (row.under?.length ?? 0) * LABEL_CHAR_PX,\n ),\n height: row.under ? pitch * 2 : pitch,\n draw: left => (\n <g key={row.key} {...FONT}>\n <SvgSwatch\n swatch={swatch}\n x={left + (sw - swatchWidth(swatch)) / 2}\n id={id}\n />\n <text x={left + sw + 5} y={0}>\n {row.strong ? <tspan fontWeight=\"bold\">{row.strong}</tspan> : null}\n {row.label}\n </text>\n {row.under ? (\n <text x={left + indent} y={pitch}>\n {row.under}\n </text>\n ) : null}\n </g>\n ),\n }\n}\n\n// The screen's legend panel, section by section\nfunction Keys({\n model,\n idPrefix,\n}: {\n model: GraphPaneModel\n idPrefix: string\n}) {\n const sections = legendSections(model)\n if (sections.length === 0) {\n return null\n }\n const all = sections.flatMap(section => section.rows)\n const pitch = rowPitch(all)\n const column = swatchColumn(all)\n const rows = sections.flatMap(({ testid, rows, heading, spaced }, s) => [\n ...(heading\n ? [svgHeading(heading, `${testid}-heading`, pitch, s === 0)]\n : []),\n ...(spaced\n ? [\n {\n key: `${testid}-gap`,\n width: 0,\n height: HEADING_GAP_PX,\n draw: () => null,\n },\n ]\n : []),\n ...rows.map((row, i) =>\n svgRow(row, `${idPrefix}-${testid}-${i}`, pitch, column),\n ),\n ])\n const pad = 6\n const boxWidth =\n rows.reduce((max, r) => Math.max(max, r.width), -Infinity) + pad * 2\n const boxHeight = rows.reduce((sum, r) => sum + r.height, 0) + pad\n const right = model.paneWidth - LEGEND_INSET_PX\n const left = right - boxWidth + pad\n const top = LEGEND_INSET_PX + model.referenceStripZonePx\n const placed: { row: KeyRow; y: number }[] = []\n let y = top + pad / 2 + pitch / 2 + 4\n for (const row of rows) {\n placed.push({ row, y })\n y += row.height\n }\n return (\n <g data-testid=\"graph-svg-keys\">\n <rect\n x={left - pad}\n y={top}\n width={boxWidth}\n height={boxHeight}\n rx={3}\n fill=\"#fff\"\n />\n {placed.map(({ row, y }) => (\n <g key={row.key} transform={`translate(0 ${y})`}>\n {row.draw(left)}\n </g>\n ))}\n </g>\n )\n}\n\n// Words on a pale rounded backing, as the screen's labels sit\nfunction Chip({\n x,\n y,\n text,\n fontSize,\n anchor,\n bold,\n}: {\n x: number\n y: number\n text: string\n fontSize: number\n anchor: 'start' | 'middle'\n bold?: boolean\n}) {\n const w = text.length * fontSize * 0.56 + 6\n const left = anchor === 'middle' ? x - w / 2 : x - 3\n return (\n <>\n <rect\n x={left}\n y={y - fontSize * 0.65}\n width={w}\n height={fontSize * 1.3}\n rx={3}\n fill=\"#fff\"\n fillOpacity={0.8}\n />\n <text\n x={x}\n y={y + fontSize * 0.35}\n textAnchor={anchor}\n fontSize={fontSize}\n fontWeight={bold ? 600 : undefined}\n fill=\"#18181c\"\n >\n {text}\n </text>\n </>\n )\n}\n\n// The node and deletion lengths written on the drawing, with their leaders\nfunction SizeLabels({ model }: { model: GraphPaneModel }) {\n return (\n <g fontFamily={FONT.fontFamily}>\n {model.overlayLabels.sizes.map(({ key, text, x, y, kind, leader }) => (\n <g key={key}>\n {leader ? (\n <line\n x1={leader.arcX}\n y1={leader.arcY}\n x2={leader.labelX}\n y2={leader.labelY}\n stroke=\"#18181c\"\n />\n ) : null}\n <Chip\n x={x}\n y={y}\n text={text}\n fontSize={10}\n anchor=\"middle\"\n bold={kind === 'deletion'}\n />\n </g>\n ))}\n </g>\n )\n}\n\nfunction RowLabels({ model }: { model: GraphPaneModel }) {\n return (\n <g fontFamily={FONT.fontFamily}>\n {model.visibleRowLabels.map(({ label, y, top }) => (\n <Chip\n key={y}\n x={10}\n y={top}\n text={label}\n fontSize={11}\n anchor=\"start\"\n />\n ))}\n </g>\n )\n}\n\n// Each lifted walk in a panel of its own, its key as the panel's title\nfunction Facets({\n model,\n rasterize,\n idPrefix,\n}: {\n model: GraphPaneModel\n rasterize: boolean\n idPrefix: string\n}) {\n const panels = model.facetPanels\n const grid = model.facetGrid\n const place = model.facetPlacement\n if (!panels || !grid || !place) {\n return null\n }\n const { columns, width, height } = grid\n const keyY = grid.total + FACET_GAP_PX + 14\n const key = facetKeyRows(model).map((row, i) =>\n svgRow(row, `${idPrefix}-facet-key-${i}`),\n )\n const keyX = key.map((_, i) =>\n key.slice(0, i).reduce((x, row) => x + row.width + 14, 6),\n )\n return (\n <>\n <g transform={`translate(0 ${keyY})`}>\n {key.map((row, i) => row.draw(keyX[i]!))}\n </g>\n {panels.map((lift, i) => {\n const cell = place.cells[i]!\n const x = (cell % columns) * (width + FACET_GAP_PX)\n const y =\n Math.floor(cell / columns) * (FACET_TITLE_PX + height + FACET_GAP_PX)\n const walk = lift.walks[0]!\n const title = svgRow(walkKeyRow(model, walk), `${idPrefix}-facet-${i}`)\n return (\n <g key={walk.name} transform={`translate(${x} ${y})`}>\n <g transform={`translate(0 ${ROW_PX - 2})`}>{title.draw(6)}</g>\n <g transform={`translate(0 ${FACET_TITLE_PX})`}>\n <Body\n model={model}\n lift={lift}\n drawPaths={false}\n width={width}\n height={height}\n rasterize={rasterize}\n />\n </g>\n </g>\n )\n })}\n </>\n )\n}\n\n// The pane as the screen draws it, for the linear view's SVG export: the\n// canvas's ink, the tube map and reference strip painters, and the SVG\n// overlays the screen mounts over them. Hover and selection are left out.\nexport default function PaneSvg({\n model,\n rasterize = false,\n idPrefix,\n}: {\n model: GraphPaneModel\n rasterize?: boolean\n idPrefix: string\n}) {\n const width = model.paneWidth\n const height = model.canvasHeight\n const tubeMap = !!model.layoutResult?.tubeMap\n const opts = { rasterizeLayers: rasterize }\n return (\n <g data-testid=\"graph-pane-svg\">\n {model.facetPanels ? (\n <Facets model={model} rasterize={rasterize} idPrefix={idPrefix} />\n ) : tubeMap ? (\n <PaintLayer\n width={width}\n height={height}\n opts={opts}\n paint={ctx => {\n paintTubeMap(asCanvasCtx(ctx), model, { highlightNode: null })\n }}\n />\n ) : (\n <Body\n model={model}\n lift={model.drawnHighlight}\n drawPaths={model.effectiveDrawPaths}\n width={width}\n height={height}\n rasterize={rasterize}\n />\n )}\n {/* in the screen's stacking order, bottom first */}\n {model.facetPanels ? null : (\n <>\n <BubbleHalos model={model} />\n <GenePins model={model} />\n <SizeLabels model={model} />\n <LabelLayer model={model} />\n <WalkRowsOverlay model={model} vector />\n <RowLabels model={model} />\n </>\n )}\n {model.referenceStripShown ? (\n <PaintLayer\n width={width}\n height={height}\n opts={opts}\n paint={ctx => {\n paintReferenceStrip(asCanvasCtx(ctx), model, {\n lit: undefined,\n dpr: 1,\n })\n }}\n />\n ) : null}\n {model.facetPanels ? null : <Keys model={model} idPrefix={idPrefix} />}\n </g>\n )\n}\n", "import { renderDisplaySvg } from '@jbrowse/display-kit/renderDisplaySvg'\n\nimport PaneSvg from '../GraphGenomeView/components/PaneSvg'\n\nimport type { LinearGraphDisplayModel } from './model'\nimport type { LgvSvgBodyProps } from '@jbrowse/display-kit/renderDisplaySvg'\nimport type { ExportSvgDisplayOptions } from '@jbrowse/display-kit/types'\n\nfunction GraphTrackSvgBody({\n model,\n opts,\n}: LgvSvgBodyProps<LinearGraphDisplayModel>) {\n return (\n <PaneSvg\n model={model}\n rasterize={!!opts?.rasterizeLayers}\n idPrefix={`graph-${model.id}`}\n />\n )\n}\n\nexport function renderGraphTrackSvg(\n model: LinearGraphDisplayModel,\n opts?: ExportSvgDisplayOptions,\n) {\n return renderDisplaySvg(model, opts, GraphTrackSvgBody)\n}\n"],
|
|
5
|
+
"mappings": "ukBAAA,IAAMA,EAAO,eAAe,uCAAuC,EAC7DC,GAAOC,GACXF,GAAQ,MAAQE,KAAQ,OAAOF,CAAI,EAC/BA,EAAKE,CAAI,EACT,OAAO,OACL,UAAY,CACV,MAAM,IAAI,MACR,kCAAoCA,EAAO,uJAC7C,CACF,EACA,CAAE,mBAAoBA,CAAK,CAC7B,EAIC,IAAMC,EAAmCC,GAAK,kBAAkB,EAEvE,IAAOC,GAAQC,GAAQA,EAAK,WAAaA,EAAK,QAAUA,ECjBxD,IAAMC,EAAO,eAAe,+BAA+B,EACrDC,GAAOC,GACXF,GAAQ,MAAQE,KAAQ,OAAOF,CAAI,EAC/BA,EAAKE,CAAI,EACT,OAAO,OACL,UAAY,CACV,MAAM,IAAI,MACR,kCAAoCA,EAAO,+IAC7C,CACF,EACA,CAAE,mBAAoBA,CAAK,CAC7B,EACOC,EAA6BF,GAAK,YAAY,EACpDG,GAAQJ,GAAQA,EAAK,WAAaA,EAAK,QAAUA,ECgBxD,IAAMK,EAAO,CAAE,WAAY,aAAc,SAAU,EAAG,EAChDC,EAAS,GACTC,GAAe,EAEfC,EAAeC,GAAeA,EAIpC,SAASC,EAAK,CACZ,MAAAC,EACA,KAAAC,EACA,UAAAC,EACA,MAAAC,EACA,OAAAC,EACA,UAAAC,CACF,EAOG,CACD,IAAMC,EAAQN,EAAM,aAAaC,EAAMC,CAAS,EAChD,GAAI,CAACI,EACH,OAAO,KAET,IAAMC,EAAIF,EAAYT,GAAe,EAC/BY,EAASH,EAAY,OAAYI,EAAUN,EAAOC,CAAM,EACxDM,EAASF,GAAQ,QAAU,SAAS,cAAc,QAAQ,EAC3DA,IACHE,EAAO,MAAQ,KAAK,MAAMP,EAAQI,CAAC,EACnCG,EAAO,OAAS,KAAK,MAAMN,EAASG,CAAC,GAEvC,GAAM,CAAE,OAAAI,EAAQ,OAAAC,EAAQ,WAAAC,EAAY,WAAAC,CAAW,EAAId,EAAM,gBACnDe,EAAW,IAAIC,EAAiBN,CAAM,EAC5C,OAAAK,EAAS,eAAeT,EAAM,KAAK,EACnCS,EAAS,gBAAgB,CACvB,OAAQJ,EAASJ,EACjB,OAAQK,EAASL,EACjB,WAAYM,EAAaN,EACzB,WAAYO,EAAaP,EACzB,IAAKA,CACP,CAAC,EACDQ,EAAS,OAAO,CAAC,EAAG,EAAG,EAAG,CAAC,CAAC,EACrBP,EACLS,EAAC,OAAI,MAAOd,EAAO,OAAQC,EAAQ,SAAS,SAC1C,SAAAa,EAAC,KAAE,wBAAyB,CAAE,OAAQT,EAAO,OAAO,CAAE,EAAG,EAC3D,EAEAS,EAAC,SAAM,MAAOd,EAAO,OAAQC,EAAQ,KAAMM,EAAO,UAAU,WAAW,EAAG,CAE9E,CAUA,SAASQ,GACPC,EACAC,EACAC,EACAC,EACQ,CACR,IAAMC,EAAMD,EAAQ,EAAIE,EAClBC,EAAON,EAAQ,YAAY,EACjC,MAAO,CACL,IAAAC,EACA,MAAOK,EAAK,OAASC,EACrB,OAAQL,EAAQE,EAChB,KAAMI,GACJV,EAAC,QAEC,WAAW,aACX,SAAU,IACV,WAAY,IACZ,cAAc,SACd,EAAGU,EACH,EAAGJ,EACH,KAAMK,EAEL,SAAAH,GATIL,CAUP,CAEJ,CACF,CAKA,SAASS,EACPC,EACAC,EACAV,EAAQ1B,EACRqC,EACQ,CACR,GAAI,CAACF,EAAI,OACP,MAAO,CACL,IAAKA,EAAI,IACT,MAAOA,EAAI,MAAM,OAASJ,EAC1B,OAAQL,EACR,KAAMM,GACJV,EAAC,QAAoB,GAAGvB,EAAM,EAAGiC,EAAM,EAAG,EAAG,KAAK,OAC/C,SAAAG,EAAI,OADIA,EAAI,GAEf,CAEJ,EAEF,IAAMG,EAASH,EAAI,OACbI,EAAKF,GAAUG,EAAYF,CAAM,EACjCG,EAASJ,IAAW,OAAY,EAAIA,EAAS,EAC7CK,GAASP,EAAI,QAAU,IAAMA,EAAI,MACvC,MAAO,CACL,IAAKA,EAAI,IACT,MAAO,KAAK,IACVI,EAAK,EAAIG,EAAM,OAASX,EACxBU,GAAUN,EAAI,OAAO,QAAU,GAAKJ,CACtC,EACA,OAAQI,EAAI,MAAQT,EAAQ,EAAIA,EAChC,KAAMM,GACJW,EAAC,KAAiB,GAAG5C,EACnB,UAAAuB,EAACsB,EAAA,CACC,OAAQN,EACR,EAAGN,GAAQO,EAAKC,EAAYF,CAAM,GAAK,EACvC,GAAIF,EACN,EACAO,EAAC,QAAK,EAAGX,EAAOO,EAAK,EAAG,EAAG,EACxB,UAAAJ,EAAI,OAASb,EAAC,SAAM,WAAW,OAAQ,SAAAa,EAAI,OAAO,EAAW,KAC7DA,EAAI,OACP,EACCA,EAAI,MACHb,EAAC,QAAK,EAAGU,EAAOS,EAAQ,EAAGf,EACxB,SAAAS,EAAI,MACP,EACE,OAdEA,EAAI,GAeZ,CAEJ,CACF,CAGA,SAASU,GAAK,CACZ,MAAAxC,EACA,SAAAyC,CACF,EAGG,CACD,IAAMC,EAAWC,EAAe3C,CAAK,EACrC,GAAI0C,EAAS,SAAW,EACtB,OAAO,KAET,IAAME,EAAMF,EAAS,QAAQG,GAAWA,EAAQ,IAAI,EAC9CxB,EAAQyB,EAASF,CAAG,EACpBZ,EAASe,EAAaH,CAAG,EACzBI,EAAON,EAAS,QAAQ,CAAC,CAAE,OAAAO,EAAQ,KAAAD,EAAM,QAAA7B,EAAS,OAAA+B,CAAO,EAAGC,KAAM,CACtE,GAAIhC,EACA,CAACD,GAAWC,EAAS,GAAG8B,CAAM,WAAY5B,EAAO8B,KAAM,CAAC,CAAC,EACzD,CAAC,EACL,GAAID,EACA,CACE,CACE,IAAK,GAAGD,CAAM,OACd,MAAO,EACP,OAAQzB,EACR,KAAM,IAAM,IACd,CACF,EACA,CAAC,EACL,GAAGwB,EAAK,IAAI,CAAClB,GAAKsB,KAChBvB,EAAOC,GAAK,GAAGW,CAAQ,IAAIQ,CAAM,IAAIG,EAAC,GAAI/B,EAAOW,CAAM,CACzD,CACF,CAAC,EACKqB,EAAM,EACNC,EACJN,EAAK,OAAO,CAACO,EAAKC,IAAM,KAAK,IAAID,EAAKC,EAAE,KAAK,EAAG,IAAS,EAAIH,EAAM,EAC/DI,EAAYT,EAAK,OAAO,CAACU,EAAKF,IAAME,EAAMF,EAAE,OAAQ,CAAC,EAAIH,EAEzD1B,EADQ3B,EAAM,UAAY2D,EACXL,EAAWD,EAC1BO,EAAMD,EAAkB3D,EAAM,qBAC9B6D,EAAuC,CAAC,EAC1CC,EAAIF,EAAMP,EAAM,EAAIhC,EAAQ,EAAI,EACpC,QAAWS,KAAOkB,EAChBa,EAAO,KAAK,CAAE,IAAA/B,EAAK,EAAAgC,CAAE,CAAC,EACtBA,GAAKhC,EAAI,OAEX,OACEQ,EAAC,KAAE,cAAY,iBACb,UAAArB,EAAC,QACC,EAAGU,EAAO0B,EACV,EAAGO,EACH,MAAON,EACP,OAAQG,EACR,GAAI,EACJ,KAAK,OACP,EACCI,EAAO,IAAI,CAAC,CAAE,IAAA/B,EAAK,EAAAgC,CAAE,IACpB7C,EAAC,KAAgB,UAAW,eAAe6C,CAAC,IACzC,SAAAhC,EAAI,KAAKH,CAAI,GADRG,EAAI,GAEZ,CACD,GACH,CAEJ,CAGA,SAASiC,EAAK,CACZ,EAAAC,EACA,EAAAF,EACA,KAAArC,EACA,SAAAwC,EACA,OAAAC,EACA,KAAAC,CACF,EAOG,CACD,IAAMC,EAAI3C,EAAK,OAASwC,EAAW,IAAO,EACpCtC,EAAOuC,IAAW,SAAWF,EAAII,EAAI,EAAIJ,EAAI,EACnD,OACE1B,EAAA+B,EAAA,CACE,UAAApD,EAAC,QACC,EAAGU,EACH,EAAGmC,EAAIG,EAAW,IAClB,MAAOG,EACP,OAAQH,EAAW,IACnB,GAAI,EACJ,KAAK,OACL,YAAa,GACf,EACAhD,EAAC,QACC,EAAG+C,EACH,EAAGF,EAAIG,EAAW,IAClB,WAAYC,EACZ,SAAUD,EACV,WAAYE,EAAO,IAAM,OACzB,KAAK,UAEJ,SAAA1C,EACH,GACF,CAEJ,CAGA,SAAS6C,GAAW,CAAE,MAAAtE,CAAM,EAA8B,CACxD,OACEiB,EAAC,KAAE,WAAYvB,EAAK,WACjB,SAAAM,EAAM,cAAc,MAAM,IAAI,CAAC,CAAE,IAAAoB,EAAK,KAAAK,EAAM,EAAAuC,EAAG,EAAAF,EAAG,KAAAS,EAAM,OAAAC,CAAO,IAC9DlC,EAAC,KACE,UAAAkC,EACCvD,EAAC,QACC,GAAIuD,EAAO,KACX,GAAIA,EAAO,KACX,GAAIA,EAAO,OACX,GAAIA,EAAO,OACX,OAAO,UACT,EACE,KACJvD,EAAC8C,EAAA,CACC,EAAGC,EACH,EAAGF,EACH,KAAMrC,EACN,SAAU,GACV,OAAO,SACP,KAAM8C,IAAS,WACjB,IAjBMnD,CAkBR,CACD,EACH,CAEJ,CAEA,SAASqD,GAAU,CAAE,MAAAzE,CAAM,EAA8B,CACvD,OACEiB,EAAC,KAAE,WAAYvB,EAAK,WACjB,SAAAM,EAAM,iBAAiB,IAAI,CAAC,CAAE,MAAA0E,EAAO,EAAAZ,EAAG,IAAAF,CAAI,IAC3C3C,EAAC8C,EAAA,CAEC,EAAG,GACH,EAAGH,EACH,KAAMc,EACN,SAAU,GACV,OAAO,SALFZ,CAMP,CACD,EACH,CAEJ,CAGA,SAASa,GAAO,CACd,MAAA3E,EACA,UAAAK,EACA,SAAAoC,CACF,EAIG,CACD,IAAMmC,EAAS5E,EAAM,YACf6E,EAAO7E,EAAM,UACb8E,EAAQ9E,EAAM,eACpB,GAAI,CAAC4E,GAAU,CAACC,GAAQ,CAACC,EACvB,OAAO,KAET,GAAM,CAAE,QAAAC,EAAS,MAAA5E,EAAO,OAAAC,CAAO,EAAIyE,EAC7BG,EAAOH,EAAK,MAAQI,EAAe,GACnC7D,EAAM8D,EAAalF,CAAK,EAAE,IAAI,CAAC8B,EAAKsB,IACxCvB,EAAOC,EAAK,GAAGW,CAAQ,cAAcW,CAAC,EAAE,CAC1C,EACM+B,EAAO/D,EAAI,IAAI,CAACgE,EAAGhC,IACvBhC,EAAI,MAAM,EAAGgC,CAAC,EAAE,OAAO,CAACY,EAAGlC,IAAQkC,EAAIlC,EAAI,MAAQ,GAAI,CAAC,CAC1D,EACA,OACEQ,EAAA+B,EAAA,CACE,UAAApD,EAAC,KAAE,UAAW,eAAe+D,CAAI,IAC9B,SAAA5D,EAAI,IAAI,CAACU,EAAKsB,IAAMtB,EAAI,KAAKqD,EAAK/B,CAAC,CAAE,CAAC,EACzC,EACCwB,EAAO,IAAI,CAAC3E,EAAMmD,IAAM,CACvB,IAAMiC,EAAOP,EAAM,MAAM1B,CAAC,EACpBY,EAAKqB,EAAON,GAAY5E,EAAQ8E,GAChCnB,EACJ,KAAK,MAAMuB,EAAON,CAAO,GAAKO,EAAiBlF,EAAS6E,GACpDM,EAAOtF,EAAK,MAAM,CAAC,EACnBuF,EAAQ3D,EAAO4D,EAAWzF,EAAOuF,CAAI,EAAG,GAAG9C,CAAQ,UAAUW,CAAC,EAAE,EACtE,OACEd,EAAC,KAAkB,UAAW,aAAa0B,CAAC,IAAIF,CAAC,IAC/C,UAAA7C,EAAC,KAAE,UAAW,eAAetB,EAAS,CAAC,IAAM,SAAA6F,EAAM,KAAK,CAAC,EAAE,EAC3DvE,EAAC,KAAE,UAAW,eAAeqE,CAAc,IACzC,SAAArE,EAAClB,EAAA,CACC,MAAOC,EACP,KAAMC,EACN,UAAW,GACX,MAAOE,EACP,OAAQC,EACR,UAAWC,EACb,EACF,IAXMkF,EAAK,IAYb,CAEJ,CAAC,GACH,CAEJ,CAKe,SAARG,EAAyB,CAC9B,MAAA1F,EACA,UAAAK,EAAY,GACZ,SAAAoC,CACF,EAIG,CACD,IAAMtC,EAAQH,EAAM,UACdI,EAASJ,EAAM,aACf2F,EAAU,CAAC,CAAC3F,EAAM,cAAc,QAChC4F,EAAO,CAAE,gBAAiBvF,CAAU,EAC1C,OACEiC,EAAC,KAAE,cAAY,iBACZ,UAAAtC,EAAM,YACLiB,EAAC0D,GAAA,CAAO,MAAO3E,EAAO,UAAWK,EAAW,SAAUoC,EAAU,EAC9DkD,EACF1E,EAAC4E,EAAA,CACC,MAAO1F,EACP,OAAQC,EACR,KAAMwF,EACN,MAAO9F,GAAO,CACZgG,EAAajG,EAAYC,CAAG,EAAGE,EAAO,CAAE,cAAe,IAAK,CAAC,CAC/D,EACF,EAEAiB,EAAClB,EAAA,CACC,MAAOC,EACP,KAAMA,EAAM,eACZ,UAAWA,EAAM,mBACjB,MAAOG,EACP,OAAQC,EACR,UAAWC,EACb,EAGDL,EAAM,YAAc,KACnBsC,EAAA+B,EAAA,CACE,UAAApD,EAAC8E,EAAA,CAAY,MAAO/F,EAAO,EAC3BiB,EAAC+E,EAAA,CAAS,MAAOhG,EAAO,EACxBiB,EAACqD,GAAA,CAAW,MAAOtE,EAAO,EAC1BiB,EAACgF,EAAA,CAAW,MAAOjG,EAAO,EAC1BiB,EAACiF,EAAA,CAAgB,MAAOlG,EAAO,OAAM,GAAC,EACtCiB,EAACwD,GAAA,CAAU,MAAOzE,EAAO,GAC3B,EAEDA,EAAM,oBACLiB,EAAC4E,EAAA,CACC,MAAO1F,EACP,OAAQC,EACR,KAAMwF,EACN,MAAO9F,GAAO,CACZqG,EAAoBtG,EAAYC,CAAG,EAAGE,EAAO,CAC3C,IAAK,OACL,IAAK,CACP,CAAC,CACH,EACF,EACE,KACHA,EAAM,YAAc,KAAOiB,EAACuB,GAAA,CAAK,MAAOxC,EAAO,SAAUyC,EAAU,GACtE,CAEJ,CCzbA,SAAS2D,GAAkB,CACzB,MAAAC,EACA,KAAAC,CACF,EAA6C,CAC3C,OACEC,EAACC,EAAA,CACC,MAAOH,EACP,UAAW,CAAC,CAACC,GAAM,gBACnB,SAAU,SAASD,EAAM,EAAE,GAC7B,CAEJ,CAEO,SAASI,GACdJ,EACAC,EACA,CACA,OAAOI,EAAiBL,EAAOC,EAAMF,EAAiB,CACxD",
|
|
6
|
+
"names": ["host", "read", "name", "renderDisplaySvg", "read", "renderDisplaySvg_default", "host", "host", "read", "name", "PaintLayer", "paintLayer_default", "FONT", "ROW_PX", "RASTER_SCALE", "asCanvasCtx", "ctx", "Body", "model", "lift", "drawPaths", "width", "height", "rasterize", "built", "k", "vector", "svgCanvas", "canvas", "scaleX", "scaleY", "translateX", "translateY", "renderer", "Canvas2DRenderer", "jsx", "svgHeading", "heading", "key", "pitch", "first", "gap", "HEADING_GAP_PX", "text", "LABEL_CHAR_PX", "left", "HEADING_INK", "svgRow", "row", "id", "column", "swatch", "sw", "swatchWidth", "indent", "words", "jsxs", "SvgSwatch", "Keys", "idPrefix", "sections", "legendSections", "all", "section", "rowPitch", "swatchColumn", "rows", "testid", "spaced", "s", "i", "pad", "boxWidth", "max", "r", "boxHeight", "sum", "LEGEND_INSET_PX", "top", "placed", "y", "Chip", "x", "fontSize", "anchor", "bold", "w", "Fragment", "SizeLabels", "kind", "leader", "RowLabels", "label", "Facets", "panels", "grid", "place", "columns", "keyY", "FACET_GAP_PX", "facetKeyRows", "keyX", "_", "cell", "FACET_TITLE_PX", "walk", "title", "walkKeyRow", "PaneSvg", "tubeMap", "opts", "PaintLayer", "paintTubeMap", "BubbleHalos_default", "GenePins_default", "LabelLayer_default", "WalkRowsOverlay_default", "paintReferenceStrip", "GraphTrackSvgBody", "model", "opts", "jsx", "PaneSvg", "renderGraphTrackSvg", "renderDisplaySvg"]
|
|
7
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{A as Fr,B as Nr,C as Ft,D as qr,E as dn,F as Re,G as un,H as cn,I as mn,J as ln,K as yn,L as fn,M as Vt,P as Qe,Q as wn,S as kn,U as Sn,V as xn,a as q,b as tr,c as or,d as Ue,e as Q,f as dr,h as vt,i as B,j as xe,k as Ee,l as At,m as ur,n as cr,o as mr,p as lr,q as Pt,r as hr,s as Cr,x as Br,y as Ir,z as Er}from"./chunks/chunk-H53NTUCD.js";import{a as Lt,b as nr,c as ar,d as Ie,e as ir,f as sr,g as pr,j as gn,k as hn,o as bn,p as Mn}from"./chunks/chunk-26SCNTI3.js";import{$a as Yr,Ab as an,B as yr,Bb as sn,C as fr,Cb as pn,H as wr,I as kr,Ka as Hr,La as Nt,Oa as Vr,P as se,Pa as jr,Q as Mr,R as Sr,Ra as Wr,S as xr,Sa as Or,T as Rr,U as Tr,V as Gr,Va as Dr,W as Ct,Wa as _r,Xa as zr,Y as Lr,Za as $r,_a as Jr,a as Be,aa as vr,ab as Ur,b as kt,ba as Fe,bb as Xr,c as C,ca as Bt,d as ie,da as pe,db as Kr,ea as de,ga as Ar,gc as Ke,h as er,ha as Ne,ia as Pr,jb as Ht,lb as Qr,ma as It,mb as Zr,na as Et,o as Gt,ob as en,p as rr,qb as tn,u as gr,ub as qe,vb as on,wb as rn,x as Xe,xb as nn,z as br}from"./chunks/chunk-SD7WGQ6Y.js";import"./chunks/chunk-KQ6JJDJC.js";import{c as Qo,d as Zo}from"./chunks/chunk-JSWEU5QG.js";import{E as Tt,h as Ye,w as xt,x as Rt}from"./chunks/chunk-2VKDQF54.js";import{b as He}from"./chunks/chunk-VCYF5E2N.js";import{a as Rn,b as Tn,c as Ze,d as Gn,e as Ln}from"./chunks/chunk-NE3OW4WX.js";import{j as ze}from"./chunks/chunk-QGLMVXGX.js";import{s as St}from"./chunks/chunk-M2D7NUOY.js";import{e as ht,g as bt}from"./chunks/chunk-ZKCMVSD4.js";import"./chunks/chunk-YBLNN5FU.js";import{i as wt,m as $o}from"./chunks/chunk-YXN7J6LG.js";import{a as Io,c as Eo,g as K,r as Ce,t as zo,u as $e}from"./chunks/chunk-56YYNIV3.js";import{A as Pe,B as Se,j as Me,y as F,z as _}from"./chunks/chunk-DKUKQR3S.js";import"./chunks/chunk-YBLNN5FU.js";import{a as No,b as W,c as te,d as Ho,e as Vo}from"./chunks/chunk-ROZPEXN4.js";import{a as _e,c as Fo}from"./chunks/chunk-ON465L7Z.js";import{a as qo,g as Ko}from"./chunks/chunk-AH5UWTAV.js";import{b as Jo,d as Yo}from"./chunks/chunk-3VGXCEMQ.js";import{b as jo,c as Wo,e as Oo,f as Do,g as yt,h as _o}from"./chunks/chunk-IKJZPPOA.js";import{a as ft}from"./chunks/chunk-OGQ6OQDN.js";import{a as L,b as O,c as Ae,e as V,f as M}from"./chunks/chunk-3WG3GF2A.js";import{g as vo,i as ae,j as x,k as Ao,l as Po,n as Co}from"./chunks/chunk-J5RMHLFJ.js";import{b as oe}from"./chunks/chunk-YU7T5WOQ.js";import{I as Je,i as Uo,l as Xo}from"./chunks/chunk-5Z4VIKXZ.js";import{a as Bo,b as E,d as Mt}from"./chunks/chunk-JMBDTNUR.js";var et=JBrowseExports["@jbrowse/core/Plugin"];var vn=et&&et.__esModule?et.default:et;var tt=q([E("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),E("circle",{cx:"14.8",cy:"18",r:"2"},"1"),E("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var ot=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"];var Z=ot&&ot.__esModule?ot.default:ot;var Da=W("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:F("/path/to/graph.gbz.db"),haplotypeIndexLocation:F(""),readsLocation:F(""),readsIndex:_("GbzBaseReadsIndex"),samplesTsvLocation:F(""),subgraphSnarls:{type:"stringEnum",model:M.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:ze.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:ze.context,advanced:!0},nodeLimit:{type:"number",defaultValue:ze.limit,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>{let{uri:t,baseUri:o,reads:r}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:o}}:{},...typeof r=="string"?{readsLocation:{uri:r,baseUri:o},..._a(r,o)}:{}}}});function _a(e,t){let{name:o,query:r}=Do(e);return o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi${r}`,baseUri:t}}}:{}}var An=Da;function jt(e){e.addAdapterType(()=>new Z({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:An,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-NPEXW3Z3.js").then(t=>t.default)}))}var ue=JBrowseExports["@jbrowse/core/pluggableElementTypes"],re=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 Pn=re("AddTrackWorkflowType");var Cn=re("BaseDisplay");var rt=re("DisplayType");var Te=re("RpcMethodType"),Bn=re("RpcMethodTypeWithRenameRegion");var In=re("TrackType");var En=re("createBaseTrackConfig"),Fn=re("createBaseTrackModel");var fs=ue&&ue.__esModule?ue.default:ue;var ce=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"],za=e=>ce!=null&&e in Object(ce)?ce[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 Nn=za("getAdapter");var ks=ce&&ce.__esModule?ce.default:ce;async function Ge(e,{sessionId:t,adapterConfig:o},r){let{dataAdapter:n}=await Nn(e,t,o);return{adapter:typeof n[r]=="function"?n:void 0,name:n.constructor.name}}var Ve=class extends Te{constructor(){super(...arguments);this.name="GetGraphHaplotypes"}async execute(o){let{adapter:r}=await Ge(this.pluginManager,o,"getHaplotypeNames");return r?.getHaplotypeNames({signal:o.signal})}};function Hn(e){return typeof e.reads=="string"&&e.reads!==""||Oo(e.readsLocation)}var je=class extends Te{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(o){let{nodeNames:r,signal:n}=o,{adapter:a}=await Ge(this.pluginManager,o,"getReads");return a?a.getReads(r,{signal:n}):{records:[],total:0}}};var me=JBrowseExports["@jbrowse/core/util/librpc"],$a=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 Wt=$a("rpcResultWithArrayBuffers");var Fs=me&&me.__esModule?me.default:me;var We=class extends Bn{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(o){let{region:r,opts:n,signal:a}=o,{adapter:i,name:s}=await Ge(this.pluginManager,o,"getSubgraph");if(i){let p=await i.getSubgraph(r,{...n,signal:a});if(typeof p!="string")return Wt(p);let u=p?bt(p):void 0;return u?Wt(u):p}return console.warn(`[GetSubgraph] ${s} does not implement getSubgraph`),""}};var Ja=oe(()=>import("./chunks/AddTrackWorkflow-KT6Z6PSW.js"));function Ot(e){e.addAddTrackWorkflowType(()=>new Pn({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Ja,stateModel:M.model({})}))}var Oe=class extends Te{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(o){let{graph:r,options:n,signal:a,statusCallback:i}=o;return a?.throwIfAborted(),i?.("Computing layout"),Zo({graph:r,options:n})}};var nt=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"];var Vn=nt&&nt.__esModule?nt.default:nt;var le=JBrowseExports["@jbrowse/core/util/withLaunchInput"],Ya=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}),jn=Ya("defineLaunchKeys");var qs=le&&le.__esModule?le.default:le;var ge=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"],Ua=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 Wn=Ua("BaseViewModel");var Qs=ge&&ge.__esModule?ge.default:ge;var Le=["off","nodes","everything"];var On=q(E("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 Dn=q(E("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 _n=q([E("circle",{cx:"12",cy:"12",r:"3.2"},"0"),E("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 _t(e,t,{cut:o=!1}={}){if(!(t>0)||e.paths?.length||!e.nodes.some(y=>K(y)))return e;let{nodes:r,edges:n}=qa(e),a=new Map(r.map((y,R)=>[y.id,R])),i=n.map(Jn),s=Qa(r.length,n,i,a),p=ei(r,n,i,a),u=Eo(p.keys(),y=>p[y]),m=new Uint8Array(r.length),S=[];for(let y of u.values())if(ti(y,r,s,p)>=t){for(let R of y)m[R]=1;K(r[y[0]])||S.push(y)}let{dist:A,pred:h}=ni(r,s);for(let y of S)for(let[R,v]of oi(y,r,s,p)){let N=ri(R,v,s,p,A,r);for(;N!==void 0&&!m[N];)m[N]=1,N=K(r[N])?void 0:h[N]}let T=n.map(y=>[a.get(y.from),a.get(y.to)]),I=n.map((y,R)=>{let[v,N]=T[R];return v!==void 0&&N!==void 0&&!!m[v]&&!!m[N]}),D=n.flatMap((y,R)=>{let[v,N]=T[R];if(!I[R])return[];let ve=Za(r[v],i[R].from,r[N],i[R].to);return ve>0&&ve<t?[{k:R,bp:ve}]:[]}).sort((y,R)=>y.bp-R.bp).map(({k:y})=>y);for(let y of D)I[y]=!1;let b=new Set(o?Xa(r.length,T,I,D):[]),g=n.flatMap((y,R)=>b.has(R)?[{...y,foldBridge:!0}]:I[R]?[y]:[]);return ii({...e,nodes:r,edges:g},m,p)}function Xa(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],[m,S]=[a(p),a(u)];return n[m]=S,m!==S};return o.forEach((s,p)=>{s&&i(p)}),r.filter(i)}function qa({nodes:e,edges:t}){let o=new Set(e.filter(n=>n.stable?.strand==="-").map(n=>n.id));if(o.size===0)return{nodes:e,edges:t};let r=(n,a)=>{let i=a??Ye(n);return o.has(n)?Ka(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 Ka(e){return e==="+"?"-":"+"}function Jn(e){return{from:(e.fromStrand??Ye(e.from))==="+"?"e":"s",to:(e.toStrand??Ye(e.to))==="+"?"s":"e"}}function Qa(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:m}=o[i];n[s].push({other:p,side:u,otherSide:m}),n[p].push({other:s,side:m,otherSide:u})}}),n}function Yn(e,t){let o=e.stable,r=t.stable;return o&&r?.refName===o.refName&&r.rank===o.rank?[o,r]:void 0}function zt(e,t,o,r){let n=Yn(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 Za(e,t,o,r){let n=Yn(e,o);if(!n||zt(e,t,o,r))return 0;let[a,i]=n;return Math.abs(Dt(i,o,r)-Dt(a,e,t))}function Dt({start:e},t,o){return o==="s"?e:e+t.length}function ei(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&&zt(e[p],o[s].from,e[u],o[s].to)&&(n[a(p)]=a(u))}),e.map((i,s)=>a(s))}function ti(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:m,otherSide:S}of o[u]){let A=t[m];if(r[m]!==r[u]&&K(A)){a??=A.stable.refName,p&&=A.stable.refName===a;let h=Dt(A.stable,A,S);i=Math.min(i,h),s=Math.max(s,h)}}}return p&&s>i?Math.max(n,s-i):n}function oi(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 m of["s","e"])o[u].some(S=>S.side===m&&r[S.other]===r[u])||p.push([u,m]);return p}function ri(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 ni(e,t){let o=new Float64Array(e.length).fill(1/0),r=new Int32Array(e.length).fill(-1),n=new ai(([a,i],[s,p])=>a-s||zn(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]&&zn(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 zn(e,t){return e<t?-1:e>t?1:0}var ai=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 ii(e,t,o){let{nodes:r,edges:n}=e,a=new Map(r.map((b,g)=>[b.id,g])),i=n.map(Jn),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 m=new Map,S=new Set,A=new Set;s.forEach(([b,g],y)=>{if(b.i!==g.i&&o[b.i]===o[g.i]&&zt(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[R,v]=b.side==="e"?[b,g]:[g,b];m.set(R.i,{j:v.i,out:R.side,in:v.side}),S.add(v.i),A.add(y)}});let h=r.map((b,g)=>g),T=new Map,I=new Map;r.forEach((b,g)=>{if(!t[g]||S.has(g)||!m.has(g))return;let y=[g],R=$n(m.get(g).out);T.set(u(g,R),"s");for(let v=m.get(g);v;v=m.get(v.j))y.push(v.j),R=v.in;T.set(u(y.at(-1),$n(R)),"e");for(let v of y)h[v]=g;I.set(g,si(y.map(v=>r[v])))});let D=({i:b,side:g})=>({id:r[h[b]].id,side:h[b]===b&&!I.has(b)?g:T.get(u(b,g))});return{...e,nodes:r.flatMap((b,g)=>!t[g]||h[g]!==g?[]:[I.get(g)??b]),edges:n.flatMap((b,g)=>{if(A.has(g))return[];let[y,R]=s[g];if(!I.has(h[y.i])&&!I.has(h[R.i]))return[b];let v=D(y),N=D(R);return[{...b,from:v.id,to:N.id,fromStrand:v.side==="e"?"+":"-",toStrand:N.side==="s"?"+":"-"}]})}}function $n(e){return e==="s"?"e":"s"}function si(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 $t(e,t=()=>"",o=!0){let r=e.paths??[],n=er(e),a=new Map;r.forEach((h,T)=>{Io(a,Ce(h.name).name,T)});let i=h=>n[h].map(T=>`${T.node.id}${T.strand}`).join(","),s=h=>a.get(h).map(T=>r[T]),p=new Map,u=new Map;for(let[h,T]of a){let I=h===e.referencePath?`\0${h}`:T.map(i).join("|"),D=t(h),b=p.get(I)??p.size;p.set(I,b);let g=`${I} ${D}`,y=u.get(g);y?y.walks.push(h):u.set(g,{rank:b,group:D,walks:[h]})}if(o&&u.size===a.size)return e;let m=[...u.values()].sort((h,T)=>h.rank-T.rank||h.group.localeCompare(T.group));if(!o)return{...e,paths:m.flatMap(({walks:h})=>h.flatMap(s))};let S=m.flatMap(({walks:h})=>s(h[0]).map(T=>h.length>1?{...T,members:h}:T)),A=new Set(m.map(h=>h.walks[0]));return{...e,paths:S,anchorPaths:e.anchorPaths?.filter(h=>A.has(h.name)),pathVisits:e.pathVisits?.filter(h=>A.has(h))}}function Un(e,t,o){let r=Math.min(48,t,o);return Math.max(0,r-(e+t))-Math.max(0,e-(o-r))}function Xn(e,t,o){return{translateX:t.translateX+Un(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,o.width),translateY:t.translateY+Un(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,o.height)}}function qn(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 pi=.05,at=9;function di(e,t){let{minY:o,maxY:r}=e.layout.bounds,n=r-o;return e.columns&&n>0?Math.max(pi,Math.min(1,t/n)):1}function it(e,t){let{scaleX:o,translateX:r,translateY:n}=t,a=t.scaleY*di(e,t.usableHeight),i=p=>(p-e.yOffset)*a+n,{columns:s}=e;if(s){let p=Dr(s,u=>u*o+r);return{x:u=>_r(p,u),y:i,yScale:a}}return{x:p=>p*o+r,y:i,yScale:a}}function Jt(e,{x:t,y:o},r,n){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-at)<=r&&r<=t(i.x+i.pixelWidth+at)&&o(i.y-at)<=n&&n<=o(i.y+i.contentHeight+at)&&(a=i.name)}),a}var Kn=20,ui=.05,Qn=6;function ci(e){let t=e.length-Qn;return t>0?`${e.slice(0,Qn).join(", ")} and ${t} more`:e.join(", ")}function mi(e){if(e.kind==="deletion")return`deletion of ${Tt(e.length)}`;if(e.kind==="substitution")return`substitution ${e.seq}`;let t=e.seq??"",o=t.length>Kn?`${t.slice(0,Kn)}\u2026`:t;return`insertion of ${Tt(t.length)} ${o}`.trim()}function li(e,t,o){let r={substitution:!1,insertion:!1,deletion:!1};if(e&&t&&Jr(t.yScale)){let n=3;for(let a of e.mismatches)if(!r[a.kind]&&Yr(a,{x:t.x,width:o})&&(r[a.kind]=!0,--n===0))break}return r}var Zn=wn.views(e=>({get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?it(t,{...e.screenTransform,usableHeight:e.usableHeight}):void 0},get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX&&!e.layoutResult?.tubeMapPanels?Nt(t):void 0},get tubeMapPanelRulerBoxes(){let{layoutResult:t}=e,o=t?.tubeMapPanels?.at(-1);return o&&t?.referenceAxis&&!e.hostPlacesX?Nt(Hr(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?Vr(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:zr(n),tubeColors:e.tubeColorsOf(a,n.pathColors),nodeColors:e.tubeMapNodeColors?qr(a,e.effectiveColorScheme,e.referenceRamp):void 0,deviations:i?Or(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?rn(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=on(a,r);return i?{box:i,...nn(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*Ht,a=t.reduce((u,m)=>u+m.panel.height,0),i=e.usableHeight-n,s=e.scaleY*(r.referenceAxis&&a>0?Math.max(ui,Math.min(1,i/a)):1),p=e.translateY;return t.map((u,m)=>{let{panel:S}=u,A=S.result.extent?.minY??0,h=p,T=h+Ht;return p=T+S.height*s,{...u,tubeColors:o[m],frame:it(S.result.tubeMap,{scaleX:e.scaleX,translateX:e.translateX,scaleY:s,translateY:T-A*s,usableHeight:1/0}),titleTop:h,top:T,bottom:p}})},tubeMapPanelAt(t){let o=this.tubeMapPanelViews?.findIndex(r=>r.titleTop<=t&&t<=r.bottom)??-1;return o<0?null:o}})).views(e=>({paintHover(t,o){let r=e.tubeMapPicture,n=e.tubeMapFrame,a=e.hoverLayerNode;if(r&&n){let{ctx:i,canvas:s}=t,p=Ke(e.paneWidth,e.canvasHeight);i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,s.width,s.height),i.setTransform(p,0,0,p,0,0);let u=e.tubeMapPanelViews;u?an(i,u,e.tubeMapPanelHover,{width:e.paneWidth,lit:a!==null}):$r(i,r,{...n,width:e.paneWidth,highlightNode:a}),Wr(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,Ct]])),t.setEdgeHighlight(e.hoveredEdge,Ct),t.updateTransform(e.paintTransform),t.renderHighlights()}})).views(e=>{let t=(n,a)=>JSON.stringify(n)===JSON.stringify(a),o=kt(()=>li(e.layoutResult?.tubeMapPanels!==void 0?void 0:e.tubeMapPicture,e.tubeMapFrame,e.paneWidth),{equals:t}),r=kt(()=>{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(m=>m.members),values:u==="value"&&p?[...[...p.palette].map(([m,S])=>({value:m,color:S})),...p.unvalued?[{value:`${p.field}: none`,color:tn}]:[]]:void 0,roles:u==="role"||u==="tinted",haplotypeTube:u==="tinted"?Zr[0]:Qr,logWidths:n?.tubeMap!==void 0&&!n.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:i.some(m=>!m.is_reverse),reverseReads:i.some(m=>m.is_reverse)}},{equals:t});return{get tubeMapKeys(){return{...r.get(),...o.get()}}}}).views(e=>({tubeMapUnder(t){let o=e.tubeMapPanelViews;if(o){let i=e.tubeMapPanelAt(t),s=i===null?void 0:o[i];return s&&{drawing:s.panel.result.tubeMap,...s}}let r=e.layoutResult?.tubeMap,n=e.tubeMapPicture,a=e.tubeMapFrame;return r&&n&&a?{drawing:r,picture:n,frame:a}:void 0},tubeMapNodeAt(t,o){let r=this.tubeMapUnder(o);return(r?Jt(r.drawing,r.frame,t,o):null)??jr(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=Xr(n,a,t,o),s=i?.readId??Ur(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?[mi(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: ${ci(a.map(i=>e.walkLabel(i)))}`}:n?{label:e.walkLabel(n.name),readout:"haplotype"}:void 0}}));var gi=80,ea=Zn.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=Xn(t,e,o);e.viewportOwner!=="host"&&(e.translateX=r.translateX),e.translateY=r.translateY}})).actions(e=>{let t;return{setColorScheme(o){(e.statedColorDomain||e.chosenColorScheme==="reference-position")&&(t=e.statedColorDomain),e.writeGrammar({encoding:{color:fn(o,t)}})}}}).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,o,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=o.nodeStrokes.length,e.builtViewport={...r,viewportDirty:e.viewportDirty},e.drawnBatch=o},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLayoutEngine(t){e.layoutEngine=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.writeGrammar({layoutMode:t})},setHover(t){e.writeGrammar({hover:t}),e.hoverLightsEverything||(e.hoveredEdge=null)},setReferencePath(t){e.referencePath=t;let o=e.graph;if(o?.anchoredBy==="paths"){let r=$e(o,t);Ne.inherit(o,r),e.graph=r}},setLayer(t,o){e.writeGrammar({layers:yn(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:Vt({width:t,px:e.contigThickness,links:e.linkWidth})})},setLinkWidth(t){e.writeGrammar({size:Vt({width:e.nodeWidth,px:e.contigThickness,links:t})})},setTubeMapFold(t){e.tubeMapFold=t},setTubeMapRoutes(t){e.tubeMapRoutes=t},setTubeMapColorBy(t){e.tubeMapColorBy=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let o=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>o.get(r)??{walk:r})},liftAmongChoices(t){let o=new Set(e.walkChoices.map(r=>r.name));this.liftWalks([...t,...e.walkLayers.map(r=>r.walk).filter(r=>!o.has(r))])},setFacet(t){let o=e.facetSetting;t===""?o.field!==""&&e.writeGrammar({facet:{}}):e.writeGrammar({facet:{...o,field:t,sort:t===o.field?o.sort:[]}})},toggleWalk(t){let o=e.walkLayers;e.walkLayers=o.some(r=>r.walk===t)?o.filter(r=>r.walk!==t):[...o,{walk:t}]},setWalkColor(t,o){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...o}}:r)},setWalkRowSamples(t){let o=e.walkRowOrder;e.writeGrammar({rows:{...t?{kept:t}:{},...o?{order:o}:{}}})},setWalkRowOrder(t){let o=e.walkRowSamples;e.writeGrammar({rows:{...o?{kept:o}:{},...t?{order:t}:{}}})},setWalkRowGroupBy(t){(t||e.walkRowGroupBy)&&e.writeGrammar({facet:t??{}})},pairWithLinearView(t){let o=e.connectedViewId;o!==void 0&&xe([...x(e).views]).some(n=>n.id===o)||(e.connectedViewId=t)},setHoveredNode(t,o){e.hoveredNode=t,e.hoveredAt=t===null?null:o??null},setHoveredPanel(t){e.hoveredPanel=t},setHoveredTube(t){let o=e.hoveredTube;(t?.track!==o?.track||t?.mismatch!==o?.mismatch)&&(e.hoveredTube=t)},applyHoveredRowWalks(t){t.join(`
|
|
1
|
+
import{A as Fr,B as Nr,C as Ft,D as qr,E as dn,F as Re,G as cn,H as un,I as mn,J as ln,K as yn,L as fn,M as Vt,P as Qe,Q as wn,S as kn,U as Sn,V as xn,a as q,b as tr,c as or,d as Ue,e as Q,f as dr,h as vt,i as B,j as xe,k as Ee,l as At,m as cr,n as ur,o as mr,p as lr,q as Pt,r as hr,s as Cr,x as Br,y as Ir,z as Er}from"./chunks/chunk-3EQNVA3F.js";import{a as Lt,b as nr,c as ar,d as Ie,e as ir,f as sr,g as pr,j as gn,k as hn,o as bn,p as Mn}from"./chunks/chunk-NLS74JSZ.js";import{$a as Yr,Ab as an,B as yr,Bb as sn,C as fr,Cb as pn,H as wr,I as kr,Ka as Hr,La as Nt,Oa as Vr,P as se,Pa as jr,Q as Mr,R as Sr,Ra as Wr,S as xr,Sa as Or,T as Rr,U as Tr,V as Gr,Va as Dr,W as Ct,Wa as _r,Xa as zr,Y as Lr,Za as $r,_a as Jr,a as Be,aa as vr,ab as Ur,b as kt,ba as Fe,bb as Xr,c as C,ca as Bt,d as ie,da as pe,db as Kr,ea as de,ga as Ar,gc as Ke,h as er,ha as Ne,ia as Pr,jb as Ht,lb as Qr,ma as It,mb as Zr,na as Et,o as Gt,ob as en,p as rr,qb as tn,u as gr,ub as qe,vb as on,wb as rn,x as Xe,xb as nn,z as br}from"./chunks/chunk-ZGTG74GE.js";import"./chunks/chunk-XWCLYB5C.js";import{c as Qo,d as Zo}from"./chunks/chunk-XB5KC2EZ.js";import{E as Tt,h as Ye,w as xt,x as Rt}from"./chunks/chunk-2V75YPTT.js";import{b as He}from"./chunks/chunk-CJAV55QB.js";import{a as Rn,b as Tn,c as Ze,d as Gn,e as Ln}from"./chunks/chunk-I6F25EXY.js";import{j as ze}from"./chunks/chunk-IAXUZMOX.js";import{s as St}from"./chunks/chunk-M2D7NUOY.js";import{e as ht,g as bt}from"./chunks/chunk-FY7X6253.js";import"./chunks/chunk-YBLNN5FU.js";import{i as wt,m as $o}from"./chunks/chunk-X7YIGIYW.js";import{a as Io,c as Eo,g as K,r as Ce,t as zo,u as $e}from"./chunks/chunk-JMRW3IGK.js";import{A as Pe,B as Se,j as Me,y as F,z as _}from"./chunks/chunk-DG3E6BSX.js";import"./chunks/chunk-YBLNN5FU.js";import{a as No,b as W,c as te,d as Ho,e as Vo}from"./chunks/chunk-ROZPEXN4.js";import{a as _e,c as Fo}from"./chunks/chunk-5RHNR3TH.js";import{a as qo,g as Ko}from"./chunks/chunk-AH5UWTAV.js";import{b as Jo,d as Yo}from"./chunks/chunk-3VGXCEMQ.js";import{b as jo,c as Wo,e as Oo,f as Do,g as yt,h as _o}from"./chunks/chunk-IKJZPPOA.js";import{a as ft}from"./chunks/chunk-OGQ6OQDN.js";import{a as L,b as O,c as Ae,e as V,f as M}from"./chunks/chunk-3WG3GF2A.js";import{g as vo,i as ae,j as x,k as Ao,l as Po,n as Co}from"./chunks/chunk-J5RMHLFJ.js";import{c as oe}from"./chunks/chunk-NIEZKWQV.js";import{I as Je,i as Uo,l as Xo}from"./chunks/chunk-5Z4VIKXZ.js";import{a as Bo,b as E,d as Mt}from"./chunks/chunk-JMBDTNUR.js";var et=JBrowseExports["@jbrowse/core/Plugin"];var vn=et&&et.__esModule?et.default:et;var tt=q([E("circle",{cx:"7.2",cy:"14.4",r:"3.2"},"0"),E("circle",{cx:"14.8",cy:"18",r:"2"},"1"),E("circle",{cx:"15.2",cy:"8.8",r:"4.8"},"2")],"BubbleChart");var ot=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"];var Z=ot&&ot.__esModule?ot.default:ot;var Da=W("GbzBaseSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},gbzDbLocation:F("/path/to/graph.gbz.db"),haplotypeIndexLocation:F(""),readsLocation:F(""),readsIndex:_("GbzBaseReadsIndex"),samplesTsvLocation:F(""),subgraphSnarls:{type:"stringEnum",model:M.enumeration("SnarlOutput",["none","contained","overlapping"]),defaultValue:ze.snarls},referenceSample:{type:"string",defaultValue:""},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},context:{type:"number",defaultValue:ze.context,advanced:!0},nodeLimit:{type:"number",defaultValue:ze.limit,advanced:!0}},{explicitlyTyped:!0,preProcessSnapshot:e=>{let{uri:t,baseUri:o,reads:r}=e;return{...e,...t?{gbzDbLocation:{uri:t,baseUri:o}}:{},...typeof r=="string"?{readsLocation:{uri:r,baseUri:o},..._a(r,o)}:{}}}});function _a(e,t){let{name:o,query:r}=Do(e);return o.endsWith(".gz")?{readsIndex:{location:{uri:`${o}.tbi${r}`,baseUri:t}}}:{}}var An=Da;function jt(e){e.addAdapterType(()=>new Z({name:"GbzBaseSyntenyAdapter",displayName:"gbz-base pangenome adapter",configSchema:An,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/GbzBaseSyntenyAdapter-EGNUOKB2.js").then(t=>t.default)}))}var ce=JBrowseExports["@jbrowse/core/pluggableElementTypes"],re=e=>ce!=null&&e in Object(ce)?ce[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/pluggableElementTypes' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Pn=re("AddTrackWorkflowType");var Cn=re("BaseDisplay");var rt=re("DisplayType");var Te=re("RpcMethodType"),Bn=re("RpcMethodTypeWithRenameRegion");var In=re("TrackType");var En=re("createBaseTrackConfig"),Fn=re("createBaseTrackModel");var fs=ce&&ce.__esModule?ce.default:ce;var ue=JBrowseExports["@jbrowse/core/data_adapters/dataAdapterCache"],za=e=>ue!=null&&e in Object(ue)?ue[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/data_adapters/dataAdapterCache' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Nn=za("getAdapter");var ks=ue&&ue.__esModule?ue.default:ue;async function Ge(e,{sessionId:t,adapterConfig:o},r){let{dataAdapter:n}=await Nn(e,t,o);return{adapter:typeof n[r]=="function"?n:void 0,name:n.constructor.name}}var Ve=class extends Te{constructor(){super(...arguments);this.name="GetGraphHaplotypes"}async execute(o){let{adapter:r}=await Ge(this.pluginManager,o,"getHaplotypeNames");return r?.getHaplotypeNames({signal:o.signal})}};function Hn(e){return typeof e.reads=="string"&&e.reads!==""||Oo(e.readsLocation)}var je=class extends Te{constructor(){super(...arguments);this.name="GetGraphReads"}async execute(o){let{nodeNames:r,signal:n}=o,{adapter:a}=await Ge(this.pluginManager,o,"getReads");return a?a.getReads(r,{signal:n}):{records:[],total:0}}};var me=JBrowseExports["@jbrowse/core/util/librpc"],$a=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 Wt=$a("rpcResultWithArrayBuffers");var Fs=me&&me.__esModule?me.default:me;var We=class extends Bn{constructor(){super(...arguments);this.name="GetSubgraph"}async execute(o){let{region:r,opts:n,signal:a}=o,{adapter:i,name:s}=await Ge(this.pluginManager,o,"getSubgraph");if(i){let p=await i.getSubgraph(r,{...n,signal:a});if(typeof p!="string")return Wt(p);let c=p?bt(p):void 0;return c?Wt(c):p}return console.warn(`[GetSubgraph] ${s} does not implement getSubgraph`),""}};var Ja=oe(()=>import("./chunks/AddTrackWorkflow-RJSOQZYQ.js"));function Ot(e){e.addAddTrackWorkflowType(()=>new Pn({name:"Pangenome graph track",displayName:"Add pangenome graph track",ReactComponent:Ja,stateModel:M.model({})}))}var Oe=class extends Te{constructor(){super(...arguments);this.name="GraphComputeLayout"}async execute(o){let{graph:r,options:n,signal:a,statusCallback:i}=o;return a?.throwIfAborted(),i?.("Computing layout"),Zo({graph:r,options:n})}};var nt=JBrowseExports["@jbrowse/core/pluggableElementTypes/ViewType"];var Vn=nt&&nt.__esModule?nt.default:nt;var le=JBrowseExports["@jbrowse/core/util/withLaunchInput"],Ya=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}),jn=Ya("defineLaunchKeys");var qs=le&&le.__esModule?le.default:le;var ge=JBrowseExports["@jbrowse/core/pluggableElementTypes/models"],Ua=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 Wn=Ua("BaseViewModel");var Qs=ge&&ge.__esModule?ge.default:ge;var Le=["off","nodes","everything"];var On=q(E("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 Dn=q(E("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 _n=q([E("circle",{cx:"12",cy:"12",r:"3.2"},"0"),E("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 _t(e,t,{cut:o=!1}={}){if(!(t>0)||e.paths?.length||!e.nodes.some(y=>K(y)))return e;let{nodes:r,edges:n}=qa(e),a=new Map(r.map((y,R)=>[y.id,R])),i=n.map(Jn),s=Qa(r.length,n,i,a),p=ei(r,n,i,a),c=Eo(p.keys(),y=>p[y]),m=new Uint8Array(r.length),S=[];for(let y of c.values())if(ti(y,r,s,p)>=t){for(let R of y)m[R]=1;K(r[y[0]])||S.push(y)}let{dist:A,pred:h}=ni(r,s);for(let y of S)for(let[R,v]of oi(y,r,s,p)){let N=ri(R,v,s,p,A,r);for(;N!==void 0&&!m[N];)m[N]=1,N=K(r[N])?void 0:h[N]}let T=n.map(y=>[a.get(y.from),a.get(y.to)]),I=n.map((y,R)=>{let[v,N]=T[R];return v!==void 0&&N!==void 0&&!!m[v]&&!!m[N]}),D=n.flatMap((y,R)=>{let[v,N]=T[R];if(!I[R])return[];let ve=Za(r[v],i[R].from,r[N],i[R].to);return ve>0&&ve<t?[{k:R,bp:ve}]:[]}).sort((y,R)=>y.bp-R.bp).map(({k:y})=>y);for(let y of D)I[y]=!1;let b=new Set(o?Xa(r.length,T,I,D):[]),g=n.flatMap((y,R)=>b.has(R)?[{...y,foldBridge:!0}]:I[R]?[y]:[]);return ii({...e,nodes:r,edges:g},m,p)}function Xa(e,t,o,r){let n=Array.from({length:e},(s,p)=>p),a=s=>{for(;n[s]!==s;)n[s]=n[n[s]],s=n[s];return s},i=s=>{let[p,c]=t[s],[m,S]=[a(p),a(c)];return n[m]=S,m!==S};return o.forEach((s,p)=>{s&&i(p)}),r.filter(i)}function qa({nodes:e,edges:t}){let o=new Set(e.filter(n=>n.stable?.strand==="-").map(n=>n.id));if(o.size===0)return{nodes:e,edges:t};let r=(n,a)=>{let i=a??Ye(n);return o.has(n)?Ka(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 Ka(e){return e==="+"?"-":"+"}function Jn(e){return{from:(e.fromStrand??Ye(e.from))==="+"?"e":"s",to:(e.toStrand??Ye(e.to))==="+"?"s":"e"}}function Qa(e,t,o,r){let n=Array.from({length:e},()=>[]);return t.forEach((a,i)=>{let s=r.get(a.from),p=r.get(a.to);if(s!==void 0&&p!==void 0){let{from:c,to:m}=o[i];n[s].push({other:p,side:c,otherSide:m}),n[p].push({other:s,side:m,otherSide:c})}}),n}function Yn(e,t){let o=e.stable,r=t.stable;return o&&r?.refName===o.refName&&r.rank===o.rank?[o,r]:void 0}function zt(e,t,o,r){let n=Yn(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 Za(e,t,o,r){let n=Yn(e,o);if(!n||zt(e,t,o,r))return 0;let[a,i]=n;return Math.abs(Dt(i,o,r)-Dt(a,e,t))}function Dt({start:e},t,o){return o==="s"?e:e+t.length}function ei(e,t,o,r){let n=e.map((i,s)=>s),a=i=>{for(;n[i]!==i;)n[i]=n[n[i]],i=n[i];return i};return t.forEach((i,s)=>{let p=r.get(i.from),c=r.get(i.to);p!==void 0&&c!==void 0&&zt(e[p],o[s].from,e[c],o[s].to)&&(n[a(p)]=a(c))}),e.map((i,s)=>a(s))}function ti(e,t,o,r){if(K(t[e[0]]))return 1/0;let n=0,a,i=1/0,s=-1/0,p=!0;for(let c of e){n+=t[c].length;for(let{other:m,otherSide:S}of o[c]){let A=t[m];if(r[m]!==r[c]&&K(A)){a??=A.stable.refName,p&&=A.stable.refName===a;let h=Dt(A.stable,A,S);i=Math.min(i,h),s=Math.max(s,h)}}}return p&&s>i?Math.max(n,s-i):n}function oi(e,t,o,r){let n=c=>t[c].stable?.start??0,a=c=>n(c)+t[c].length,i=e[0],s=e[0];for(let c of e)n(c)<n(i)&&(i=c),a(c)>a(s)&&(s=c);let p=[];for(let c of new Set([i,s]))for(let m of["s","e"])o[c].some(S=>S.side===m&&r[S.other]===r[c])||p.push([c,m]);return p}function ri(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 ni(e,t){let o=new Float64Array(e.length).fill(1/0),r=new Int32Array(e.length).fill(-1),n=new ai(([a,i],[s,p])=>a-s||zn(e[i].name,e[p].name));e.forEach((a,i)=>{K(a)&&(o[i]=0,n.push([0,i]))});for(let a=n.pop();a!==void 0;a=n.pop()){let[i,s]=a;if(!(i>o[s]))for(let{other:p}of t[s]){if(K(e[p]))continue;let c=i+e[p].length;c<o[p]?(o[p]=c,r[p]=s,n.push([c,p])):c===o[p]&&zn(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 zn(e,t){return e<t?-1:e>t?1:0}var ai=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 ii(e,t,o){let{nodes:r,edges:n}=e,a=new Map(r.map((b,g)=>[b.id,g])),i=n.map(Jn),s=n.map((b,g)=>[{i:a.get(b.from),side:i[g].from},{i:a.get(b.to),side:i[g].to}]),p=new Map,c=(b,g)=>`${b}${g}`;for(let b of s)for(let{i:g,side:y}of b)p.set(c(g,y),(p.get(c(g,y))??0)+1);let m=new Map,S=new Set,A=new Set;s.forEach(([b,g],y)=>{if(b.i!==g.i&&o[b.i]===o[g.i]&&zt(r[b.i],b.side,r[g.i],g.side)&&p.get(c(b.i,b.side))===1&&p.get(c(g.i,g.side))===1){let[R,v]=b.side==="e"?[b,g]:[g,b];m.set(R.i,{j:v.i,out:R.side,in:v.side}),S.add(v.i),A.add(y)}});let h=r.map((b,g)=>g),T=new Map,I=new Map;r.forEach((b,g)=>{if(!t[g]||S.has(g)||!m.has(g))return;let y=[g],R=$n(m.get(g).out);T.set(c(g,R),"s");for(let v=m.get(g);v;v=m.get(v.j))y.push(v.j),R=v.in;T.set(c(y.at(-1),$n(R)),"e");for(let v of y)h[v]=g;I.set(g,si(y.map(v=>r[v])))});let D=({i:b,side:g})=>({id:r[h[b]].id,side:h[b]===b&&!I.has(b)?g:T.get(c(b,g))});return{...e,nodes:r.flatMap((b,g)=>!t[g]||h[g]!==g?[]:[I.get(g)??b]),edges:n.flatMap((b,g)=>{if(A.has(g))return[];let[y,R]=s[g];if(!I.has(h[y.i])&&!I.has(h[R.i]))return[b];let v=D(y),N=D(R);return[{...b,from:v.id,to:N.id,fromStrand:v.side==="e"?"+":"-",toStrand:N.side==="s"?"+":"-"}]})}}function $n(e){return e==="s"?"e":"s"}function si(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 $t(e,t=()=>"",o=!0){let r=e.paths??[],n=er(e),a=new Map;r.forEach((h,T)=>{Io(a,Ce(h.name).name,T)});let i=h=>n[h].map(T=>`${T.node.id}${T.strand}`).join(","),s=h=>a.get(h).map(T=>r[T]),p=new Map,c=new Map;for(let[h,T]of a){let I=h===e.referencePath?`\0${h}`:T.map(i).join("|"),D=t(h),b=p.get(I)??p.size;p.set(I,b);let g=`${I} ${D}`,y=c.get(g);y?y.walks.push(h):c.set(g,{rank:b,group:D,walks:[h]})}if(o&&c.size===a.size)return e;let m=[...c.values()].sort((h,T)=>h.rank-T.rank||h.group.localeCompare(T.group));if(!o)return{...e,paths:m.flatMap(({walks:h})=>h.flatMap(s))};let S=m.flatMap(({walks:h})=>s(h[0]).map(T=>h.length>1?{...T,members:h}:T)),A=new Set(m.map(h=>h.walks[0]));return{...e,paths:S,anchorPaths:e.anchorPaths?.filter(h=>A.has(h.name)),pathVisits:e.pathVisits?.filter(h=>A.has(h))}}function Un(e,t,o){let r=Math.min(48,t,o);return Math.max(0,r-(e+t))-Math.max(0,e-(o-r))}function Xn(e,t,o){return{translateX:t.translateX+Un(e.minX*t.scaleX+t.translateX,e.w*t.scaleX,o.width),translateY:t.translateY+Un(e.minY*t.scaleY+t.translateY,e.h*t.scaleY,o.height)}}function qn(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 pi=.05,at=9;function di(e,t){let{minY:o,maxY:r}=e.layout.bounds,n=r-o;return e.columns&&n>0?Math.max(pi,Math.min(1,t/n)):1}function it(e,t){let{scaleX:o,translateX:r,translateY:n}=t,a=t.scaleY*di(e,t.usableHeight),i=p=>(p-e.yOffset)*a+n,{columns:s}=e;if(s){let p=Dr(s,c=>c*o+r);return{x:c=>_r(p,c),y:i,yScale:a}}return{x:p=>p*o+r,y:i,yScale:a}}function Jt(e,{x:t,y:o},r,n){let a=null;return e.layout.nodes.forEach(i=>{i.order>=0&&t(i.x-at)<=r&&r<=t(i.x+i.pixelWidth+at)&&o(i.y-at)<=n&&n<=o(i.y+i.contentHeight+at)&&(a=i.name)}),a}var Kn=20,ci=.05,Qn=6;function ui(e){let t=e.length-Qn;return t>0?`${e.slice(0,Qn).join(", ")} and ${t} more`:e.join(", ")}function mi(e){if(e.kind==="deletion")return`deletion of ${Tt(e.length)}`;if(e.kind==="substitution")return`substitution ${e.seq}`;let t=e.seq??"",o=t.length>Kn?`${t.slice(0,Kn)}\u2026`:t;return`insertion of ${Tt(t.length)} ${o}`.trim()}function li(e,t,o){let r={substitution:!1,insertion:!1,deletion:!1};if(e&&t&&Jr(t.yScale)){let n=3;for(let a of e.mismatches)if(!r[a.kind]&&Yr(a,{x:t.x,width:o})&&(r[a.kind]=!0,--n===0))break}return r}var Zn=wn.views(e=>({get tubeMapFrame(){let t=e.layoutResult?.tubeMap;return t?it(t,{...e.screenTransform,usableHeight:e.usableHeight}):void 0},get tubeMapRulerBoxes(){let t=e.tubeMapReference;return t&&!e.hostPlacesX&&!e.layoutResult?.tubeMapPanels?Nt(t):void 0},get tubeMapPanelRulerBoxes(){let{layoutResult:t}=e,o=t?.tubeMapPanels?.at(-1);return o&&t?.referenceAxis&&!e.hostPlacesX?Nt(Hr(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?Vr(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:zr(n),tubeColors:e.tubeColorsOf(a,n.pathColors),nodeColors:e.tubeMapNodeColors?qr(a,e.effectiveColorScheme,e.referenceRamp):void 0,deviations:i?Or(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?rn(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=on(a,r);return i?{box:i,...nn(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*Ht,a=t.reduce((c,m)=>c+m.panel.height,0),i=e.usableHeight-n,s=e.scaleY*(r.referenceAxis&&a>0?Math.max(ci,Math.min(1,i/a)):1),p=e.translateY;return t.map((c,m)=>{let{panel:S}=c,A=S.result.extent?.minY??0,h=p,T=h+Ht;return p=T+S.height*s,{...c,tubeColors:o[m],frame:it(S.result.tubeMap,{scaleX:e.scaleX,translateX:e.translateX,scaleY:s,translateY:T-A*s,usableHeight:1/0}),titleTop:h,top:T,bottom:p}})},tubeMapPanelAt(t){let o=this.tubeMapPanelViews?.findIndex(r=>r.titleTop<=t&&t<=r.bottom)??-1;return o<0?null:o}})).views(e=>({paintHover(t,o){let r=e.tubeMapPicture,n=e.tubeMapFrame,a=e.hoverLayerNode;if(r&&n){let{ctx:i,canvas:s}=t,p=Ke(e.paneWidth,e.canvasHeight);i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,s.width,s.height),i.setTransform(p,0,0,p,0,0);let c=e.tubeMapPanelViews;c?an(i,c,e.tubeMapPanelHover,{width:e.paneWidth,lit:a!==null}):$r(i,r,{...n,width:e.paneWidth,highlightNode:a}),Wr(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,Ct]])),t.setEdgeHighlight(e.hoveredEdge,Ct),t.updateTransform(e.paintTransform),t.renderHighlights()}})).views(e=>{let t=(n,a)=>JSON.stringify(n)===JSON.stringify(a),o=kt(()=>li(e.layoutResult?.tubeMapPanels!==void 0?void 0:e.tubeMapPicture,e.tubeMapFrame,e.paneWidth),{equals:t}),r=kt(()=>{let n=e.layoutResult,i=n?.tubeMapPanels!==void 0?[]:n?.tubeMap?.layout.reads??[],s=e.drawnGraph?.paths??[],p=e.tubeMapColoring,c=e.tubeColorKind;return{bundled:s.some(m=>m.members),values:c==="value"&&p?[...[...p.palette].map(([m,S])=>({value:m,color:S})),...p.unvalued?[{value:`${p.field}: none`,color:tn}]:[]]:void 0,roles:c==="role"||c==="tinted",haplotypeTube:c==="tinted"?Zr[0]:Qr,logWidths:n?.tubeMap!==void 0&&!n.referenceAxis,foldBp:e.tubeMapDeviations.length>0?e.tubeMapFold:void 0,forwardReads:i.some(m=>!m.is_reverse),reverseReads:i.some(m=>m.is_reverse)}},{equals:t});return{get tubeMapKeys(){return{...r.get(),...o.get()}}}}).views(e=>({tubeMapUnder(t){let o=e.tubeMapPanelViews;if(o){let i=e.tubeMapPanelAt(t),s=i===null?void 0:o[i];return s&&{drawing:s.panel.result.tubeMap,...s}}let r=e.layoutResult?.tubeMap,n=e.tubeMapPicture,a=e.tubeMapFrame;return r&&n&&a?{drawing:r,picture:n,frame:a}:void 0},tubeMapNodeAt(t,o){let r=this.tubeMapUnder(o);return(r?Jt(r.drawing,r.frame,t,o):null)??jr(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=Xr(n,a,t,o),s=i?.readId??Ur(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?[mi(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: ${ui(a.map(i=>e.walkLabel(i)))}`}:n?{label:e.walkLabel(n.name),readout:"haplotype"}:void 0}}));var gi=80,ea=Zn.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=Xn(t,e,o);e.viewportOwner!=="host"&&(e.translateX=r.translateX),e.translateY=r.translateY}})).actions(e=>{let t;return{setColorScheme(o){(e.statedColorDomain||e.chosenColorScheme==="reference-position")&&(t=e.statedColorDomain),e.writeGrammar({encoding:{color:fn(o,t)}})}}}).actions(e=>({setError(t){e.error=t,e.isLoading=!1,e.statusMessage=""},finishLoading(){e.isLoading=!1,e.statusMessage=""},setStatusMessage(t){e.statusMessage=t},setFetchMs(t){e.lastFetchMs=t},setLayoutMs(t){e.lastLayoutMs=t},setGeometryMetrics(t,o,r){e.lastGeometryMs=t,e.lastGeometryStrokeCount=o.nodeStrokes.length,e.builtViewport={...r,viewportDirty:e.viewportDirty},e.drawnBatch=o},markPainted(){e.paintedViewport=e.builtViewport},setLayoutQuality(t){e.layoutQuality=t},setLayoutEngine(t){e.layoutEngine=t},setLinearLayout(t){e.linearLayout=t},setLayoutMode(t){e.writeGrammar({layoutMode:t})},setHover(t){e.writeGrammar({hover:t}),e.hoverLightsEverything||(e.hoveredEdge=null)},setReferencePath(t){e.referencePath=t;let o=e.graph;if(o?.anchoredBy==="paths"){let r=$e(o,t);Ne.inherit(o,r),e.graph=r}},setLayer(t,o){e.writeGrammar({layers:yn(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:Vt({width:t,px:e.contigThickness,links:e.linkWidth})})},setLinkWidth(t){e.writeGrammar({size:Vt({width:e.nodeWidth,px:e.contigThickness,links:t})})},setTubeMapFold(t){e.tubeMapFold=t},setTubeMapRoutes(t){e.tubeMapRoutes=t},setTubeMapColorBy(t){e.tubeMapColorBy=t},setGeneTrackId(t){e.geneTrackId=t},setRepeatTrackId(t){e.repeatTrackId=t},setRepeatKey(t){e.repeatKey=t},setWalkLayers(t){e.walkLayers=t},liftWalks(t){let o=new Map(e.walkLayers.map(r=>[r.walk,r]));e.walkLayers=t.map(r=>o.get(r)??{walk:r})},liftAmongChoices(t){let o=new Set(e.walkChoices.map(r=>r.name));this.liftWalks([...t,...e.walkLayers.map(r=>r.walk).filter(r=>!o.has(r))])},setFacet(t){let o=e.facetSetting;t===""?o.field!==""&&e.writeGrammar({facet:{}}):e.writeGrammar({facet:{...o,field:t,sort:t===o.field?o.sort:[]}})},toggleWalk(t){let o=e.walkLayers;e.walkLayers=o.some(r=>r.walk===t)?o.filter(r=>r.walk!==t):[...o,{walk:t}]},setWalkColor(t,o){e.walkLayers=e.walkLayers.map(r=>r.walk===t?{...r,color:{...r.color,...o}}:r)},setWalkRowSamples(t){let o=e.walkRowOrder;e.writeGrammar({rows:{...t?{kept:t}:{},...o?{order:o}:{}}})},setWalkRowOrder(t){let o=e.walkRowSamples;e.writeGrammar({rows:{...o?{kept:o}:{},...t?{order:t}:{}}})},setWalkRowGroupBy(t){(t||e.walkRowGroupBy)&&e.writeGrammar({facet:t??{}})},pairWithLinearView(t){let o=e.connectedViewId;o!==void 0&&xe([...x(e).views]).some(n=>n.id===o)||(e.connectedViewId=t)},setHoveredNode(t,o){e.hoveredNode=t,e.hoveredAt=t===null?null:o??null},setHoveredPanel(t){e.hoveredPanel=t},setHoveredTube(t){let o=e.hoveredTube;(t?.track!==o?.track||t?.mismatch!==o?.mismatch)&&(e.hoveredTube=t)},applyHoveredRowWalks(t){t.join(`
|
|
2
2
|
`)!==e.hoveredRowWalks.join(`
|
|
3
3
|
`)&&(e.hoveredRowWalks=t)},setHoveredWalkRow(t){e.hoveredWalkRow=t},setHoveredBubble(t){e.hoveredBubble=t},setPointerInPane(t){e.pointerInPane=t},setWalkStrip(t){this.setLayer("walkStrip",t),e.stripHover=null},setStripHover(t){e.stripHover=t;let o=e.walkStripRows,r=e.walkStripFrame,n=t&&o?[o.reference,...o.rows].find(i=>i.name===t.row):void 0,a=n&&r&&e.graph?Cr(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;Po(r)&&r.showWidget(r.addWidget("BaseFeatureWidget","baseFeature",{featureData:{id:o.id,name:o.name,length:o.length,depth:o.depth,rank:o.stable?.rank,stableName:o.stable?.refName,contributingAssembly:vt(o)?.sample,contributingHaplotype:vt(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=yr(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=kr(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=fr(o,r,e.scaleY,e.fitPads.top));return}let t=e.fittedTransform;t&&(e.scale=t.scale,e.translateX=t.translateX,e.translateY=t.translateY)},clearPerfMetrics(){e.lastFetchMs=void 0,e.lastLayoutMs=void 0,e.lastGeometryMs=void 0,e.lastGeometryStrokeCount=void 0,e.builtViewport=void 0}})).actions(e=>{let t,o;return{setHoveredRowWalks(r){let n=r.join(`
|
|
4
|
-
`);n!==o&&(clearTimeout(t),o=void 0,r.length>0&&e.hoveredRowWalks.length>0?(o=n,t=setTimeout(()=>{o=void 0,V(e)&&e.hoveredRowWalks.length>0&&e.applyHoveredRowWalks(r)},gi)):e.applyHoveredRowWalks(r))}}}).actions(e=>({hostTransform(t,o){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=o,r&&e.zoomToFit()},followNewLayout(t){let o=e.layoutBounds;if(e.viewportOwner!=="user"||!o||t===e.layoutResult)return;let r=t?.referenceAxis===!0&&e.xIsReferenceBp;t===void 0||r&&(!e.paneMeasured||qn(o,e,e.viewBox))?e.keepDrawingInView():(e.viewportOwner="fit",e.zoomToFit())},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{V(e)&&e.setViewportDirty()},Lr)}function o(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{V(e)&&e.setPositionsDirty()})}let r;function n(){r&&(cancelAnimationFrame(r.frame),r=void 0)}function a(){let i=r;n(),i?.finish()}return{morphFrom(i,s){let p=e.layoutResult;if(i===p)return;let u=r&&i?structuredClone(i.nodePositions):i?.nodePositions;a();let m=e.graph;if(!i||!u||!p||!m||!Er(i,p,m.nodes.length,!!e.facetGrid)||!Fr())return;e.viewportOwner==="fit"&&e.zoomToFit();let S=p.deletionRoutes??{},A=structuredClone({nodes:p.nodePositions,routes:S}),h=Br(u,s,p.nodePositions,e.screenTransform,m.edges),T={nodes:h,routes:Ir(S,m.edges,h,A.nodes)},I=new Set(Object.keys(p.nodePositions).filter(b=>!u[b])),D=b=>{Ft(p.nodePositions,T.nodes,A.nodes,b),Ft(S,T.routes,A.routes,b),V(e)&&e.setMorphFrame(b<1&&I.size>0?{layout:p,ids:I,alpha:b}:void 0)};D(0),r=Nr(D,()=>V(e)&&e.layoutResult===p,()=>{r=void 0})},finishMorph:a,moveNode(i,s,p){a();let u=e.layoutResult?.nodePositions;if(u?.[i]){for(let m of u[i])m.x+=s,m.y+=p;o()}},scheduleViewportDirty:t}});var he=JBrowseExports["@jbrowse/core/util/unzip"],hi=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}),ta=hi("unzip"),mu=he&&he.__esModule?he.default:he;async function Yt(e){let t=e[0]===31&&e[1]===139;return new TextDecoder().decode(t?await ta(e):e)}function oa(e,t,o){let r=e.walks,n=r.offsets[1]??0,a={nodes:e.nodes,links:e.links,walks:{names:r.names.slice(0,1),starts:r.starts.subarray(0,1),ends:r.ends.subarray(0,1),offsets:Int32Array.of(0,n),steps:r.steps.subarray(0,n),reversed:r.reversed.subarray(0,n)}},i=Xe(a,t,{referencePath:o}),s=new Int32Array(e.nodes.names.length);for(let u of r.steps)s[u]++;i.nodes.forEach((u,m)=>{u.depth=Math.max(s[m],1)});let p=r.names.slice(1).flatMap((u,m)=>r.offsets[m+2]>r.offsets[m+1]?[{...wt(r,m+1),nodeIds:[]}]:[]);return i.paths=[...i.paths??[],...p],i}var bi=ea.views(e=>({get engineSettings(){return br({engine:e.layoutEngine,quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}})),ra=bi.actions(e=>{let t,o,r,n=new WeakMap;function a(d,c){let{rpcManager:l}=x(e);return l.call(ae(e),"GraphComputeLayout",{...d,signal:t?.signal,statusCallback:w=>{c===r&&e.setStatusMessage(Co(w)??"")}})}function i(d){if(d.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${d.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Pick Layout \u2192 Walk rows, zoom in to a smaller region, or raise the node limit in Graph settings.`)}function*s(d){let c=performance.now(),l=se.has(e.chosenLayoutMode),w=e.graphRegion,f=l&&w?xt(d,w):d,k=l&&e.tubeMapFold>0&&!f.reads?Et(f,e.tubeMapFold):void 0,G=k?.graph??f,P=z=>l&&e.tubeMapRoutes!=="each"?$t(z,e.tubeMapColoring?.valueOf,e.tubeMapRoutes==="bundled"):z,H=e.walkCut?.walkRowRuns,j=e.chosenLayoutMode==="walkrows"&&H?tr(d,$o(H),e.graphRegion):Q(e.chosenLayoutMode).run(P(G),e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(j){let z=J=>k&&J.tubeMap?{...J,tubeMap:{...J.tubeMap,coarse:k}}:J,De=z(j),ke=e.tubeMapPanelSplit;return{result:l&&ke?pn(De,qe(G,ke).map(J=>{let Lo=Q(e.chosenLayoutMode).run(P(sn(G,J.paths)),e.graphRegion);return{...J,result:Lo&&z(Lo)}})):De,duration:performance.now()-c,mode:e.chosenLayoutMode}}i(d);let Y=e.engineSettings,U=Ne.ready(d,Y);if(U)return{result:U,duration:performance.now()-c,mode:"force"};let ne={},X=Ne.layout(d,Y,z=>a(z,ne));return r=n.get(X)??ne,n.set(X,r),{...yield X,mode:"force"}}let p=0,u=!1,m,S,A=new Map;function h(){e.graph!==S&&(S=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0)}function*T(d){let c=++p;u=!0,r=void 0;let l=()=>e.graph===d&&c===p,w=t?.signal,f;try{e.modeDrawsNodes&&i(d),f=yield*s(d)}catch(G){if(!l()||w?.aborted)return!1;throw m=G,h(),G}finally{c===p&&(u=!1,N())}let k=l();if(k){m!==void 0&&e.error===m&&(e.error=void 0),m=void 0;let G=e.layoutResult,P=e.screenTransform;S=d,e.layoutResult=f.result,e.drawnLayoutMode=f.mode,e.setLayoutMs(f.duration),e.followNewLayout(G),e.morphFrom(G,P)}return k}function I(d,c){let l=d.anchorPaths;return d.anchoredBy==="paths"&&l?(ht(d,e.assemblySpellings(c.assemblyName))??zo(l,c.assemblyName))?.name:void 0}function D(d,c,l,w=!1){let f=e.referencePath||l?.assemblyName,k=typeof d!="string"&&d.walkRowRuns&&!w?oa(d,c,f):Xe(d,c,{referencePath:f});return k.anchoredBy==="tags"&&!k.referencePath&&k.paths?.length&&l&&(k.referencePath=ht(k,e.assemblySpellings(l.assemblyName))?.name),k}function b(d){e.graph=d?.graph,e.walkCut=d?.walkCut,e.graphRegion=d?.region,e.loadedReferencePath=d?.loadedReferencePath,e.foldedBelowBp=d?.foldedBelowBp,e.readsShown=d?.readsShown,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,e.ownGeneFeatures=void 0,A.clear(),e.repeatArrays=void 0,e.clearInteractionState()}function*g(d,c,l,w=!1,f,k=0,G){let P=t?.signal,H=typeof d!="string"&&d.walkRowRuns?d:void 0,j=D(d,c,l),Y=l?I(j,l):void 0,U=!e.referencePath&&Y!==void 0&&Y!==j.referencePath?$e(j,Y):j,ne=k>0&&!f?_t(U,k,{cut:!0}):U,X=l&&ne!==U?Rt(ne,l,k):ne,gt;if(f){e.setStatusMessage("Reading alignments");try{let{records:$,total:J}=yield f(X);X.reads=$,gt={shown:$.length,total:J}}catch($){if(P?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",$)}if(P?.aborted)return}let z=w?e.selectedNode:null;b({graph:X,walkCut:H,region:l,loadedReferencePath:Y,foldedBelowBp:ne===U?void 0:k,readsShown:gt});let De=new Set(X.nodes.map($=>$.name));e.openBubbles=e.openBubbles.filter($=>It($).some(J=>De.has(J))),z!==null&&X.nodes.some($=>$.id===z)&&(e.selectedNode=z),e.setStatusMessage("Computing layout");let ke=G?.();ke?.catch(()=>{}),yield*T(X),ke&&!P?.aborted&&(e.setStatusMessage("Reading annotations"),yield ke)}let y=0,R;function v(){let d=++y;return t?.abort(),t=new AbortController,R=d,e.loadCanceled=!1,{isLive:()=>d===y,signal:t.signal}}function N(){R===void 0&&!u&&e.finishLoading()}function ve(){R=void 0,N()}function*yo(d,c){let l=v();e.isLoading=!0,e.error=void 0;try{yield*c(l)}catch(w){l.isLive()&&(console.error(`[GraphGenomeView.${d}]`,w),e.error=w)}finally{l.isLive()&&ve()}}function*fo(d,c,l,w){try{return yield x(e).rpcManager.call(ae(e),"CoreGetFeatures",{adapterConfig:d,regions:[c],signal:w})}catch(f){w?.aborted||console.warn(`[GraphGenomeView] no ${l} for this graph`,f);return}}let wo=new Set;function*Wa(d,c,l,w,f=0){let k=Gr(d),G=`${k}.bubbles.bed.gz`;if(d.type!=="RgfaTabixAdapter"||k===void 0||wo.has(G))return;let P=yield*fo({type:"MinigraphBubbleAdapter",uri:G,baseUri:d.baseUri,assemblyNameToPanSN:d.assemblyNameToPanSN},c,"bubble index",w);P===void 0&&!w?.aborted&&wo.add(G),P&&l()&&(e.indexBubbles=P.flatMap(H=>{let j=H.get("start"),Y=H.get("end"),U=H.get("longestAlleleLength");return Math.max(Y-j,U)<f?[]:[{refName:c.refName,start:j,end:Y,segmentCount:H.get("segmentCount"),pathCount:H.get("pathCount")??0,inversion:H.get("inversion"),shortestAlleleLength:H.get("shortestAlleleLength"),longestAlleleLength:U,segments:H.get("segments"),shortestAllele:void 0,longestAllele:void 0}]}))}function*ko(d,c,l,w){let f=d?e.sessionTrack(d):void 0;if(f)return yield*fo(sr(f),c,l,w)}function*Mo(d,c){let l=`${d} ${c.refName}:${c.start}-${c.end}`,w=A.get(l);if(!w){let f=yield*ko(d,c,"haplotype genes");if(!f)return;w=bn(f).map(k=>({...k,refName:c.refName})),A.set(l,w)}return w}let So={genes:{trackId:()=>e.geneTrack?.trackId,set:d=>{e.geneTrackFeatures=d}},repeats:{trackId:()=>e.repeatTrack?.trackId,set:d=>{e.repeatArrays=d&&gn(d)}}};function*xo(d,c,l,w){let{trackId:f,set:k}=So[d],G=f(),P=yield*ko(G,c,d,w);P&&l()&&f()===G&&k(P)}function Ro(d,c,l){return["genes","repeats"].map(w=>O(xo)(w,d,c,l))}function*To(d){let c=e.graphRegion;c&&(So[d].set(void 0),yield*xo(d,c,()=>e.graphRegion===c))}function*mt(d,c,l){yield*yo("loadWholeGFA",function*({isLive:w,signal:f}){let k=typeof c=="string"?c:yield c(f);w()&&(yield*g(k,d,l,!1,void 0,0,l&&(()=>Promise.all(Ro(l,w,f)))))})}function lt(){t?.abort(),t=void 0,R=void 0,y++,p++,u=!1,r=void 0}function Oa(){let d=e.walkCut,c=e.graph;if(!d||!c||e.chosenLayoutMode==="walkrows")return c;let l=D(d,c.name,e.graphRegion,!0);return e.graph=l,e.walkCut=void 0,l}function Go(){lt(),e.finishMorph(),e.morphEntering=void 0,e.drawnBatch=Fe,e.paintedViewport=void 0,b(),S=void 0,m=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0,e.walkRowSampleTable=void 0,o=void 0,e.openBubbles=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearPerfMetrics(),e.viewportOwner==="user"&&(e.viewportOwner="fit")}return{clearGraph(){Go()},cancelLoad(){e.canCancelLoad&&(Go(),e.loadCanceled=!0)},stopLoad(){lt(),h(),e.layoutResult||b(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){lt()},loadGFA:O(function*(d,c="Imported GFA"){yield*mt(c,d)}),loadGFAFile:O(function*(d,c){e.setStatusMessage("Reading file"),yield*mt(c,()=>d.arrayBuffer().then(l=>Yt(new Uint8Array(l))))}),loadGFAFromLocation:O(function*(d,c){e.setStatusMessage("Fetching GFA"),yield*mt(de(d)||"GFA",l=>ft(d,Ae(e).pluginManager).readFile({signal:l}).then(Yt),c)}),cutSubgraph:O(function*(d,c,l={},w=0){yield*yo("cutSubgraph",function*({isLive:f,signal:k}){e.setStatusMessage("Fetching subgraph");let G=performance.now(),P=yield x(e).rpcManager.call(ae(e),"GetSubgraph",{adapterConfig:d,region:c,opts:l,signal:k});if(f()){if(e.setFetchMs(performance.now()-G),!P)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");yield*g(P,dr(c),c,!0,Hn(d)?H=>x(e).rpcManager.call(ae(e),"GetGraphReads",{adapterConfig:d,nodeNames:H.nodes.map(j=>j.name),signal:k}):void 0,w,()=>Promise.all([l.tier==="coarse"?void 0:O(Wa)(d,c,f,k,e.foldedBelowBp),...Ro(c,f,k)]))}})}),reloadRepeats:O(function*(){yield*To("repeats")}),reloadGenes:O(function*(){yield*To("genes")}),loadWalkRowSampleTable:O(function*(){let d=e.walkRowSamplesTsv,c=d?JSON.stringify(d):void 0;if(c!==o&&(o=c,e.walkRowSampleTable=void 0,!!d))try{let l=yield ft(d,Ae(e).pluginManager).readFile("utf8");V(e)&&c===o&&(e.walkRowSampleTable=Kr(l))}catch(l){V(e)&&c===o&&(o=void 0,x(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(l)})`,"warning"))}}),loadWalkGenes:O(function*(){let d=e.walkGeneReads?.reads??[],c=JSON.stringify(d),l=e.graph,w=new Map;yield Promise.all(d.map(({row:f,trackId:k,region:G})=>O(function*(){let P=yield*Mo(k,G);P&&w.set(f,P)})())),V(e)&&e.graph===l&&JSON.stringify(e.walkGeneReads?.reads??[])===c&&(e.walkGeneFeatures=d.length?w:void 0)}),loadOwnGenes:O(function*(){let d=e.ownGeneReads,c=JSON.stringify(d),l=e.graph,w=yield Promise.all(d.map(({stableRefName:f,trackId:k,region:G})=>O(function*(){let P=yield*Mo(k,G),H=Fo(f)??_e(f);return(P??[]).map(j=>({...j,name:`${j.name} \xB7 ${H}`,refName:f}))})()));V(e)&&e.graph===l&&JSON.stringify(e.ownGeneReads)===c&&(e.ownGeneFeatures=d.length?w.flat():void 0)}),toggleBubble(d){let c=e.openBubbles,l=c.findIndex(G=>He(G,d));if(l>=0){e.openBubbles=c.slice(0,l);return}let w=new Set(It(d));if(!e.graph?.nodes.some(G=>w.has(G.name))){x(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let f=e.openBubbleInsides,k=f.length-1;for(;k>=0&&!f[k].some(G=>He(G,d));)k--;e.openBubbles=[...c.slice(0,k+1),d]},closeBubbles(){e.openBubbles.length>0&&(e.openBubbles=[])},recomputeLayout:O(function*(){let d=Oa();if(d){e.isLoading=!0,e.setStatusMessage("Computing layout");try{yield*T(d)}catch(c){console.error("[GraphGenomeView.recomputeLayout]",c),e.error=c}}})}});function na(e){return B(e)&&typeof e.get=="function"}function st(e,t){let o=na(e)?e.get(t):B(e)?e[t]:void 0;return typeof o=="string"?o:void 0}function aa(e){let t;if(B(e)&&B(e.hoverPosition)){let{refName:o,coord:r,coord0:n,assemblyName:a}=e.hoverPosition;typeof o=="string"&&typeof r=="number"&&(t={refName:o,coord:typeof n=="number"?n:r-1,assemblyName:typeof a=="string"?a:void 0,featureName:st(e.hoverFeature,"name"),featureSegments:st(e.hoverFeature,"segments"),viewId:typeof e.viewId=="string"?e.viewId:void 0})}return t}function ia(e,t,o){return e.viewId===void 0||t===void 0||!o.has(t)||e.viewId===t}function sa(e){if(!na(e))return;let t=e.get("refName"),o=e.get("start");return typeof t=="string"&&typeof o=="number"?{refName:t,coord:o,featureName:st(e,"name"),featureSegments:st(e,"segments")}:void 0}function Ut(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function pa({hover:e,nodes:t}){let o,r;for(let n of t)n.name===e.featureName?o=n.id:r===void 0&&K(n)&&e.coord>=n.stable.start&&e.coord<n.stable.start+n.length&&(r=n.id);return o??r??null}function da(e){let t=e.key?.split(">")??e.segments.split(",").filter(Boolean);return t.length>=2?[t[0],t.at(-1)].sort().join(" "):void 0}function yi(e){if(e.featureSegments)return da({segments:e.featureSegments});let t=/^([<>][^<>]+){2}$/.test(e.featureName??"")?e.featureName.split(/[<>]/).filter(Boolean):[];return t.length===2?t.sort().join(" "):void 0}function Xt(e,t){let o=yi(e);return o===void 0?void 0:t.find(r=>da(r)===o)}var fi=/^(.+) HP(\d+)$/,wi=/^(.+)\.(\d+)$/;function ki(e){let t=fi.exec(e),o=wi.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 Mi(e){return Ce(e).name.split("#")[1]}function ua(e,t){let o=t.map(r=>r.name);for(let{sample:r,haplotype:n}of ki(e)){let a=o.filter(i=>_e(Ce(i).name)===r&&(n===void 0||Mi(i)===n));if(a.length>0)return a}return[]}var ca=ra.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){L(e,Be(()=>{e.fittedTransform&&ie(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),L(e,C(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),L(e,C(()=>{let r=e.facetGrid;return r?`${e.facetSetting.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),L(e,C(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),L(e,C(()=>({graph:e.graph,reads:JSON.stringify(e.ownGeneReads)}),()=>{e.loadOwnGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),L(e,C(()=>e.hasGraph&&(e.chosenLayoutMode==="walkrows"||se.has(e.chosenLayoutMode))?JSON.stringify(e.walkRowSamplesTsv??null):void 0,r=>{r!==void 0&&e.loadWalkRowSampleTable()},{fireImmediately:!0})),L(e,C(()=>`${e.fitPadTop} ${e.layoutBounds?.h} ${e.usableHeight}`,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),L(e,Be(()=>{let r=aa(x(e).hovered),n=e.hoverLightsEverything;ie(()=>{let a=e.graphRegion,i=e.graph,s=new Set(xe([...x(e).views]).flatMap(S=>B(S)&&typeof S.id=="string"?[S.id]:[])),p=r&&a&&Ut(r,a)&&ia(r,e.pairedViewId,s)?r:void 0,u=p?.featureName&&i?.paths?ua(p.featureName,i.paths):[],m=p&&Xt(p,e.bubbles);a&&i&&!e.pointerInPane&&(e.setHoveredBubble(m??null),e.setHoveredNode(p&&n&&u.length===0&&!m?pa({hover:p,nodes:i.nodes}):null)),e.setHoveredRowWalks(u)})})),L(e,C(()=>sa(x(e).selection),r=>{let n=e.graphRegion,a=r&&n&&Ut(r,n)&&Xt(r,e.bubbles);a&&!e.openBubbles.some(i=>He(i,a))&&e.toggleBubble(a)})),L(e,C(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.clearHover()},{name:"GraphClearHoverOnViewportChange"}));let o=!0;L(e,Be(()=>{let{scale:r}=e,n=Ar(e);if(o){o=!1;return}let a=ie(()=>e.builtViewport);a?.scale===r&&wr(a.bounds,n)||e.scheduleViewportDirty()})),L(e,Be(()=>{let r=e.currentRenderingBackend;r&&(e.applySelection(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:o=>{if(Bt(Ke()),o.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap||e.facetPanels)return Bt(e.viewportDirty),o.uploadGeometry(Fe),e.setGeometryMetrics(0,Fe,{scale:ie(()=>e.scale),bounds:ie(()=>e.viewportToBuild())}),!0;let r=performance.now(),n=e.buildDrawing(e.drawnHighlight,e.effectiveDrawPaths);return n?(o.uploadGeometry(n.batch),e.setGeometryMetrics(performance.now()-r,n.batch,{scale:ie(()=>e.scale),bounds:n.viewportBounds}),!0):!1},render:o=>e.nodePositions?(e.paint(o),e.markPainted(),!0):!1,releaseTargets:o=>{o.releaseOffscreenTargets()}}))}})).actions(e=>({relayoutFrom(t){return e.recomputeLayout()}})).actions(e=>({relayout(t){return e.handledLayoutMode=e.chosenLayoutMode,e.relayoutFrom(t)}})).actions(e=>({switchLayout(t){let o=e.chosenLayoutMode;return e.setLayoutMode(t),e.relayout(o)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user");for(let[t,o]of[[()=>e.geneTrack?.trackId,()=>e.reloadGenes()],[()=>e.repeatTrack?.trackId,()=>e.reloadRepeats()]])L(e,C(()=>({track:t(),region:e.graphRegion}),(r,n)=>{r.region&&r.region===n.region&&o()},{equals:(r,n)=>r.track===n.track&&r.region===n.region}));L(e,C(()=>e.chosenLayoutMode,(t,o)=>{t!==e.handledLayoutMode&&e.relayout(o)})),L(e,C(()=>({mode:e.chosenLayoutMode,engine:JSON.stringify(e.engineSettings),maxNodes:e.maxGraphNodes}),(t,o)=>{e.graph&&t.mode===o.mode&&(t.engine!==o.engine&&e.usesLayoutEngine||t.maxNodes!==o.maxNodes&&e.modeDrawsNodes)&&e.recomputeLayout()},{equals:(t,o)=>t.mode===o.mode&&t.engine===o.engine&&t.maxNodes===o.maxNodes})),L(e,C(()=>se.has(e.chosenLayoutMode)?JSON.stringify({fold:e.tubeMapFold,facet:e.facetSetting,groupBy:e.walkRowGroupBy,table:e.walkRowGroupBy&&e.walkRowSampleTable?.length,routes:e.tubeMapRoutes,bundledBy:e.tubeMapRoutes!=="each"?e.tubeMapColoring?.field:void 0}):void 0,(t,o)=>{t!==void 0&&o!==void 0&&e.graph&&e.recomputeLayout()}))}})).actions(e=>({switchForceEngine(t){return e.setLayoutEngine(t),e.chosenLayoutMode==="force"?void 0:e.switchLayout("force")}})).actions(e=>({expandWalks(t){let o=t.filter(r=>!e.expandedWalks.includes(r));o.length>0&&(e.expandedWalks=e.expandedWalks.concat(o),e.retryLoad())}})).actions(e=>({expandWalk(t){e.expandWalks([t])},afterAttach(){L(e,C(()=>{let t=new Set(e.walkLayers.map(o=>o.walk));return[...new Set((e.graph?.paths??[]).filter(o=>o.abridged&&t.has(o.name)).map(o=>o.name))]},t=>{e.expandWalks(t)},{fireImmediately:!0,equals:(t,o)=>t.join(`
|
|
4
|
+
`);n!==o&&(clearTimeout(t),o=void 0,r.length>0&&e.hoveredRowWalks.length>0?(o=n,t=setTimeout(()=>{o=void 0,V(e)&&e.hoveredRowWalks.length>0&&e.applyHoveredRowWalks(r)},gi)):e.applyHoveredRowWalks(r))}}}).actions(e=>({hostTransform(t,o){let r=e.viewportOwner!=="host";r&&(e.viewportOwner="host"),e.scale=t,e.translateX=o,r&&e.zoomToFit()},followNewLayout(t){let o=e.layoutBounds;if(e.viewportOwner!=="user"||!o||t===e.layoutResult)return;let r=t?.referenceAxis===!0&&e.xIsReferenceBp;t===void 0||r&&(!e.paneMeasured||qn(o,e,e.viewBox))?e.keepDrawingInView():(e.viewportOwner="fit",e.zoomToFit())},refitView(){e.viewportOwner==="user"&&(e.viewportOwner="fit"),e.zoomToFit()},releaseHost(){e.viewportOwner==="host"&&(e.xIsReferenceBp?e.viewportOwner="user":(e.viewportOwner="fit",e.zoomToFit()))}})).actions(e=>{function t(){clearTimeout(e.viewportDirtyTimer),e.viewportRebuildPending=!0,e.viewportDirtyTimer=setTimeout(()=>{V(e)&&e.setViewportDirty()},Lr)}function o(){cancelAnimationFrame(e.positionsDirtyFrame),e.positionsDirtyFrame=requestAnimationFrame(()=>{V(e)&&e.setPositionsDirty()})}let r;function n(){r&&(cancelAnimationFrame(r.frame),r=void 0)}function a(){let i=r;n(),i?.finish()}return{morphFrom(i,s){let p=e.layoutResult;if(i===p)return;let c=r&&i?structuredClone(i.nodePositions):i?.nodePositions;a();let m=e.graph;if(!i||!c||!p||!m||!Er(i,p,m.nodes.length,!!e.facetGrid)||!Fr())return;e.viewportOwner==="fit"&&e.zoomToFit();let S=p.deletionRoutes??{},A=structuredClone({nodes:p.nodePositions,routes:S}),h=Br(c,s,p.nodePositions,e.screenTransform,m.edges),T={nodes:h,routes:Ir(S,m.edges,h,A.nodes)},I=new Set(Object.keys(p.nodePositions).filter(b=>!c[b])),D=b=>{Ft(p.nodePositions,T.nodes,A.nodes,b),Ft(S,T.routes,A.routes,b),V(e)&&e.setMorphFrame(b<1&&I.size>0?{layout:p,ids:I,alpha:b}:void 0)};D(0),r=Nr(D,()=>V(e)&&e.layoutResult===p,()=>{r=void 0})},finishMorph:a,moveNode(i,s,p){a();let c=e.layoutResult?.nodePositions;if(c?.[i]){for(let m of c[i])m.x+=s,m.y+=p;o()}},scheduleViewportDirty:t}});var he=JBrowseExports["@jbrowse/core/util/unzip"],hi=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}),ta=hi("unzip"),mc=he&&he.__esModule?he.default:he;async function Yt(e){let t=e[0]===31&&e[1]===139;return new TextDecoder().decode(t?await ta(e):e)}function oa(e,t,o){let r=e.walks,n=r.offsets[1]??0,a={nodes:e.nodes,links:e.links,walks:{names:r.names.slice(0,1),starts:r.starts.subarray(0,1),ends:r.ends.subarray(0,1),offsets:Int32Array.of(0,n),steps:r.steps.subarray(0,n),reversed:r.reversed.subarray(0,n)}},i=Xe(a,t,{referencePath:o}),s=new Int32Array(e.nodes.names.length);for(let c of r.steps)s[c]++;i.nodes.forEach((c,m)=>{c.depth=Math.max(s[m],1)});let p=r.names.slice(1).flatMap((c,m)=>r.offsets[m+2]>r.offsets[m+1]?[{...wt(r,m+1),nodeIds:[]}]:[]);return i.paths=[...i.paths??[],...p],i}var bi=ea.views(e=>({get engineSettings(){return br({engine:e.layoutEngine,quality:e.layoutQuality,linearLayout:e.linearLayout,bubbleSpread:e.bubbleSpread,showDeletionEdges:e.showDeletionEdges})}})),ra=bi.actions(e=>{let t,o,r,n=new WeakMap;function a(d,u){let{rpcManager:l}=x(e);return l.call(ae(e),"GraphComputeLayout",{...d,signal:t?.signal,statusCallback:w=>{u===r&&e.setStatusMessage(Co(w)??"")}})}function i(d){if(d.nodes.length>e.maxGraphNodes)throw new Error(`Graph too large to draw: ${d.nodes.length.toLocaleString()} nodes (limit ${e.maxGraphNodes.toLocaleString()}). Pick Layout \u2192 Walk rows, zoom in to a smaller region, or raise the node limit in Graph settings.`)}function*s(d){let u=performance.now(),l=se.has(e.chosenLayoutMode),w=e.graphRegion,f=l&&w?xt(d,w):d,k=l&&e.tubeMapFold>0&&!f.reads?Et(f,e.tubeMapFold):void 0,G=k?.graph??f,P=z=>l&&e.tubeMapRoutes!=="each"?$t(z,e.tubeMapColoring?.valueOf,e.tubeMapRoutes==="bundled"):z,H=e.walkCut?.walkRowRuns,j=e.chosenLayoutMode==="walkrows"&&H?tr(d,$o(H),e.graphRegion):Q(e.chosenLayoutMode).run(P(G),e.graphRegion,e.host?e.layoutResult?.sampleRows:void 0);if(j){let z=J=>k&&J.tubeMap?{...J,tubeMap:{...J.tubeMap,coarse:k}}:J,De=z(j),ke=e.tubeMapPanelSplit;return{result:l&&ke?pn(De,qe(G,ke).map(J=>{let Lo=Q(e.chosenLayoutMode).run(P(sn(G,J.paths)),e.graphRegion);return{...J,result:Lo&&z(Lo)}})):De,duration:performance.now()-u,mode:e.chosenLayoutMode}}i(d);let Y=e.engineSettings,U=Ne.ready(d,Y);if(U)return{result:U,duration:performance.now()-u,mode:"force"};let ne={},X=Ne.layout(d,Y,z=>a(z,ne));return r=n.get(X)??ne,n.set(X,r),{...yield X,mode:"force"}}let p=0,c=!1,m,S,A=new Map;function h(){e.graph!==S&&(S=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0)}function*T(d){let u=++p;c=!0,r=void 0;let l=()=>e.graph===d&&u===p,w=t?.signal,f;try{e.modeDrawsNodes&&i(d),f=yield*s(d)}catch(G){if(!l()||w?.aborted)return!1;throw m=G,h(),G}finally{u===p&&(c=!1,N())}let k=l();if(k){m!==void 0&&e.error===m&&(e.error=void 0),m=void 0;let G=e.layoutResult,P=e.screenTransform;S=d,e.layoutResult=f.result,e.drawnLayoutMode=f.mode,e.setLayoutMs(f.duration),e.followNewLayout(G),e.morphFrom(G,P)}return k}function I(d,u){let l=d.anchorPaths;return d.anchoredBy==="paths"&&l?(ht(d,e.assemblySpellings(u.assemblyName))??zo(l,u.assemblyName))?.name:void 0}function D(d,u,l,w=!1){let f=e.referencePath||l?.assemblyName,k=typeof d!="string"&&d.walkRowRuns&&!w?oa(d,u,f):Xe(d,u,{referencePath:f});return k.anchoredBy==="tags"&&!k.referencePath&&k.paths?.length&&l&&(k.referencePath=ht(k,e.assemblySpellings(l.assemblyName))?.name),k}function b(d){e.graph=d?.graph,e.walkCut=d?.walkCut,e.graphRegion=d?.region,e.loadedReferencePath=d?.loadedReferencePath,e.foldedBelowBp=d?.foldedBelowBp,e.readsShown=d?.readsShown,e.indexBubbles=void 0,e.geneTrackFeatures=void 0,e.walkGeneFeatures=void 0,e.ownGeneFeatures=void 0,A.clear(),e.repeatArrays=void 0,e.clearInteractionState()}function*g(d,u,l,w=!1,f,k=0,G){let P=t?.signal,H=typeof d!="string"&&d.walkRowRuns?d:void 0,j=D(d,u,l),Y=l?I(j,l):void 0,U=!e.referencePath&&Y!==void 0&&Y!==j.referencePath?$e(j,Y):j,ne=k>0&&!f?_t(U,k,{cut:!0}):U,X=l&&ne!==U?Rt(ne,l,k):ne,gt;if(f){e.setStatusMessage("Reading alignments");try{let{records:$,total:J}=yield f(X);X.reads=$,gt={shown:$.length,total:J}}catch($){if(P?.aborted)return;console.warn("[GraphGenomeView] no reads for this graph",$)}if(P?.aborted)return}let z=w?e.selectedNode:null;b({graph:X,walkCut:H,region:l,loadedReferencePath:Y,foldedBelowBp:ne===U?void 0:k,readsShown:gt});let De=new Set(X.nodes.map($=>$.name));e.openBubbles=e.openBubbles.filter($=>It($).some(J=>De.has(J))),z!==null&&X.nodes.some($=>$.id===z)&&(e.selectedNode=z),e.setStatusMessage("Computing layout");let ke=G?.();ke?.catch(()=>{}),yield*T(X),ke&&!P?.aborted&&(e.setStatusMessage("Reading annotations"),yield ke)}let y=0,R;function v(){let d=++y;return t?.abort(),t=new AbortController,R=d,e.loadCanceled=!1,{isLive:()=>d===y,signal:t.signal}}function N(){R===void 0&&!c&&e.finishLoading()}function ve(){R=void 0,N()}function*yo(d,u){let l=v();e.isLoading=!0,e.error=void 0;try{yield*u(l)}catch(w){l.isLive()&&(console.error(`[GraphGenomeView.${d}]`,w),e.error=w)}finally{l.isLive()&&ve()}}function*fo(d,u,l,w){try{return yield x(e).rpcManager.call(ae(e),"CoreGetFeatures",{adapterConfig:d,regions:[u],signal:w})}catch(f){w?.aborted||console.warn(`[GraphGenomeView] no ${l} for this graph`,f);return}}let wo=new Set;function*Wa(d,u,l,w,f=0){let k=Gr(d),G=`${k}.bubbles.bed.gz`;if(d.type!=="RgfaTabixAdapter"||k===void 0||wo.has(G))return;let P=yield*fo({type:"MinigraphBubbleAdapter",uri:G,baseUri:d.baseUri,assemblyNameToPanSN:d.assemblyNameToPanSN},u,"bubble index",w);P===void 0&&!w?.aborted&&wo.add(G),P&&l()&&(e.indexBubbles=P.flatMap(H=>{let j=H.get("start"),Y=H.get("end"),U=H.get("longestAlleleLength");return Math.max(Y-j,U)<f?[]:[{refName:u.refName,start:j,end:Y,segmentCount:H.get("segmentCount"),pathCount:H.get("pathCount")??0,inversion:H.get("inversion"),shortestAlleleLength:H.get("shortestAlleleLength"),longestAlleleLength:U,segments:H.get("segments"),shortestAllele:void 0,longestAllele:void 0}]}))}function*ko(d,u,l,w){let f=d?e.sessionTrack(d):void 0;if(f)return yield*fo(sr(f),u,l,w)}function*Mo(d,u){let l=`${d} ${u.refName}:${u.start}-${u.end}`,w=A.get(l);if(!w){let f=yield*ko(d,u,"haplotype genes");if(!f)return;w=bn(f).map(k=>({...k,refName:u.refName})),A.set(l,w)}return w}let So={genes:{trackId:()=>e.geneTrack?.trackId,set:d=>{e.geneTrackFeatures=d}},repeats:{trackId:()=>e.repeatTrack?.trackId,set:d=>{e.repeatArrays=d&&gn(d)}}};function*xo(d,u,l,w){let{trackId:f,set:k}=So[d],G=f(),P=yield*ko(G,u,d,w);P&&l()&&f()===G&&k(P)}function Ro(d,u,l){return["genes","repeats"].map(w=>O(xo)(w,d,u,l))}function*To(d){let u=e.graphRegion;u&&(So[d].set(void 0),yield*xo(d,u,()=>e.graphRegion===u))}function*mt(d,u,l){yield*yo("loadWholeGFA",function*({isLive:w,signal:f}){let k=typeof u=="string"?u:yield u(f);w()&&(yield*g(k,d,l,!1,void 0,0,l&&(()=>Promise.all(Ro(l,w,f)))))})}function lt(){t?.abort(),t=void 0,R=void 0,y++,p++,c=!1,r=void 0}function Oa(){let d=e.walkCut,u=e.graph;if(!d||!u||e.chosenLayoutMode==="walkrows")return u;let l=D(d,u.name,e.graphRegion,!0);return e.graph=l,e.walkCut=void 0,l}function Go(){lt(),e.finishMorph(),e.morphEntering=void 0,e.drawnBatch=Fe,e.paintedViewport=void 0,b(),S=void 0,m=void 0,e.layoutResult=void 0,e.drawnLayoutMode=void 0,e.walkRowSampleTable=void 0,o=void 0,e.openBubbles=[],e.error=void 0,e.isLoading=!1,e.loadCanceled=!1,e.statusMessage="",e.clearPerfMetrics(),e.viewportOwner==="user"&&(e.viewportOwner="fit")}return{clearGraph(){Go()},cancelLoad(){e.canCancelLoad&&(Go(),e.loadCanceled=!0)},stopLoad(){lt(),h(),e.layoutResult||b(),e.isLoading=!1,e.statusMessage="",e.loadCanceled=!0},beforeDestroy(){lt()},loadGFA:O(function*(d,u="Imported GFA"){yield*mt(u,d)}),loadGFAFile:O(function*(d,u){e.setStatusMessage("Reading file"),yield*mt(u,()=>d.arrayBuffer().then(l=>Yt(new Uint8Array(l))))}),loadGFAFromLocation:O(function*(d,u){e.setStatusMessage("Fetching GFA"),yield*mt(de(d)||"GFA",l=>ft(d,Ae(e).pluginManager).readFile({signal:l}).then(Yt),u)}),cutSubgraph:O(function*(d,u,l={},w=0){yield*yo("cutSubgraph",function*({isLive:f,signal:k}){e.setStatusMessage("Fetching subgraph");let G=performance.now(),P=yield x(e).rpcManager.call(ae(e),"GetSubgraph",{adapterConfig:d,region:u,opts:l,signal:k});if(f()){if(e.setFetchMs(performance.now()-G),!P)throw new Error("Adapter returned no GFA \u2014 region may be outside indexed data or the adapter does not implement getSubgraph");yield*g(P,dr(u),u,!0,Hn(d)?H=>x(e).rpcManager.call(ae(e),"GetGraphReads",{adapterConfig:d,nodeNames:H.nodes.map(j=>j.name),signal:k}):void 0,w,()=>Promise.all([l.tier==="coarse"?void 0:O(Wa)(d,u,f,k,e.foldedBelowBp),...Ro(u,f,k)]))}})}),reloadRepeats:O(function*(){yield*To("repeats")}),reloadGenes:O(function*(){yield*To("genes")}),loadWalkRowSampleTable:O(function*(){let d=e.walkRowSamplesTsv,u=d?JSON.stringify(d):void 0;if(u!==o&&(o=u,e.walkRowSampleTable=void 0,!!d))try{let l=yield ft(d,Ae(e).pluginManager).readFile("utf8");V(e)&&u===o&&(e.walkRowSampleTable=Kr(l))}catch(l){V(e)&&u===o&&(o=void 0,x(e).notify(`Walk rows cannot be grouped: the samples table did not load (${String(l)})`,"warning"))}}),loadWalkGenes:O(function*(){let d=e.walkGeneReads?.reads??[],u=JSON.stringify(d),l=e.graph,w=new Map;yield Promise.all(d.map(({row:f,trackId:k,region:G})=>O(function*(){let P=yield*Mo(k,G);P&&w.set(f,P)})())),V(e)&&e.graph===l&&JSON.stringify(e.walkGeneReads?.reads??[])===u&&(e.walkGeneFeatures=d.length?w:void 0)}),loadOwnGenes:O(function*(){let d=e.ownGeneReads,u=JSON.stringify(d),l=e.graph,w=yield Promise.all(d.map(({stableRefName:f,trackId:k,region:G})=>O(function*(){let P=yield*Mo(k,G),H=Fo(f)??_e(f);return(P??[]).map(j=>({...j,name:`${j.name} \xB7 ${H}`,refName:f}))})()));V(e)&&e.graph===l&&JSON.stringify(e.ownGeneReads)===u&&(e.ownGeneFeatures=d.length?w.flat():void 0)}),toggleBubble(d){let u=e.openBubbles,l=u.findIndex(G=>He(G,d));if(l>=0){e.openBubbles=u.slice(0,l);return}let w=new Set(It(d));if(!e.graph?.nodes.some(G=>w.has(G.name))){x(e).notify("None of the segments of this bubble are in the cut; widen the graph context to open it","info");return}let f=e.openBubbleInsides,k=f.length-1;for(;k>=0&&!f[k].some(G=>He(G,d));)k--;e.openBubbles=[...u.slice(0,k+1),d]},closeBubbles(){e.openBubbles.length>0&&(e.openBubbles=[])},recomputeLayout:O(function*(){let d=Oa();if(d){e.isLoading=!0,e.setStatusMessage("Computing layout");try{yield*T(d)}catch(u){console.error("[GraphGenomeView.recomputeLayout]",u),e.error=u}}})}});function na(e){return B(e)&&typeof e.get=="function"}function st(e,t){let o=na(e)?e.get(t):B(e)?e[t]:void 0;return typeof o=="string"?o:void 0}function aa(e){let t;if(B(e)&&B(e.hoverPosition)){let{refName:o,coord:r,coord0:n,assemblyName:a}=e.hoverPosition;typeof o=="string"&&typeof r=="number"&&(t={refName:o,coord:typeof n=="number"?n:r-1,assemblyName:typeof a=="string"?a:void 0,featureName:st(e.hoverFeature,"name"),featureSegments:st(e.hoverFeature,"segments"),viewId:typeof e.viewId=="string"?e.viewId:void 0})}return t}function ia(e,t,o){return e.viewId===void 0||t===void 0||!o.has(t)||e.viewId===t}function sa(e){if(!na(e))return;let t=e.get("refName"),o=e.get("start");return typeof t=="string"&&typeof o=="number"?{refName:t,coord:o,featureName:st(e,"name"),featureSegments:st(e,"segments")}:void 0}function Ut(e,t){return(e.assemblyName===void 0||e.assemblyName===t.assemblyName)&&e.refName===t.refName&&e.coord>=t.start&&e.coord<t.end}function pa({hover:e,nodes:t}){let o,r;for(let n of t)n.name===e.featureName?o=n.id:r===void 0&&K(n)&&e.coord>=n.stable.start&&e.coord<n.stable.start+n.length&&(r=n.id);return o??r??null}function da(e){let t=e.key?.split(">")??e.segments.split(",").filter(Boolean);return t.length>=2?[t[0],t.at(-1)].sort().join(" "):void 0}function yi(e){if(e.featureSegments)return da({segments:e.featureSegments});let t=/^([<>][^<>]+){2}$/.test(e.featureName??"")?e.featureName.split(/[<>]/).filter(Boolean):[];return t.length===2?t.sort().join(" "):void 0}function Xt(e,t){let o=yi(e);return o===void 0?void 0:t.find(r=>da(r)===o)}var fi=/^(.+) HP(\d+)$/,wi=/^(.+)\.(\d+)$/;function ki(e){let t=fi.exec(e),o=wi.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 Mi(e){return Ce(e).name.split("#")[1]}function ca(e,t){let o=t.map(r=>r.name);for(let{sample:r,haplotype:n}of ki(e)){let a=o.filter(i=>_e(Ce(i).name)===r&&(n===void 0||Mi(i)===n));if(a.length>0)return a}return[]}var ua=ra.actions(e=>({startRenderingBackend(t){if(!e.autorunsInstalled){L(e,Be(()=>{e.fittedTransform&&ie(()=>e.viewportOwner==="fit")&&e.zoomToFit()})),L(e,C(()=>`${e.viewBox.width} ${e.viewBox.height}`,()=>{e.keepDrawingInView()})),L(e,C(()=>{let r=e.facetGrid;return r?`${e.facetSetting.field} ${e.facetPanels?.length} ${r.columns}`:""},()=>{e.refitView()})),L(e,C(()=>({graph:e.graph,reads:JSON.stringify(e.walkGeneReads?.reads??[])}),()=>{e.loadWalkGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),L(e,C(()=>({graph:e.graph,reads:JSON.stringify(e.ownGeneReads)}),()=>{e.loadOwnGenes()},{fireImmediately:!0,equals:(r,n)=>r.graph===n.graph&&r.reads===n.reads})),L(e,C(()=>e.hasGraph&&(e.chosenLayoutMode==="walkrows"||se.has(e.chosenLayoutMode))?JSON.stringify(e.walkRowSamplesTsv??null):void 0,r=>{r!==void 0&&e.loadWalkRowSampleTable()},{fireImmediately:!0})),L(e,C(()=>`${e.fitPadTop} ${e.layoutBounds?.h} ${e.usableHeight}`,()=>{e.viewportOwner==="host"&&e.zoomToFit()})),L(e,Be(()=>{let r=aa(x(e).hovered),n=e.hoverLightsEverything;ie(()=>{let a=e.graphRegion,i=e.graph,s=new Set(xe([...x(e).views]).flatMap(S=>B(S)&&typeof S.id=="string"?[S.id]:[])),p=r&&a&&Ut(r,a)&&ia(r,e.pairedViewId,s)?r:void 0,c=p?.featureName&&i?.paths?ca(p.featureName,i.paths):[],m=p&&Xt(p,e.bubbles);a&&i&&!e.pointerInPane&&(e.setHoveredBubble(m??null),e.setHoveredNode(p&&n&&c.length===0&&!m?pa({hover:p,nodes:i.nodes}):null)),e.setHoveredRowWalks(c)})})),L(e,C(()=>sa(x(e).selection),r=>{let n=e.graphRegion,a=r&&n&&Ut(r,n)&&Xt(r,e.bubbles);a&&!e.openBubbles.some(i=>He(i,a))&&e.toggleBubble(a)})),L(e,C(()=>`${e.scale}-${e.translateX}-${e.translateY}`,()=>{e.clearHover()},{name:"GraphClearHoverOnViewportChange"}));let o=!0;L(e,Be(()=>{let{scale:r}=e,n=Ar(e);if(o){o=!1;return}let a=ie(()=>e.builtViewport);a?.scale===r&&wr(a.bounds,n)||e.scheduleViewportDirty()})),L(e,Be(()=>{let r=e.currentRenderingBackend;r&&(e.applySelection(r),e.renderNow())}))}e.attachRenderingBackend(t,()=>({upload:o=>{if(Bt(Ke()),o.resize(e.paneWidth,e.canvasHeight),e.layoutResult?.tubeMap||e.facetPanels)return Bt(e.viewportDirty),o.uploadGeometry(Fe),e.setGeometryMetrics(0,Fe,{scale:ie(()=>e.scale),bounds:ie(()=>e.viewportToBuild())}),!0;let r=performance.now(),n=e.buildDrawing(e.drawnHighlight,e.effectiveDrawPaths);return n?(o.uploadGeometry(n.batch),e.setGeometryMetrics(performance.now()-r,n.batch,{scale:ie(()=>e.scale),bounds:n.viewportBounds}),!0):!1},render:o=>e.nodePositions?(e.paint(o),e.markPainted(),!0):!1,releaseTargets:o=>{o.releaseOffscreenTargets()}}))}})).actions(e=>({relayoutFrom(t){return e.recomputeLayout()}})).actions(e=>({relayout(t){return e.handledLayoutMode=e.chosenLayoutMode,e.relayoutFrom(t)}})).actions(e=>({switchLayout(t){let o=e.chosenLayoutMode;return e.setLayoutMode(t),e.relayout(o)},retryLoad(){},afterAttach(){e.isDefaultViewport||(e.viewportOwner="user");for(let[t,o]of[[()=>e.geneTrack?.trackId,()=>e.reloadGenes()],[()=>e.repeatTrack?.trackId,()=>e.reloadRepeats()]])L(e,C(()=>({track:t(),region:e.graphRegion}),(r,n)=>{r.region&&r.region===n.region&&o()},{equals:(r,n)=>r.track===n.track&&r.region===n.region}));L(e,C(()=>e.chosenLayoutMode,(t,o)=>{t!==e.handledLayoutMode&&e.relayout(o)})),L(e,C(()=>({mode:e.chosenLayoutMode,engine:JSON.stringify(e.engineSettings),maxNodes:e.maxGraphNodes}),(t,o)=>{e.graph&&t.mode===o.mode&&(t.engine!==o.engine&&e.usesLayoutEngine||t.maxNodes!==o.maxNodes&&e.modeDrawsNodes)&&e.recomputeLayout()},{equals:(t,o)=>t.mode===o.mode&&t.engine===o.engine&&t.maxNodes===o.maxNodes})),L(e,C(()=>se.has(e.chosenLayoutMode)?JSON.stringify({fold:e.tubeMapFold,facet:e.facetSetting,groupBy:e.walkRowGroupBy,table:e.walkRowGroupBy&&e.walkRowSampleTable?.length,routes:e.tubeMapRoutes,bundledBy:e.tubeMapRoutes!=="each"?e.tubeMapColoring?.field:void 0}):void 0,(t,o)=>{t!==void 0&&o!==void 0&&e.graph&&e.recomputeLayout()}))}})).actions(e=>({switchForceEngine(t){return e.setLayoutEngine(t),e.chosenLayoutMode==="force"?void 0:e.switchLayout("force")}})).actions(e=>({expandWalks(t){let o=t.filter(r=>!e.expandedWalks.includes(r));o.length>0&&(e.expandedWalks=e.expandedWalks.concat(o),e.retryLoad())}})).actions(e=>({expandWalk(t){e.expandWalks([t])},afterAttach(){L(e,C(()=>{let t=new Set(e.walkLayers.map(o=>o.walk));return[...new Set((e.graph?.paths??[]).filter(o=>o.abridged&&t.has(o.name)).map(o=>o.name))]},t=>{e.expandWalks(t)},{fireImmediately:!0,equals:(t,o)=>t.join(`
|
|
5
5
|
`)===o.join(`
|
|
6
|
-
`)}))}}));var ma=q(E("path",{d:"M9.19 6.35c-2.04 2.29-3.44 5.58-3.57 5.89L2 10.69l4.05-4.05c.47-.47 1.15-.68 1.81-.55zM11.17 17s3.74-1.55 5.89-3.7c5.4-5.4 4.5-9.62 4.21-10.57-.95-.3-5.17-1.19-10.57 4.21C8.55 9.09 7 12.83 7 12.83zm6.48-2.19c-2.29 2.04-5.58 3.44-5.89 3.57L13.31 22l4.05-4.05c.47-.47.68-1.15.55-1.81zM9 18c0 .83-.34 1.58-.88 2.12C6.94 21.3 2 22 2 22s.7-4.94 1.88-6.12C4.42 15.34 5.17 15 6 15c1.66 0 3 1.34 3 3m4-9c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2"}),"RocketLaunch");function pt(e,t){Xo(e,t);let o=e.find(r=>"subMenu"in r&&r.label===Uo);o&&!o.icon&&(o.icon=ma)}var Si="SyntenyTrack",xi="Synteny adapters";function Ri(e,t){let{type:o,adapter:r}=Yo(e);if(o===Si)return!0;let n=r?.type;return typeof n=="string"&&t.hasAdapterType(n)&&t.getAdapterType(n).adapterMetadata?.category===xi}function la(e,t,o){let r=new Set(t),n=[];for(let a of e.tracks){let{trackId:i}=a;if(Ri(a,o)){let s=
|
|
6
|
+
`)}))}}));var ma=q(E("path",{d:"M9.19 6.35c-2.04 2.29-3.44 5.58-3.57 5.89L2 10.69l4.05-4.05c.47-.47 1.15-.68 1.81-.55zM11.17 17s3.74-1.55 5.89-3.7c5.4-5.4 4.5-9.62 4.21-10.57-.95-.3-5.17-1.19-10.57 4.21C8.55 9.09 7 12.83 7 12.83zm6.48-2.19c-2.29 2.04-5.58 3.44-5.89 3.57L13.31 22l4.05-4.05c.47-.47.68-1.15.55-1.81zM9 18c0 .83-.34 1.58-.88 2.12C6.94 21.3 2 22 2 22s.7-4.94 1.88-6.12C4.42 15.34 5.17 15 6 15c1.66 0 3 1.34 3 3m4-9c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2"}),"RocketLaunch");function pt(e,t){Xo(e,t);let o=e.find(r=>"subMenu"in r&&r.label===Uo);o&&!o.icon&&(o.icon=ma)}var Si="SyntenyTrack",xi="Synteny adapters";function Ri(e,t){let{type:o,adapter:r}=Yo(e);if(o===Si)return!0;let n=r?.type;return typeof n=="string"&&t.hasAdapterType(n)&&t.getAdapterType(n).adapterMetadata?.category===xi}function la(e,t,o){let r=new Set(t),n=[];for(let a of e.tracks){let{trackId:i}=a;if(Ri(a,o)){let s=cr(e,a).filter(p=>r.has(p)).length;s>=2&&n.push({trackId:i,name:Jo(a,e),coverage:s})}}return n.sort((a,i)=>i.coverage-a.coverage)}function ga(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 ha=[["fmmm","FMMM"],["stress","stress"]],qt=e=>e.label.replace(/ layout$/,"");function ee(e,t,o){return e.map(({value:r,label:n,disabled:a})=>({type:"radio",label:n,disabled:a,checked:r===t,onClick:()=>{o(r)}}))}var ba=ua.actions(e=>({showInLinearView(t){let o=x(e),r=t.assembly===e.graphRegion?.assemblyName,n=Ee(o,t.assembly),a=(r?e.geneTrack:e.geneTracksByAssembly.get(n))??e.sessionTracks.find(s=>s.assemblies.includes(n)&&hn.has(s.adapterType)),i=ur({session:o,location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId,tracks:[...new Set([r?e.sourceTrackId:void 0,a?.trackId].filter(s=>s!==void 0))]});r&&e.pairWithLinearView(i)},highlightInLinearView(t){mr({session:x(e),location:t.location,assembly:t.assembly,connectedViewId:e.pairedViewId})},showSyntenyView(t){lr({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?la(x(e),t,Ae(e).pluginManager):[]}})).views(e=>({walkRowSampleMenuItems(){let{disagreeing:t}=e.walkRowSampleChoices,o=e.walkRowSamples,r=n=>n.join(`
|
|
7
7
|
`)===o?.join(`
|
|
8
|
-
`);return[{type:"radio",label:"Every sample",checked:o===void 0,onClick:()=>{e.setWalkRowSamples(void 0)}},...t.length>0?[{type:"radio",label:"Where walk and call disagree",checked:r(t),onClick:()=>{e.setWalkRowSamples(t)}}]:[],{type:"radio",label:"Choose samples...",checked:o!==void 0&&!r(t),onClick:()=>{x(e).queueDialog(n=>[Mr,{model:e,onClose:n}])}}]},walkRowGroupMenuItems(){let t=e.walkRowGroups?e.walkRowGroupBy?.field:void 0;return ee([{value:void 0,label:"None"},...e.walkRowGroupFields.map(o=>({value:o,label:o}))],t,o=>{e.setWalkRowGroupBy(o===void 0?void 0:{field:o})})},tubeMapPanelMenuItems(){let{graph:t,walkRowSampleTable:o}=e,{field:r}=e.facetSetting,n=r===""?e.walkRowGroupBy?.field:void 0,a=i=>!!t&&qe(t,i).length>1;return[...ee(en.map(i=>({value:i.field,label:i.label,disabled:i.field!==""&&!a({by:i.field})})),n?void 0:r,i=>{e.setFacet(i),i===""&&e.setWalkRowGroupBy(void 0)}),...ee(e.walkRowGroupFields.map(i=>({value:i,label:`By ${i}`,disabled:!o||!a({by:"column",field:i,table:o})})),n,i=>{e.setFacet(""),e.setWalkRowGroupBy({field:i})})]},layoutOptionMenuItems({repeat:t=!0}={}){return[...se.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:ee(Tr.map(({bp:o,label:r})=>({value:o,label:r,disabled:o>0&&e.graph?.reads!==void 0})),e.graph?.reads?0:e.tubeMapFold,e.setTubeMapFold)},{label:"Panels",subMenu:this.tubeMapPanelMenuItems()},{label:"Routes",subMenu:ee(vr,e.tubeMapRoutes,e.setTubeMapRoutes)},...e.walkRowGroupFields.length>0?[{label:"Tube color",subMenu:ee(["",...e.walkRowGroupFields].map(o=>({value:o,label:o?`By ${o}`:"By role"})),e.tubeMapColorBy,e.setTubeMapColorBy)}]:[]]:[],...t&&e.chosenLayoutMode==="walkrows"&&e.repeatChoices.length>0?[{label:"Repeat",subMenu:ee(e.repeatOptions,e.selectedRepeat?.key??"",e.setRepeatKey)}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars?[{label:"Samples",subMenu:this.walkRowSampleMenuItems()},{type:"checkbox",label:"Ribbons between rows",checked:e.walkRibbons,onClick:()=>{e.setLayer("walkRibbons",!e.walkRibbons)}},{type:"checkbox",label:"Letter shared blocks",checked:e.layerSet.has("walkBlocks"),onClick:()=>{e.setLayer("walkBlocks",!e.layerSet.has("walkBlocks"))}},{type:"checkbox",label:"Order rows by shared sequence",checked:e.walkRowOrder==="shared",onClick:()=>{e.setWalkRowOrder(e.walkRowOrder==="shared"?void 0:"shared")}}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars&&e.walkRowGroupFields.length>0?[{label:"Group by...",subMenu:this.walkRowGroupMenuItems()}]:[]]},showMenuItems(){let t=(o,r)=>({type:"checkbox",label:o,checked:e.layerSet.has(r),onClick:()=>{e.setLayer(r,!e.layerSet.has(r))}});return[t("Show bubble halos","bubbles"),t("Show deletion edges","deletions"),{label:"Hover highlight",subMenu:ee(Le.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:_n,disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let t=e.figure();t&&ga(t,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}}]},highlightMenuItems({picks:t=!0}={}){let o=t?e.walkChoices:[];if(e.walkChoices.length===0||!e.liftsWalks||!t&&e.walkLayers.length===0)return[];let r=a=>e.walkLayers.some(i=>i.walk===a),n=o.length>Rr;return[{type:"subHeader",label:"Highlight"},...n?[{label:"Choose haplotypes...",onClick:()=>{x(e).queueDialog(a=>[Sr,{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=>[xr,{model:e,onClose:a}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...ee(gr.map(({value:a,label:i})=>({value:a,label:a==="walk"?"A panel per haplotype":i})),e.facetSetting.field,e.setFacet)]:[]]},colorSchemeLabel(t){let o=Pt.find(r=>r.value===t)?.label??t;return t==="auto"?`${o} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:o},graphMenuItems(){let t=this.layoutOptionMenuItems(),o=Q(e.chosenLayoutMode),r=ha.find(([n])=>n===e.layoutEngine)[1];return[{label:`Layout: ${qt(o)}${o.value==="force"?` (${r})`:""}`,icon:On,subMenu:[...or.flatMap(n=>{let a={type:"radio",disabled:e.graph?!n.available(e.graph):!1,disabledHelpText:n.description};return n.value==="force"?ha.map(([i,s])=>({...a,label:`${qt(n)} (${s})`,checked:e.chosenLayoutMode===n.value&&e.layoutEngine===i,onClick:()=>{e.switchForceEngine(i)}})):[{...a,label:qt(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:Dn,disabled:e.colorSchemeLock!==void 0,disabledHelpText:e.colorSchemeLock?.why,subMenu:ee(Pt.map(({value:n})=>({value:n,label:this.colorSchemeLabel(n)})),e.chosenColorScheme,e.setColorScheme)},{label:"Show...",icon:hr,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[],o=e.launchableAssemblies,r=e.graphRegion?.assemblyName;for(let n of kn({contributors:o,linearContributors:e.host?o.filter(a=>a.sample!==r):o,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:a=>{e.showInLinearView(a)},onShowSynteny:a=>{e.showSyntenyView(a)}}))pt(t,n);return t}}));var dt=ba.views(e=>({get trackHaplotypes(){let t=e.sourceAdapter;return t&&Ie(t)}})).views(e=>({get cutHaplotypes(){return e.subgraphHaplotypes??e.trackHaplotypes},offReference(t){let o=e.sourceTrack,r=o&&ir(o),n=x(e);return r===void 0?void 0:pr(Ee(n,r),Ee(n,t.assemblyName))},cutChangedFrom(t){return e.cutsWholeWalks!==e.cutsWholeWalksIn(t)||t==="walkrows"!=(e.chosenLayoutMode==="walkrows")}})).views(e=>({get cutOptions(){return{hops:e.subgraphContext,haplotypes:e.cutHaplotypes,...e.chosenLayoutMode==="walkrows"?{walkRows:!0}:{},...e.cutsWholeWalks?{snarls:"overlapping"}:{},...e.expandedWalks.length>0?{expand:e.expandedWalks}:{}}}}));var ya={scale:["scale","type"],domain:["scale","domain"],range:["scale","range"],labels:["scale","names"],scheme:["scale","scheme"],reverse:["scale","reverse"],domainMin:["scale","domainMin"],domainMax:["scale","domainMax"],domainMid:["scale","domainMid"],domainQuantile:["scale","domainQuantile"],unknown:["scale","unknown"],title:["legend","title"],descending:["legend","descending"]};function Ti(e){return Object.entries(e).some(([t,o])=>t in ya&&!(t==="scale"&&B(o)))}function Kt(e){if(typeof e=="string")return{value:e};if(!B(e)||!Ti(e))return e;let t={},o={scale:{},legend:{}};for(let[r,n]of Object.entries(e)){let a=ya[r];!a||r==="scale"&&B(n)?t[r]=n:n!==void 0&&(o[a[0]][a[1]]=r==="scale"&&n==="categorical"?"ordinal":n)}for(let r of["scale","legend"])if(Object.keys(o[r]).length>0){let n=t[r];t[r]={...o[r],...B(n)?n:{}}}return t}var fa={color:e=>({encoding:{color:Kt(e)}})};function Qt(){return M.compose("GraphGenomeView",Wn,dt,M.model({type:M.literal("GraphGenomeView"),gfaLocation:M.maybe(M.frozen()),loadedRegion:M.maybe(M.frozen()),loadedTrackId:M.optional(M.string,""),layoutMode:Gt(Ue),color:M.maybe(M.frozen()),size:M.maybe(M.frozen()),layers:M.maybe(M.frozen()),facet:M.maybe(M.frozen()),rows:M.maybe(M.frozen()),hover:Gt(Le)})).preProcessSnapshot(e=>e.color===void 0?e:{...e,color:Kt(e.color)}).views(e=>({get grammar(){return{layoutMode:e.layoutMode,encoding:{color:e.color},size:e.size,layers:e.layers,facet:e.facet,rows:e.rows,hover:e.hover}}})).actions(e=>({writeGrammar({encoding:t,...o}){Object.assign(e,t?{...o,color:t.color}:o)}})).volatile(()=>({widthMeasured:!1})).actions(e=>{let t=e.setWidth;return{setWidth(o){t(o),e.widthMeasured=!0}}}).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get paneMeasured(){return e.widthMeasured},get sourceTrack(){return e.loadedTrackId?e.sessionTrack(e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return[...e.exportMenuItems(),...e.launchMenuItems()]}})).actions(e=>{let t=e.clearGraph;function o(r){if(e.gfaLocation)return e.displayName||e.setDisplayName(de(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,r);if(!e.loadedTrackId||!r)return;let n=e.sourceAdapter,a=r.end-r.start,i=e.offReference(r);if(!n)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(i)e.setError(new Error(i));else if(a>e.maxRegionBp)e.setError(new Error(`Region too large (${pe(a)}) \u2014 zoom in to view graph (max ${pe(e.maxRegionBp)})`));else return e.cutSubgraph(n,r,e.cutOptions)}return{clearGraph(){t(),e.gfaLocation&&e.displayName===de(e.gfaLocation)&&(e.displayName=void 0),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let r=e.loadedRegion,n=x(e),{assemblyManager:a}=n,i=r&&a.has(r.assemblyName)?a.get(r.assemblyName):void 0;return r&&i?.initialized===!1?a.waitForAssembly(r.assemblyName).catch(()=>{}).then(()=>e.loadedRegion===r?o(At(n,r)):void 0):o(r&&At(n,r))}}}).actions(e=>({retryLoad(){e.load()},setGfaLocation(t){e.gfaLocation=t},relayoutFrom(t){return e.loadedTrackId&&e.cutChangedFrom(t)?e.load():e.recomputeLayout()},async openGfaLocation(t){await e.loadGFAFromLocation(t),V(e)&&e.hasGraph&&(this.setGfaLocation(t),e.displayName||e.setDisplayName(de(t)))},afterAttach(){e.graph||e.load(),L(e,C(()=>e.walkStrip,t=>{e.loadedTrackId&&e.cutsWholeWalks!==e.cutsWholeWalksIn(e.chosenLayoutMode,!t)&&e.load()}))}}))}var Gi=jn()({});function Zt(e){e.addViewType(()=>new Vn({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Qt(),launchKeys:Gi,ReactComponent:oe(()=>import("./chunks/GraphGenomeView-5LYF6LMA.js"))}))}var eo=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function Li(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"),...eo.map(n=>r(o(n)))].filter(n=>n!==void 0)}function to(e){e.addTrackType(()=>{let t=W("GraphTrack",{},{baseConfiguration:En(e),explicitIdentifier:"trackId"}),o=new In({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:Fn(e,"GraphTrack",t)});for(let r of Li(e))o.addDisplayType(r);return o})}function oo(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:o,...r}=t;return o.addView("GraphGenomeView",r),t})}var ut=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"];var wa=ut&&ut.__esModule?ut.default:ut;var be=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"],vi=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}),ka=vi("trackHeightConfigSchemaFields"),Gm=be&&be.__esModule?be.default:be;function Ma(){return W("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:M.enumeration("LayoutMode",Ue),defaultValue:"auto"},encoding:{type:"frozen",defaultValue:{},plot:!0},size:{type:"frozen",defaultValue:{field:"depth",value:6},plot:!0},layers:{type:"frozen",defaultValue:{},plot:!0},facet:{type:"frozen",defaultValue:{},plot:!0},rows:{type:"frozen",defaultValue:{},plot:!0},hover:{type:"stringEnum",model:M.enumeration("HoverHighlight",Le),defaultValue:"nodes"},...ka({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId",retired:fa})}var ye=JBrowseExports["@jbrowse/core/svg/svgReady"],Ai=e=>ye!=null&&e in Object(ye)?ye[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/svg/svgReady' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Sa=Ai("computeSvgReady");var Fm=ye&&ye.__esModule?ye.default:ye;var ct=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"];var xa=ct&&ct.__esModule?ct.default:ct;var fe=JBrowseExports["@jbrowse/display-kit/plotMenu"],Pi=e=>fe!=null&&e in Object(fe)?fe[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/display-kit/plotMenu' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),Ra=Pi("editPlotMenuItems");var Vm=fe&&fe.__esModule?fe.default:fe;var we=JBrowseExports["@jbrowse/render-core/displayPhase"],Ta=e=>we!=null&&e in Object(we)?we[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/render-core/displayPhase' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),Ga=Ta("computeActivityPhase");var La=Ta("computeDisplayStatusPhase"),Wm=we&&we.__esModule?we.default:we;function ro(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 Ci=new Set(["scale","translateX","translateY"]);function Bi(e){return Object.fromEntries(Object.keys(Pr.properties).filter(t=>!Ci.has(t)).map(t=>[t,e[t]]))}var no=10;function Ii(e){let{aboveBpPerPx:t,foldBelowBp:o}=e??{};return typeof t=="number"?t:typeof o=="number"&&o>0?o/no:void 0}var Ei=oe(()=>import("./chunks/GraphTrackSettingsDialog-T5YKMIPH.js"));function va(e){return M.compose("LinearGraphDisplay",Cn,xa(),dt,M.model({type:M.literal("LinearGraphDisplay"),configuration:No(e),layoutEngine:rr(Qo,"stress"),cutRegion:M.maybe(M.frozen()),coarseCut:M.optional(M.boolean,!1)})).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0,haplotypeNames:void 0,cutFoldBp:0})).views(t=>({get grammar(){return{layoutMode:te(t,"layoutMode"),encoding:te(t,"encoding"),size:te(t,"size"),layers:te(t,"layers"),facet:te(t,"facet"),rows:te(t,"rows"),hover:te(t,"hover")}},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get trackHaplotypes(){let o=t.sourceAdapter,r=t.sourceTrack;return(o&&Ie(o))??(r&&Lt(r))},get coarseAboveBpPerPx(){return Ii(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=no*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 Sa({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return La({regionTooLarge:t.regionTooLarge,error:t.error??t.renderError},()=>Ga({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))Vo(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(no*(t.settledWindow?.bpPerPx??t.host?.bpPerPx??0)),t.cutSubgraph(r,o,{...t.cutOptions,tier:a?"coarse":void 0},t.cutFoldBp)}})).actions(t=>({recutAt(o){let r=t.tierAt(o.bpPerPx);return t.coarseCut=r==="coarse",t.cutRegion=un(o,t.capFor(r),Q(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(o){t.settledWindow=o;let r=Q(t.chosenLayoutMode).cutMargins;if(t.regionTooLarge||ro(t.dense,o)||!t.loadCanceled&&t.tierAt(o.bpPerPx)===t.cutTier&&cn(t.cutRegion,o,r)&&!t.foldDrifted(o.bpPerPx))return!1;let n=t.recutAt(o),a=t.recuts;return Promise.resolve(n).then(()=>{V(t)&&t.recuts===a&&St(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?Re(t.host):void 0;return r&&!t.regionTooLarge&&(t.cutChangedFrom(o)||Q(o).cutMargins!==Q(t.chosenLayoutMode).cutMargins)?t.recutAt(r):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({async fetchHaplotypeNames(o,r){try{let n=await x(t).rpcManager.call(ae(t),"GetGraphHaplotypes",{adapterConfig:o,signal:r});V(t)&&!r?.aborted&&t.setHaplotypeNames(n)}catch(n){r?.aborted||console.warn("[LinearGraphDisplay] no haplotype names",n)}}})).actions(t=>({stretchWithHost(o,r){let n=t.layoutBounds;if(!n||!t.followsHostView)return;t.viewportOwner==="fit"&&(t.viewportOwner="user");let a=o.bpPerPx/r.bpPerPx,i=t.translateY+t.scaleY*(n.minY+n.h/2);t.scale*=a,t.translateX=a*(t.translateX+o.offsetPx)-r.offsetPx,t.translateY=i-a*(i-t.translateY)}})).actions(t=>({forceLoad(){let o=t.settledWindow;o&&(t.setMaxRegionBp(Math.ceil(o.end-o.start)),t.settleOn(o))},afterAttach(){t.cutRegion&&!t.graph&&t.cut();let o;L(t,()=>{o?.abort()}),L(t,C(()=>{let n=t.sourceAdapter;return n&&nr(n)?n:void 0},n=>{o?.abort(),o=void 0,t.setHaplotypeNames(void 0),n&&(o=new AbortController,t.fetchHaplotypeNames(n,o.signal))},{fireImmediately:!0,equals:(n,a)=>JSON.stringify(n)===JSON.stringify(a),name:"GraphHaplotypeNames"})),L(t,C(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),L(t,C(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,a)=>n?.scale===a?.scale&&n?.translateX===a?.translateX,fireImmediately:!0,name:"GraphHostFrame"}));let r;L(t,C(()=>t.host&&!t.hostPlacesX?{bpPerPx:t.host.bpPerPx,offsetPx:t.host.offsetPx}:void 0,n=>{let a=r;r=n,n&&a&&n.bpPerPx>0&&t.stretchWithHost(a,n)},{equals:(n,a)=>n?.bpPerPx===a?.bpPerPx&&n?.offsetPx===a?.offsetPx,fireImmediately:!0,name:"GraphHostStretch"})),L(t,C(()=>`${t.facetSetting.field} ${t.facetPlacement?.count}`,()=>{let n=(t.facetGridIn(t.paneCeiling-Qe)?.total??0)+Qe;(t.facetGrid?.total??0)+Qe>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),L(t,C(()=>t.host?.coarseDynamicBlocks,n=>{let{host:a}=t,i=n&&a?Re(a):void 0;i&&t.settleOn(i)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let o=t.host?Re(t.host):void 0,r=t.sourceTrackId;if(!o||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge||ro(t.dense,o))return;let n=Math.floor(o.start),a=Math.ceil(o.end),{encoding:i,...s}=t.grammar;return{...Bi(t),loadedTrackId:r,loadedRegion:{refName:o.refName,assemblyName:o.assemblyName,start:n,end:a},subgraphHaplotypes:t.cutHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-n),...s,color:i?.color,layoutMode:t.chosenLayoutMode,connectedViewId:t.host?.id}}})).actions(t=>({openGraphView(){let o=t.graphViewSpec;o&&x(t).addView("GraphGenomeView",o)}})).views(t=>({cutMenuItems(){let o=t.sourceAdapter,r=t.sourceTrack;if(!o||!r||!ar(o))return[];let n=Ie(o),a=Lt(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=>[Ei,{model:t,onClose:o}])},async renderSvg(o){let{renderGraphTrackSvg:r}=await import("./chunks/renderSvg-3KAQCRFY.js");return r(t,o)},trackMenuItems(){let o=t.launchMenuItems();pt(o,{label:"Graph genome view",icon:tt,disabled:!t.graphViewSpec,disabledHelpText:t.error&&!St(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:Sn,subMenu:r}]:[],...t.graphMenuItems(),{label:"Graph settings...",icon:xn,helpText:"Subgraph, drawing and force-directed layout",onClick:()=>{this.openSettings()}},...o,...Ra(t)]}}))}function ao(e){e.addDisplayType(()=>{let t=Ma();return Object.assign(new wa({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:va(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:oe(()=>import("./chunks/LinearGraphDisplay-YTSXFZED.js"))}),{adapterCapabilities:["getSubgraph"]})})}function Fi(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:o},index:Pe(t,o,r)}:e}var Ni=W("MinigraphBubbleAdapter",{bubblesLocation:F("/path/to/graph.bb.bed.gz"),index:_("MinigraphBubbleIndex","/path/to/graph.bb.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Fi}),Aa=Ni;function io(e){e.addAdapterType(()=>new Z({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",configSchema:Aa,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-D57ZFMKV.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:Pe(`${t}.segs.bed.gz`,o,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:o},linksIndex:Pe(`${t}.links.bed.gz`,o,r)}:e}function Hi(e){let{coarse:t,baseUri:o,csi:r}=e;return Se(Pa(typeof t=="object"&&t!==null?{...e,coarse:Pa({baseUri:o,csi:r,...t})}:e))}var Vi=W("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},foldBelowBp:{type:"maybeNumber"},segmentsLocation:F("/path/to/graph.tier.segs.bed.gz"),segmentsIndex:_("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:F("/path/to/graph.tier.links.bed.gz"),linksIndex:_("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),ji=W("RgfaTabixAdapter",{segmentsLocation:F("/path/to/graph.segs.bed.gz"),segmentsIndex:_("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:F("/path/to/graph.links.bed.gz"),linksIndex:_("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),walksLocation:F(""),walksIndex:_("RgfaWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Me.stepBudget},walkByteBudget:{type:"integer",defaultValue:Me.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:Vi},{explicitlyTyped:!0,preProcessSnapshot:Hi}),Ca=ji;function so(e){e.addAdapterType(()=>new Z({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",configSchema:Ca,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-HN2NLJJW.js").then(t=>t.default)}))}var Wi=["LinearMultiSampleVariantDisplay"],Oi=[{label:"Auto",value:"auto"},{label:"50 bp",value:50},{label:"1 kb",value:1e3},{label:"10 kb",value:1e4}];function Di(e,t){return e?`Pinned to ${Ze(e)}${t===void 0?"":` \xB7 ${t} form${t===1?"":"s"}`}`:"Not pinned"}function _i(e,t){let o=x(e),r=t.flatMap(n=>n?[Gn(n)]:[]);for(let{message:n}of[...o.snackbarMessages??[]])r.some(a=>n.startsWith(a))&&o.removeSnackbarMessage?.(n)}function zi(e){return e.props({formsPinned:M.maybe(M.frozen()),formsFloorBp:M.maybe(M.frozen())}).views(t=>({get configuredAdapter(){return Ho(t.parentTrack.configuration,"adapter")},get walkForms(){return this.configuredAdapter.type==="WalkFormsAdapter"}})).views(t=>({get adapterConfig(){let o=t.configuredAdapter;return t.walkForms?{...o,...t.formsPinned?{pinned:t.formsPinned}:{},...t.formsFloorBp===void 0?{}:{floorBp:t.formsFloorBp}}:o},get formsWindow(){return Rn(this.adapterConfig.pinned)},get formsFloor(){return Tn(this.adapterConfig.floorBp)},get formsCount(){return t.sourcesBase?.reduce((o,r)=>o+(Number(r.forms)||1),0)},get visibleWindow(){let o=vo(t),r=dn(o)?Re(o):void 0;return r&&r.end>r.start?{refName:r.refName,start:Math.max(0,Math.floor(r.start)),end:Math.ceil(r.end)}:void 0}})).volatile(()=>({warnedWindow:void 0})).actions(t=>{let{setSources:o}=t,r=()=>{_i(t,[t.warnedWindow,t.formsWindow])};return{setFormsPinned(n){r(),t.formsPinned=n},setFormsFloorBp(n){r(),t.formsFloorBp=n},setSources(n,a){t.walkForms&&(r(),t.warnedWindow=t.formsWindow),o?.(n,a)}}}).views(t=>{let{trackMenuItems:o}=t;return{formsMenuItems(){let r=t.formsWindow,n=t.visibleWindow;return[{label:Di(r,t.formsCount),disabled:!0,onClick:()=>{}},{label:"Re-pin to visible region",helpText:"Cut the forms from the region the view shows. Panning and zooming leave the forms alone",disabled:!n||r!==void 0&&Ze(n)===Ze(r),onClick:()=>{n&&t.setFormsPinned(n)}},{label:"Hide changes under",subMenu:Oi.map(({label:a,value:i})=>({label:a,type:"radio",checked:t.formsFloor===i,onClick:()=>{t.setFormsFloorBp(i)}}))}]},trackMenuItems(){return t.walkForms?[...o(),...this.formsMenuItems()]:o()}}})}function po(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rt&&Wi.includes(t.name)&&t.extendStateModel(zi),t))}var $i=W("WalkFormsAdapter",{walksLocation:F("/path/to/graph.walks.bed.gz"),walksIndex:_("WalkFormsWalksIndex"),pinned:{type:"frozen",defaultValue:{}},floorBp:{type:"frozen",defaultValue:"auto"},exclude:{type:"stringArray",defaultValue:[]},maxForms:{type:"integer",defaultValue:Ln},walkByteBudget:{type:"integer",defaultValue:1e6}},{explicitlyTyped:!0,preProcessSnapshot:Se}),Ba=$i;function uo(e){e.addAdapterType(()=>new Z({name:"WalkFormsAdapter",displayName:"Walk-file structural forms adapter",configSchema:Ba,adapterMetadata:{category:"Variant adapters"},getAdapterClass:()=>import("./chunks/WalkFormsAdapter-ESCQSNEJ.js").then(t=>t.default)}))}var Ji=W("WalkTabixSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},walksLocation:F("/path/to/graph.walks.bed.gz"),walksIndex:_("WalkTabixWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Me.stepBudget},walkByteBudget:{type:"integer",defaultValue:Me.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},samplesTsvLocation:F(""),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Se}),Ia=Ji;function co(e){e.addAdapterType(()=>new Z({name:"WalkTabixSyntenyAdapter",displayName:"Walk-indexed graph adapter",configSchema:Ia,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/WalkTabixSyntenyAdapter-62PJZBRP.js").then(t=>t.default)}))}var Yi=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Ui(e){return yt(e).toLowerCase().endsWith(".gbz.db")}function Xi(e){let t=e.adapter;return t?.type!==void 0&&mn.has(t.type)&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function qi(e){let t=e.adapter,[o]=Array.isArray(e.assemblyNames)?e.assemblyNames:[],r=t?.type==="RgfaTabixAdapter"&&t.walksLocation?Wo(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=>Ko({choice:n,loc:e,indexLoc:t,assembly:"",sample:""});if((!o||o==="GbzBaseSyntenyAdapter")&&Ui(e))return r("GbzBaseSyntenyAdapter");if(!o||o==="RgfaTabixAdapter"){if(qo(e))return r("RgfaTabixAdapter");if(yt(e).endsWith(jo)&&(t!==void 0||_o(e)))return r("RgfaTabixWalks")}}function mo(e){e.addToExtensionPoint("Core-preProcessTrackConfig",Xi),e.addToExtensionPoint("Core-preProcessTrackConfig",qi),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(o,r,n)=>Ki(o,r,n)??t(o,r,n)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(o,r)=>Yi.has(o)?"GraphTrack":t(o,r))}function lo(e){let t;if(B(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 Qi(e,t,o){let r=e.connectedViewId;return r===void 0||r===t||!o.has(r)}function Ea(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Fa(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(o=>B(o)&&Array.isArray(o.displays)?o.displays.filter(r=>B(r)&&r.type==="LinearGraphDisplay"):[])}function Na(e,t,o){let r=[],n=xe(e),a=new Set(n.map(i=>B(i)?i.id:void 0));for(let i of n){if(B(i)&&i.id===t)for(let s of Fa(i)){let p=lo(s.hoverHighlight);p&&Ea(p,o)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:p})}for(let s of B(i)?[...Fa(i),...i.type==="GraphGenomeView"?[i]:[]]:[])(Array.isArray(s.assemblyHoverHighlights)?s.assemblyHoverHighlights:[]).forEach((u,m)=>{let S=lo(u);S?.assemblyName!==void 0&&o?.includes(S.assemblyName)&&r.push({key:`${typeof s.id=="string"?s.id:"graph"}-${m}`,region:S})});if(B(i)&&i.type==="GraphGenomeView"&&Qi(i,t,a)){let s=lo(i.hoverHighlight);s&&Ea(s,o)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var Zi=Mn()(e=>({highlight:{height:"100%",position:"absolute",background:Je(e.palette.primary.main,.08),borderLeft:`1px solid ${Je(e.palette.primary.main,.4)}`,borderRight:`1px solid ${Je(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),es=Mt(function({model:t,region:o}){let{classes:r}=Zi(),n=t.getHighlightCoords(o);return n?E("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:n.left,width:n.width}}):null}),ts=Mt(function({model:t}){let{views:o}=x(t);return E(Bo,{children:Na([...o],t.id,t.assemblyNames).map(({key:r,region:n})=>E(es,{model:t,region:n},`graph-hover-${r}`))})}),Ha=ts;var os="LinearGenomeView-TracksContainerComponent";function go(e){e.contributeToExtensionPoint(os,({model:t})=>E(Ha,{model:t},"graphgenomeview-hover-highlight"))}function rs(e){return e.views(t=>({get adapterConfig(){return ln(t,t.parentTrack.configuration)}}))}function ho(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rt&&eo.includes(t.name)&&t.extendStateModel(rs),t))}var Va="GraphGenomeView";var ja="8.0.0";var bo=class extends vn{constructor(){super(...arguments);this.name=Va;this.version=ja}install(o){Zt(o),ao(o),to(o),oo(o),go(o),so(o),io(o),jt(o),co(o),uo(o),po(o),Ot(o),mo(o),ho(o),o.addRpcMethod(()=>new Oe(o)),o.addRpcMethod(()=>new We(o)),o.addRpcMethod(()=>new je(o)),o.addRpcMethod(()=>new Ve(o))}configure(o){try{Ao(o.rootModel)&&o.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:tt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{bo as default};
|
|
8
|
+
`);return[{type:"radio",label:"Every sample",checked:o===void 0,onClick:()=>{e.setWalkRowSamples(void 0)}},...t.length>0?[{type:"radio",label:"Where walk and call disagree",checked:r(t),onClick:()=>{e.setWalkRowSamples(t)}}]:[],{type:"radio",label:"Choose samples...",checked:o!==void 0&&!r(t),onClick:()=>{x(e).queueDialog(n=>[Mr,{model:e,onClose:n}])}}]},walkRowGroupMenuItems(){let t=e.walkRowGroups?e.walkRowGroupBy?.field:void 0;return ee([{value:void 0,label:"None"},...e.walkRowGroupFields.map(o=>({value:o,label:o}))],t,o=>{e.setWalkRowGroupBy(o===void 0?void 0:{field:o})})},tubeMapPanelMenuItems(){let{graph:t,walkRowSampleTable:o}=e,{field:r}=e.facetSetting,n=r===""?e.walkRowGroupBy?.field:void 0,a=i=>!!t&&qe(t,i).length>1;return[...ee(en.map(i=>({value:i.field,label:i.label,disabled:i.field!==""&&!a({by:i.field})})),n?void 0:r,i=>{e.setFacet(i),i===""&&e.setWalkRowGroupBy(void 0)}),...ee(e.walkRowGroupFields.map(i=>({value:i,label:`By ${i}`,disabled:!o||!a({by:"column",field:i,table:o})})),n,i=>{e.setFacet(""),e.setWalkRowGroupBy({field:i})})]},layoutOptionMenuItems({repeat:t=!0}={}){return[...se.has(e.chosenLayoutMode)?[{label:"Fold variants",subMenu:ee(Tr.map(({bp:o,label:r})=>({value:o,label:r,disabled:o>0&&e.graph?.reads!==void 0})),e.graph?.reads?0:e.tubeMapFold,e.setTubeMapFold)},{label:"Panels",subMenu:this.tubeMapPanelMenuItems()},{label:"Routes",subMenu:ee(vr,e.tubeMapRoutes,e.setTubeMapRoutes)},...e.walkRowGroupFields.length>0?[{label:"Tube color",subMenu:ee(["",...e.walkRowGroupFields].map(o=>({value:o,label:o?`By ${o}`:"By role"})),e.tubeMapColorBy,e.setTubeMapColorBy)}]:[]]:[],...t&&e.chosenLayoutMode==="walkrows"&&e.repeatChoices.length>0?[{label:"Repeat",subMenu:ee(e.repeatOptions,e.selectedRepeat?.key??"",e.setRepeatKey)}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars?[{label:"Samples",subMenu:this.walkRowSampleMenuItems()},{type:"checkbox",label:"Ribbons between rows",checked:e.walkRibbons,onClick:()=>{e.setLayer("walkRibbons",!e.walkRibbons)}},{type:"checkbox",label:"Letter shared blocks",checked:e.layerSet.has("walkBlocks"),onClick:()=>{e.setLayer("walkBlocks",!e.layerSet.has("walkBlocks"))}},{type:"checkbox",label:"Order rows by shared sequence",checked:e.walkRowOrder==="shared",onClick:()=>{e.setWalkRowOrder(e.walkRowOrder==="shared"?void 0:"shared")}}]:[],...e.chosenLayoutMode==="walkrows"&&e.walkRowBars&&e.walkRowGroupFields.length>0?[{label:"Group by...",subMenu:this.walkRowGroupMenuItems()}]:[]]},showMenuItems(){let t=(o,r)=>({type:"checkbox",label:o,checked:e.layerSet.has(r),onClick:()=>{e.setLayer(r,!e.layerSet.has(r))}});return[t("Show bubble halos","bubbles"),t("Show deletion edges","deletions"),{label:"Hover highlight",subMenu:ee(Le.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:_n,disabled:e.figureUnavailable!==void 0,disabledHelpText:e.figureUnavailable,onClick:()=>{let t=e.figure();t&&ga(t,`${(e.graph?.name??"graph").replaceAll(/[^\w.-]+/g,"_")}.svg`)}}]},highlightMenuItems({picks:t=!0}={}){let o=t?e.walkChoices:[];if(e.walkChoices.length===0||!e.liftsWalks||!t&&e.walkLayers.length===0)return[];let r=a=>e.walkLayers.some(i=>i.walk===a),n=o.length>Rr;return[{type:"subHeader",label:"Highlight"},...n?[{label:"Choose haplotypes...",onClick:()=>{x(e).queueDialog(a=>[Sr,{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=>[xr,{model:e,onClose:a}])}}]:[],...e.walkLayers.length>1&&e.modeDrawsNodes?[{type:"subHeader",label:"Arrange"},...ee(gr.map(({value:a,label:i})=>({value:a,label:a==="walk"?"A panel per haplotype":i})),e.facetSetting.field,e.setFacet)]:[]]},colorSchemeLabel(t){let o=Pt.find(r=>r.value===t)?.label??t;return t==="auto"?`${o} (${this.colorSchemeLabel(e.effectiveColorScheme)})`:o},graphMenuItems(){let t=this.layoutOptionMenuItems(),o=Q(e.chosenLayoutMode),r=ha.find(([n])=>n===e.layoutEngine)[1];return[{label:`Layout: ${qt(o)}${o.value==="force"?` (${r})`:""}`,icon:On,subMenu:[...or.flatMap(n=>{let a={type:"radio",disabled:e.graph?!n.available(e.graph):!1,disabledHelpText:n.description};return n.value==="force"?ha.map(([i,s])=>({...a,label:`${qt(n)} (${s})`,checked:e.chosenLayoutMode===n.value&&e.layoutEngine===i,onClick:()=>{e.switchForceEngine(i)}})):[{...a,label:qt(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:Dn,disabled:e.colorSchemeLock!==void 0,disabledHelpText:e.colorSchemeLock?.why,subMenu:ee(Pt.map(({value:n})=>({value:n,label:this.colorSchemeLabel(n)})),e.chosenColorScheme,e.setColorScheme)},{label:"Show",icon:hr,subMenu:this.showMenuItems()}]},launchMenuItems(){let t=[],o=e.launchableAssemblies,r=e.graphRegion?.assemblyName;for(let n of kn({contributors:o,linearContributors:e.host?o.filter(a=>a.sample!==r):o,syntenyTracks:e.syntenyLaunchTracks,onShowLinear:a=>{e.showInLinearView(a)},onShowSynteny:a=>{e.showSyntenyView(a)}}))pt(t,n);return t}}));var dt=ba.views(e=>({get trackHaplotypes(){let t=e.sourceAdapter;return t&&Ie(t)}})).views(e=>({get cutHaplotypes(){return e.subgraphHaplotypes??e.trackHaplotypes},offReference(t){let o=e.sourceTrack,r=o&&ir(o),n=x(e);return r===void 0?void 0:pr(Ee(n,r),Ee(n,t.assemblyName))},cutChangedFrom(t){return e.cutsWholeWalks!==e.cutsWholeWalksIn(t)||t==="walkrows"!=(e.chosenLayoutMode==="walkrows")}})).views(e=>({get cutOptions(){return{hops:e.subgraphContext,haplotypes:e.cutHaplotypes,...e.chosenLayoutMode==="walkrows"?{walkRows:!0}:{},...e.cutsWholeWalks?{snarls:"overlapping"}:{},...e.expandedWalks.length>0?{expand:e.expandedWalks}:{}}}}));var ya={scale:["scale","type"],domain:["scale","domain"],range:["scale","range"],labels:["scale","names"],scheme:["scale","scheme"],reverse:["scale","reverse"],domainMin:["scale","domainMin"],domainMax:["scale","domainMax"],domainMid:["scale","domainMid"],domainQuantile:["scale","domainQuantile"],unknown:["scale","unknown"],title:["legend","title"],descending:["legend","descending"]};function Ti(e){return Object.entries(e).some(([t,o])=>t in ya&&!(t==="scale"&&B(o)))}function Kt(e){if(typeof e=="string")return{value:e};if(!B(e)||!Ti(e))return e;let t={},o={scale:{},legend:{}};for(let[r,n]of Object.entries(e)){let a=ya[r];!a||r==="scale"&&B(n)?t[r]=n:n!==void 0&&(o[a[0]][a[1]]=r==="scale"&&n==="categorical"?"ordinal":n)}for(let r of["scale","legend"])if(Object.keys(o[r]).length>0){let n=t[r];t[r]={...o[r],...B(n)?n:{}}}return t}var fa={color:e=>({encoding:{color:Kt(e)}})};function Qt(){return M.compose("GraphGenomeView",Wn,dt,M.model({type:M.literal("GraphGenomeView"),gfaLocation:M.maybe(M.frozen()),loadedRegion:M.maybe(M.frozen()),loadedTrackId:M.optional(M.string,""),layoutMode:Gt(Ue),color:M.maybe(M.frozen()),size:M.maybe(M.frozen()),layers:M.maybe(M.frozen()),facet:M.maybe(M.frozen()),rows:M.maybe(M.frozen()),hover:Gt(Le)})).preProcessSnapshot(e=>e.color===void 0?e:{...e,color:Kt(e.color)}).views(e=>({get grammar(){return{layoutMode:e.layoutMode,encoding:{color:e.color},size:e.size,layers:e.layers,facet:e.facet,rows:e.rows,hover:e.hover}}})).actions(e=>({writeGrammar({encoding:t,...o}){Object.assign(e,t?{...o,color:t.color}:o)}})).volatile(()=>({widthMeasured:!1})).actions(e=>{let t=e.setWidth;return{setWidth(o){t(o),e.widthMeasured=!0}}}).views(e=>({get rpcSessionId(){return e.id},get paneWidth(){return e.width},get paneMeasured(){return e.widthMeasured},get sourceTrack(){return e.loadedTrackId?e.sessionTrack(e.loadedTrackId):void 0},get canRetryLoad(){return e.gfaLocation!==void 0||e.loadedTrackId!==""&&e.loadedRegion!==void 0}})).views(e=>({get hasPendingSource(){return e.canRetryLoad&&!e.graph&&!e.loadCanceled},menuItems(){return[...e.exportMenuItems(),...e.launchMenuItems()]}})).actions(e=>{let t=e.clearGraph;function o(r){if(e.gfaLocation)return e.displayName||e.setDisplayName(de(e.gfaLocation)),e.loadGFAFromLocation(e.gfaLocation,r);if(!e.loadedTrackId||!r)return;let n=e.sourceAdapter,a=r.end-r.start,i=e.offReference(r);if(!n)e.setError(new Error(`The track this graph was cut from, "${e.loadedTrackId}", is not in this session`));else if(i)e.setError(new Error(i));else if(a>e.maxRegionBp)e.setError(new Error(`Region too large (${pe(a)}) \u2014 zoom in to view graph (max ${pe(e.maxRegionBp)})`));else return e.cutSubgraph(n,r,e.cutOptions)}return{clearGraph(){t(),e.gfaLocation&&e.displayName===de(e.gfaLocation)&&(e.displayName=void 0),e.gfaLocation=void 0,e.loadedRegion=void 0,e.loadedTrackId=""},load(){let r=e.loadedRegion,n=x(e),{assemblyManager:a}=n,i=r&&a.has(r.assemblyName)?a.get(r.assemblyName):void 0;return r&&i?.initialized===!1?a.waitForAssembly(r.assemblyName).catch(()=>{}).then(()=>e.loadedRegion===r?o(At(n,r)):void 0):o(r&&At(n,r))}}}).actions(e=>({retryLoad(){e.load()},setGfaLocation(t){e.gfaLocation=t},relayoutFrom(t){return e.loadedTrackId&&e.cutChangedFrom(t)?e.load():e.recomputeLayout()},async openGfaLocation(t){await e.loadGFAFromLocation(t),V(e)&&e.hasGraph&&(this.setGfaLocation(t),e.displayName||e.setDisplayName(de(t)))},afterAttach(){e.graph||e.load(),L(e,C(()=>e.walkStrip,t=>{e.loadedTrackId&&e.cutsWholeWalks!==e.cutsWholeWalksIn(e.chosenLayoutMode,!t)&&e.load()}))}}))}var Gi=jn()({});function Zt(e){e.addViewType(()=>new Vn({name:"GraphGenomeView",displayName:"Graph genome view",stateModel:Qt(),launchKeys:Gi,ReactComponent:oe(()=>import("./chunks/GraphGenomeView-667ZUNDI.js"))}))}var eo=["MultiWaySyntenyDisplay","LinearSyntenyDisplay","DotplotDisplay","ChordSyntenyDisplay"];function Li(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"),...eo.map(n=>r(o(n)))].filter(n=>n!==void 0)}function to(e){e.addTrackType(()=>{let t=W("GraphTrack",{},{baseConfiguration:En(e),explicitIdentifier:"trackId"}),o=new In({name:"GraphTrack",displayName:"Pangenome graph track",configSchema:t,stateModel:Fn(e,"GraphTrack",t)});for(let r of Li(e))o.addDisplayType(r);return o})}function oo(e){e.addToExtensionPoint("LaunchView-GraphGenomeView",t=>{let{session:o,...r}=t;return o.addView("GraphGenomeView",r),t})}var ct=JBrowseExports["@jbrowse/core/pluggableElementTypes/DisplayType"];var wa=ct&&ct.__esModule?ct.default:ct;var be=JBrowseExports["@jbrowse/display-kit/trackHeightConfigSchemaFields"],vi=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}),ka=vi("trackHeightConfigSchemaFields"),Gm=be&&be.__esModule?be.default:be;function Ma(){return W("LinearGraphDisplay",{layoutMode:{type:"stringEnum",model:M.enumeration("LayoutMode",Ue),defaultValue:"auto"},encoding:{type:"frozen",defaultValue:{},plot:!0},size:{type:"frozen",defaultValue:{field:"depth",value:6},plot:!0},layers:{type:"frozen",defaultValue:{},plot:!0},facet:{type:"frozen",defaultValue:{},plot:!0},rows:{type:"frozen",defaultValue:{},plot:!0},hover:{type:"stringEnum",model:M.enumeration("HoverHighlight",Le),defaultValue:"nodes"},...ka({defaultHeight:300,height:"the height of the track the graph is drawn in"})},{explicitlyTyped:!0,explicitIdentifier:"displayId",retired:fa})}var ye=JBrowseExports["@jbrowse/core/svg/svgReady"],Ai=e=>ye!=null&&e in Object(ye)?ye[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/core/svg/svgReady' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var Sa=Ai("computeSvgReady");var Fm=ye&&ye.__esModule?ye.default:ye;var ut=JBrowseExports["@jbrowse/display-kit/TrackHeightMixin"];var xa=ut&&ut.__esModule?ut.default:ut;var fe=JBrowseExports["@jbrowse/display-kit/plotMenu"],Pi=e=>fe!=null&&e in Object(fe)?fe[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/display-kit/plotMenu' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),Ra=Pi("editPlotMenuItems");var Vm=fe&&fe.__esModule?fe.default:fe;var we=JBrowseExports["@jbrowse/render-core/displayPhase"],Ta=e=>we!=null&&e in Object(we)?we[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/render-core/displayPhase' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e}),Ga=Ta("computeActivityPhase"),La=Ta("computeDisplayPhase");var Wm=we&&we.__esModule?we.default:we;function ro(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 Ci=new Set(["scale","translateX","translateY"]);function Bi(e){return Object.fromEntries(Object.keys(Pr.properties).filter(t=>!Ci.has(t)).map(t=>[t,e[t]]))}var no=10;function Ii(e){let{aboveBpPerPx:t,foldBelowBp:o}=e??{};return typeof t=="number"?t:typeof o=="number"&&o>0?o/no:void 0}var Ei=oe(()=>import("./chunks/GraphTrackSettingsDialog-7M3Q635V.js"));function va(e){return M.compose("LinearGraphDisplay",Cn,xa(),dt,M.model({type:M.literal("LinearGraphDisplay"),configuration:No(e),layoutEngine:rr(Qo,"stress"),cutRegion:M.maybe(M.frozen()),coarseCut:M.optional(M.boolean,!1)})).volatile(()=>({recuts:0,settledWindow:void 0,dense:void 0,haplotypeNames:void 0,cutFoldBp:0})).views(t=>({get grammar(){return{layoutMode:te(t,"layoutMode"),encoding:te(t,"encoding"),size:te(t,"size"),layers:te(t,"layers"),facet:te(t,"facet"),rows:te(t,"rows"),hover:te(t,"hover")}},get drawsGenomicCoordinates(){return t.layoutResult===void 0||t.hostPlacesX},get canvasHeight(){return t.height},get canRetryLoad(){return t.cutRegion!==void 0},get trackHaplotypes(){let o=t.sourceAdapter,r=t.sourceTrack;return(o&&Ie(o))??(r&&Lt(r))},get coarseAboveBpPerPx(){return Ii(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=no*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 Sa({error:t.error,regionTooLarge:t.regionTooLarge,extraTerminal:!1,fetchCanceled:t.loadCanceled},()=>!t.isLoading&&t.hasGraph&&!!t.layoutResult)}})).views(t=>({get displayPhase(){return La({renderError:t.renderError,regionTooLarge:t.regionTooLarge,error:t.error},()=>Ga({isMinimized:t.isMinimized,fetchInert:!1,viewportEmpty:t.host?.initialized===!0&&t.host.hasVisibleContent===!1,isLoading:t.isLoading||!t.hasGraph,fetchCanceled:t.loadCanceled,awaitingDependentData:!1,rendersCanvas:!0,canvasDrawn:t.painted},()=>!0,()=>t.host?.effectiveBodyMounted??!0))}})).actions(t=>({writeGrammar(o){for(let[r,n]of Object.entries(o))Vo(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(no*(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=cn(o,t.capFor(r),Q(t.chosenLayoutMode).cutMargins),t.recuts++,t.cut()}})).actions(t=>({settleOn(o){t.settledWindow=o;let r=Q(t.chosenLayoutMode).cutMargins;if(t.regionTooLarge||ro(t.dense,o)||!t.loadCanceled&&t.tierAt(o.bpPerPx)===t.cutTier&&un(t.cutRegion,o,r)&&!t.foldDrifted(o.bpPerPx))return!1;let n=t.recutAt(o),a=t.recuts;return Promise.resolve(n).then(()=>{V(t)&&t.recuts===a&&St(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?Re(t.host):void 0;return r&&!t.regionTooLarge&&(t.cutChangedFrom(o)||Q(o).cutMargins!==Q(t.chosenLayoutMode).cutMargins)?t.recutAt(r):t.recomputeLayout()},retryLoad(){t.cut()},reload(){t.cut()},cancelFetchByUser(){t.stopLoad()}})).actions(t=>({async fetchHaplotypeNames(o,r){try{let n=await x(t).rpcManager.call(ae(t),"GetGraphHaplotypes",{adapterConfig:o,signal:r});V(t)&&!r?.aborted&&t.setHaplotypeNames(n)}catch(n){r?.aborted||console.warn("[LinearGraphDisplay] no haplotype names",n)}}})).actions(t=>({stretchWithHost(o,r){let n=t.layoutBounds;if(!n||!t.followsHostView)return;t.viewportOwner==="fit"&&(t.viewportOwner="user");let a=o.bpPerPx/r.bpPerPx,i=t.translateY+t.scaleY*(n.minY+n.h/2);t.scale*=a,t.translateX=a*(t.translateX+o.offsetPx)-r.offsetPx,t.translateY=i-a*(i-t.translateY)}})).actions(t=>({forceLoad(){let o=t.settledWindow;o&&(t.setMaxRegionBp(Math.ceil(o.end-o.start)),t.settleOn(o))},afterAttach(){t.cutRegion&&!t.graph&&t.cut();let o;L(t,()=>{o?.abort()}),L(t,C(()=>{let n=t.sourceAdapter;return n&&nr(n)?n:void 0},n=>{o?.abort(),o=void 0,t.setHaplotypeNames(void 0),n&&(o=new AbortController,t.fetchHaplotypeNames(n,o.signal))},{fireImmediately:!0,equals:(n,a)=>JSON.stringify(n)===JSON.stringify(a),name:"GraphHaplotypeNames"})),L(t,C(()=>t.hostPlacesX,n=>{n||t.releaseHost()},{name:"GraphHostPlacesX"})),L(t,C(()=>t.hostFrame,n=>{n&&t.hostTransform(n.scale,n.translateX)},{equals:(n,a)=>n?.scale===a?.scale&&n?.translateX===a?.translateX,fireImmediately:!0,name:"GraphHostFrame"}));let r;L(t,C(()=>t.host&&!t.hostPlacesX?{bpPerPx:t.host.bpPerPx,offsetPx:t.host.offsetPx}:void 0,n=>{let a=r;r=n,n&&a&&n.bpPerPx>0&&t.stretchWithHost(a,n)},{equals:(n,a)=>n?.bpPerPx===a?.bpPerPx&&n?.offsetPx===a?.offsetPx,fireImmediately:!0,name:"GraphHostStretch"})),L(t,C(()=>`${t.facetSetting.field} ${t.facetPlacement?.count}`,()=>{let n=(t.facetGridIn(t.paneCeiling-Qe)?.total??0)+Qe;(t.facetGrid?.total??0)+Qe>t.height&&t.setHeight(Math.max(t.height,Math.ceil(n)))},{name:"GraphFacetHeight"})),L(t,C(()=>t.host?.coarseDynamicBlocks,n=>{let{host:a}=t,i=n&&a?Re(a):void 0;i&&t.settleOn(i)},{fireImmediately:!0,name:"GraphHostSettle"}))}})).views(t=>({get graphViewSpec(){let o=t.host?Re(t.host):void 0,r=t.sourceTrackId;if(!o||!r||!t.hasGraph||t.coarseCut||t.regionTooLarge||ro(t.dense,o))return;let n=Math.floor(o.start),a=Math.ceil(o.end),{encoding:i,...s}=t.grammar;return{...Bi(t),loadedTrackId:r,loadedRegion:{refName:o.refName,assemblyName:o.assemblyName,start:n,end:a},subgraphHaplotypes:t.cutHaplotypes,maxRegionBp:Math.max(t.maxRegionBp,a-n),...s,color:i?.color,layoutMode:t.chosenLayoutMode,connectedViewId:t.host?.id}}})).actions(t=>({openGraphView(){let o=t.graphViewSpec;o&&x(t).addView("GraphGenomeView",o)}})).views(t=>({cutMenuItems(){let o=t.sourceAdapter,r=t.sourceTrack;if(!o||!r||!ar(o))return[];let n=Ie(o),a=Lt(r),i=t.haplotypeNames,s=t.subgraphHaplotypes,p=c=>{t.setSubgraphHaplotypes(c),t.recut()};return[{type:"subHeader",label:"Load"},{type:"radio",label:i?`Every haplotype in the graph (${i.length.toLocaleString()})`:"Every haplotype in the graph",checked:s?s.length===0:!n&&!a,onClick:()=>{p([])}},...n||a?[{type:"radio",label:n?"The track's default haplotypes":`The track's ${a?.length} assemblies`,checked:s===void 0,onClick:()=>{p(void 0)}}]:[],{type:"radio",label:"Chosen in Graph settings...",checked:(s?.length??0)>0,onClick:()=>{this.openSettings()}}]},openSettings(){x(t).queueDialog(o=>[Ei,{model:t,onClose:o}])},async renderSvg(o){let{renderGraphTrackSvg:r}=await import("./chunks/renderSvg-YNA5VK6A.js");return r(t,o)},trackMenuItems(){let o=t.launchMenuItems();pt(o,{label:"Graph genome view",icon:tt,disabled:!t.graphViewSpec,disabledHelpText:t.error&&!St(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:Sn,subMenu:r}]:[],...t.graphMenuItems(),{label:"Graph settings...",icon:xn,helpText:"Subgraph, drawing and force-directed layout",onClick:()=>{this.openSettings()}},...o,...Ra(t)]}}))}function ao(e){e.addDisplayType(()=>{let t=Ma();return Object.assign(new wa({name:"LinearGraphDisplay",displayName:"Graph",configSchema:t,stateModel:va(t),trackType:["GraphTrack","FeatureTrack","SyntenyTrack"],viewType:"LinearGenomeView",ReactComponent:oe(()=>import("./chunks/LinearGraphDisplay-BAEMS5WG.js"))}),{adapterCapabilities:["getSubgraph"]})})}function Fi(e){let{uri:t,baseUri:o,csi:r}=e;return typeof t=="string"?{...e,bubblesLocation:{uri:t,baseUri:o},index:Pe(t,o,r)}:e}var Ni=W("MinigraphBubbleAdapter",{bubblesLocation:F("/path/to/graph.bb.bed.gz"),index:_("MinigraphBubbleIndex","/path/to/graph.bb.bed.gz.tbi"),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Fi}),Aa=Ni;function io(e){e.addAdapterType(()=>new Z({name:"MinigraphBubbleAdapter",displayName:"Minigraph bubble BED adapter",configSchema:Aa,adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/MinigraphBubbleAdapter-G25V6MZL.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:Pe(`${t}.segs.bed.gz`,o,r),linksLocation:{uri:`${t}.links.bed.gz`,baseUri:o},linksIndex:Pe(`${t}.links.bed.gz`,o,r)}:e}function Hi(e){let{coarse:t,baseUri:o,csi:r}=e;return Se(Pa(typeof t=="object"&&t!==null?{...e,coarse:Pa({baseUri:o,csi:r,...t})}:e))}var Vi=W("RgfaTabixCoarseTier",{aboveBpPerPx:{type:"maybeNumber"},foldBelowBp:{type:"maybeNumber"},segmentsLocation:F("/path/to/graph.tier.segs.bed.gz"),segmentsIndex:_("RgfaCoarseSegmentsIndex","/path/to/graph.tier.segs.bed.gz.tbi"),linksLocation:F("/path/to/graph.tier.links.bed.gz"),linksIndex:_("RgfaCoarseLinksIndex","/path/to/graph.tier.links.bed.gz.tbi")}),ji=W("RgfaTabixAdapter",{segmentsLocation:F("/path/to/graph.segs.bed.gz"),segmentsIndex:_("RgfaSegmentsIndex","/path/to/graph.segs.bed.gz.tbi"),linksLocation:F("/path/to/graph.links.bed.gz"),linksIndex:_("RgfaLinksIndex","/path/to/graph.links.bed.gz.tbi"),walksLocation:F(""),walksIndex:_("RgfaWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Me.stepBudget},walkByteBudget:{type:"integer",defaultValue:Me.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},assemblyNameToPanSN:{type:"frozen",defaultValue:{}},coarse:Vi},{explicitlyTyped:!0,preProcessSnapshot:Hi}),Ca=ji;function so(e){e.addAdapterType(()=>new Z({name:"RgfaTabixAdapter",displayName:"Indexed rGFA adapter",configSchema:Ca,adapterCapabilities:["getSubgraph"],adapterMetadata:{category:"Graph adapters"},getAdapterClass:()=>import("./chunks/RgfaTabixAdapter-JPTUWO2Z.js").then(t=>t.default)}))}var Wi=["LinearMultiSampleVariantDisplay"],Oi=[{label:"Auto",value:"auto"},{label:"50 bp",value:50},{label:"1 kb",value:1e3},{label:"10 kb",value:1e4}];function Di(e,t){return e?`Pinned to ${Ze(e)}${t===void 0?"":` \xB7 ${t} form${t===1?"":"s"}`}`:"Not pinned"}function _i(e,t){let o=x(e),r=t.flatMap(n=>n?[Gn(n)]:[]);for(let{message:n}of[...o.snackbarMessages??[]])r.some(a=>n.startsWith(a))&&o.removeSnackbarMessage?.(n)}function zi(e){return e.props({formsPinned:M.maybe(M.frozen()),formsFloorBp:M.maybe(M.frozen())}).views(t=>({get configuredAdapter(){return Ho(t.parentTrack.configuration,"adapter")},get walkForms(){return this.configuredAdapter.type==="WalkFormsAdapter"}})).views(t=>({get adapterConfig(){let o=t.configuredAdapter;return t.walkForms?{...o,...t.formsPinned?{pinned:t.formsPinned}:{},...t.formsFloorBp===void 0?{}:{floorBp:t.formsFloorBp}}:o},get formsWindow(){return Rn(this.adapterConfig.pinned)},get formsFloor(){return Tn(this.adapterConfig.floorBp)},get formsCount(){return t.sourcesBase?.reduce((o,r)=>o+(Number(r.forms)||1),0)},get visibleWindow(){let o=vo(t),r=dn(o)?Re(o):void 0;return r&&r.end>r.start?{refName:r.refName,start:Math.max(0,Math.floor(r.start)),end:Math.ceil(r.end)}:void 0}})).volatile(()=>({warnedWindow:void 0})).actions(t=>{let{setSources:o}=t,r=()=>{_i(t,[t.warnedWindow,t.formsWindow])};return{setFormsPinned(n){r(),t.formsPinned=n},setFormsFloorBp(n){r(),t.formsFloorBp=n},setSources(n,a){t.walkForms&&(r(),t.warnedWindow=t.formsWindow),o?.(n,a)}}}).views(t=>{let{trackMenuItems:o}=t;return{formsMenuItems(){let r=t.formsWindow,n=t.visibleWindow;return[{label:Di(r,t.formsCount),disabled:!0,onClick:()=>{}},{label:"Re-pin to visible region",helpText:"Cut the forms from the region the view shows. Panning and zooming leave the forms alone",disabled:!n||r!==void 0&&Ze(n)===Ze(r),onClick:()=>{n&&t.setFormsPinned(n)}},{label:"Hide changes under",subMenu:Oi.map(({label:a,value:i})=>({label:a,type:"radio",checked:t.formsFloor===i,onClick:()=>{t.setFormsFloorBp(i)}}))}]},trackMenuItems(){return t.walkForms?[...o(),...this.formsMenuItems()]:o()}}})}function po(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rt&&Wi.includes(t.name)&&t.extendStateModel(zi),t))}var $i=W("WalkFormsAdapter",{walksLocation:F("/path/to/graph.walks.bed.gz"),walksIndex:_("WalkFormsWalksIndex"),pinned:{type:"frozen",defaultValue:{}},floorBp:{type:"frozen",defaultValue:"auto"},exclude:{type:"stringArray",defaultValue:[]},maxForms:{type:"integer",defaultValue:Ln},walkByteBudget:{type:"integer",defaultValue:1e6}},{explicitlyTyped:!0,preProcessSnapshot:Se}),Ba=$i;function co(e){e.addAdapterType(()=>new Z({name:"WalkFormsAdapter",displayName:"Walk-file structural forms adapter",configSchema:Ba,adapterMetadata:{category:"Variant adapters"},getAdapterClass:()=>import("./chunks/WalkFormsAdapter-PBN7BJZW.js").then(t=>t.default)}))}var Ji=W("WalkTabixSyntenyAdapter",{assemblyNames:{type:"stringArray",defaultValue:[]},walksLocation:F("/path/to/graph.walks.bed.gz"),walksIndex:_("WalkTabixWalksIndex"),walkStepBudget:{type:"integer",defaultValue:Me.stepBudget},walkByteBudget:{type:"integer",defaultValue:Me.byteBudget},defaultHaplotypes:{type:"stringArray",defaultValue:[]},samplesTsvLocation:F(""),assemblyNameToPanSN:{type:"frozen",defaultValue:{}}},{explicitlyTyped:!0,preProcessSnapshot:Se}),Ia=Ji;function uo(e){e.addAdapterType(()=>new Z({name:"WalkTabixSyntenyAdapter",displayName:"Walk-indexed graph adapter",configSchema:Ia,adapterCapabilities:["getSubgraph","headerLanes","lanePairsOnAnchor","lanePairBatches"],adapterMetadata:{category:"Synteny adapters"},getAdapterClass:()=>import("./chunks/WalkTabixSyntenyAdapter-27WDE5JF.js").then(t=>t.default)}))}var Yi=new Set(["RgfaTabixAdapter","GbzBaseSyntenyAdapter"]);function Ui(e){return yt(e).toLowerCase().endsWith(".gbz.db")}function Xi(e){let t=e.adapter;return t?.type!==void 0&&mn.has(t.type)&&!t.assemblyNames?.length&&Array.isArray(e.assemblyNames)&&e.assemblyNames.length>0?{...e,adapter:{...t,assemblyNames:e.assemblyNames}}:e}function qi(e){let t=e.adapter,[o]=Array.isArray(e.assemblyNames)?e.assemblyNames:[],r=t?.type==="RgfaTabixAdapter"&&t.walksLocation?Wo(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=>Ko({choice:n,loc:e,indexLoc:t,assembly:"",sample:""});if((!o||o==="GbzBaseSyntenyAdapter")&&Ui(e))return r("GbzBaseSyntenyAdapter");if(!o||o==="RgfaTabixAdapter"){if(qo(e))return r("RgfaTabixAdapter");if(yt(e).endsWith(jo)&&(t!==void 0||_o(e)))return r("RgfaTabixWalks")}}function mo(e){e.addToExtensionPoint("Core-preProcessTrackConfig",Xi),e.addToExtensionPoint("Core-preProcessTrackConfig",qi),e.addToExtensionPoint("Core-guessAdapterForLocation",t=>(o,r,n)=>Ki(o,r,n)??t(o,r,n)),e.addToExtensionPoint("Core-guessTrackTypeForLocation",t=>(o,r)=>Yi.has(o)?"GraphTrack":t(o,r))}function lo(e){let t;if(B(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 Qi(e,t,o){let r=e.connectedViewId;return r===void 0||r===t||!o.has(r)}function Ea(e,t){return e.assemblyName===void 0||t===void 0||t.includes(e.assemblyName)}function Fa(e){return(Array.isArray(e.tracks)?e.tracks:[]).flatMap(o=>B(o)&&Array.isArray(o.displays)?o.displays.filter(r=>B(r)&&r.type==="LinearGraphDisplay"):[])}function Na(e,t,o){let r=[],n=xe(e),a=new Set(n.map(i=>B(i)?i.id:void 0));for(let i of n){if(B(i)&&i.id===t)for(let s of Fa(i)){let p=lo(s.hoverHighlight);p&&Ea(p,o)&&r.push({key:typeof s.id=="string"?s.id:"graph-track",region:p})}for(let s of B(i)?[...Fa(i),...i.type==="GraphGenomeView"?[i]:[]]:[])(Array.isArray(s.assemblyHoverHighlights)?s.assemblyHoverHighlights:[]).forEach((c,m)=>{let S=lo(c);S?.assemblyName!==void 0&&o?.includes(S.assemblyName)&&r.push({key:`${typeof s.id=="string"?s.id:"graph"}-${m}`,region:S})});if(B(i)&&i.type==="GraphGenomeView"&&Qi(i,t,a)){let s=lo(i.hoverHighlight);s&&Ea(s,o)&&r.push({key:typeof i.id=="string"?i.id:"graph",region:s})}}return r}var Zi=Mn()(e=>({highlight:{height:"100%",position:"absolute",background:Je(e.palette.primary.main,.08),borderLeft:`1px solid ${Je(e.palette.primary.main,.4)}`,borderRight:`1px solid ${Je(e.palette.primary.main,.4)}`,pointerEvents:"none",zIndex:10}})),es=Mt(function({model:t,region:o}){let{classes:r}=Zi(),n=t.getHighlightCoords(o);return n?E("div",{"data-testid":"graph-node-highlight",className:r.highlight,style:{left:n.left,width:n.width}}):null}),ts=Mt(function({model:t}){let{views:o}=x(t);return E(Bo,{children:Na([...o],t.id,t.assemblyNames).map(({key:r,region:n})=>E(es,{model:t,region:n},`graph-hover-${r}`))})}),Ha=ts;var os="LinearGenomeView-TracksContainerComponent";function go(e){e.contributeToExtensionPoint(os,({model:t})=>E(Ha,{model:t},"graphgenomeview-hover-highlight"))}function rs(e){return e.views(t=>({get adapterConfig(){return ln(t,t.parentTrack.configuration)}}))}function ho(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(t instanceof rt&&eo.includes(t.name)&&t.extendStateModel(rs),t))}var Va="GraphGenomeView";var ja="8.0.2";var bo=class extends vn{constructor(){super(...arguments);this.name=Va;this.version=ja}install(o){Zt(o),ao(o),to(o),oo(o),go(o),so(o),io(o),jt(o),uo(o),co(o),po(o),Ot(o),mo(o),ho(o),o.addRpcMethod(()=>new Oe(o)),o.addRpcMethod(()=>new We(o)),o.addRpcMethod(()=>new je(o)),o.addRpcMethod(()=>new Ve(o))}configure(o){try{Ao(o.rootModel)&&o.rootModel.appendToSubMenu(["Add"],{label:"Graph genome view",icon:tt,onClick:r=>{r.addView("GraphGenomeView",{})}})}catch(r){console.warn("[GraphGenomeView] could not add the Add menu entry",r)}}};export{bo as default};
|
|
9
9
|
//# sourceMappingURL=jbrowse-plugin-graphgenomeviewer.esm.js.map
|