jbrowse-plugin-graphgenomeviewer 6.2.0 → 6.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +4 -3
  2. package/dist/chunks/ChooseWalksDialog-L6QKOT7M.js +2 -0
  3. package/dist/chunks/ChooseWalksDialog-L6QKOT7M.js.map +7 -0
  4. package/dist/chunks/{GbzBaseSyntenyAdapter-TLI5IUU7.js → GbzBaseSyntenyAdapter-KVJKGGQ4.js} +2 -2
  5. package/dist/chunks/{GbzBaseSyntenyAdapter-TLI5IUU7.js.map → GbzBaseSyntenyAdapter-KVJKGGQ4.js.map} +1 -1
  6. package/dist/chunks/{GraphGenomeView-5OPCROMQ.js → GraphGenomeView-VIKLXNQD.js} +2 -2
  7. package/dist/chunks/{GraphGenomeView-5OPCROMQ.js.map → GraphGenomeView-VIKLXNQD.js.map} +1 -1
  8. package/dist/chunks/GraphTrackSettingsDialog-MRMSH2FO.js +4 -0
  9. package/dist/chunks/{GraphTrackSettingsDialog-FGLLUIEE.js.map → GraphTrackSettingsDialog-MRMSH2FO.js.map} +1 -1
  10. package/dist/chunks/HighlightColorDialog-SABW5OMB.js +2 -0
  11. package/dist/chunks/HighlightColorDialog-SABW5OMB.js.map +7 -0
  12. package/dist/chunks/LinearGraphDisplay-AHCKWNFJ.js +2 -0
  13. package/dist/chunks/{LinearGraphDisplay-NBJHGOYX.js.map → LinearGraphDisplay-AHCKWNFJ.js.map} +1 -1
  14. package/dist/chunks/{MinigraphBubbleAdapter-LQUIL3MD.js → MinigraphBubbleAdapter-CAXB5FGR.js} +2 -2
  15. package/dist/chunks/{RgfaTabixAdapter-3BFNY4SB.js → RgfaTabixAdapter-GYRNCGT2.js} +2 -2
  16. package/dist/chunks/{bandage-layout-3AR6BCUD-I6CCWYSR.js → bandage-layout-3AR6BCUD-PYYNJEGI.js} +1 -1
  17. package/dist/chunks/{bandage-layout-3AR6BCUD-I6CCWYSR.js.map → bandage-layout-3AR6BCUD-PYYNJEGI.js.map} +1 -1
  18. package/dist/chunks/{chunk-O5EHYU3Y.js → chunk-2SIR336R.js} +2 -2
  19. package/dist/chunks/chunk-2SL675KP.js +3 -0
  20. package/dist/chunks/{chunk-NGQRKSHY.js.map → chunk-2SL675KP.js.map} +3 -3
  21. package/dist/chunks/chunk-A6GKF63C.js +2 -0
  22. package/dist/chunks/{chunk-ZKLOV6MW.js.map → chunk-A6GKF63C.js.map} +2 -2
  23. package/dist/chunks/chunk-B7GF3TC3.js +2 -0
  24. package/dist/chunks/chunk-B7GF3TC3.js.map +7 -0
  25. package/dist/chunks/chunk-B7KMMGFB.js +2 -0
  26. package/dist/chunks/chunk-B7KMMGFB.js.map +7 -0
  27. package/dist/chunks/{chunk-X24J6VF4.js → chunk-DILFGQIL.js} +1 -1
  28. package/dist/chunks/{chunk-X24J6VF4.js.map → chunk-DILFGQIL.js.map} +1 -1
  29. package/dist/chunks/{chunk-7MWOPEIC.js → chunk-EHV7EUMI.js} +1 -1
  30. package/dist/chunks/{chunk-7MWOPEIC.js.map → chunk-EHV7EUMI.js.map} +1 -1
  31. package/dist/chunks/chunk-GMSOU6VO.js +2 -0
  32. package/dist/chunks/chunk-GMSOU6VO.js.map +7 -0
  33. package/dist/chunks/{chunk-EKMGHBWM.js → chunk-KRXALLQG.js} +1 -1
  34. package/dist/chunks/{chunk-EKMGHBWM.js.map → chunk-KRXALLQG.js.map} +1 -1
  35. package/dist/chunks/{chunk-F7V6ZPKD.js → chunk-MYJYGSOH.js} +1 -1
  36. package/dist/chunks/{chunk-F7V6ZPKD.js.map → chunk-MYJYGSOH.js.map} +1 -1
  37. package/dist/chunks/chunk-WTOQRUK2.js +2 -0
  38. package/dist/chunks/chunk-WTOQRUK2.js.map +7 -0
  39. package/dist/chunks/{chunk-JYZAMHIP.js → chunk-WUGRVNUJ.js} +2 -2
  40. package/dist/chunks/{chunk-JYZAMHIP.js.map → chunk-WUGRVNUJ.js.map} +1 -1
  41. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +6 -6
  42. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  43. package/package.json +2 -3
  44. package/src/GbzBaseSyntenyAdapter/configSchema.ts +1 -1
  45. package/src/GraphGenomeView/components/ChooseWalksDialog.tsx +6 -7
  46. package/src/GraphGenomeView/components/HighlightColorDialog.tsx +117 -0
  47. package/src/GraphGenomeView/components/TubeMapOverlay.tsx +1 -1
  48. package/src/GraphGenomeView/model.test.ts +107 -31
  49. package/src/GraphGenomeView/pane/fitViews.ts +8 -5
  50. package/src/GraphGenomeView/pane/graphViews.ts +11 -1
  51. package/src/GraphGenomeView/pane/hostViews.ts +1 -1
  52. package/src/GraphGenomeView/pane/keepInView.ts +62 -0
  53. package/src/GraphGenomeView/pane/launchActions.ts +159 -184
  54. package/src/GraphGenomeView/pane/loadActions.ts +3 -0
  55. package/src/GraphGenomeView/pane/paneBase.ts +9 -3
  56. package/src/GraphGenomeView/pane/renderingActions.ts +11 -1
  57. package/src/GraphGenomeView/pane/settingActions.ts +38 -0
  58. package/src/GraphGenomeView/renderPipeline.test.ts +4 -1
  59. package/src/GraphGenomeView/renderer/GraphRenderer.ts +2 -2
  60. package/src/GraphGenomeView/viewModel.ts +1 -1
  61. package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +12 -5
  62. package/src/LinearGraphDisplay/configSchema.ts +8 -0
  63. package/src/LinearGraphDisplay/model.ts +39 -33
  64. package/src/hoverSync/GraphNodeHighlight.tsx +3 -3
  65. package/src/version.ts +1 -1
  66. package/dist/chunks/ChooseWalksDialog-GVQLSGHX.js +0 -2
  67. package/dist/chunks/ChooseWalksDialog-GVQLSGHX.js.map +0 -7
  68. package/dist/chunks/GraphTrackSettingsDialog-FGLLUIEE.js +0 -4
  69. package/dist/chunks/LinearGraphDisplay-NBJHGOYX.js +0 -2
  70. package/dist/chunks/chunk-LZUNK4MQ.js +0 -2
  71. package/dist/chunks/chunk-LZUNK4MQ.js.map +0 -7
  72. package/dist/chunks/chunk-NGQRKSHY.js +0 -3
  73. package/dist/chunks/chunk-XWGKHQYO.js +0 -2
  74. package/dist/chunks/chunk-XWGKHQYO.js.map +0 -7
  75. package/dist/chunks/chunk-ZKLOV6MW.js +0 -2
  76. /package/dist/chunks/{MinigraphBubbleAdapter-LQUIL3MD.js.map → MinigraphBubbleAdapter-CAXB5FGR.js.map} +0 -0
  77. /package/dist/chunks/{RgfaTabixAdapter-3BFNY4SB.js.map → RgfaTabixAdapter-GYRNCGT2.js.map} +0 -0
  78. /package/dist/chunks/{chunk-O5EHYU3Y.js.map → chunk-2SIR336R.js.map} +0 -0
@@ -1,3 +0,0 @@
1
- import{a as Ft}from"./chunk-ZKLOV6MW.js";import{$ as yt,A as ht,Aa as Et,Ca as ze,Ea as De,Fa as It,Ga as xe,Ha as Gt,L as ye,M as mt,Ma as Tt,Na as Wt,Ra as Ht,Ta as Bt,U as ae,V as bt,X as ee,Z as wt,Za as _t,_ as vt,a as C,aa as kt,b as He,db as Nt,ea as ke,f as _e,fa as St,fb as At,g as Ne,ga as xt,gb as Ot,ha as Rt,ib as zt,ka as se,n as ct,nb as Re,ob as $e,qa as Mt,qb as Dt,r as ut,ra as Lt,rb as $t,s as ft,sa as Ct,ta as Pt,ua as Se,va as ue,wa as ie,xa as Ae,ya as Oe,z as de}from"./chunk-LZUNK4MQ.js";import{T as dt,b as X,d as we,fa as le,z as ve}from"./chunk-XWGKHQYO.js";import{b as gt}from"./chunk-EKMGHBWM.js";import{a as be}from"./chunk-FCWXYIFC.js";import{a as N}from"./chunk-J6KYLXRD.js";import{a as m,b as Be,c as M,d as Q}from"./chunk-TYJTJGPO.js";import{a as ko,b as s}from"./chunk-FY3BTKY4.js";var Vt=ko((ya,Yt)=>{Yt.exports=JBrowseExports["@jbrowse/render-core/useRenderingBackend"]});var We=s(N(),1);function Xt(t){return`${t.refName}:${(t.start+1).toLocaleString()}-${t.end.toLocaleString()}`}function Fe(t,e,n=o=>o){return e?{deletion:{bp:`${e.bp.toLocaleString()} bp`,where:Xt(e)}}:{ends:`${n(t.from)}${t.fromStrand??""} \u2192 ${n(t.to)}${t.toStrand??""}`}}var re=s(Be(),1),lt=s(be(),1),go=s(Vt(),1);var Kt=s(m(),1),Zt=(0,C.createSvgIcon)((0,Kt.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z"}),"Info");var _=s(M(),1);var Xe=s(M(),1);var T={background:"rgba(255,255,255,0.82)",padding:"4px 6px",borderRadius:3,fontSize:11,lineHeight:"15px",whiteSpace:"nowrap"},v={display:"flex",alignItems:"center",gap:5};var B=s(m(),1),So={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"hidden",zIndex:2},xo=(0,Xe.observer)(function({model:e}){let{bubbleHalos:n,walkLift:o,hoveredBubble:a}=e;if(n.length===0)return null;let{scaleX:r,scaleY:c,translateX:l,translateY:d,paneWidth:f,canvasHeight:u}=e,p=e.contigThickness*It,g=b=>o!==void 0&&!b.nodeIds.some(I=>o.nodeIds.has(I));return(0,B.jsx)("svg",{style:So,width:f,height:u,"data-testid":"graph-bubble-halos",children:(0,B.jsx)("g",{transform:`translate(${l} ${d}) scale(${r} ${c})`,children:n.filter(b=>!b.whole).map(b=>(0,B.jsx)("path",{d:b.path,fill:"none",stroke:ae[b.kind],strokeOpacity:a&&gt(b.bubble,a)?.45:g(b)?.06:.22,strokeWidth:p,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"},`${b.bubble.start}-${b.bubble.end}`))})})}),jt=xo;function Ro({color:t}){return(0,B.jsx)("svg",{width:18,height:10,style:{flex:"none"},children:(0,B.jsx)("line",{x1:5,y1:5,x2:13,y2:5,stroke:t,strokeOpacity:.35,strokeWidth:8,strokeLinecap:"round"})})}var Ut=(0,Xe.observer)(function({model:e}){let n=new Map;for(let o of e.bubbleHalos)if(!o.whole){let a=ae[o.kind],r=n.get(a)??new Set;r.add(bt[o.kind]),n.set(a,r)}return n.size>0?(0,B.jsx)("div",{style:T,"data-testid":"graph-halo-legend",children:[...n].map(([o,a])=>(0,B.jsxs)("div",{style:v,children:[(0,B.jsx)(Ro,{color:o}),(0,B.jsxs)("span",{children:["bubble: ",[...a].join(", ")]})]},o))}):null});var Le=s(N(),1);var Ce=s(He(),1),Ve=s(M(),1);var D=s(m(),1),te={width:18,height:8,borderRadius:2,flex:"none"},Mo={marginBottom:2},Lo={...te,width:48};function fe({walk:t,label:e,reference:n,hint:o,at:a}){let r=Et(t,n);return(0,D.jsxs)("div",{style:Mo,title:[r.hover,o].filter(Boolean).join(" \xB7 ")||void 0,children:[(0,D.jsxs)("div",{style:v,children:[(0,D.jsx)("div",{style:{...r.shades?Lo:te,background:ye(t.encoding)}}),(0,D.jsxs)("span",{children:[(0,D.jsx)("strong",{children:e}),r.delta,r.outside,r.reversed]})]}),a?(0,D.jsx)("div",{"data-testid":"graph-walk-at",children:a}):r.scale?(0,D.jsx)("div",{children:r.scale}):null]})}var A=s(N(),1);var Co=1.1,Po=100,Eo=40,Io=800,Go=10,qt=2;function Ye(t){let e=t.deltaY*(t.deltaMode===1?Eo:t.deltaMode===2?Io:1),n=(t.ctrlKey?Go:1)*e/Po;return Co**-Math.max(-qt,Math.min(qt,n))}var Jt=s(be(),1);function Me(t,e){(0,A.useEffect)(()=>{if(!t)return;let n=t;function o(a){if(e.hostPlacesX)return;e.host&&a.stopPropagation(),a.preventDefault();let r=n.getBoundingClientRect();e.zoom(Ye(a),a.clientX-r.left,a.clientY-r.top)}return n.addEventListener("wheel",o,{passive:!1}),()=>{n.removeEventListener("wheel",o)}},[t,e])}function Qt(t){let e=(0,A.useRef)({x:0,y:0}),n=(0,A.useRef)(!1),o=(0,A.useRef)({frame:0,pan:null,hover:null});(0,A.useEffect)(()=>()=>{cancelAnimationFrame(o.current.frame)},[]);let[a,r]=(0,A.useState)(void 0),[c,l]=(0,A.useState)(void 0);function d(h,k){return{x:(h-t.translateX)/t.scaleX,y:(k-t.translateY)/t.scaleY}}function f(h){let k=h.currentTarget.getBoundingClientRect();return d(h.clientX-k.left,h.clientY-k.top)}function u(h,k){let{nodePositions:R}=t,S=h*t.scaleX+t.translateX,H=k*t.scaleY+t.translateY;if(t.layoutResult?.tubeMap)return t.tubeMapNodeAt(S,H);let pt=t.referenceStripNodeAt(S,H);return pt||(R?ze(R,h,k,t.axisScale,t.positionsVersion,t.nodeInk):null)}function p(h){if(h.button===0){if(n.current=!1,t.hostPlacesX)return;t.host&&h.stopPropagation();let{x:k,y:R}=f(h),S=t.layoutResult?.tubeMap||h.nativeEvent.offsetY<t.referenceStripZonePx?null:u(k,R);S?t.setDraggingNode(S):t.setPanning(!0),e.current={x:h.clientX,y:h.clientY}}}function g(){let h=o.current;h.frame=0,h.pan&&(t.setTransform(t.scale,t.translateX+h.pan.dx,t.translateY+h.pan.dy),h.pan=null);let k=t.walkRowBars;if(h.hover&&k){let R=t.walkRowAt(h.hover.x,h.hover.y);t.setHoveredWalkRow(R===void 0?null:[k.reference,...k.rows][R].name)}if(h.hover&&t.nodePositions&&t.graph){let{x:R,y:S}=d(h.hover.x,h.hover.y);h.hover=null;let H=u(R,S);t.setHoveredNode(H),t.setHoveredEdge(H||t.layoutResult?.tubeMap?null:De(t.nodePositions,t.graph,R,S,t.axisScale,t.effectiveDrawPaths&&!t.facetPanels,t.positionsVersion,t.deletionEdgeIndexes,t.hiddenEdgeIndexes,t.deletionRoutes,t.layoutResult?.stranded))}}function b(){o.current.frame||(o.current.frame=requestAnimationFrame(g))}function I(){let h=o.current;cancelAnimationFrame(h.frame),h.frame=0,h.pan=null,h.hover=null}function E(h){let k=h.clientX-e.current.x,R=h.clientY-e.current.y;e.current={x:h.clientX,y:h.clientY},(Math.abs(k)>1||Math.abs(R)>1)&&(n.current=!0);let S=o.current;if(t.draggingNode)t.moveNode(t.draggingNode,k/t.scaleX,R/t.scaleY);else if(t.isPanning)S.pan={dx:(S.pan?.dx??0)+k,dy:(S.pan?.dy??0)+R},b();else{let H=h.currentTarget.getBoundingClientRect();S.hover={x:h.clientX-H.left,y:h.clientY-H.top},b()}}function G(){t.stopDragging()}function ge(){I(),(0,Jt.isAlive)(t)&&(t.stopDragging(),t.setHoveredNode(null),t.setHoveredEdge(null),t.setHoveredWalkRow(null))}function vo(h){let{x:k,y:R}=f(h),S=u(k,R);if(S){h.preventDefault(),r({nodeId:S,top:h.clientY,left:h.clientX});return}let H=t.walkRowAt(k*t.scaleX+t.translateX,R*t.scaleY+t.translateY);H!==void 0&&(h.preventDefault(),l({row:H,top:h.clientY,left:h.clientX}))}function yo(h){if(!n.current){let{x:k,y:R}=f(h),S=u(k,R);t.setSelectedNode(S),S&&t.showNodeDetails(S)}}return{handlers:{onMouseDown:p,onMouseMove:E,onMouseUp:G,onMouseLeave:ge,onClick:yo,onContextMenu:vo},contextNode:a,contextRow:c,closeContextMenu:()=>{r(void 0),l(void 0)}}}var Y=s(m(),1),To={position:"absolute",left:0,top:0,zIndex:4,display:"grid",gap:ut,lineHeight:"normal"},Wo={height:ft,padding:"2px 6px",boxSizing:"border-box",fontFamily:"inherit",fontSize:11,color:"inherit",cursor:"pointer",border:"none",background:"none",textAlign:"left",display:"block"},Ho=(0,Ve.observer)(function({model:e,lift:n,width:o,height:a,cell:r,handlers:c}){let[l,d]=(0,Le.useState)(null),f=n.walks[0];Me(l,e),(0,Le.useEffect)(()=>{if(!l)return;let p=new ue(l);p.resize(o,a);let g=(0,Ce.computed)(()=>e.buildDrawing(n,!1)),b,I=(0,Ce.autorun)(()=>{let E=g.get();E&&(E!==b&&(p.uploadGeometry(E.batch),b=E),e.applyHighlights(p),e.paint(p))});return()=>{I(),p.dispose()}},[l,e,n,o,a]);let u=e.walkLabel(f.name);return(0,Y.jsxs)("div",{style:r,children:[(0,Y.jsx)("button",{type:"button",style:Wo,"data-testid":"graph-facet-title",onClick:()=>{e.liftWalks([f.name]),e.setFacet("")},children:(0,Y.jsx)(fe,{walk:f,label:u,reference:e.walkReference,hint:`click to lift ${u} alone`,at:e.hoveredOn(f)})}),(0,Y.jsx)("canvas",{ref:d,"data-testid":"graph-facet-canvas",style:{width:o,height:a,display:"block",cursor:e.isPanning||e.draggingNode?"grabbing":"grab"},...c})]})}),Bo=(0,Ve.observer)(function({model:e,handlers:n}){let o=e.facetPanels,a=e.facetGrid,r=e.facetPlacement;if(!o||!a||!r)return null;let{columns:c,width:l,height:d}=a;return(0,Y.jsx)("div",{"data-testid":"graph-facet-panels",style:{...To,width:e.paneWidth,minHeight:e.canvasHeight,gridTemplateColumns:`repeat(${c}, ${l}px)`,background:e.darkMode?"#1f1f1f":"white"},children:o.map((f,u)=>(0,Y.jsx)(Ho,{model:e,lift:f,width:l,height:d,cell:{gridRow:Math.floor(r.cells[u]/c)+1,gridColumn:r.cells[u]%c+1},handlers:n},f.walks[0].name))})}),en=Bo;var on=s(N(),1);var rn=s(M(),1);var tn=s(N(),1);function _o(t){return t==="class"?"className":/^(data|aria)-/.test(t)?t:t.replace(/-([a-z])/g,(e,n)=>n.toUpperCase())}function nn(t,e){if(typeof t=="string")return t;let n={key:e};for(let[o,a]of Object.entries(t.attrs))a!==void 0&&(n[_o(o)]=a);return(0,tn.createElement)(t.tag,n,...t.children.map(nn))}function $({el:t}){return nn(t,0)}var Ke=s(m(),1),No={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"hidden",zIndex:2},Ao=(0,rn.observer)(function({model:e}){let n=`exon-outline-${(0,on.useId)().replaceAll(/[^\w-]/g,"")}`,{genePins:o,walkLift:a,nodeInk:r}=e,{scaleX:c,scaleY:l,translateX:d,translateY:f,paneWidth:u,canvasHeight:p}=e,g=Oe(Ae(o,r.halfWidthPx,a),{id:n,width:u,height:p,transform:`translate(${d} ${f}) scale(${c} ${l})`});return g?(0,Ke.jsx)("svg",{style:No,width:u,height:p,"data-testid":"graph-gene-pins",children:(0,Ke.jsx)($,{el:g})}):null}),an=Ao;var sn=s(m(),1),ln=(0,C.createSvgIcon)((0,sn.jsx)("path",{d:"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2m2 10H3v4c0 1.1.9 2 2 2h4v-2H5zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2"}),"CropFree");var Ze=s(m(),1),pn=(0,C.createSvgIcon)([(0,Ze.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"},"0"),(0,Ze.jsx)("path",{d:"M12 10h-2v2H9v-2H7V9h2V7h1v2h2z"},"1")],"ZoomIn");var cn=s(m(),1),dn=(0,C.createSvgIcon)((0,cn.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z"}),"ZoomOut");var z=s(Q(),1),Je=s(M(),1),Bn=s(le(),1);var V=s(Q(),1),un=s(M(),1),fn=s(le(),1),pe=s(m(),1),Oo=(0,fn.makeStyles)()({formControl:{minWidth:100}}),zo=(0,un.observer)(function({model:e}){let{classes:n}=Oo(),o=e.colorSchemeLock;return(0,pe.jsxs)(V.FormControl,{size:"small",className:n.formControl,disabled:o!==void 0,title:o?.why,children:[(0,pe.jsx)(V.InputLabel,{children:"Color"}),(0,pe.jsx)(V.Select,{value:e.chosenColorScheme,label:"Color",renderValue:o?()=>o.value:void 0,onChange:a=>{e.setColorScheme(a.target.value)},children:dt.map(({value:a,label:r})=>(0,pe.jsx)(V.MenuItem,{value:a,children:r},a))})]})}),hn=zo;var Ue=s(Q(),1),qe=s(M(),1),mn=s(le(),1),ce=s(m(),1),gn=(0,mn.makeStyles)()({stats:{marginLeft:"auto"},perf:{color:"#888",fontVariantNumeric:"tabular-nums"}});function je(t){return t===void 0?"\u2013":`${Math.round(t)}ms`}var Do=(0,qe.observer)(function({model:e}){let{classes:n}=gn(),{lastFetchMs:o,lastLayoutMs:a,lastGeometryMs:r}=e,c=o!==void 0||a!==void 0||r!==void 0;return e.showPerf&&c?(0,ce.jsxs)(Ue.Typography,{variant:"caption",className:n.perf,"data-testid":"graph-perf-stats",children:["fetch ",je(o)," \xB7 layout ",je(a)," \xB7 geom"," ",je(r)]}):null}),$o=(0,qe.observer)(function({model:e}){let{classes:n}=gn();return(0,ce.jsxs)("div",{className:n.stats,"data-testid":"graph-stats","data-node-count":e.nodeCount,"data-edge-count":e.edgeCount,"data-path-count":e.pathCount,"data-fetch-ms":e.lastFetchMs??"","data-layout-ms":e.lastLayoutMs??"","data-geometry-ms":e.lastGeometryMs??"","data-geometry-strokes":e.lastGeometryStrokeCount??"",children:[(0,ce.jsxs)(Ue.Typography,{variant:"body2",component:"span",children:[e.nodeCount," nodes, ",e.edgeCount," edges",e.pathCount>0?`, ${e.pathCount} paths`:""]})," ",(0,ce.jsx)(Do,{model:e})]})}),bn=$o;var O=s(Q(),1),wn=s(M(),1),vn=s(le(),1),K=s(m(),1),Fo=(0,vn.makeStyles)()({formControl:{minWidth:150}}),Xo=(0,wn.observer)(function({model:e}){let{classes:n}=Fo(),{graph:o}=e;return(0,K.jsxs)(O.FormControl,{size:"small",className:n.formControl,children:[(0,K.jsx)(O.InputLabel,{children:"Layout"}),(0,K.jsx)(O.Select,{value:e.chosenLayoutMode,label:"Layout","data-testid":"graph-layout-select",onChange:a=>{e.switchLayout(a.target.value)},children:ct.map(({value:a,label:r,description:c,available:l})=>(0,K.jsx)(O.MenuItem,{value:a,disabled:o?!l(o):!1,children:(0,K.jsx)(O.Tooltip,{title:c,placement:"right",children:(0,K.jsx)("span",{children:r})})},a))})]})}),yn=Xo;var F=s(Q(),1),kn=s(M(),1),Sn=s(le(),1),Z=s(m(),1),Yo=(0,Sn.makeStyles)()({formControl:{minWidth:130,maxWidth:240}}),Vo=(0,kn.observer)(function({model:e}){let{classes:n}=Yo(),{repeatChoices:o}=e;if(e.chosenLayoutMode!=="walkrows"||o.length===0)return null;let a=new Set(o.map(r=>r.key));return(0,Z.jsxs)(F.FormControl,{size:"small",className:n.formControl,children:[(0,Z.jsx)(F.InputLabel,{children:"Repeat"}),(0,Z.jsxs)(F.Select,{value:a.has(e.repeatKey)?e.repeatKey:"",label:"Repeat","data-testid":"graph-repeat-select",onChange:r=>{e.setRepeatKey(r.target.value)},children:[(0,Z.jsx)(F.MenuItem,{value:"",children:(0,Z.jsx)("em",{children:"Whole window"})}),o.map(({key:r,name:c,unit:l})=>(0,Z.jsxs)(F.MenuItem,{value:r,children:[c," \xB7 ",l.toLocaleString()," bp unit"]},r))]})]})}),xn=Vo;var Pn=s(N(),1),En=s(Be(),1);var Rn=s(m(),1),Mn=(0,C.createSvgIcon)((0,Rn.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z"}),"Delete");var Ln=s(m(),1),Cn=(0,C.createSvgIcon)((0,Ln.jsx)("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2"}),"MoreVert");var In=s(M(),1);var j=s(m(),1),Ko=(0,In.observer)(function({model:e}){let[n,o]=(0,Pn.useState)(!1);return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(En.CascadingMenuButton,{size:"small",menuItems:[{type:"checkbox",label:"Linear layout",checked:e.linearLayout,onClick:()=>{e.setLinearLayout(!e.linearLayout),e.recomputeLayout()}},{type:"checkbox",label:"Show deletion edges",checked:e.showDeletionEdges,onClick:()=>{e.toggleDeletionEdges()}},{type:"checkbox",label:"Show timings",checked:e.showPerf,onClick:()=>{e.setShowPerf(!e.showPerf)}},{type:"divider"},{label:"Settings",icon:$t,onClick:()=>{o(!0)}},{type:"divider"},{label:"Return to import form",icon:Mn,onClick:()=>{e.clearGraph()}}],children:(0,j.jsx)(Cn,{})}),(0,j.jsx)(Ft,{model:e,open:n,onClose:()=>{o(!1)}})]})}),Gn=Ko;var W=s(Q(),1),Tn=s(M(),1),Wn=s(le(),1),U=s(m(),1),Zo=(0,Wn.makeStyles)()({formControl:{minWidth:130,maxWidth:260}}),jo=(0,Tn.observer)(function({model:e}){let{classes:n}=Zo(),{walkChoices:o}=e;if(o.length===0||!e.liftsWalks)return null;let a=new Set(o.map(l=>l.name)),r=new Map(o.map(l=>[l.name,l.label])),c=e.walkLayers.map(l=>l.walk).filter(l=>a.has(l));return(0,U.jsxs)(W.FormControl,{size:"small",className:n.formControl,children:[(0,U.jsx)(W.InputLabel,{children:"Walks"}),(0,U.jsx)(W.Select,{multiple:!0,value:c,label:"Walks","data-testid":"graph-walk-select",renderValue:l=>l.map(d=>r.get(d)).join(", "),onChange:l=>{let{value:d}=l.target;e.liftWalks(typeof d=="string"?d.split(","):d)},children:o.map(({name:l,label:d})=>(0,U.jsxs)(W.MenuItem,{value:l,dense:!0,children:[(0,U.jsx)(W.Checkbox,{size:"small",checked:c.includes(l)}),(0,U.jsx)(W.ListItemText,{primary:d})]},l))})]})}),Hn=jo;var x=s(m(),1),Uo=(0,Bn.makeStyles)()({toolbar:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #ddd"}}),qo=(0,Je.observer)(function({model:e}){return(0,x.jsx)(z.Typography,{variant:"body2",children:e.zoomPercent})}),Jo=(0,Je.observer)(function({model:e}){let{classes:n}=Uo();return(0,x.jsxs)("div",{className:n.toolbar,children:[(0,x.jsx)(yn,{model:e}),(0,x.jsx)(hn,{model:e}),(0,x.jsx)(Hn,{model:e}),(0,x.jsx)(xn,{model:e}),(0,x.jsx)(z.Tooltip,{title:"Zoom in",children:(0,x.jsx)(z.IconButton,{size:"small",onClick:()=>{e.zoom(1.5,e.viewBox.width/2,e.viewBox.height/2)},children:(0,x.jsx)(pn,{})})}),(0,x.jsx)(z.Tooltip,{title:"Zoom out",children:(0,x.jsx)(z.IconButton,{size:"small",onClick:()=>{e.zoom(1/1.5,e.viewBox.width/2,e.viewBox.height/2)},children:(0,x.jsx)(dn,{})})}),(0,x.jsx)(z.Tooltip,{title:"Zoom to fit",children:(0,x.jsx)(z.IconButton,{size:"small",onClick:()=>{e.zoomToFit()},children:(0,x.jsx)(ln,{})})}),(0,x.jsx)(qo,{model:e}),(0,x.jsx)(bn,{model:e}),(0,x.jsx)(Gn,{model:e})]})}),_n=Jo;var An=s(be(),1),On=s(M(),1);var ne=s(m(),1);function he({x:t,y:e,w:n,text:o,note:a,color:r,edge:c=r,italic:l,small:d,dimmed:f,title:u,testId:p,onClick:g,onHover:b}){return(0,ne.jsxs)("g",{style:{pointerEvents:g||b?"auto":"none",cursor:g?"pointer":void 0,opacity:f?.35:1},"data-testid":p,onClick:g,onMouseEnter:()=>{b?.(!0)},onMouseLeave:()=>{b?.(!1)},children:[u?(0,ne.jsx)("title",{children:u}):null,(0,ne.jsx)("rect",{x:t-n/2,y:e-X-we+2,width:n,height:X+we*2-2,rx:3,fill:"rgba(255,255,255,0.85)",stroke:c,strokeWidth:d?.6:1}),(0,ne.jsxs)("text",{x:t,y:e,fontSize:d?X-1:X,fontFamily:"sans-serif",fontStyle:l?"italic":void 0,fontWeight:l?600:void 0,fill:r,textAnchor:"middle",children:[o,a?(0,ne.jsx)("tspan",{fontStyle:"normal",fontWeight:"normal",children:a}):null]})]})}var q=s(m(),1),Qo={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"hidden",zIndex:3},Nn="#1c1c22",er=(0,On.observer)(function({model:e}){let{bubbles:n,genes:o,routes:a}=e.overlayLabels;if(n.length+o.length+a.length===0)return null;let{walkLift:r,scaleY:c,translateY:l,contigThickness:d}=e,f=p=>r!==void 0&&!p.nodeIds.some(g=>r.nodeIds.has(g)),u=p=>r!==void 0&&!p.route.walks.some(g=>r.names.has(g));return(0,q.jsxs)("svg",{style:Qo,width:e.paneWidth,height:e.canvasHeight,"data-testid":"graph-label-layer",children:[o.map(({item:p,x:g,y:b,w:I,text:E})=>{let{gene:G}=p,ge=Gt(p);return(0,q.jsxs)("g",{children:[(0,q.jsx)("line",{x1:g,x2:g,y1:b-X-2,y2:p.at.y*c+l+d/2,stroke:Nn,strokeWidth:.8,strokeOpacity:.6}),(0,q.jsx)(he,{x:g,y:b,w:I,text:G.name,note:E.slice(G.name.length)||void 0,color:Nn,edge:ie,italic:!0,title:`${G.name} ${G.refName}:${G.start.toLocaleString()}-${G.end.toLocaleString()}${ge?`, ${ge} in the cut`:""}`,testId:"graph-gene-pin-label"})]},`${G.name}-${G.start}`)}),a.map(({item:{halo:p,route:g},x:b,y:I,w:E,text:G})=>(0,q.jsx)(he,{x:b,y:I,w:E,text:G,color:ae[p.kind],small:!0,dimmed:u(g),title:`${g.route.walks.length} walk(s): ${g.route.walks.join(", ")}`,testId:"graph-route-label"},`${p.bubble.start}-${p.bubble.end}-${g.route.steps.join(",")}`)),n.map(({item:p,x:g,y:b,w:I,text:E})=>(0,q.jsx)(he,{x:g,y:b,w:I,text:E,color:ae[p.kind],dimmed:f(p),title:`${p.label}
2
- ${p.bubble.segmentCount} segments \xB7 click to open`,testId:"graph-bubble-halo-label",onClick:()=>{e.popBubble(p.bubble)},onHover:G=>{(0,An.isAlive)(e)&&e.setHoveredBubble(G?p.bubble:null)}},`${p.bubble.start}-${p.bubble.end}`))]})}),zn=er;var Pe=s(N(),1);var $n=s(He(),1),Qe=s(M(),1);var L=s(m(),1),tr={position:"absolute",left:0,top:0,pointerEvents:"none",zIndex:5},nr=(0,Qe.observer)(function({model:e}){let n=(0,Pe.useRef)(null),{referenceStripShown:o,paneWidth:a,canvasHeight:r}=e;return(0,Pe.useEffect)(()=>(0,$n.autorun)(()=>{let c=n.current,l=e.referenceStripFrame,d=c?.getContext("2d");if(c&&d&&l&&e.referenceStripShown){let f=Se(),u=e.paneWidth,p=e.canvasHeight;c.width=Math.round(u*f),c.height=Math.round(p*f),d.setTransform(f,0,0,f,0,0),d.clearRect(0,0,u,p),Nt(d,e.referenceStripBlocks,l,{width:u,lit:e.referenceStripLit,darkMode:e.darkMode,dpr:f})}}),[e]),(0,L.jsx)("canvas",{ref:n,"data-testid":o?"graph-reference-strip":void 0,style:{...tr,width:a,height:r,display:o?"block":"none"}})}),Fn=nr,Xn=18,or="linear-gradient(to right, hsl(0, 70%, 50%) 0 33%, hsl(120, 70%, 50%) 33% 61%, hsl(240, 70%, 50%) 61%)",rr=6;function ar(t){let e=t.filter((a,r)=>a!==t[r-1]),n=Math.min(rr,e.length),o=Array.from({length:n},(a,r)=>e[n>1?Math.round(r*(e.length-1)/(n-1)):0]);return o.length>1?`linear-gradient(to right, ${o.join(", ")})`:o[0]??de}function Dn({rows:t}){return(0,L.jsx)("div",{style:{width:Xn,flex:"none"},children:t.map(({key:e,background:n})=>(0,L.jsx)("div",{style:{height:t.length>1?3:4,background:n}},e))})}function sr(t){return t.walkLift?.walks.map(e=>({key:e.name,background:ye(e.encoding)}))??[{key:"scheme",background:t.effectiveColorScheme==="reference-position"?or:ar(t.referenceStripBlocks.map(e=>e.colors[0]))}]}function ir(){return(0,L.jsx)("svg",{width:Xn,height:10,style:{flex:"none"},children:(0,L.jsx)("path",{d:"M0,5 L8,0 L8,10 Z M18,5 L10,0 L10,10 Z",fill:"#18181c"})})}var Yn=(0,Qe.observer)(function({model:e}){let n=(e.walkLift?.walks.length??0)>1;return e.referenceStripShown?(0,L.jsxs)("div",{style:T,"data-testid":"graph-reference-strip-legend",children:[(0,L.jsxs)("div",{style:v,children:[(0,L.jsx)(Dn,{rows:sr(e)}),(0,L.jsxs)("span",{children:["top strip: reference segments at their bp",n?", a row per walk":""]})]}),e.referenceStripFaded?(0,L.jsxs)("div",{style:v,children:[(0,L.jsx)(Dn,{rows:[{key:"pale",background:de}]}),(0,L.jsxs)("span",{children:["reference not on"," ",n?"that row's walk":e.liftedWalksLabel]})]}):null,e.referenceStripOverhangs?(0,L.jsxs)("div",{style:v,children:[(0,L.jsx)(ir,{}),(0,L.jsx)("span",{children:"the graph draws reference past this edge"})]}):null]}):null});var Ie=s(N(),1);var Kn=s(He(),1),tt=s(M(),1);var w=s(m(),1),lr={position:"absolute",left:0,top:0,pointerEvents:"none",zIndex:1},pr=(0,tt.observer)(function({model:e}){let n=(0,Ie.useRef)(null),{tubeMapPicture:o,paneWidth:a,canvasHeight:r}=e;return(0,Ie.useEffect)(()=>(0,Kn.autorun)(()=>{let c=n.current,l=e.tubeMapPicture,d=e.tubeMapFrame,f=c?.getContext("2d");if(c&&f&&l&&d){let u=Se(),p=e.paneWidth,g=e.canvasHeight;c.width=Math.round(p*u),c.height=Math.round(g*u),f.setTransform(u,0,0,u,0,0),f.clearRect(0,0,p,g);let b={...d,width:p,highlightNode:e.hoveredNode??e.selectedNode,darkMode:e.darkMode,tubeColors:e.tubeMapTubeColors,nodeColors:e.tubeMapNodeColors};Bt(f,l,b),Ot(f,e.tubeMapDeviations,b),Ht(f,e.tubeMapConnectors,e.connectorZoneBottom,b);let{bounds:I}=l;_t(f,e.tubeMapGenes,b,d.y(I.minY)-2);let E=e.tubeMapRulerBoxes;E&&Wt(f,E,b,d.y(I.maxY)+4,e.layoutResult?.referenceAxis)}}),[e]),(0,w.jsx)("canvas",{ref:n,"data-testid":o?"graph-tube-map":void 0,style:{...lr,width:a,height:r,display:o?"block":"none"}})}),Zn=pr,Ee=18;function cr(){let t=[[.5,5.5],[8.5,Ee-.5]];return(0,w.jsx)("svg",{width:Ee,height:7,style:{flex:"none"},children:(0,w.jsx)("path",{d:t.map(([e,n])=>`M${e},6 V1.5 H${n} V6`).join(" "),fill:"none",stroke:Tt(),strokeWidth:1})})}var nt={width:Ee,height:7,flex:"none"},dr={...nt,display:"flex",justifyContent:"center",backgroundColor:"#b8b8c0"};function ur(){return(0,w.jsx)("div",{style:dr,children:(0,w.jsx)("div",{style:{width:2,backgroundColor:At()}})})}function Vn({colors:t}){let e=100/t.length,n=t.map((o,a)=>`${o} ${a*e}% ${(a+1)*e}%`);return(0,w.jsx)("div",{style:{...nt,background:`linear-gradient(to right, ${n.join(", ")})`}})}var et={width:Ee,flex:"none",textAlign:"center",fontFamily:"monospace",fontSize:12};function fr(){return(0,w.jsx)("div",{style:{...nt,backgroundColor:"grey"}})}function J({swatch:t,children:e}){return(0,w.jsxs)("div",{style:v,children:[t,(0,w.jsx)("span",{children:e})]})}var jn=(0,tt.observer)(function({model:e}){let{logWidths:n,foldBp:o,forwardReads:a,reverseReads:r,mismatches:c}=e.tubeMapKeys,l=e.readsShown,d=l&&l.shown<l.total?l:void 0,f=[a&&(0,w.jsx)(J,{swatch:(0,w.jsx)(Vn,{colors:_e}),children:"read on the forward strand"},"fwd"),r&&(0,w.jsx)(J,{swatch:(0,w.jsx)(Vn,{colors:Ne}),children:"read on the reverse strand"},"rev"),d&&(0,w.jsxs)(J,{swatch:(0,w.jsx)("span",{style:et}),children:[d.shown.toLocaleString("en-US")," of"," ",d.total.toLocaleString("en-US")," reads shown"]},"sampled"),c.has("substitution")&&(0,w.jsx)(J,{swatch:(0,w.jsx)("span",{style:et,children:"A"}),children:"a read's base unlike the node's"},"sub"),c.has("insertion")&&(0,w.jsx)(J,{swatch:(0,w.jsx)("span",{style:et,children:"*"}),children:"bases a read inserts"},"ins"),c.has("deletion")&&(0,w.jsx)(J,{swatch:(0,w.jsx)(fr,{}),children:"bases a read skips"},"del"),o!==void 0&&(0,w.jsxs)(J,{swatch:(0,w.jsx)(ur,{}),children:["a haplotype's variant under ",ve(o)]},"fold"),n&&(0,w.jsx)(J,{swatch:(0,w.jsx)(cr,{}),children:"width grows with log of length"},"log")].filter(Boolean);return f.length>0?(0,w.jsx)("div",{style:T,"data-testid":"graph-tube-map-legend",children:f}):null});var Un=s(Q(),1),qn=s(M(),1),Qn=s(m(),1),hr={position:"absolute",left:8,zIndex:5,background:"rgba(255,255,255,0.9)",textTransform:"none"},mr=(0,qn.observer)(function({model:e}){let{poppedFrom:n}=e;return n?(0,Qn.jsxs)(Un.Button,{size:"small",variant:"outlined",style:{...hr,...e.facetPanels?{bottom:8}:{top:8}},"data-testid":"graph-unpop-bubble",onClick:()=>{e.unpopBubble()},children:["\u25C0 Back to ",n.label]}):null}),Jn=mr;var ro=s(Be(),1);var eo=s(m(),1),to=(0,C.createSvgIcon)((0,eo.jsx)("path",{d:"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"}),"FilterList");var no=s(m(),1),oo=(0,C.createSvgIcon)((0,no.jsx)("path",{d:"M10.83 8H21V6H8.83zm5 5H18v-2h-4.17zM14 16.83V18h-4v-2h3.17l-3-3H6v-2h2.17l-3-3H3V6h.17L1.39 4.22 2.8 2.81l18.38 18.38-1.41 1.41z"}),"FilterListOff");var ao=s(M(),1);var so=s(m(),1),Ge=(0,ao.observer)(function({model:e,row:n,bars:o,top:a,left:r,onClose:c}){let l=o??e.walkRowBars,d=e.walkRowLaunchTarget(n,l),f=d?.assembly,u=n>0?l?.rows[n-1]?.sample:void 0,p=!o&&e.walkRowBars,g=e.walkRowSamples;return(0,so.jsx)(ro.Menu,{open:!0,anchorReference:"anchorPosition",anchorPosition:{top:a,left:r},onClose:()=>{c()},onMenuItemClick:b=>{b()},menuItems:[d&&f?{label:`Linear genome view \u2014 ${f} ${Re(d.location)}`,icon:$e,onClick:()=>{e.showInLinearView({location:d.location,assembly:f})}}:{label:"Linear genome view",icon:$e,disabled:!0,disabledHelpText:d?`No assembly in this session is ${d.location.haplotype??d.label}`:"This walk states no contig coordinates",onClick:()=>{}},...p&&u&&!(g?.length===1&&g[0]===u)?[{label:`Show only ${u}`,icon:to,onClick:()=>{e.setWalkRowSamples([u])}}]:[],...p&&g?[{label:"Show every sample",icon:oo,onClick:()=>{e.setWalkRowSamples(void 0)}}]:[]]})});var io=s(N(),1);var rt=s(M(),1);var y=s(m(),1),br={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible",zIndex:3},Te={width:18,height:vt-4,borderRadius:2},wr={...Te,display:"flex",justifyContent:"center"};function ot({color:t}){return(0,y.jsx)("div",{style:wr,children:(0,y.jsx)("div",{style:{width:2,backgroundColor:t}})})}function at({swatch:t}){return t.kind==="gene"?(0,y.jsx)("div",{style:{...Te,boxSizing:"border-box",border:`1.5px solid ${wt}`,borderRadius:0}}):(0,y.jsx)("div",{style:{...Te,height:t.kind==="gap"?yt:Te.height,background:t.fill}})}var lo=(0,rt.observer)(function({model:e}){let n=e.walkRowBars;if(!n)return null;let o=[n.reference,...n.rows].flatMap(r=>r.call??[]),a=ke(n,{ramp:e.referenceRampDomain,rampCss:ee,genes:e.walkRowGeneKey});return(0,y.jsxs)("div",{style:T,"data-testid":"graph-walk-rows-legend",children:[a.map(r=>r.note?(0,y.jsx)("div",{style:{color:"#666",fontStyle:"italic"},children:r.label},r.label):(0,y.jsxs)("div",{style:v,children:[(0,y.jsx)(at,{swatch:r.swatch}),(0,y.jsx)("span",{children:r.label})]},r.label)),o.some(r=>r.spanningReads!==0)?(0,y.jsxs)("div",{style:v,children:[(0,y.jsx)(ot,{color:St}),(0,y.jsx)("span",{children:"allele length called for this walk"})]}):null,o.some(r=>r.spanningReads===0)?(0,y.jsxs)("div",{style:v,children:[(0,y.jsx)(ot,{color:xt}),(0,y.jsx)("span",{children:"called with no read spanning it"})]}):null,o.some(r=>r.agrees===!1)?(0,y.jsxs)("div",{style:v,children:[(0,y.jsx)(ot,{color:Rt}),(0,y.jsxs)("span",{children:["walk and call over ",Math.round(.1*100),"% apart"]})]}):null]})});function vr(t,e,n,o,a){return e.length===0?[se(t,o,a)]:[se({...t,rows:[]},o,a),...e.flatMap((r,c)=>se({...t,rows:t.rows.slice(r.first-1,r.first-1+r.count)},{...o,translateY:o.translateY+(n(r.first)-o.rowPx)*o.scaleY},{...a,idPrefix:`${a.idPrefix}-s${c}`}).children.filter(d=>typeof d!="string"&&d.attrs["data-testid"]!=="graph-walk-reference"))]}var yr=(0,rt.observer)(function({model:e}){let n=(0,io.useId)().replace(/[^\w-]/g,""),o=e.walkRowBars,a=e.walkRowPlacement,r=e.walkRowPitch;if(!o||!a||!r)return null;let{paneWidth:c,canvasHeight:l}=e,d=g=>g*e.scaleY+e.translateY,f=e.hoveredWalkRowText?[o.reference,...o.rows].findIndex(g=>g.name===e.hoveredWalkRow):-1,u=f>=0?[o.reference,...o.rows][f]:void 0,p={scaleX:e.scaleX,scaleY:e.scaleY,translateX:e.translateX,translateY:e.translateY,width:c,height:l,...r};return(0,y.jsxs)("svg",{style:br,width:c,height:l,"data-testid":"graph-walk-rows",children:[vr(o,e.walkRowGroups?.sections??[],a.rowY,p,{ramp:e.referenceRampDomain,rowGenes:e.walkRowGenes,idPrefix:n}).map((g,b)=>(0,y.jsx)($,{el:g},b)),a.headers.map(g=>(0,y.jsx)("text",{x:10,y:d(g.top)+mt-4,fontFamily:"sans-serif",fontSize:11,fontWeight:"bold",fill:"#333","data-testid":"graph-walk-section",children:g.title},g.key)),u?(0,y.jsx)("rect",{"data-testid":"graph-walk-row-hovered",x:o.origin*e.scaleX+e.translateX-2,y:d(a.rowY(f))-r.rowPx/2-1,width:u.bp*e.scaleX+4,height:r.rowPx+2,fill:"none",stroke:"#111",strokeWidth:1}):null]})}),po=yr;var oe=s(N(),1);var co=s(be(),1),st=s(M(),1);var P=s(m(),1),kr={display:"flex",flexWrap:"wrap",gap:"2px 14px",padding:"2px 8px 6px",fontSize:11,color:"#333"},Sr={position:"absolute",pointerEvents:"none",background:"rgba(255,255,255,0.92)",border:"1px solid #ccc",borderRadius:3,padding:"1px 6px",fontSize:11,whiteSpace:"nowrap",zIndex:4},xr=(0,st.observer)(function({bars:e,frame:n,ramp:o,rowGenes:a}){let r=(0,oe.useId)().replace(/[^\w-]/g,""),c=(0,oe.useMemo)(()=>se(e,n,{ramp:o,rowGenes:a,idPrefix:r}),[e,n,o,a,r]);return(0,P.jsx)($,{el:c})}),Rr=(0,st.observer)(function({model:e}){let n=e.walkStripRows,o=e.walkStripFrame,[a,r]=(0,oe.useState)(void 0),[c,l]=(0,oe.useState)(void 0);if(!n||!o)return null;let d=u=>{let p=u.currentTarget.getBoundingClientRect(),g=u.clientX-p.left,b=u.clientY-p.top;return{...Mt(n,o,g,b),x:g,y:b}},f=ke(n,{ramp:e.referenceRampDomain,rampCss:ee,genes:Pt(o,e.walkRowGenes,e.walkRowGeneGaps)});return(0,P.jsxs)("div",{"data-testid":"graph-walk-strip",style:{position:"relative",borderTop:"1px solid #ddd"},onMouseEnter:()=>{e.setPointerInPane(!0)},onMouseLeave:()=>{(0,co.isAlive)(e)&&(e.setPointerInPane(!1),e.setStripHover(null)),l(void 0)},children:[(0,P.jsxs)("svg",{width:o.width,height:o.height,style:{display:"block",cursor:"pointer"},onMouseMove:u=>{let p=d(u);p.row?(e.setStripHover({row:p.row.name,offset:p.offset}),l(o.labelled?void 0:{text:`${p.row.label} \xB7 ${kt(p.row,p.index===0?void 0:n.reference)}`,x:p.x,y:p.y})):(e.setStripHover(null),l(void 0))},onClick:u=>{let p=d(u);p.row&&p.index>0&&e.toggleWalk(p.row.name)},onContextMenu:u=>{let p=d(u);p.row&&(u.preventDefault(),r({row:p.index,top:u.clientY,left:u.clientX}))},children:[(0,P.jsx)(xr,{bars:n,frame:o,ramp:e.referenceRampDomain,rowGenes:e.walkRowGenes}),(0,P.jsx)($,{el:Lt(n,o,e.walkStripMarks)}),(0,P.jsx)($,{el:Ct(n,o,new Set(e.walkLayers.map(u=>u.walk)))})]}),c?(0,P.jsx)("div",{style:{...Sr,left:c.x+12,top:c.y-18},children:c.text}):null,(0,P.jsxs)("div",{style:kr,"data-testid":"graph-walk-strip-key",children:[f.map(u=>(0,P.jsxs)("div",{style:v,children:[(0,P.jsx)(at,{swatch:u.swatch}),(0,P.jsx)("span",{children:u.label})]},u.label)),(0,P.jsx)("div",{style:v,children:(0,P.jsx)("span",{children:"\u25AE ticks: where each walk passes the node under the pointer \xB7 click a bar to lift its walk"})})]}),a?(0,P.jsx)(Ge,{model:e,row:a.row,bars:n,top:a.top,left:a.left,onClose:()=>{r(void 0)}}):null]})}),uo=Rr;var fo=s(M(),1),me=s(m(),1),Mr={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible",zIndex:4},Lr=(0,fo.observer)(function({model:e}){let n=e.walkStripLocator;return n?(0,me.jsxs)("svg",{style:Mr,width:e.paneWidth,height:e.canvasHeight,"data-testid":"graph-walk-strip-locator",children:[(0,me.jsx)("circle",{cx:n.x,cy:n.y,r:11,fill:"none",stroke:"white",strokeWidth:4}),(0,me.jsx)("circle",{cx:n.x,cy:n.y,r:11,fill:"none",stroke:"#111",strokeWidth:1.75})]}):null}),ho=Lr;function mo(t){return Promise.resolve(new ue(t))}var i=s(m(),1),it={position:"absolute",bottom:8,right:8,background:"rgba(0,0,0,0.75)",color:"white",padding:"4px 8px",borderRadius:4,fontSize:12,pointerEvents:"none",zIndex:6},Cr={position:"relative"},Pr={position:"relative",lineHeight:0,isolation:"isolate"},Er={position:"absolute",left:0,right:0,bottom:0,zIndex:0},Ir={position:"absolute",inset:0,zIndex:10,lineHeight:"normal",pointerEvents:"none"},Gr={position:"absolute",left:6,transform:"translateY(-50%)",background:"rgba(255,255,255,0.82)",padding:"0 4px",borderRadius:3,fontSize:11,lineHeight:"16px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:4},Tr=(0,_.observer)(function({model:e}){let n=e.drawnRowLabels;return(0,i.jsx)(i.Fragment,{children:n.map(({label:o,y:a})=>{let r=a*e.scaleY+e.translateY;return r>=0&&r<=e.canvasHeight?(0,i.jsx)("div",{"data-testid":"graph-row-label",style:{...Gr,top:r},children:o},a):null})})}),Wr={position:"absolute",top:xe,right:xe,display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4,pointerEvents:"none",zIndex:4},Hr={width:18,height:3,borderRadius:2},Br=(0,_.observer)(function({model:e}){let{pathLegend:n}=e;return n.length>0?(0,i.jsx)("div",{style:T,"data-testid":"graph-path-legend",children:n.map(({name:o,label:a,color:r})=>(0,i.jsxs)("div",{style:v,children:[(0,i.jsx)("div",{style:{...Hr,backgroundColor:r}}),(0,i.jsx)("span",{children:a})]},o))}):null}),_r=(0,_.observer)(function({model:e}){let n=e.walkLift;return n?(0,i.jsxs)("div",{style:T,"data-testid":"graph-walk-readout",children:[n.walks.map(o=>(0,i.jsx)(fe,{walk:o,label:e.walkLabel(o.name),reference:e.walkReference,at:e.hoveredOn(o)},o.name)),e.liftPaintsOffReference?(0,i.jsx)(bo,{}):null,(0,i.jsxs)("div",{style:v,children:[(0,i.jsx)("div",{style:{...te,background:de}}),(0,i.jsxs)("span",{children:["not on ",e.liftedWalksLabel]})]})]}):null}),Nr={minWidth:90,height:8,borderRadius:2,background:ee},Ar={display:"flex",justifyContent:"space-between",gap:8},Or=(0,_.observer)(function({model:e}){let n=e.walkLift?void 0:e.referenceRampDomain,{offReference:o,unplaced:a}=e.referenceRampOffKeys,r=Math.round(n?.start??0),c=Math.round(n?.end??0);return n?(0,i.jsxs)("div",{style:T,"data-testid":"graph-ramp-legend",children:[(0,i.jsx)("div",{style:Nr}),(0,i.jsxs)("div",{style:Ar,children:[(0,i.jsx)("span",{children:r.toLocaleString()}),(0,i.jsxs)("span",{children:["(",ve(c-r),")"]}),(0,i.jsx)("span",{children:c.toLocaleString()})]}),o?(0,i.jsx)(bo,{}):null,a?(0,i.jsxs)("div",{style:v,children:[(0,i.jsx)("div",{style:{...te,background:zr}}),(0,i.jsx)("span",{children:"no reference position"})]}):null]}):null}),zr="rgb(160, 160, 160)";function bo(){return(0,i.jsxs)("div",{style:v,children:[(0,i.jsx)("div",{style:{...te,background:ht}}),(0,i.jsx)("span",{children:"off the reference"})]})}var Dr={...te,border:`2px solid ${ie}`,borderRadius:5,boxSizing:"border-box"},$r=(0,_.observer)(function({model:e}){return e.genePins.some(n=>n.exonsByNode.length>0)?(0,i.jsx)("div",{style:T,"data-testid":"graph-gene-legend",children:(0,i.jsxs)("div",{style:v,children:[(0,i.jsx)("div",{style:Dr}),(0,i.jsx)("span",{children:"exon"})]})}):null}),wo={position:"absolute",transform:"translate(-50%, -50%)",background:"rgba(255,255,255,0.78)",padding:"0 3px",borderRadius:3,fontSize:10,lineHeight:"13px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:3},Fr={...wo,color:"#18181c",fontWeight:600},Xr={position:"absolute",left:0,top:0,pointerEvents:"none",overflow:"visible",zIndex:2},Yr=(0,_.observer)(function({model:e}){let n=(0,We.useRef)(null);return(0,We.useEffect)(()=>{let o=n.current;if(!o)return;let a=new ResizeObserver(()=>{(0,lt.isAlive)(e)&&e.hoveredNode===null&&e.setLegendSize({width:o.offsetWidth,height:o.offsetHeight})});return a.observe(o),()=>{a.disconnect()}},[e]),(0,i.jsxs)("div",{ref:n,style:{...Wr,top:xe+e.referenceStripZonePx},children:[(0,i.jsx)(Or,{model:e}),(0,i.jsx)(Yn,{model:e}),(0,i.jsx)(Ut,{model:e}),(0,i.jsx)($r,{model:e}),(0,i.jsx)(Br,{model:e}),(0,i.jsx)(jn,{model:e}),(0,i.jsx)(lo,{model:e}),(0,i.jsx)(_r,{model:e})]})}),Vr=(0,_.observer)(function({model:e}){let n=e.overlayLabels.sizes,o=n.flatMap(({key:a,leader:r})=>r?[{key:a,...r}]:[]);return(0,i.jsxs)(i.Fragment,{children:[o.length>0?(0,i.jsx)("svg",{style:Xr,width:e.paneWidth,height:e.canvasHeight,children:o.map(({key:a,arcX:r,arcY:c,labelX:l,labelY:d})=>(0,i.jsx)("line",{"data-testid":"graph-label-leader",x1:r,y1:c,x2:l,y2:d,stroke:"#18181c",strokeWidth:1},a))}):null,n.map(({key:a,text:r,x:c,y:l,kind:d})=>(0,i.jsx)("div",{"data-testid":"graph-size-label",style:{...d==="deletion"?Fr:wo,left:c,top:l},children:r},a))]})}),Kr=(0,_.observer)(function({model:e}){let n=e.hoveredNode?e.nodeById?.get(e.hoveredNode):null,o=e.hoveredEdge!==null&&e.graph?e.graph.edges[e.hoveredEdge]:null,a=n?zt(n):void 0,r=o?Fe(o,e.deletions.find(l=>l.edgeIndex===e.hoveredEdge),l=>e.nodeById?.get(l)?.name??l):void 0,c=e.hoveredWalkRowText;return(0,i.jsxs)(i.Fragment,{children:[c&&!n?(0,i.jsxs)("div",{style:it,"data-testid":"graph-walk-row-tooltip",children:[(0,i.jsx)("strong",{children:c.label})," \u2014 ",c.readout]}):null,n?(0,i.jsxs)("div",{style:it,children:[(0,i.jsx)("strong",{children:n.name})," \u2014"," ",n.length.toLocaleString()," bp, depth"," ",n.depth.toFixed(1),a?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("br",{}),a.sample," ",Re(a)," (rank"," ",n.stable?.rank,")"]}):null]}):null,r?(0,i.jsx)("div",{style:it,children:r.deletion?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("strong",{children:"Deletion"})," ",r.deletion.bp,(0,i.jsx)("br",{}),r.deletion.where]}):(0,i.jsxs)(i.Fragment,{children:["Edge: ",r.ends]})}):null]})}),Zr=(0,_.observer)(function({model:e,nodeId:n,top:o,left:a,onClose:r}){let{own:c,reference:l,highlight:d}=e.nodeLaunchTargets(n);return(0,i.jsx)(re.Menu,{open:!0,anchorReference:"anchorPosition",anchorPosition:{top:o,left:a},onClose:()=>{r()},onMenuItemClick:f=>{f()},menuItems:[{label:"Node details",icon:Zt,onClick:()=>{e.showNodeDetails(n)}},...Dt({own:c,reference:l,highlight:d,onShowLinear:f=>{e.showInLinearView(f)},onHighlight:e.canHighlightInLinearView?f=>{e.highlightInLinearView(f)}:void 0})]})}),jr=(0,_.observer)(function({model:e,ownChrome:n=!0}){let{canvasRef:o,canvas:a,error:r,retry:c}=(0,go.useRenderingBackend)(mo,e),{handlers:l,contextNode:d,contextRow:f,closeContextMenu:u}=Qt(e);Me(a,e);let p=e.facetPanels!==void 0;return(0,i.jsxs)("div",{style:Cr,children:[n?(0,i.jsx)(_n,{model:e}):null,(0,i.jsxs)("div",{style:Pr,onMouseEnter:()=>{e.setPointerInPane(!0)},onMouseLeave:()=>{(0,lt.isAlive)(e)&&e.setPointerInPane(!1)},children:[e.referenceStripShown?(0,i.jsx)("div",{style:{...Er,top:e.referenceStripZonePx,background:e.paperCss}}):null,(0,i.jsx)("canvas",{ref:o,"data-testid":"graph-genome-canvas",style:{width:e.paneWidth,height:e.canvasHeight,cursor:e.isPanning||e.draggingNode?"grabbing":"grab",display:"block",position:"relative",zIndex:1},...l}),p?(0,i.jsx)(en,{model:e,handlers:l}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(Zn,{model:e}),(0,i.jsx)(Fn,{model:e}),(0,i.jsx)(Tr,{model:e}),(0,i.jsx)(Vr,{model:e}),(0,i.jsx)(jt,{model:e}),(0,i.jsx)(an,{model:e}),(0,i.jsx)(zn,{model:e}),(0,i.jsx)(po,{model:e}),(0,i.jsx)(ho,{model:e}),(0,i.jsx)(Yr,{model:e})]}),(0,i.jsx)(Jn,{model:e}),n?(0,i.jsx)("div",{style:Ir,children:(0,i.jsx)(re.LoadingOverlay,{isVisible:e.isLoading,immediate:!e.layoutResult,statusMessage:e.statusMessage,onCancel:e.canCancelLoad?()=>{e.cancelLoad()}:void 0})}):null]}),e.walkStripShown?(0,i.jsx)(uo,{model:e}):null,(0,i.jsx)(Kr,{model:e}),d?(0,i.jsx)(Zr,{model:e,nodeId:d.nodeId,top:d.top,left:d.left,onClose:u}):null,f?(0,i.jsx)(Ge,{model:e,row:f.row,top:f.top,left:f.left,onClose:u}):null,r?(0,i.jsx)(re.ErrorBanner,{error:r,onReset:c}):null,n&&e.error?(0,i.jsx)(re.ErrorBanner,{error:e.error,onReset:e.canRetryLoad?()=>{e.retryLoad()}:void 0}):null]})}),Pl=jr;export{Pl as a};
3
- //# sourceMappingURL=chunk-NGQRKSHY.js.map
@@ -1,2 +0,0 @@
1
- import{a as pt,c as H,h as xt}from"./chunk-F7V6ZPKD.js";import{a as dt,b as ht}from"./chunk-X24J6VF4.js";import{a as fn}from"./chunk-FY3BTKY4.js";var Me=fn((Ro,sn)=>{sn.exports=JBrowseExports["tss-react/mui"]});var yt=11,dn=6.2,U=4;function hn(t){return t.length*dn+U*2}function pn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function mt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function xn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function yn(t,n=[]){let e=[...n];return o=>mt(o,t)||e.some(a=>pn(a,o))?!1:(e.push(o),!0)}function ve(t,n,e){let o=[],a=yt+U*2,r=(s,c)=>{let i=hn(c),l=s.y>n.height/2?-1:1;for(let f=0;f<=(s.stack??0);f++){let y=s.y+l*f*a,p={x0:s.x-i/2,x1:s.x+i/2,y0:y-yt-U,y1:y+U};if(mt(p,n))return;if(xn(p,n)&&(s.fits?.(p)??!0)&&e(p))return{...s,text:c,y,w:i}}};for(let s of t){let c=r(s,s.text)??(s.fallback===void 0?void 0:r(s,s.fallback));c&&o.push(c)}return o}var bt=20;function we(t){let n=e=>Math.round(e*100)/100;return t.map((e,o)=>`${o?"L":"M"}${n(e.x)},${n(e.y)}`).join("")}function gt(t,n,e,o,a){let r=Math.hypot(o-n,e-t);if(r===0)return[e,o];let s=(e-t)/r,c=(o-n)/r;return[e+a*s,o+a*c]}function Z(t,n){let e=1-n,o=e*e*e,a=3*e*e*n,r=3*e*n*n,s=n*n*n;return{x:o*t.x0+a*t.cx0+r*t.cx1+s*t.x1,y:o*t.y0+a*t.cy0+r*t.cy1+s*t.y1}}function Nt(t){let n=t[Math.floor(t.length/2)];return n?Z(n,.5):void 0}function Ot(t){let n=1/0,e=1/0,o=-1/0,a=-1/0;for(let r of t)n=Math.min(n,r.x0,r.cx0,r.cx1,r.x1),o=Math.max(o,r.x0,r.cx0,r.cx1,r.x1),e=Math.min(e,r.y0,r.cy0,r.cy1,r.y1),a=Math.max(a,r.y0,r.cy0,r.cy1,r.y1);return{minX:n,minY:e,maxX:o,maxY:a}}function mn(t,n,e){let o=Z(t,n),a=Z(t,e),r=(e-n)/3,s=Mt(t,n),c=Mt(t,e);return{x0:o.x,y0:o.y,cx0:o.x+s.x*r,cy0:o.y+s.y*r,cx1:a.x-c.x*r,cy1:a.y-c.y*r,x1:a.x,y1:a.y}}function Mt(t,n){let e=1-n,o=3*e*e,a=6*e*n,r=3*n*n;return{x:o*(t.cx0-t.x0)+a*(t.cx1-t.cx0)+r*(t.x1-t.cx1),y:o*(t.cy0-t.y0)+a*(t.cy1-t.cy0)+r*(t.y1-t.cy1)}}function _e(t,n){let e=t.map(s=>Math.hypot(s.cx0-s.x0,s.cy0-s.y0)+Math.hypot(s.cx1-s.cx0,s.cy1-s.cy0)+Math.hypot(s.x1-s.cx1,s.y1-s.cy1)),o=e.reduce((s,c)=>s+c,0),a=Math.max(3,Math.round(o/n)|1),r=[];for(let s=0;s<a;s+=2){let c=s/a*o,i=(s+1)/a*o,l=[],f=0;t.forEach((y,p)=>{let u=e[p],x=f+u;u>0&&x>c&&f<i&&l.push(mn(y,Math.max(0,(c-f)/u),Math.min(1,(i-f)/u))),f=x}),l.length&&r.push(l)}return r}function Ne(t,n,e){let o=new Array(t.length);for(let a=0;a<t.length;a++){let r=t[a];o[a]={x0:r.x0+n,y0:r.y0+e,cx0:r.cx0+n,cy0:r.cy0+e,cx1:r.cx1+n,cy1:r.cy1+e,x1:r.x1+n,y1:r.y1+e}}return o}function D(t,n){let e=t.length-1;return n==="end"?{at:t[e],inward:t[e-1]}:{at:t[0],inward:t[1]}}var bn=.5,gn=80;function F(t){return t.endsWith("-")?"-":"+"}function G(t){let n=(e,o)=>(o??F(e))===F(e);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function vt(t){let n=1/0,e=-1/0;for(let o of t)n=Math.min(n,o.x),e=Math.max(e,o.x);return{min:n,max:e}}function At(t,n){return Math.max(0,n.min-t,t-n.max)}function Et(t,n,e){let o=At(t[0].x,n),a=At(t[t.length-1].x,n);return o===a?e:o<a?"start":"end"}function Mn(t,n){return{from:Et(t,vt(n),"end"),to:Et(n,vt(t),"start")}}var Lt=new WeakMap;function vn(t,n){let e=Lt.get(t);e||(e=new WeakMap,Lt.set(t,e));let o=e.get(n);return o||(o=Mn(t,n),e.set(n,o)),o}var An=.75,En=1.15,Ln=.35,wn=3*bt;function _n(t,n,e,o,a,r){let s=Math.hypot(e-t,o-n),c=s===0?1:(e-t)/s,i=s===0?0:(o-n)/s,l=0,f=1/0,y=-1/0;for(let d of a){let h=d.x-t,b=d.y-n,m=h*-i+b*c;Math.abs(m)>Math.abs(l)&&(l=m);let g=h*c+b*i;f=Math.min(f,g),y=Math.max(y,g)}let p=a.length?y-f:0,u=Math.max(Math.abs(l)*En/An,p*Ln),x=r===void 0?u:Math.min(u,r);return l<0?-x:x}function St({scaleX:t,scaleY:n}){return n/t}var Nn=3;function K(t,n,e){let o=n.x-t.x,a=(n.y-t.y)*e,r=Math.hypot(o,a);return r===0?void 0:{x:o/r,y:a/r}}function Oe(t,n,e,o,a=Nn){let r=St(o),s=K(t[t.length-1],n[0],r)??K(t[0],t.at(-1),r)??K(n[0],n.at(-1),r)??{x:1,y:0},c=[];for(let i=0;i<e;i++){let l=(i-(e-1)/2)*a;c.push({x:-s.y*l,y:s.x*l/r})}return c}function Q(t,n){return t.map(e=>({x:e.x,y:e.y*n}))}function On(t,n){for(let e of t)e.y0/=n,e.cy0/=n,e.cy1/=n,e.y1/=n;return t}var Sn=12,In=40;function wt(t,n){let e=0;for(let r=1;r<t.length;r++)e+=Math.hypot(t[r].x-t[r-1].x,t[r].y-t[r-1].y);let o=e*n;return Math.min(In,Math.max(Sn,o/2))/Math.max(n,Number.EPSILON)}function Pn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function It(t,n=!1){let e=Pn(t);if(!n)return e;let o=G(t);return e===!1?o:o.from===o.to?o.from:!0}function Rn(t,n,e,o){let{at:a,inward:r}=t,s=r?a.x-r.x:1,c=r?a.y-r.y:0,i=Math.hypot(s,c)||1,l=s/i,f=c/i,y=a.x+e,p=a.y+o,u=y+l*n/3,x=p+f*n/3,d=y+l*n,h=p+f*n,b=-f*n/2,m=l*n/2;return[{x0:y,y0:p,cx0:u,cy0:x,cx1:d+b,cy1:h+m,x1:d,y1:h},{x0:d,y0:h,cx0:d-b,cy0:h-m,cx1:u,cy1:x,x1:y,y1:p}]}function tt(t,n,e,o,a,r,s=[],c){let i=r.scaleX,l=St(r),f=c??(r.pixelRows?wn:void 0);if(e===!1&&(e=vn(t,n)),l!==1)return On(tt(Q(t,l),Q(n,l),e,o,a*l,{scaleX:i,scaleY:i},Q(s,l),f===void 0?void 0:f*l),l);if(typeof e=="string")return Rn(D(t,e),wt(t,i),o,a);let y=e===!0,p=e===!0?{from:"end",to:"start"}:e,u=D(t,p.from),x=D(n,p.to),d=u.at,h=x.at,b=d.x+o,m=d.y+a,g=h.x+o,w=h.y+a;if(y){let L=1,v=0;if(u.inward){let T=d.x-u.inward.x,C=d.y-u.inward.y,P=Math.hypot(T,C);P>0&&(L=T/P,v=C/P)}let M=wt(t,i),_=-v,E=L,A=(d.x+h.x)/2+o+_*M,S=(d.y+h.y)/2+a+E*M,O=b+L*M,R=m+v*M,I=g-L*M,N=w-v*M;return[{x0:b,y0:m,cx0:O,cy0:R,cx1:O+_*M,cy1:R+E*M,x1:A,y1:S},{x0:A,y0:S,cx0:I+_*M,cy0:N+E*M,cx1:I,cy1:N,x1:g,y1:w}]}else{let L=u.inward??{x:d.x-(h.x-d.x),y:d.y-(h.y-d.y)},v=x.inward??{x:h.x-(d.x-h.x),y:h.y-(d.y-h.y)},M=Math.hypot(g-b,w-m),_=(ct,it,cn,un)=>{let ut=it.x-ct.x,lt=it.y-ct.y,ft=Math.hypot(ut,lt),ln=ft===0?0:(cn*ut+un*lt)/ft;return Math.max(0,Math.min(M*bn,gn,ln*.5))},E=h.x-d.x,A=h.y-d.y,[S,O]=gt(L.x,L.y,d.x,d.y,_(L,d,E,A)),[R,I]=gt(v.x,v.y,h.x,h.y,_(v,h,-E,-A)),N=s.length?_n(b,m,g,w,s,f):0,T=M===0?1:M,C=(g-b)/T,P=(w-m)/T,k=-P*N,rt=C*N,at=C*Math.abs(N),st=P*Math.abs(N);return[{x0:b,y0:m,cx0:S+o+k-at,cy0:O+a+rt-st,cx1:R+o+k+at,cy1:I+a+rt+st,x1:g,y1:w}]}}function _t(t,n){let e=t[0],o=t.at(-1);return Math.hypot(e.x-n.x,e.y-n.y)<Math.hypot(o.x-n.x,o.y-n.y)?"start":"end"}function Pt(t,n,e,o){let a=D(t,o?.from??_t(t,e[0])),r=D(n,o?.to??_t(n,e.at(-1))),s=[a.at,...e,r.at],c=l=>{let f=s[l],y=u=>Math.hypot(u.x-f.x,u.y-f.y),p=(u,x)=>{let d=u?y(u):0,h=y(x);return d===0?{x:x.x-f.x,y:x.y-f.y}:{x:(f.x-u.x)/d*h,y:(f.y-u.y)/d*h}};if(l===0)return p(a.inward,s[1]);if(l===s.length-1){let u=p(r.inward,s[l-1]);return{x:-u.x,y:-u.y}}return{x:(s[l+1].x-s[l-1].x)/2,y:(s[l+1].y-s[l-1].y)/2}},i=[];for(let l=0;l<s.length-1;l++){let f=s[l],y=s[l+1],p=c(l),u=c(l+1);i.push({x0:f.x,y0:f.y,cx0:f.x+p.x/3,cy0:f.y+p.y/3,cx1:y.x-u.x/3,cy1:y.y-u.y/3,x1:y.x,y1:y.y})}return i}function Rt(t){return t==="+"?"-":"+"}function Re(t,n=new Set){let e=t.edges.map(G),o=new Map,a=(u,x,d)=>{let h=`${u}|${x}`,b=o.get(h);b?b.push(d):o.set(h,[d])};t.edges.forEach((u,x)=>{a(u.from,e[x].from,x),a(u.to,e[x].to,x)});let r=u=>{let x=o.get(`${u}|end`);if(x?.length!==1)return;let d=x[0],h=t.edges[d];return h.from===u&&h.to!==u&&!n.has(u)&&!n.has(h.to)&&e[d].from==="end"&&e[d].to==="start"&&o.get(`${h.to}|start`)?.length===1?d:void 0},s=new Set,c=new Map,i=new Map;for(let u of t.nodes){let x=o.get(`${u.id}|start`),d=x?.length===1?t.edges[x[0]].from:void 0;if(c.has(u.id)||d!==void 0&&r(d)===x[0])continue;let h=[u.id];for(;;){let b=r(h.at(-1)),m=b===void 0?void 0:t.edges[b].to;if(m===void 0||c.has(m))break;s.add(b),h.push(m)}for(let b of h)c.set(b,u.id);h.length>1&&i.set(u.id,h)}for(let u of t.nodes)c.has(u.id)||c.set(u.id,u.id);let l=new Map(t.nodes.map(u=>[u.id,u])),f=[];for(let u of t.nodes){if(c.get(u.id)!==u.id)continue;let x=i.get(u.id);if(!x){f.push(u);continue}let d=x.map(m=>l.get(m)),h=d.filter(H),b=h.length?h.reduce((m,g)=>m.stable.start<=g.stable.start?m:g):d[0];f.push({id:u.id,name:u.name,length:d.reduce((m,g)=>m+g.length,0),depth:u.depth,stable:b.stable})}let y=new Set,p=[];return t.edges.forEach((u,x)=>{let d=c.get(u.from),h=c.get(u.to),b=e[x],m=`${d}|${b.from}>${h}|${b.to}`;s.has(x)||y.has(m)||(y.add(m),p.push({from:d,to:h,...b.from==="start"?{fromStrand:Rt(F(d))}:{},...b.to==="end"?{toStrand:Rt(F(h))}:{}}))}),{graph:{...t,nodes:f,edges:p,paths:void 0,pathVisits:void 0},runs:i}}function Te(t,n,e){let o={...t};for(let[a,r]of n){let s=t[a];if(!s?.length)continue;delete o[a];let c=et(s),i=c.at(-1),l=r.map(p=>Math.max(e(p),0)),f=l.reduce((p,u)=>p+u,0)||r.length,y=0;r.forEach((p,u)=>{let x=f?l[u]/f*i:i/r.length,d=u===r.length-1?i:y+x;o[p]=Ct(s,c,y,d),y=d})}return o}function Ce(t,n,e){if(t.length===0)return[];let o=et(t),a=o.at(-1);return Ct(t,o,n*a,e*a)}function Tt(t){let n=et(t);return nt(t,n,n.at(-1)/2)}function et(t){let n=[0];for(let e=1;e<t.length;e++)n.push(n[e-1]+Math.hypot(t[e].x-t[e-1].x,t[e].y-t[e-1].y));return n}function nt(t,n,e){if(e<=0)return{...t[0]};let o=1;for(;o<n.length&&n[o]<e;)o++;if(o>=n.length)return{...t.at(-1)};let a=n[o]-n[o-1],r=a>0?(e-n[o-1])/a:0,s=t[o-1],c=t[o];return{x:s.x+(c.x-s.x)*r,y:s.y+(c.y-s.y)*r}}function Ct(t,n,e,o){let a=[nt(t,n,e)];for(let r=0;r<t.length;r++)n[r]>e&&n[r]<o&&a.push({...t[r]});return a.push(nt(t,n,o)),a}var Tn=1;function Cn(t,n){return n.flatMap(e=>t[e]??[])}function Ht(t,n,e,o,a=!1){let r=t[n.from],s=t[n.to];if(!(!r?.length||!s?.length))return o?Pt(r,s,o,a?G(n):void 0):tt(r,s,It(n,a),0,0,e,Cn(t,n.bypassed))}function Bn(t){let n=new Map;for(let e of t.nodes)if(H(e)){let o=n.get(e.stable.refName);o?o.push(e):n.set(e.stable.refName,[e])}for(let e of n.values())e.sort((o,a)=>o.stable.start-a.stable.start);return n}function Hn(t,n,e){let o=[];if(t)for(let a=xt(t,n);a<t.length;a++){let r=t[a];if(r.stable.start>=e)break;r.stable.start+r.length<=e&&o.push(r.id)}return o}function Xn(t,n,e,o){let{fromStrand:a,toStrand:r}=t;if(a===void 0||r===void 0)return!0;let s=a===(n.stable.strand??"+"),c=r===(e.stable.strand??"+");return o?s&&c:!s&&!c}function ke(t){let n=new Map(t.nodes.map(a=>[a.id,a])),e=Bn(t),o=[];for(let a=0;a<t.edges.length;a++){let r=t.edges[a],s=n.get(r.from),c=n.get(r.to);if(s!==void 0&&c!==void 0&&H(s)&&H(c)&&s.stable.refName===c.stable.refName){let i=s.stable.start<=c.stable.start,[l,f]=i?[s,c]:[c,s],y=l.stable.start+l.length,p=f.stable.start,u=p-y;if(u>=Tn&&Xn(r,s,c,i)){let x=l.stable.refName;o.push({edgeIndex:a,from:r.from,to:r.to,...r.fromStrand?{fromStrand:r.fromStrand}:{},...r.toStrand?{toStrand:r.toStrand}:{},refName:x,start:y,end:p,bp:u,bypassed:Hn(e.get(x),y,p)})}}}return o}function kn(t,n){let e=new Map,o=s=>{let c=s;for(;e.has(c);)c=e.get(c);return c!==s&&e.set(s,c),c},a=(s,c)=>{let[i,l]=[o(s),o(c)];return i!==l&&e.set(i,l),i!==l},r=new Set(n.map(s=>s.edgeIndex));return t.edges.forEach((s,c)=>{r.has(c)||a(s.from,s.to)}),new Set(n.filter(s=>!a(s.from,s.to)).map(s=>s.edgeIndex))}var Bt=new WeakMap;function De(t,n,e=!0){let o=Bt.get(n);o||(o=new Map,Bt.set(n,o));let a=o.get(e);if(!a){let r=e?new Set:kn(t,n);a={shown:n.filter(s=>!r.has(s.edgeIndex)),bypassed:new Map(n.map(s=>[s.edgeIndex,s.bypassed])),hidden:r},o.set(e,a)}return a}var Dn=26,Fn=4e4,Gn=8,Wn=8,$n=5.7,Un=6,Yn=13,W=3,Y=2;function j(t){return(t.length*$n+Un+W)/2}var B=(Yn+W)/2,Vn=j("1 bp");function V(t,n,e){return{x0:n-t,x1:n+t,y0:e-B,y1:e+B}}function Ye(t,n){return{x0:6,x1:6+t.length*6.2+8+W,y0:n-8-W/2,y1:n+8+W/2}}function z(t,n,e){return e<n?t:Math.min(Math.max(t,n),e)}function Ft(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function Gt(t){return t>=1e6?`${+(t/1e6).toFixed(1)} Mb`:t>=1e3?`${+(t/1e3).toFixed(1)} kb`:`${t} bp`}function Xt(t){return`${Gt(t)} del`}function zn(t,n,e,o){let a=t[0],r=t[t.length-1],s=(n.x-(a.x0+r.x1)/2)*e,c=(n.y-(a.y0+r.y1)/2)*o,i=Math.hypot(s,c);return i===0?{x:0,y:-1}:{x:s/i,y:c/i}}function jn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function qn(t,n){let e=(t.x1-t.x0)/2,o=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:e/Math.abs(n.x),n.y===0?1/0:o/Math.abs(n.y))}function Jn(t,n,e){let o=0;for(let a=1;a<t.length;a++){let r=t[a-1],s=t[a];o+=Math.hypot((s.x-r.x)*n,(s.y-r.y)*e)}return o}function Kn(t,n){let e=1/0,o=1/0,a=-1/0,r=-1/0;for(let s of t)for(let c of n[s]??[])e=Math.min(e,c.x),a=Math.max(a,c.x),o=Math.min(o,c.y),r=Math.max(r,c.y);return e===1/0?void 0:{minX:e,minY:o,maxX:a,maxY:r}}var kt=new WeakMap;function Qn(t,n){let e=kt.get(t);if(e?.nodeLengths===n)return e.order;let o=Object.entries(t).filter(([a,r])=>r.length>0&&n.has(a)).sort(([a],[r])=>n.get(r)-n.get(a));return kt.set(t,{nodeLengths:n,order:o}),o}var Dt=new WeakMap;function Zn(t,n,e,o,a,r){let{scaleX:s,scaleY:c}=e,i=Dt.get(t);if(i?.deletions===n&&i.routes===a&&i.stranded===r&&i.scaleX===s&&i.scaleY===c&&i.version===o)return i.arcs;let l=[];for(let f of[...n].sort((y,p)=>p.bp-y.bp)){let y=Ht(t,f,e,a?.[f.edgeIndex],r),p=y?Nt(y):void 0;if(y&&p){let{minX:u,minY:x,maxX:d,maxY:h}=Ot(y);l.push({deletion:f,curves:y,apex:p,extent:Math.max((d-u)*s,(h-x)*c)})}}return Dt.set(t,{deletions:n,routes:a,stranded:r,scaleX:s,scaleY:c,version:o,arcs:l}),l}function Ve({nodePositions:t,nodeLengths:n,deletions:e,deletionRoutes:o,stranded:a=!1,alleleDeletions:r,axis:s,translateX:c,translateY:i,width:l,height:f,version:y=0}){let{scaleX:p,scaleY:u}=s,x=[],d=[];for(let{deletion:m,curves:g,apex:w,extent:L}of Zn(t,e,s,y,o,a))if(L>=Dn){let v=Xt(m.bp),M=j(v),_=V(M,0,0),E=w.x*p+c,A=w.y*u+i,S=L>=M*2/Y,O=zn(g,w,p,u),R=jn(_,O)+Wn,I=S?E:z(E+O.x*R,M,l-M),N=S?A:z(A+O.y*R,B,f-B),T=Math.hypot(I-E,N-A),C;if(T>0){let P={x:(I-E)/T,y:(N-A)/T},k=qn(_,P);C={arcX:E,arcY:A,labelX:I-P.x*k,labelY:N-P.y*k}}x.push({label:{key:`del:${m.edgeIndex}`,text:v,x:I,y:N,kind:"deletion",leader:C},box:V(M,I,N)})}let h=new Set,b=[...r??[]].sort((m,g)=>g.bp-m.bp);for(let m of b){let g=Kn(m.nodeIds,t);if(!g)continue;let w=Math.max(g.minX*p+c,0),L=Math.min(g.maxX*p+c,l),v=Math.max(g.minY*u+i,0),M=Math.min(g.maxY*u+i,f);if(L<w||M<v)continue;let _=Math.max(L-w,M-v),E=Xt(m.bp),A=j(E);if(_>=A*2/Y){for(let R of m.nodeIds)h.add(R);let S=z((w+L)/2,A,l-A),O=z((v+M)/2,B,f-B);x.push({label:{key:`alleledel:${m.nodeIds.join(",")}`,text:E,x:S,y:O,kind:"deletion"},box:V(A,S,O)})}}for(let[m,g]of Qn(t,n)){if(h.has(m))continue;let{x:w,y:L}=Tt(g),v=L*u+i;if(v+B<=0||v-B>=f)continue;let M=Jn(g,p,u);if(M<Vn*2/Y)continue;let _=Gt(n.get(m)),E=j(_);if(M>=E*2/Y){let A=w*p+c;d.push({label:{key:`node:${m}`,text:_,x:A,y:v,kind:"node"},box:V(E,A,v)})}}return{deletions:x,nodes:d}}function ze(t,n){return Math.max(Gn,Math.floor(t*n/Fn))}function je(t,n,e=1/0){let o=[];for(let{label:a,box:r}of t){if(o.length>=e)break;n(r)&&o.push(a)}return o}var te=/:(\d+)-\d+$/;function q(t){let n=te.exec(t);return n?{name:t.slice(0,n.index),start:+n[1]}:{name:t,start:0}}function Qe(t,n){let e=[],o=new Map;for(let a of t){let r=dt(a.name),s=a.start;for(let c of a.steps){let i={path:a.name,sample:r,start:s,strand:c.strand},l=o.get(c.id);l?l.push(i):o.set(c.id,[i]),s+=n(c.id)}e.push({name:a.name,sample:r,start:a.start,length:s-a.start})}return{anchorPaths:e,pathVisits:o}}function ne(t,n){return t.find(o=>o.sample===n||o.name===n)??t[0]}var ee=1;function oe(t,n,e){let o=t;if(n&&n.length>0){let a=n.find(r=>r.path===e)??n[0];o={...t,stable:{refName:a.path,start:a.start,rank:a.path===e?pt:ee,strand:a.strand},samples:[...new Set(n.map(r=>r.sample))].sort()}}return o}function re(t,n){let{anchorPaths:e,pathVisits:o}=t,a=e&&o?ne(e,n):void 0;return a&&o?{...t,nodes:t.nodes.map(r=>oe(r,o.get(r.name),a.name)),anchoredBy:"paths",referencePath:a.name}:t}function Ze(t,n){return t.anchoredBy==="tags"?t:re(t,n)}function to(t,n){if(!t.anchorPaths)return;let e=new Map(t.nodes.map(r=>[r.id,r.length])),o=(r,s=r.length)=>{let c=0;for(let i=0;i<s;i++)c+=e.get(r[i])??0;return c},a=new Map;for(let r of t.paths??[]){let s=q(r.name).name;a.set(s,[...a.get(s)??[],r])}return t.anchorPaths.map(r=>{let s=a.get(r.name),c=s?.length===1?s[0]:void 0,i=c&&n.get(c.name);return c&&i?{...r,start:r.start+o(c.nodeIds,i.first),length:o(i.nodeIds)}:r})}function ae(t){let n=0;for(let e=0;e<t.length;e++)n=t.charCodeAt(e)+((n<<5)-n);return Math.abs(n%360)}function Wt(t,n){return t*360/n}var $t=.7,Ut=.5,Yt=16;function se(t){return t>0&&t<=Yt}function Vt(t,n){return`hsl(${Wt(t,n)}, ${$t*100}%, ${Ut*100}%)`}function ce(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function ie(t){let n=q(t).name.split("#"),e=n.join("#");if(n.length>=3&&ht(n[0])){let o=n.slice(2).join("#");return[o,o,e]}return[n[0],n.slice(0,2).join("#"),e]}function ue(t,n){let{start:e}=q(t);return n.map(o=>`${o} @${Ft(e)}`)}function le(t,n){let e=new Map;t.forEach((i,l)=>{e.has(i.name)||e.set(i.name,l)});let o=[...e].map(([i,l])=>({name:i,i:l})),a=o.map(i=>ie(i.name)),r=[0,1,2].flatMap(i=>[o.map((l,f)=>a[f][i]),o.map((l,f)=>ue(l.name,a[f])[i])]),c=r.find(i=>new Set(i).size===o.length)??r.at(-1);return o.map(({name:i,i:l},f)=>({name:i,label:c[f],color:n?.[l]??Vt(l,t.length)}))}function fe(t){let n=new Map;return new Map([...t].sort((e,o)=>e.label.localeCompare(o.label)).map(e=>{let o=(n.get(e.label)??0)+1;return n.set(e.label,o),[e.name,o>1?`${e.label} (${o})`:e.label]}))}var zt=[{value:"auto",label:"Auto"},{value:"uniform",label:"Uniform"},{value:"random",label:"Random"},{value:"rainbow",label:"Rainbow"},{value:"depth",label:"Depth"},{value:"node-length",label:"Node length"},{value:"stable-rank",label:"Stable rank"},{value:"reference-position",label:"Reference position"},{value:"grey",label:"Grey"}],de=zt.map(t=>t.value);function he(t,n){return t!=="auto"?t:n?.anchoredBy?"reference-position":"uniform"}var jt=[{value:"depth",label:"By depth",description:"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],pe=jt.map(t=>t.value),xe=.3,qt=3;function Jt(t){let n=0,e=0;for(let o of t.nodes)n+=o.depth*o.length,e+=o.length;return e>0?n/e:0}function Kt(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(qt,Math.max(xe,Math.sqrt(t.depth/n)))}function Qt(t,n,e,o){return n*(e==="depth"?Kt(t,o):1)}function Zt(t,n){return t*(n==="depth"?qt:1)}function ye(t,n,e,o){let a=t?Jt(t):0;return{maxHalfWidthPx:Zt(e,o)/2,halfWidthPx:r=>{let s=n?.get(r);return s?Qt(s,e,o,a)/2:e/2}}}var $=40,nn=500,J=5;function me(t,n){return Math.max(t.nodeLengthPerMegabase*n/1e6,t.minimumNodeLength)}function en(t,n=J){let o=t.nodes.reduce((r,s)=>r+s.length,0)/1e6,a=Math.max(t.nodes.length*$,nn);return{nodeLengthPerMegabase:o>0?a/o:1e4,minimumNodeLength:Math.max(J,n),edgeLength:5,nodeSegmentLength:20}}var X={power:1,effect:1};function on(t){return t.power===1&&t.effect===1}function rn(t,n){let e=t.nodes.length,o=t.nodes.reduce((s,c)=>s+c.length,0),a=e>0?o/e:0,r=e>0?Math.max(e*$,nn)/e:$;return s=>{if(a<=0)return r;let c=(s/a)**n.power;return Math.max(r*((c-1)*n.effect+1),J)}}var tn=1e3,an={law:X,minNodeLength:0};function lo(t,n=an){let{law:e,minNodeLength:o}=n,a=en(t,o);if(on(e))return{nodes:t.nodes,opts:a};let r=rn(t,e);return{nodes:t.nodes.map(s=>({...s,length:Math.round(r(s.length)*tn)})),opts:{...a,nodeLengthPerMegabase:1e6/tn,minimumNodeLength:J}}}function fo(t,n=an){if(on(n.law)){let e=en(t,n.minNodeLength);return o=>me(e,o)}return rn(t,n.law)}var ot=[{value:"auto",label:"Proportional",description:"Bandage's own scale: a node draws proportional to its length, so a 1 bp allele is a speck.",law:X,minNodeFactor:0},{value:"open",label:"Open bubbles",description:"Give every allele a drawn length, so a bubble reads as two arms rather than a knot.",law:X,minNodeFactor:2.5},{value:"wide",label:"Wide bubbles",description:"As open, spread further. Best on a window of a dozen bubbles.",law:X,minNodeFactor:10},{value:"compress",label:"Compress lengths",description:"Pull the longest and shortest nodes towards the graph\u2019s mean, so a cut spanning kb and bp fits one pane.",law:{power:.5,effect:.5},minNodeFactor:0}],be=ot.map(t=>t.value);function ge(t){let n=ot.find(e=>e.value===t);return{law:n?.law??X,minNodeLength:(n?.minNodeFactor??0)*$}}export{bt as a,yt as b,dn as c,U as d,yn as e,ve as f,we as g,Ot as h,_e as i,Ne as j,G as k,St as l,Oe as m,It as n,tt as o,Pt as p,Re as q,Te as r,Ce as s,Cn as t,ke as u,kn as v,De as w,Ye as x,Ft as y,Gt as z,Ve as A,ze as B,je as C,q as D,Qe as E,ne as F,re as G,Ze as H,to as I,ae as J,Wt as K,$t as L,Ut as M,Yt as N,se as O,Vt as P,ce as Q,le as R,fe as S,zt as T,de as U,he as V,jt as W,pe as X,Jt as Y,Qt as Z,ye as _,me as $,lo as aa,fo as ba,ot as ca,be as da,ge as ea,Me as fa};
2
- //# sourceMappingURL=chunk-XWGKHQYO.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["global-externals:tss-react/mui", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-AB35TJST.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-CPMHA4W5.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-2CVHXFK7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-TAMCZHLW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-N6FECAXP.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-3ZZSX5HN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ST2IBUAN.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-7GBL7SJY.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-JKJWSY4V.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-PBENCR5L.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-6JEWNXCQ.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@7.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-UVBGRJQX.js"],
4
- "sourcesContent": ["module.exports = JBrowseExports[\"tss-react/mui\"];", "// src/overlayLabels.ts\nvar LABEL_PX = 11;\nvar LABEL_CHAR_PX = 6.2;\nvar LABEL_PAD = 4;\nfunction labelWidth(text) {\n return text.length * LABEL_CHAR_PX + LABEL_PAD * 2;\n}\nfunction overlaps(a, b) {\n return a.x0 < b.x1 && a.x1 > b.x0 && a.y0 < b.y1 && a.y1 > b.y0;\n}\nfunction offFrame(box, frame) {\n return box.x1 <= 0 || box.x0 >= frame.width || box.y1 <= 0 || box.y0 >= frame.height;\n}\nfunction insideFrame(box, frame) {\n return box.x0 >= 0 && box.x1 <= frame.width && box.y0 >= 0 && box.y1 <= frame.height;\n}\nfunction occupancy(frame, reserved = []) {\n const placed = [...reserved];\n return (box) => {\n if (offFrame(box, frame) || placed.some((p) => overlaps(p, box))) {\n return false;\n }\n placed.push(box);\n return true;\n };\n}\nfunction placeLabels(candidates, frame, take) {\n const out = [];\n const row = LABEL_PX + LABEL_PAD * 2;\n const place = (c, text) => {\n const w = labelWidth(text);\n const direction = c.y > frame.height / 2 ? -1 : 1;\n for (let tries = 0; tries <= (c.stack ?? 0); tries++) {\n const y = c.y + direction * tries * row;\n const box = {\n x0: c.x - w / 2,\n x1: c.x + w / 2,\n y0: y - LABEL_PX - LABEL_PAD,\n y1: y + LABEL_PAD\n };\n if (offFrame(box, frame)) {\n return void 0;\n }\n if (insideFrame(box, frame) && (c.fits?.(box) ?? true) && take(box)) {\n return { ...c, text, y, w };\n }\n }\n return void 0;\n };\n for (const c of candidates) {\n const placed = place(c, c.text) ?? (c.fallback === void 0 ? void 0 : place(c, c.fallback));\n if (placed) {\n out.push(placed);\n }\n }\n return out;\n}\n\nexport {\n LABEL_PX,\n LABEL_CHAR_PX,\n LABEL_PAD,\n labelWidth,\n overlaps,\n occupancy,\n placeLabels\n};\n", "// src/layout/rowSpacing.ts\nvar ROW_HEIGHT_PX = 20;\n\nexport {\n ROW_HEIGHT_PX\n};\n", "import {\n ROW_HEIGHT_PX\n} from \"./chunk-CPMHA4W5.js\";\n\n// src/util/geometry.ts\nfunction svgPath(points) {\n const round = (v) => Math.round(v * 100) / 100;\n return points.map((p, i) => `${i ? \"L\" : \"M\"}${round(p.x)},${round(p.y)}`).join(\"\");\n}\nfunction projectLine(x1, y1, x2, y2, distance) {\n const d = Math.hypot(y2 - y1, x2 - x1);\n if (d === 0) {\n return [x2, y2];\n }\n const vx = (x2 - x1) / d;\n const vy = (y2 - y1) / d;\n return [x2 + distance * vx, y2 + distance * vy];\n}\nfunction curvePointAt(c, t) {\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n return {\n x: a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1,\n y: a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1\n };\n}\nfunction curveMidpoint(curves) {\n const mid = curves[Math.floor(curves.length / 2)];\n return mid ? curvePointAt(mid, 0.5) : void 0;\n}\nfunction curveBounds(curves) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const c of curves) {\n minX = Math.min(minX, c.x0, c.cx0, c.cx1, c.x1);\n maxX = Math.max(maxX, c.x0, c.cx0, c.cx1, c.x1);\n minY = Math.min(minY, c.y0, c.cy0, c.cy1, c.y1);\n maxY = Math.max(maxY, c.y0, c.cy0, c.cy1, c.y1);\n }\n return { minX, minY, maxX, maxY };\n}\nfunction subCurve(c, t0, t1) {\n const p0 = curvePointAt(c, t0);\n const p1 = curvePointAt(c, t1);\n const dt = (t1 - t0) / 3;\n const d0 = curveTangentAt(c, t0);\n const d1 = curveTangentAt(c, t1);\n return {\n x0: p0.x,\n y0: p0.y,\n cx0: p0.x + d0.x * dt,\n cy0: p0.y + d0.y * dt,\n cx1: p1.x - d1.x * dt,\n cy1: p1.y - d1.y * dt,\n x1: p1.x,\n y1: p1.y\n };\n}\nfunction curveTangentAt(c, t) {\n const u = 1 - t;\n const a = 3 * u * u;\n const b = 6 * u * t;\n const d = 3 * t * t;\n return {\n x: a * (c.cx0 - c.x0) + b * (c.cx1 - c.cx0) + d * (c.x1 - c.cx1),\n y: a * (c.cy0 - c.y0) + b * (c.cy1 - c.cy0) + d * (c.y1 - c.cy1)\n };\n}\nfunction dashCurves(curves, dashWorld) {\n const lengths = curves.map(\n (c) => Math.hypot(c.cx0 - c.x0, c.cy0 - c.y0) + Math.hypot(c.cx1 - c.cx0, c.cy1 - c.cy0) + Math.hypot(c.x1 - c.cx1, c.y1 - c.cy1)\n );\n const total = lengths.reduce((a, b) => a + b, 0);\n const spans = Math.max(3, Math.round(total / dashWorld) | 1);\n const out = [];\n for (let i = 0; i < spans; i += 2) {\n const from = i / spans * total;\n const to = (i + 1) / spans * total;\n const dash = [];\n let start = 0;\n curves.forEach((c, k) => {\n const length = lengths[k];\n const end = start + length;\n if (length > 0 && end > from && start < to) {\n dash.push(\n subCurve(\n c,\n Math.max(0, (from - start) / length),\n Math.min(1, (to - start) / length)\n )\n );\n }\n start = end;\n });\n if (dash.length) {\n out.push(dash);\n }\n }\n return out;\n}\nfunction translateCurves(curves, dx, dy) {\n const out = new Array(curves.length);\n for (let i = 0; i < curves.length; i++) {\n const c = curves[i];\n out[i] = {\n x0: c.x0 + dx,\n y0: c.y0 + dy,\n cx0: c.cx0 + dx,\n cy0: c.cy0 + dy,\n cx1: c.cx1 + dx,\n cy1: c.cy1 + dy,\n x1: c.x1 + dx,\n y1: c.y1 + dy\n };\n }\n return out;\n}\nfunction attachment(segments, side) {\n const last = segments.length - 1;\n return side === \"end\" ? { at: segments[last], inward: segments[last - 1] } : { at: segments[0], inward: segments[1] };\n}\nvar TANGENT_SPAN_FACTOR = 0.5;\nvar MAX_TANGENT = 80;\nfunction ownStrand(id) {\n return id.endsWith(\"-\") ? \"-\" : \"+\";\n}\nfunction strandSides(edge) {\n const own = (id, strand) => (strand ?? ownStrand(id)) === ownStrand(id);\n return {\n from: own(edge.from, edge.fromStrand) ? \"end\" : \"start\",\n to: own(edge.to, edge.toStrand) ? \"start\" : \"end\"\n };\n}\nfunction spanOf(segments) {\n let min = Infinity;\n let max = -Infinity;\n for (const s of segments) {\n min = Math.min(min, s.x);\n max = Math.max(max, s.x);\n }\n return { min, max };\n}\nfunction distanceToSpan(x, span) {\n return Math.max(0, span.min - x, x - span.max);\n}\nfunction facingSide(segments, other, tieBreak) {\n const startGap = distanceToSpan(segments[0].x, other);\n const endGap = distanceToSpan(segments[segments.length - 1].x, other);\n return startGap === endGap ? tieBreak : startGap < endGap ? \"start\" : \"end\";\n}\nfunction facingSides(fromSegments, toSegments) {\n return {\n from: facingSide(fromSegments, spanOf(toSegments), \"end\"),\n to: facingSide(toSegments, spanOf(fromSegments), \"start\")\n };\n}\nvar laidSides = /* @__PURE__ */ new WeakMap();\nfunction heldFacingSides(fromSegments, toSegments) {\n let byTo = laidSides.get(fromSegments);\n if (!byTo) {\n byTo = /* @__PURE__ */ new WeakMap();\n laidSides.set(fromSegments, byTo);\n }\n let sides = byTo.get(toSegments);\n if (!sides) {\n sides = facingSides(fromSegments, toSegments);\n byTo.set(toSegments, sides);\n }\n return sides;\n}\nvar APEX_FRACTION = 0.75;\nvar BOW_CLEARANCE = 1.15;\nvar ALONG_FRACTION = 0.35;\nvar MAX_ROW_BOW_PX = 3 * ROW_HEIGHT_PX;\nfunction bowAround(p1x, p1y, p2x, p2y, toward, maxBow) {\n const chord = Math.hypot(p2x - p1x, p2y - p1y);\n const ux = chord === 0 ? 1 : (p2x - p1x) / chord;\n const uy = chord === 0 ? 0 : (p2y - p1y) / chord;\n let reach = 0;\n let minAlong = Infinity;\n let maxAlong = -Infinity;\n for (const p of toward) {\n const dx = p.x - p1x;\n const dy = p.y - p1y;\n const perp = dx * -uy + dy * ux;\n if (Math.abs(perp) > Math.abs(reach)) {\n reach = perp;\n }\n const along = dx * ux + dy * uy;\n minAlong = Math.min(minAlong, along);\n maxAlong = Math.max(maxAlong, along);\n }\n const span = toward.length ? maxAlong - minAlong : 0;\n const uncapped = Math.max(\n Math.abs(reach) * BOW_CLEARANCE / APEX_FRACTION,\n span * ALONG_FRACTION\n );\n const size = maxBow === void 0 ? uncapped : Math.min(uncapped, maxBow);\n return reach < 0 ? -size : size;\n}\nfunction yToXOf({ scaleX, scaleY }) {\n return scaleY / scaleX;\n}\nvar PATH_RIBBON_SPACING = 3;\nfunction drawnDirection(a, b, yToX) {\n const dx = b.x - a.x;\n const dy = (b.y - a.y) * yToX;\n const len = Math.hypot(dx, dy);\n return len === 0 ? void 0 : { x: dx / len, y: dy / len };\n}\nfunction pathRibbonOffsets(fromSegments, toSegments, count, axis, spacing = PATH_RIBBON_SPACING) {\n const yToX = yToXOf(axis);\n const dir = drawnDirection(\n fromSegments[fromSegments.length - 1],\n toSegments[0],\n yToX\n ) ?? drawnDirection(fromSegments[0], fromSegments.at(-1), yToX) ?? drawnDirection(toSegments[0], toSegments.at(-1), yToX) ?? { x: 1, y: 0 };\n const offsets = [];\n for (let i = 0; i < count; i++) {\n const distance = (i - (count - 1) / 2) * spacing;\n offsets.push({ x: -dir.y * distance, y: dir.x * distance / yToX });\n }\n return offsets;\n}\nfunction scaleYOf(points, yToX) {\n return points.map((p) => ({ x: p.x, y: p.y * yToX }));\n}\nfunction unscaleYOf(curves, yToX) {\n for (const c of curves) {\n c.y0 /= yToX;\n c.cy0 /= yToX;\n c.cy1 /= yToX;\n c.y1 /= yToX;\n }\n return curves;\n}\nvar SELF_LOOP_MIN_PX = 12;\nvar SELF_LOOP_MAX_PX = 40;\nfunction selfLoopReach(segments, scale) {\n let length = 0;\n for (let i = 1; i < segments.length; i++) {\n length += Math.hypot(\n segments[i].x - segments[i - 1].x,\n segments[i].y - segments[i - 1].y\n );\n }\n const nodePx = length * scale;\n const reachPx = Math.min(\n SELF_LOOP_MAX_PX,\n Math.max(SELF_LOOP_MIN_PX, nodePx / 2)\n );\n return reachPx / Math.max(scale, Number.EPSILON);\n}\nfunction selfLinkOf(edge) {\n if (edge.from !== edge.to) {\n return false;\n }\n return edge.fromStrand && edge.toStrand && edge.fromStrand !== edge.toStrand ? edge.fromStrand === \"+\" ? \"end\" : \"start\" : true;\n}\nfunction edgeJoinOf(edge, stranded = false) {\n const self = selfLinkOf(edge);\n if (!stranded) {\n return self;\n }\n const sides = strandSides(edge);\n return self === false ? sides : sides.from === sides.to ? sides.from : true;\n}\nfunction hairpinCurves(attach, reach, offsetX, offsetY) {\n const { at, inward } = attach;\n const dx = inward ? at.x - inward.x : 1;\n const dy = inward ? at.y - inward.y : 0;\n const len = Math.hypot(dx, dy) || 1;\n const ux = dx / len;\n const uy = dy / len;\n const px = at.x + offsetX;\n const py = at.y + offsetY;\n const nearX = px + ux * reach / 3;\n const nearY = py + uy * reach / 3;\n const apexX = px + ux * reach;\n const apexY = py + uy * reach;\n const sideX = -uy * reach / 2;\n const sideY = ux * reach / 2;\n return [\n {\n x0: px,\n y0: py,\n cx0: nearX,\n cy0: nearY,\n cx1: apexX + sideX,\n cy1: apexY + sideY,\n x1: apexX,\n y1: apexY\n },\n {\n x0: apexX,\n y0: apexY,\n cx0: apexX - sideX,\n cy0: apexY - sideY,\n cx1: nearX,\n cy1: nearY,\n x1: px,\n y1: py\n }\n ];\n}\nfunction computeEdgeCurves(fromSegments, toSegments, join, offsetX, offsetY, axis, bypassed = [], maxBowIn) {\n const scale = axis.scaleX;\n const yToX = yToXOf(axis);\n const maxBow = maxBowIn ?? (axis.pixelRows ? MAX_ROW_BOW_PX : void 0);\n if (join === false) {\n join = heldFacingSides(fromSegments, toSegments);\n }\n if (yToX !== 1) {\n return unscaleYOf(\n computeEdgeCurves(\n scaleYOf(fromSegments, yToX),\n scaleYOf(toSegments, yToX),\n join,\n offsetX,\n offsetY * yToX,\n { scaleX: scale, scaleY: scale },\n scaleYOf(bypassed, yToX),\n // the cap is a y measure and the body works in x units, so it converts\n // with everything else that crosses this boundary\n maxBow === void 0 ? void 0 : maxBow * yToX\n ),\n yToX\n );\n }\n if (typeof join === \"string\") {\n return hairpinCurves(\n attachment(fromSegments, join),\n selfLoopReach(fromSegments, scale),\n offsetX,\n offsetY\n );\n }\n const loop = join === true;\n const sides = join === true ? { from: \"end\", to: \"start\" } : join;\n const fromAttach = attachment(fromSegments, sides.from);\n const toAttach = attachment(toSegments, sides.to);\n const fromEnd = fromAttach.at;\n const toStart = toAttach.at;\n const p1x = fromEnd.x + offsetX;\n const p1y = fromEnd.y + offsetY;\n const p2x = toStart.x + offsetX;\n const p2y = toStart.y + offsetY;\n if (loop) {\n let segDirX = 1;\n let segDirY = 0;\n if (fromAttach.inward) {\n const dx = fromEnd.x - fromAttach.inward.x;\n const dy = fromEnd.y - fromAttach.inward.y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n segDirX = dx / len;\n segDirY = dy / len;\n }\n }\n const ext = selfLoopReach(fromSegments, scale);\n const perpX = -segDirY;\n const perpY = segDirX;\n const midX = (fromEnd.x + toStart.x) / 2 + offsetX + perpX * ext;\n const midY = (fromEnd.y + toStart.y) / 2 + offsetY + perpY * ext;\n const cp1x = p1x + segDirX * ext;\n const cp1y = p1y + segDirY * ext;\n const cp2x = p2x - segDirX * ext;\n const cp2y = p2y - segDirY * ext;\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cp1x,\n cy0: cp1y,\n cx1: cp1x + perpX * ext,\n cy1: cp1y + perpY * ext,\n x1: midX,\n y1: midY\n },\n {\n x0: midX,\n y0: midY,\n cx0: cp2x + perpX * ext,\n cy0: cp2y + perpY * ext,\n cx1: cp2x,\n cy1: cp2y,\n x1: p2x,\n y1: p2y\n }\n ];\n } else {\n const fromPrev = fromAttach.inward ?? {\n x: fromEnd.x - (toStart.x - fromEnd.x),\n y: fromEnd.y - (toStart.y - fromEnd.y)\n };\n const toNext = toAttach.inward ?? {\n x: toStart.x - (fromEnd.x - toStart.x),\n y: toStart.y - (fromEnd.y - toStart.y)\n };\n const dist = Math.hypot(p2x - p1x, p2y - p1y);\n const tangentProj = (prev, at, towardX, towardY) => {\n const dx = at.x - prev.x;\n const dy = at.y - prev.y;\n const len = Math.hypot(dx, dy);\n const along = len === 0 ? 0 : (towardX * dx + towardY * dy) / len;\n return Math.max(\n 0,\n Math.min(dist * TANGENT_SPAN_FACTOR, MAX_TANGENT, along * 0.5)\n );\n };\n const towardToX = toStart.x - fromEnd.x;\n const towardToY = toStart.y - fromEnd.y;\n const [cx1, cy1] = projectLine(\n fromPrev.x,\n fromPrev.y,\n fromEnd.x,\n fromEnd.y,\n tangentProj(fromPrev, fromEnd, towardToX, towardToY)\n );\n const [cx2, cy2] = projectLine(\n toNext.x,\n toNext.y,\n toStart.x,\n toStart.y,\n tangentProj(toNext, toStart, -towardToX, -towardToY)\n );\n const bulge = bypassed.length ? bowAround(p1x, p1y, p2x, p2y, bypassed, maxBow) : 0;\n const chordLen = dist === 0 ? 1 : dist;\n const ux = (p2x - p1x) / chordLen;\n const uy = (p2y - p1y) / chordLen;\n const bulgeX = -uy * bulge;\n const bulgeY = ux * bulge;\n const spreadX = ux * Math.abs(bulge);\n const spreadY = uy * Math.abs(bulge);\n return [\n {\n x0: p1x,\n y0: p1y,\n cx0: cx1 + offsetX + bulgeX - spreadX,\n cy0: cy1 + offsetY + bulgeY - spreadY,\n cx1: cx2 + offsetX + bulgeX + spreadX,\n cy1: cy2 + offsetY + bulgeY + spreadY,\n x1: p2x,\n y1: p2y\n }\n ];\n }\n}\nfunction nearerEnd(segments, to) {\n const start = segments[0];\n const end = segments.at(-1);\n return Math.hypot(start.x - to.x, start.y - to.y) < Math.hypot(end.x - to.x, end.y - to.y) ? \"start\" : \"end\";\n}\nfunction routedEdgeCurves(fromSegments, toSegments, route, sides) {\n const fromAttach = attachment(\n fromSegments,\n sides?.from ?? nearerEnd(fromSegments, route[0])\n );\n const toAttach = attachment(\n toSegments,\n sides?.to ?? nearerEnd(toSegments, route.at(-1))\n );\n const points = [fromAttach.at, ...route, toAttach.at];\n const tangent = (i) => {\n const p = points[i];\n const span = (q) => Math.hypot(q.x - p.x, q.y - p.y);\n const along = (inward, next) => {\n const len = inward ? span(inward) : 0;\n const reach = span(next);\n return len === 0 ? { x: next.x - p.x, y: next.y - p.y } : {\n x: (p.x - inward.x) / len * reach,\n y: (p.y - inward.y) / len * reach\n };\n };\n if (i === 0) {\n return along(fromAttach.inward, points[1]);\n }\n if (i === points.length - 1) {\n const out = along(toAttach.inward, points[i - 1]);\n return { x: -out.x, y: -out.y };\n }\n return {\n x: (points[i + 1].x - points[i - 1].x) / 2,\n y: (points[i + 1].y - points[i - 1].y) / 2\n };\n };\n const curves = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const ta = tangent(i);\n const tb = tangent(i + 1);\n curves.push({\n x0: a.x,\n y0: a.y,\n cx0: a.x + ta.x / 3,\n cy0: a.y + ta.y / 3,\n cx1: b.x - tb.x / 3,\n cy1: b.y - tb.y / 3,\n x1: b.x,\n y1: b.y\n });\n }\n return curves;\n}\n\nexport {\n svgPath,\n projectLine,\n curvePointAt,\n curveMidpoint,\n curveBounds,\n dashCurves,\n translateCurves,\n ownStrand,\n strandSides,\n bowAround,\n yToXOf,\n PATH_RIBBON_SPACING,\n pathRibbonOffsets,\n selfLinkOf,\n edgeJoinOf,\n computeEdgeCurves,\n routedEdgeCurves\n};\n", "import {\n ownStrand,\n strandSides\n} from \"./chunk-2CVHXFK7.js\";\nimport {\n isBackbone\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/layout/mergeRuns.ts\nfunction flip(strand) {\n return strand === \"+\" ? \"-\" : \"+\";\n}\nfunction mergeRuns(graph, alone = /* @__PURE__ */ new Set()) {\n const sides = graph.edges.map(strandSides);\n const at = /* @__PURE__ */ new Map();\n const attach = (id, side, ei) => {\n const key = `${id}|${side}`;\n const list = at.get(key);\n if (list) {\n list.push(ei);\n } else {\n at.set(key, [ei]);\n }\n };\n graph.edges.forEach((edge, ei) => {\n attach(edge.from, sides[ei].from, ei);\n attach(edge.to, sides[ei].to, ei);\n });\n const joinAfter = (a) => {\n const out = at.get(`${a}|end`);\n if (out?.length !== 1) {\n return void 0;\n }\n const ei = out[0];\n const edge = graph.edges[ei];\n return edge.from === a && edge.to !== a && !alone.has(a) && !alone.has(edge.to) && sides[ei].from === \"end\" && sides[ei].to === \"start\" && at.get(`${edge.to}|start`)?.length === 1 ? ei : void 0;\n };\n const joined = /* @__PURE__ */ new Set();\n const runOf = /* @__PURE__ */ new Map();\n const runs = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const into = at.get(`${node.id}|start`);\n const pred = into?.length === 1 ? graph.edges[into[0]].from : void 0;\n if (runOf.has(node.id) || pred !== void 0 && joinAfter(pred) === into[0]) {\n continue;\n }\n const run = [node.id];\n for (; ; ) {\n const ei = joinAfter(run.at(-1));\n const next = ei === void 0 ? void 0 : graph.edges[ei].to;\n if (next === void 0 || runOf.has(next)) {\n break;\n }\n joined.add(ei);\n run.push(next);\n }\n for (const id of run) {\n runOf.set(id, node.id);\n }\n if (run.length > 1) {\n runs.set(node.id, run);\n }\n }\n for (const node of graph.nodes) {\n if (!runOf.has(node.id)) {\n runOf.set(node.id, node.id);\n }\n }\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const nodes = [];\n for (const node of graph.nodes) {\n if (runOf.get(node.id) !== node.id) {\n continue;\n }\n const run = runs.get(node.id);\n if (!run) {\n nodes.push(node);\n continue;\n }\n const members = run.map((id) => byId.get(id));\n const backbone = members.filter(isBackbone);\n const first = backbone.length ? backbone.reduce((a, b) => a.stable.start <= b.stable.start ? a : b) : members[0];\n nodes.push({\n id: node.id,\n name: node.name,\n length: members.reduce((sum, n) => sum + n.length, 0),\n depth: node.depth,\n stable: first.stable\n });\n }\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n graph.edges.forEach((edge, ei) => {\n const from = runOf.get(edge.from);\n const to = runOf.get(edge.to);\n const side = sides[ei];\n const key = `${from}|${side.from}>${to}|${side.to}`;\n if (joined.has(ei) || seen.has(key)) {\n return;\n }\n seen.add(key);\n edges.push({\n from,\n to,\n ...side.from === \"start\" ? { fromStrand: flip(ownStrand(from)) } : {},\n ...side.to === \"end\" ? { toStrand: flip(ownStrand(to)) } : {}\n });\n });\n return {\n graph: { ...graph, nodes, edges, paths: void 0, pathVisits: void 0 },\n runs\n };\n}\nfunction splitRuns(positions, runs, weightOf) {\n const out = { ...positions };\n for (const [id, members] of runs) {\n const line = positions[id];\n if (!line?.length) {\n continue;\n }\n delete out[id];\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n const weights = members.map((m) => Math.max(weightOf(m), 0));\n const weightSum = weights.reduce((a, b) => a + b, 0) || members.length;\n let from = 0;\n members.forEach((member, k) => {\n const share = weightSum ? weights[k] / weightSum * total : total / members.length;\n const to = k === members.length - 1 ? total : from + share;\n out[member] = slice(line, arc, from, to);\n from = to;\n });\n }\n return out;\n}\nfunction polylineSlice(line, from, to) {\n if (line.length === 0) {\n return [];\n }\n const arc = arcPrefix(line);\n const total = arc.at(-1);\n return slice(line, arc, from * total, to * total);\n}\nfunction polylineMidpoint(line) {\n const arc = arcPrefix(line);\n return pointAt(line, arc, arc.at(-1) / 2);\n}\nfunction arcPrefix(line) {\n const arc = [0];\n for (let i = 1; i < line.length; i++) {\n arc.push(\n arc[i - 1] + Math.hypot(line[i].x - line[i - 1].x, line[i].y - line[i - 1].y)\n );\n }\n return arc;\n}\nfunction pointAt(line, arc, s) {\n if (s <= 0) {\n return { ...line[0] };\n }\n let i = 1;\n while (i < arc.length && arc[i] < s) {\n i++;\n }\n if (i >= arc.length) {\n return { ...line.at(-1) };\n }\n const span = arc[i] - arc[i - 1];\n const t = span > 0 ? (s - arc[i - 1]) / span : 0;\n const a = line[i - 1];\n const b = line[i];\n return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };\n}\nfunction slice(line, arc, from, to) {\n const points = [pointAt(line, arc, from)];\n for (let i = 0; i < line.length; i++) {\n if (arc[i] > from && arc[i] < to) {\n points.push({ ...line[i] });\n }\n }\n points.push(pointAt(line, arc, to));\n return points;\n}\n\nexport {\n mergeRuns,\n splitRuns,\n polylineSlice,\n polylineMidpoint\n};\n", "import {\n computeEdgeCurves,\n edgeJoinOf,\n routedEdgeCurves,\n strandSides\n} from \"./chunk-2CVHXFK7.js\";\nimport {\n firstNodeAtOrAfter,\n isBackbone\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/deletionEdges.ts\nvar MIN_DELETION_BP = 1;\nfunction bypassedPoints(nodePositions, bypassed) {\n return bypassed.flatMap((id) => nodePositions[id] ?? []);\n}\nfunction deletionArcCurves(nodePositions, deletion, axis, route, stranded = false) {\n const from = nodePositions[deletion.from];\n const to = nodePositions[deletion.to];\n if (!from?.length || !to?.length) {\n return void 0;\n }\n return route ? routedEdgeCurves(\n from,\n to,\n route,\n stranded ? strandSides(deletion) : void 0\n ) : computeEdgeCurves(\n from,\n to,\n edgeJoinOf(deletion, stranded),\n 0,\n 0,\n axis,\n bypassedPoints(nodePositions, deletion.bypassed)\n );\n}\nfunction backboneBySequence(graph) {\n const bySequence = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n if (isBackbone(node)) {\n const list = bySequence.get(node.stable.refName);\n if (list) {\n list.push(node);\n } else {\n bySequence.set(node.stable.refName, [node]);\n }\n }\n }\n for (const list of bySequence.values()) {\n list.sort((a, b) => a.stable.start - b.stable.start);\n }\n return bySequence;\n}\nfunction bypassedNodes(nodes, start, end) {\n const bypassed = [];\n if (nodes) {\n for (let i = firstNodeAtOrAfter(nodes, start); i < nodes.length; i++) {\n const node = nodes[i];\n if (node.stable.start >= end) {\n break;\n }\n if (node.stable.start + node.length <= end) {\n bypassed.push(node.id);\n }\n }\n }\n return bypassed;\n}\nfunction skipsBetween(edge, from, to, forwards) {\n const { fromStrand, toStrand } = edge;\n if (fromStrand === void 0 || toStrand === void 0) {\n return true;\n }\n const leavesRight = fromStrand === (from.stable.strand ?? \"+\");\n const arrivesLeft = toStrand === (to.stable.strand ?? \"+\");\n return forwards ? leavesRight && arrivesLeft : !leavesRight && !arrivesLeft;\n}\nfunction deletionEdges(graph) {\n const byId = new Map(graph.nodes.map((n) => [n.id, n]));\n const backbone = backboneBySequence(graph);\n const found = [];\n for (let edgeIndex = 0; edgeIndex < graph.edges.length; edgeIndex++) {\n const edge = graph.edges[edgeIndex];\n const from = byId.get(edge.from);\n const to = byId.get(edge.to);\n if (from !== void 0 && to !== void 0 && isBackbone(from) && isBackbone(to) && from.stable.refName === to.stable.refName) {\n const forwards = from.stable.start <= to.stable.start;\n const [left, right] = forwards ? [from, to] : [to, from];\n const start = left.stable.start + left.length;\n const end = right.stable.start;\n const bp = end - start;\n if (bp >= MIN_DELETION_BP && skipsBetween(edge, from, to, forwards)) {\n const refName = left.stable.refName;\n found.push({\n edgeIndex,\n from: edge.from,\n to: edge.to,\n ...edge.fromStrand ? { fromStrand: edge.fromStrand } : {},\n ...edge.toStrand ? { toStrand: edge.toStrand } : {},\n refName,\n start,\n end,\n bp,\n bypassed: bypassedNodes(backbone.get(refName), start, end)\n });\n }\n }\n }\n return found;\n}\nfunction closableDeletions(graph, deletions) {\n const parent = /* @__PURE__ */ new Map();\n const root = (id) => {\n let r = id;\n while (parent.has(r)) {\n r = parent.get(r);\n }\n if (r !== id) {\n parent.set(id, r);\n }\n return r;\n };\n const join = (a, b) => {\n const [ra, rb] = [root(a), root(b)];\n if (ra !== rb) {\n parent.set(ra, rb);\n }\n return ra !== rb;\n };\n const candidates = new Set(deletions.map((d) => d.edgeIndex));\n graph.edges.forEach((e, ei) => {\n if (!candidates.has(ei)) {\n join(e.from, e.to);\n }\n });\n return new Set(\n deletions.filter((d) => !join(d.from, d.to)).map((d) => d.edgeIndex)\n );\n}\nvar drawings = /* @__PURE__ */ new WeakMap();\nfunction deletionDrawing(graph, deletions, show = true) {\n let byShow = drawings.get(deletions);\n if (!byShow) {\n byShow = /* @__PURE__ */ new Map();\n drawings.set(deletions, byShow);\n }\n let drawing = byShow.get(show);\n if (!drawing) {\n const hidden = show ? /* @__PURE__ */ new Set() : closableDeletions(graph, deletions);\n drawing = {\n shown: deletions.filter((d) => !hidden.has(d.edgeIndex)),\n bypassed: new Map(deletions.map((d) => [d.edgeIndex, d.bypassed])),\n hidden\n };\n byShow.set(show, drawing);\n }\n return drawing;\n}\n\nexport {\n bypassedPoints,\n deletionArcCurves,\n deletionEdges,\n closableDeletions,\n deletionDrawing\n};\n", "import {\n occupancy\n} from \"./chunk-AB35TJST.js\";\nimport {\n polylineMidpoint\n} from \"./chunk-TAMCZHLW.js\";\nimport {\n deletionArcCurves\n} from \"./chunk-N6FECAXP.js\";\nimport {\n curveBounds,\n curveMidpoint\n} from \"./chunk-2CVHXFK7.js\";\n\n// src/graphLabels.ts\nvar MIN_DELETION_LABEL_PX = 26;\nvar PX_PER_NODE_LABEL = 4e4;\nvar MIN_NODE_LABELS = 8;\nvar LEADER_GAP_PX = 8;\nvar LABEL_CHAR_PX = 5.7;\nvar LABEL_PAD_PX = 6;\nvar LABEL_HEIGHT_PX = 13;\nvar LABEL_GAP_PX = 3;\nvar MAX_LABEL_OVERHANG = 2;\nfunction labelHalfWidth(text) {\n return (text.length * LABEL_CHAR_PX + LABEL_PAD_PX + LABEL_GAP_PX) / 2;\n}\nvar LABEL_HALF_HEIGHT = (LABEL_HEIGHT_PX + LABEL_GAP_PX) / 2;\nvar MIN_LABEL_HALF_WIDTH = labelHalfWidth(\"1 bp\");\nfunction boxAt(halfW, x, y) {\n return {\n x0: x - halfW,\n x1: x + halfW,\n y0: y - LABEL_HALF_HEIGHT,\n y1: y + LABEL_HALF_HEIGHT\n };\n}\nfunction rowLabelBox(text, screenY) {\n return {\n x0: 6,\n x1: 6 + text.length * 6.2 + 8 + LABEL_GAP_PX,\n y0: screenY - 8 - LABEL_GAP_PX / 2,\n y1: screenY + 8 + LABEL_GAP_PX / 2\n };\n}\nfunction clamp(v, lo, hi) {\n return hi < lo ? v : Math.min(Math.max(v, lo), hi);\n}\nfunction groupDigits(n) {\n return String(n).replace(/\\B(?=(\\d{3})+$)/g, \",\");\n}\nfunction formatBp(bp) {\n if (bp >= 1e6) {\n return `${+(bp / 1e6).toFixed(1)} Mb`;\n }\n return bp >= 1e3 ? `${+(bp / 1e3).toFixed(1)} kb` : `${bp} bp`;\n}\nfunction deletionText(bp) {\n return `${formatBp(bp)} del`;\n}\nfunction arcOutward(curves, apex, scaleX, scaleY) {\n const first = curves[0];\n const last = curves[curves.length - 1];\n const dx = (apex.x - (first.x0 + last.x1) / 2) * scaleX;\n const dy = (apex.y - (first.y0 + last.y1) / 2) * scaleY;\n const len = Math.hypot(dx, dy);\n return len === 0 ? { x: 0, y: -1 } : { x: dx / len, y: dy / len };\n}\nfunction boxSupport(box, dir) {\n return Math.abs(dir.x) * (box.x1 - box.x0) / 2 + Math.abs(dir.y) * (box.y1 - box.y0) / 2;\n}\nfunction boxRayCrossing(box, dir) {\n const halfW = (box.x1 - box.x0) / 2;\n const halfH = (box.y1 - box.y0) / 2;\n return Math.min(\n dir.x === 0 ? Infinity : halfW / Math.abs(dir.x),\n dir.y === 0 ? Infinity : halfH / Math.abs(dir.y)\n );\n}\nfunction drawnLength(segments, scaleX, scaleY) {\n let total = 0;\n for (let i = 1; i < segments.length; i++) {\n const a = segments[i - 1];\n const b = segments[i];\n total += Math.hypot((b.x - a.x) * scaleX, (b.y - a.y) * scaleY);\n }\n return total;\n}\nfunction runBounds(nodeIds, nodePositions) {\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const id of nodeIds) {\n for (const p of nodePositions[id] ?? []) {\n minX = Math.min(minX, p.x);\n maxX = Math.max(maxX, p.x);\n minY = Math.min(minY, p.y);\n maxY = Math.max(maxY, p.y);\n }\n }\n return minX === Infinity ? void 0 : { minX, minY, maxX, maxY };\n}\nvar nodeOrderCache = /* @__PURE__ */ new WeakMap();\nfunction labelOrder(nodePositions, nodeLengths) {\n const cached = nodeOrderCache.get(nodePositions);\n if (cached?.nodeLengths === nodeLengths) {\n return cached.order;\n }\n const order = Object.entries(nodePositions).filter(([id, segments]) => segments.length > 0 && nodeLengths.has(id)).sort(([a], [b]) => nodeLengths.get(b) - nodeLengths.get(a));\n nodeOrderCache.set(nodePositions, { nodeLengths, order });\n return order;\n}\nvar arcCache = /* @__PURE__ */ new WeakMap();\nfunction arcPlacements(nodePositions, deletions, axis, version, routes, stranded) {\n const { scaleX, scaleY } = axis;\n const cached = arcCache.get(nodePositions);\n if (cached?.deletions === deletions && cached.routes === routes && cached.stranded === stranded && cached.scaleX === scaleX && cached.scaleY === scaleY && cached.version === version) {\n return cached.arcs;\n }\n const arcs = [];\n for (const deletion of [...deletions].sort((a, b) => b.bp - a.bp)) {\n const curves = deletionArcCurves(\n nodePositions,\n deletion,\n axis,\n routes?.[deletion.edgeIndex],\n stranded\n );\n const apex = curves ? curveMidpoint(curves) : void 0;\n if (curves && apex) {\n const { minX, minY, maxX, maxY } = curveBounds(curves);\n arcs.push({\n deletion,\n curves,\n apex,\n // in screen px, so the two axes' units cannot be added by accident\n extent: Math.max((maxX - minX) * scaleX, (maxY - minY) * scaleY)\n });\n }\n }\n arcCache.set(nodePositions, {\n deletions,\n routes,\n stranded,\n scaleX,\n scaleY,\n version,\n arcs\n });\n return arcs;\n}\nfunction sizeLabelCandidates({\n nodePositions,\n nodeLengths,\n deletions,\n deletionRoutes,\n stranded = false,\n alleleDeletions,\n axis,\n translateX,\n translateY,\n width,\n height,\n version = 0\n}) {\n const { scaleX, scaleY } = axis;\n const deletionCandidates = [];\n const nodeCandidates = [];\n for (const { deletion, curves, apex, extent } of arcPlacements(\n nodePositions,\n deletions,\n axis,\n version,\n deletionRoutes,\n stranded\n )) {\n if (extent >= MIN_DELETION_LABEL_PX) {\n const text = deletionText(deletion.bp);\n const halfW = labelHalfWidth(text);\n const box = boxAt(halfW, 0, 0);\n const arcX = apex.x * scaleX + translateX;\n const arcY = apex.y * scaleY + translateY;\n const fits = extent >= halfW * 2 / MAX_LABEL_OVERHANG;\n const bow = arcOutward(curves, apex, scaleX, scaleY);\n const offset = boxSupport(box, bow) + LEADER_GAP_PX;\n const x = fits ? arcX : clamp(arcX + bow.x * offset, halfW, width - halfW);\n const y = fits ? arcY : clamp(\n arcY + bow.y * offset,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n const away = Math.hypot(x - arcX, y - arcY);\n let leader;\n if (away > 0) {\n const dir = { x: (x - arcX) / away, y: (y - arcY) / away };\n const crossing = boxRayCrossing(box, dir);\n leader = {\n arcX,\n arcY,\n labelX: x - dir.x * crossing,\n labelY: y - dir.y * crossing\n };\n }\n deletionCandidates.push({\n label: {\n key: `del:${deletion.edgeIndex}`,\n text,\n x,\n y,\n kind: \"deletion\",\n leader\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n const labelledByDeletion = /* @__PURE__ */ new Set();\n const alleleRuns = [...alleleDeletions ?? []].sort((a, b) => b.bp - a.bp);\n for (const run of alleleRuns) {\n const drawn = runBounds(run.nodeIds, nodePositions);\n if (!drawn) {\n continue;\n }\n const shownLeft = Math.max(drawn.minX * scaleX + translateX, 0);\n const shownRight = Math.min(drawn.maxX * scaleX + translateX, width);\n const shownTop = Math.max(drawn.minY * scaleY + translateY, 0);\n const shownBottom = Math.min(drawn.maxY * scaleY + translateY, height);\n if (shownRight < shownLeft || shownBottom < shownTop) {\n continue;\n }\n const extent = Math.max(shownRight - shownLeft, shownBottom - shownTop);\n const text = deletionText(run.bp);\n const halfW = labelHalfWidth(text);\n if (extent >= halfW * 2 / MAX_LABEL_OVERHANG) {\n for (const id of run.nodeIds) {\n labelledByDeletion.add(id);\n }\n const x = clamp((shownLeft + shownRight) / 2, halfW, width - halfW);\n const y = clamp(\n (shownTop + shownBottom) / 2,\n LABEL_HALF_HEIGHT,\n height - LABEL_HALF_HEIGHT\n );\n deletionCandidates.push({\n label: {\n key: `alleledel:${run.nodeIds.join(\",\")}`,\n text,\n x,\n y,\n kind: \"deletion\"\n },\n box: boxAt(halfW, x, y)\n });\n }\n }\n for (const [id, segments] of labelOrder(nodePositions, nodeLengths)) {\n if (labelledByDeletion.has(id)) {\n continue;\n }\n const { x, y } = polylineMidpoint(segments);\n const screenY = y * scaleY + translateY;\n if (screenY + LABEL_HALF_HEIGHT <= 0 || screenY - LABEL_HALF_HEIGHT >= height) {\n continue;\n }\n const drawn = drawnLength(segments, scaleX, scaleY);\n if (drawn < MIN_LABEL_HALF_WIDTH * 2 / MAX_LABEL_OVERHANG) {\n continue;\n }\n const text = formatBp(nodeLengths.get(id));\n const halfW = labelHalfWidth(text);\n if (drawn >= halfW * 2 / MAX_LABEL_OVERHANG) {\n const screenX = x * scaleX + translateX;\n nodeCandidates.push({\n label: {\n key: `node:${id}`,\n text,\n x: screenX,\n y: screenY,\n kind: \"node\"\n },\n box: boxAt(halfW, screenX, screenY)\n });\n }\n }\n return { deletions: deletionCandidates, nodes: nodeCandidates };\n}\nfunction nodeLabelBudget(width, height) {\n return Math.max(\n MIN_NODE_LABELS,\n Math.floor(width * height / PX_PER_NODE_LABEL)\n );\n}\nfunction placeSizeLabels(candidates, take, budget = Infinity) {\n const labels = [];\n for (const { label, box } of candidates) {\n if (labels.length >= budget) {\n break;\n }\n if (take(box)) {\n labels.push(label);\n }\n }\n return labels;\n}\nfunction graphLabels({\n reserved,\n ...args\n}) {\n const take = occupancy(args, reserved);\n const { deletions, nodes } = sizeLabelCandidates(args);\n return [\n ...placeSizeLabels(deletions, take),\n ...placeSizeLabels(nodes, take, nodeLabelBudget(args.width, args.height))\n ];\n}\n\nexport {\n rowLabelBox,\n groupDigits,\n formatBp,\n sizeLabelCandidates,\n nodeLabelBudget,\n placeSizeLabels,\n graphLabels\n};\n", "import {\n panSNSample\n} from \"./chunk-BPLIXMH7.js\";\nimport {\n REFERENCE_RANK\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/pathAnchoring.ts\nvar RANGE_SUFFIX = /:(\\d+)-\\d+$/;\nfunction pathOrigin(pathName) {\n const match = RANGE_SUFFIX.exec(pathName);\n return match ? { name: pathName.slice(0, match.index), start: +match[1] } : { name: pathName, start: 0 };\n}\nfunction surveyPaths(paths, lengthOf) {\n const anchorPaths = [];\n const pathVisits = /* @__PURE__ */ new Map();\n for (const path of paths) {\n const sample = panSNSample(path.name);\n let pos = path.start;\n for (const step of path.steps) {\n const visit = {\n path: path.name,\n sample,\n start: pos,\n strand: step.strand\n };\n const existing = pathVisits.get(step.id);\n if (existing) {\n existing.push(visit);\n } else {\n pathVisits.set(step.id, [visit]);\n }\n pos += lengthOf(step.id);\n }\n anchorPaths.push({\n name: path.name,\n sample,\n start: path.start,\n length: pos - path.start\n });\n }\n return { anchorPaths, pathVisits };\n}\nfunction chooseReferencePath(anchorPaths, preferred) {\n const named = anchorPaths.find(\n (p) => p.sample === preferred || p.name === preferred\n );\n return named ?? anchorPaths[0];\n}\nvar OFF_REFERENCE_RANK = 1;\nfunction anchorNode(node, visits, reference) {\n let anchored = node;\n if (visits && visits.length > 0) {\n const anchor = visits.find((v) => v.path === reference) ?? visits[0];\n anchored = {\n ...node,\n stable: {\n refName: anchor.path,\n start: anchor.start,\n rank: anchor.path === reference ? REFERENCE_RANK : OFF_REFERENCE_RANK,\n strand: anchor.strand\n },\n samples: [...new Set(visits.map((v) => v.sample))].sort()\n };\n }\n return anchored;\n}\nfunction anchorFromPaths(graph, preferred) {\n const { anchorPaths, pathVisits } = graph;\n const reference = anchorPaths && pathVisits ? chooseReferencePath(anchorPaths, preferred) : void 0;\n return reference && pathVisits ? {\n ...graph,\n nodes: graph.nodes.map(\n (node) => anchorNode(node, pathVisits.get(node.name), reference.name)\n ),\n anchoredBy: \"paths\",\n referencePath: reference.name\n } : graph;\n}\nfunction anchorGraph(graph, preferred) {\n return graph.anchoredBy === \"tags\" ? graph : anchorFromPaths(graph, preferred);\n}\nfunction trimOrigins(graph, kept) {\n if (!graph.anchorPaths) {\n return void 0;\n }\n const lengthOf = new Map(graph.nodes.map((n) => [n.id, n.length]));\n const bp = (ids, end = ids.length) => {\n let sum = 0;\n for (let i = 0; i < end; i++) {\n sum += lengthOf.get(ids[i]) ?? 0;\n }\n return sum;\n };\n const byOrigin = /* @__PURE__ */ new Map();\n for (const path of graph.paths ?? []) {\n const origin = pathOrigin(path.name).name;\n byOrigin.set(origin, [...byOrigin.get(origin) ?? [], path]);\n }\n return graph.anchorPaths.map((o) => {\n const pieces = byOrigin.get(o.name);\n const path = pieces?.length === 1 ? pieces[0] : void 0;\n const stretch = path && kept.get(path.name);\n return path && stretch ? {\n ...o,\n start: o.start + bp(path.nodeIds, stretch.first),\n length: bp(stretch.nodeIds)\n } : o;\n });\n}\n\nexport {\n pathOrigin,\n surveyPaths,\n chooseReferencePath,\n anchorFromPaths,\n anchorGraph,\n trimOrigins\n};\n", "import {\n groupDigits\n} from \"./chunk-3ZZSX5HN.js\";\nimport {\n pathOrigin\n} from \"./chunk-ST2IBUAN.js\";\nimport {\n isGenericSample\n} from \"./chunk-BPLIXMH7.js\";\n\n// src/pathColors.ts\nfunction nameHue(name) {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return Math.abs(hash % 360);\n}\nfunction pathHueAt(index, count) {\n return index * 360 / count;\n}\nvar PATH_SATURATION = 0.7;\nvar PATH_LIGHTNESS = 0.5;\nvar MAX_PATH_COLORS = 16;\nfunction pathColorsLegible(pathCount) {\n return pathCount > 0 && pathCount <= MAX_PATH_COLORS;\n}\nfunction pathCssColor(index, count) {\n return `hsl(${pathHueAt(index, count)}, ${PATH_SATURATION * 100}%, ${PATH_LIGHTNESS * 100}%)`;\n}\nfunction pathGreyCssColor(index, count) {\n const lightness = count > 1 ? 25 + 45 * index / (count - 1) : 45;\n return `hsl(0, 0%, ${lightness}%)`;\n}\nfunction labelTiers(name) {\n const parts = pathOrigin(name).name.split(\"#\");\n const full = parts.join(\"#\");\n if (parts.length >= 3 && isGenericSample(parts[0])) {\n const contig = parts.slice(2).join(\"#\");\n return [contig, contig, full];\n }\n return [parts[0], parts.slice(0, 2).join(\"#\"), full];\n}\nfunction offsetTiers(name, tiers) {\n const { start } = pathOrigin(name);\n return tiers.map((t) => `${t} @${groupDigits(start)}`);\n}\nfunction pathLegend(paths, colors) {\n const firstOf = /* @__PURE__ */ new Map();\n paths.forEach((path, i) => {\n if (!firstOf.has(path.name)) {\n firstOf.set(path.name, i);\n }\n });\n const entries = [...firstOf].map(([name, i]) => ({ name, i }));\n const named = entries.map((e) => labelTiers(e.name));\n const candidates = [0, 1, 2].flatMap((t) => [\n entries.map((_, k) => named[k][t]),\n entries.map((e, k) => offsetTiers(e.name, named[k])[t])\n ]);\n const distinct = candidates.find(\n (labels2) => new Set(labels2).size === entries.length\n );\n const labels = distinct ?? candidates.at(-1);\n return entries.map(({ name, i }, k) => ({\n name,\n label: labels[k],\n color: colors?.[i] ?? pathCssColor(i, paths.length)\n }));\n}\nfunction walkLabelsOf(entries) {\n const seen = /* @__PURE__ */ new Map();\n return new Map(\n [...entries].sort((a, b) => a.label.localeCompare(b.label)).map((e) => {\n const n = (seen.get(e.label) ?? 0) + 1;\n seen.set(e.label, n);\n return [e.name, n > 1 ? `${e.label} (${n})` : e.label];\n })\n );\n}\n\nexport {\n nameHue,\n pathHueAt,\n PATH_SATURATION,\n PATH_LIGHTNESS,\n MAX_PATH_COLORS,\n pathColorsLegible,\n pathCssColor,\n pathGreyCssColor,\n pathLegend,\n walkLabelsOf\n};\n", "// src/colorSchemes.ts\nvar COLOR_SCHEMES = [\n // Mirrors `layoutModes`' 'auto': a value the model resolves rather than a\n // colour of its own. It exists because 'uniform' was the default, so a\n // launched graph opened flat grey and both tutorials spent a step saying \"now\n // pick a colour\" \u2014 one figure literally drives that click. A graph with\n // reference coordinates resolves to 'reference-position', which is the one\n // ramp a linear track beside it can be painted with too; a graph with none\n // keeps 'uniform', because there the ramp would be a hue nothing earned.\n //\n // Resolve through `effectiveColorScheme`; the dropdown reads the raw prop, so\n // \"Auto\" stays selectable and visible as what it is.\n { value: \"auto\", label: \"Auto\" },\n { value: \"uniform\", label: \"Uniform\" },\n { value: \"random\", label: \"Random\" },\n { value: \"rainbow\", label: \"Rainbow\" },\n { value: \"depth\", label: \"Depth\" },\n { value: \"node-length\", label: \"Node length\" },\n { value: \"stable-rank\", label: \"Stable rank\" },\n { value: \"reference-position\", label: \"Reference position\" },\n { value: \"grey\", label: \"Grey\" }\n];\nvar COLOR_SCHEME_VALUES = COLOR_SCHEMES.map((s) => s.value);\nfunction resolveColorScheme(scheme, graph) {\n return scheme !== \"auto\" ? scheme : graph?.anchoredBy ? \"reference-position\" : \"uniform\";\n}\n\nexport {\n COLOR_SCHEMES,\n COLOR_SCHEME_VALUES,\n resolveColorScheme\n};\n", "// src/nodeWidths.ts\nvar NODE_WIDTHS = [\n {\n value: \"depth\",\n label: \"By depth\",\n description: \"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform.\"\n },\n {\n value: \"uniform\",\n label: \"Uniform\",\n description: \"Every node the same thickness.\"\n }\n];\nvar NODE_WIDTH_VALUES = NODE_WIDTHS.map((w) => w.value);\nvar MIN_FACTOR = 0.3;\nvar MAX_FACTOR = 3;\nfunction meanDepth(graph) {\n let weighted = 0;\n let length = 0;\n for (const node of graph.nodes) {\n weighted += node.depth * node.length;\n length += node.length;\n }\n return length > 0 ? weighted / length : 0;\n}\nfunction depthWidthFactor(node, mean) {\n if (!(mean > 0) || !(node.depth > 0)) {\n return 1;\n }\n return Math.min(\n MAX_FACTOR,\n Math.max(MIN_FACTOR, Math.sqrt(node.depth / mean))\n );\n}\nfunction nodeWidthPx(node, contigThickness, nodeWidth, mean) {\n return contigThickness * (nodeWidth === \"depth\" ? depthWidthFactor(node, mean) : 1);\n}\nfunction maxNodeWidthPx(contigThickness, nodeWidth) {\n return contigThickness * (nodeWidth === \"depth\" ? MAX_FACTOR : 1);\n}\nfunction nodeInk(graph, nodeById, contigThickness, nodeWidth) {\n const mean = graph ? meanDepth(graph) : 0;\n return {\n maxHalfWidthPx: maxNodeWidthPx(contigThickness, nodeWidth) / 2,\n halfWidthPx: (id) => {\n const node = nodeById?.get(id);\n return node ? nodeWidthPx(node, contigThickness, nodeWidth, mean) / 2 : contigThickness / 2;\n }\n };\n}\n\nexport {\n NODE_WIDTHS,\n NODE_WIDTH_VALUES,\n meanDepth,\n depthWidthFactor,\n nodeWidthPx,\n maxNodeWidthPx,\n nodeInk\n};\n", "// src/layout/drawnScale.ts\nvar MEAN_NODE_LENGTH = 40;\nvar MIN_TOTAL_GRAPH_LENGTH = 500;\nvar BANDAGE_MINIMUM_NODE_LENGTH = 5;\nfunction drawnNodeLength(opts, length) {\n return Math.max(\n opts.nodeLengthPerMegabase * length / 1e6,\n opts.minimumNodeLength\n );\n}\nfunction bandageAutoScale(graph, minNodeLength = BANDAGE_MINIMUM_NODE_LENGTH) {\n const totalLength = graph.nodes.reduce((sum, n) => sum + n.length, 0);\n const megabases = totalLength / 1e6;\n const target = Math.max(\n graph.nodes.length * MEAN_NODE_LENGTH,\n MIN_TOTAL_GRAPH_LENGTH\n );\n return {\n nodeLengthPerMegabase: megabases > 0 ? target / megabases : 1e4,\n minimumNodeLength: Math.max(BANDAGE_MINIMUM_NODE_LENGTH, minNodeLength),\n edgeLength: 5,\n nodeSegmentLength: 20\n };\n}\nvar PROPORTIONAL_LENGTH = { power: 1, effect: 1 };\nfunction isProportional(law) {\n return law.power === 1 && law.effect === 1;\n}\nfunction drawnLengthFor(graph, law) {\n const count = graph.nodes.length;\n const totalLength = graph.nodes.reduce((sum, n) => sum + n.length, 0);\n const meanBp = count > 0 ? totalLength / count : 0;\n const meanDrawn = count > 0 ? Math.max(count * MEAN_NODE_LENGTH, MIN_TOTAL_GRAPH_LENGTH) / count : MEAN_NODE_LENGTH;\n return (bp) => {\n if (meanBp <= 0) {\n return meanDrawn;\n }\n const relative = (bp / meanBp) ** law.power;\n return Math.max(\n meanDrawn * ((relative - 1) * law.effect + 1),\n BANDAGE_MINIMUM_NODE_LENGTH\n );\n };\n}\nvar LAYOUT_LENGTH_PRECISION = 1e3;\nvar PROPORTIONAL_SPREAD = {\n law: PROPORTIONAL_LENGTH,\n minNodeLength: 0\n};\nfunction layoutScaling(graph, spread = PROPORTIONAL_SPREAD) {\n const { law, minNodeLength } = spread;\n const opts = bandageAutoScale(graph, minNodeLength);\n if (isProportional(law)) {\n return { nodes: graph.nodes, opts };\n }\n const drawn = drawnLengthFor(graph, law);\n return {\n nodes: graph.nodes.map((node) => ({\n ...node,\n length: Math.round(drawn(node.length) * LAYOUT_LENGTH_PRECISION)\n })),\n opts: {\n ...opts,\n nodeLengthPerMegabase: 1e6 / LAYOUT_LENGTH_PRECISION,\n // Bandage's own floor only. A law and a raised floor are alternatives\n // rather than a stack: the law has already lifted the small end, and a\n // floor on top of it would flatten exactly what it just spread.\n minimumNodeLength: BANDAGE_MINIMUM_NODE_LENGTH\n }\n };\n}\nfunction drawnLengthOf(graph, spread = PROPORTIONAL_SPREAD) {\n if (isProportional(spread.law)) {\n const opts = bandageAutoScale(graph, spread.minNodeLength);\n return (bp) => drawnNodeLength(opts, bp);\n }\n return drawnLengthFor(graph, spread.law);\n}\n\nexport {\n MEAN_NODE_LENGTH,\n drawnNodeLength,\n bandageAutoScale,\n PROPORTIONAL_LENGTH,\n isProportional,\n drawnLengthFor,\n PROPORTIONAL_SPREAD,\n layoutScaling,\n drawnLengthOf\n};\n", "import {\n MEAN_NODE_LENGTH,\n PROPORTIONAL_LENGTH\n} from \"./chunk-6JEWNXCQ.js\";\n\n// src/bubbleSpreads.ts\nvar BUBBLE_SPREADS = [\n {\n value: \"auto\",\n label: \"Proportional\",\n description: \"Bandage's own scale: a node draws proportional to its length, so a 1 bp allele is a speck.\",\n law: PROPORTIONAL_LENGTH,\n minNodeFactor: 0\n },\n {\n value: \"open\",\n label: \"Open bubbles\",\n description: \"Give every allele a drawn length, so a bubble reads as two arms rather than a knot.\",\n law: PROPORTIONAL_LENGTH,\n minNodeFactor: 2.5\n },\n {\n value: \"wide\",\n label: \"Wide bubbles\",\n description: \"As open, spread further. Best on a window of a dozen bubbles.\",\n law: PROPORTIONAL_LENGTH,\n minNodeFactor: 10\n },\n {\n value: \"compress\",\n label: \"Compress lengths\",\n description: \"Pull the longest and shortest nodes towards the graph\\u2019s mean, so a cut spanning kb and bp fits one pane.\",\n law: { power: 0.5, effect: 0.5 },\n minNodeFactor: 0\n }\n];\nvar BUBBLE_SPREAD_VALUES = BUBBLE_SPREADS.map((s) => s.value);\nfunction spreadFor(spread) {\n const entry = BUBBLE_SPREADS.find((s) => s.value === spread);\n return {\n law: entry?.law ?? PROPORTIONAL_LENGTH,\n minNodeLength: (entry?.minNodeFactor ?? 0) * MEAN_NODE_LENGTH\n };\n}\n\nexport {\n BUBBLE_SPREADS,\n BUBBLE_SPREAD_VALUES,\n spreadFor\n};\n"],
5
- "mappings": "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",
6
- "names": ["require_mui", "__commonJSMin", "exports", "module", "LABEL_PX", "LABEL_CHAR_PX", "LABEL_PAD", "labelWidth", "text", "overlaps", "a", "b", "offFrame", "box", "frame", "insideFrame", "occupancy", "reserved", "placed", "p", "placeLabels", "candidates", "take", "out", "row", "place", "c", "w", "direction", "tries", "ROW_HEIGHT_PX", "svgPath", "points", "round", "v", "p", "i", "projectLine", "x1", "y1", "x2", "y2", "distance", "d", "vx", "vy", "curvePointAt", "c", "t", "u", "a", "b", "e", "curveMidpoint", "curves", "mid", "curveBounds", "minX", "minY", "maxX", "maxY", "subCurve", "t0", "t1", "p0", "p1", "dt", "d0", "curveTangentAt", "d1", "dashCurves", "dashWorld", "lengths", "total", "spans", "out", "from", "to", "dash", "start", "k", "length", "end", "translateCurves", "dx", "dy", "attachment", "segments", "side", "last", "TANGENT_SPAN_FACTOR", "MAX_TANGENT", "ownStrand", "id", "strandSides", "edge", "own", "strand", "spanOf", "min", "max", "s", "distanceToSpan", "x", "span", "facingSide", "other", "tieBreak", "startGap", "endGap", "facingSides", "fromSegments", "toSegments", "laidSides", "heldFacingSides", "byTo", "sides", "APEX_FRACTION", "BOW_CLEARANCE", "ALONG_FRACTION", "MAX_ROW_BOW_PX", "ROW_HEIGHT_PX", "bowAround", "p1x", "p1y", "p2x", "p2y", "toward", "maxBow", "chord", "ux", "uy", "reach", "minAlong", "maxAlong", "perp", "along", "uncapped", "size", "yToXOf", "scaleX", "scaleY", "PATH_RIBBON_SPACING", "drawnDirection", "yToX", "len", "pathRibbonOffsets", "count", "axis", "spacing", "dir", "offsets", "scaleYOf", "unscaleYOf", "SELF_LOOP_MIN_PX", "SELF_LOOP_MAX_PX", "selfLoopReach", "scale", "nodePx", "selfLinkOf", "edgeJoinOf", "stranded", "self", "hairpinCurves", "attach", "offsetX", "offsetY", "at", "inward", "px", "py", "nearX", "nearY", "apexX", "apexY", "sideX", "sideY", "computeEdgeCurves", "join", "bypassed", "maxBowIn", "loop", "fromAttach", "toAttach", "fromEnd", "toStart", "segDirX", "segDirY", "ext", "perpX", "perpY", "midX", "midY", "cp1x", "cp1y", "cp2x", "cp2y", "fromPrev", "toNext", "dist", "tangentProj", "prev", "towardX", "towardY", "towardToX", "towardToY", "cx1", "cy1", "cx2", "cy2", "bulge", "chordLen", "bulgeX", "bulgeY", "spreadX", "spreadY", "nearerEnd", "routedEdgeCurves", "route", "tangent", "q", "next", "ta", "tb", "flip", "strand", "mergeRuns", "graph", "alone", "sides", "strandSides", "at", "attach", "id", "side", "ei", "key", "list", "edge", "joinAfter", "a", "out", "joined", "runOf", "runs", "node", "into", "pred", "run", "next", "byId", "n", "nodes", "members", "backbone", "isBackbone", "first", "b", "sum", "seen", "edges", "from", "to", "ownStrand", "splitRuns", "positions", "weightOf", "line", "arc", "arcPrefix", "total", "weights", "m", "weightSum", "member", "k", "share", "slice", "polylineSlice", "polylineMidpoint", "pointAt", "i", "s", "span", "t", "points", "MIN_DELETION_BP", "bypassedPoints", "nodePositions", "bypassed", "id", "deletionArcCurves", "deletion", "axis", "route", "stranded", "from", "to", "routedEdgeCurves", "strandSides", "computeEdgeCurves", "edgeJoinOf", "backboneBySequence", "graph", "bySequence", "node", "isBackbone", "list", "a", "b", "bypassedNodes", "nodes", "start", "end", "i", "firstNodeAtOrAfter", "skipsBetween", "edge", "forwards", "fromStrand", "toStrand", "leavesRight", "arrivesLeft", "deletionEdges", "byId", "n", "backbone", "found", "edgeIndex", "left", "right", "bp", "refName", "closableDeletions", "deletions", "parent", "root", "r", "join", "ra", "rb", "candidates", "d", "e", "ei", "drawings", "deletionDrawing", "show", "byShow", "drawing", "hidden", "MIN_DELETION_LABEL_PX", "PX_PER_NODE_LABEL", "MIN_NODE_LABELS", "LEADER_GAP_PX", "LABEL_CHAR_PX", "LABEL_PAD_PX", "LABEL_HEIGHT_PX", "LABEL_GAP_PX", "MAX_LABEL_OVERHANG", "labelHalfWidth", "text", "LABEL_HALF_HEIGHT", "MIN_LABEL_HALF_WIDTH", "boxAt", "halfW", "x", "y", "rowLabelBox", "screenY", "clamp", "v", "lo", "hi", "groupDigits", "n", "formatBp", "bp", "deletionText", "arcOutward", "curves", "apex", "scaleX", "scaleY", "first", "last", "dx", "dy", "len", "boxSupport", "box", "dir", "boxRayCrossing", "halfH", "drawnLength", "segments", "total", "i", "a", "b", "runBounds", "nodeIds", "nodePositions", "minX", "minY", "maxX", "maxY", "id", "p", "nodeOrderCache", "labelOrder", "nodeLengths", "cached", "order", "arcCache", "arcPlacements", "deletions", "axis", "version", "routes", "stranded", "arcs", "deletion", "deletionArcCurves", "curveMidpoint", "curveBounds", "sizeLabelCandidates", "deletionRoutes", "alleleDeletions", "translateX", "translateY", "width", "height", "deletionCandidates", "nodeCandidates", "extent", "arcX", "arcY", "fits", "bow", "offset", "away", "leader", "crossing", "labelledByDeletion", "alleleRuns", "run", "drawn", "shownLeft", "shownRight", "shownTop", "shownBottom", "polylineMidpoint", "screenX", "nodeLabelBudget", "placeSizeLabels", "candidates", "take", "budget", "labels", "label", "RANGE_SUFFIX", "pathOrigin", "pathName", "match", "surveyPaths", "paths", "lengthOf", "anchorPaths", "pathVisits", "path", "sample", "panSNSample", "pos", "step", "visit", "existing", "chooseReferencePath", "preferred", "p", "OFF_REFERENCE_RANK", "anchorNode", "node", "visits", "reference", "anchored", "anchor", "v", "REFERENCE_RANK", "anchorFromPaths", "graph", "anchorGraph", "trimOrigins", "kept", "n", "bp", "ids", "end", "sum", "byOrigin", "origin", "o", "pieces", "stretch", "nameHue", "name", "hash", "i", "pathHueAt", "index", "count", "PATH_SATURATION", "PATH_LIGHTNESS", "MAX_PATH_COLORS", "pathColorsLegible", "pathCount", "pathCssColor", "pathGreyCssColor", "labelTiers", "parts", "pathOrigin", "full", "isGenericSample", "contig", "offsetTiers", "tiers", "start", "t", "groupDigits", "pathLegend", "paths", "colors", "firstOf", "path", "entries", "named", "e", "candidates", "_", "k", "labels", "labels2", "walkLabelsOf", "seen", "a", "b", "n", "COLOR_SCHEMES", "COLOR_SCHEME_VALUES", "s", "resolveColorScheme", "scheme", "graph", "NODE_WIDTHS", "NODE_WIDTH_VALUES", "w", "MIN_FACTOR", "MAX_FACTOR", "meanDepth", "graph", "weighted", "length", "node", "depthWidthFactor", "mean", "nodeWidthPx", "contigThickness", "nodeWidth", "maxNodeWidthPx", "nodeInk", "nodeById", "id", "MEAN_NODE_LENGTH", "MIN_TOTAL_GRAPH_LENGTH", "BANDAGE_MINIMUM_NODE_LENGTH", "drawnNodeLength", "opts", "length", "bandageAutoScale", "graph", "minNodeLength", "megabases", "sum", "n", "target", "PROPORTIONAL_LENGTH", "isProportional", "law", "drawnLengthFor", "count", "totalLength", "meanBp", "meanDrawn", "bp", "relative", "LAYOUT_LENGTH_PRECISION", "PROPORTIONAL_SPREAD", "layoutScaling", "spread", "drawn", "node", "drawnLengthOf", "BUBBLE_SPREADS", "PROPORTIONAL_LENGTH", "BUBBLE_SPREAD_VALUES", "s", "spreadFor", "spread", "entry", "MEAN_NODE_LENGTH"]
7
- }
@@ -1,2 +0,0 @@
1
- import{N as u,T as w,W as S,ca as k,fa as D}from"./chunk-XWGKHQYO.js";import{a as y,b as A,c as N,d as R}from"./chunk-TYJTJGPO.js";import{b as c}from"./chunk-FY3BTKY4.js";var m=[{value:0,label:"Fastest"},{value:1,label:"Fast"},{value:2,label:"Default"},{value:3,label:"Fine"},{value:4,label:"Best"}];var L=c(A(),1),o=c(R(),1),b=c(N(),1),G=c(D(),1),e=c(y(),1),C=(0,G.makeStyles)()({section:{marginBottom:24},formControl:{minWidth:200}});function s({warn:l=!1,children:n}){return(0,e.jsx)(o.Typography,{variant:"caption",color:l?"warning.main":"text.secondary",children:n})}var T=(0,b.observer)(function({model:n}){return n.hasGraph&&!n.usesLayoutEngine?(0,e.jsx)(s,{warn:!0,children:"No effect on this layout: only the force-directed layout is drawn by the engine that reads this."}):null});function g({label:l,checked:n,onChange:t,children:p}){let{classes:i}=C();return(0,e.jsxs)("div",{className:i.section,children:[(0,e.jsx)(o.FormControlLabel,{control:(0,e.jsx)(o.Switch,{checked:n,onChange:d=>{t(d.target.checked)}}),label:l}),p]})}function h({label:l,value:n,options:t,testId:p,sx:i,onChange:d}){let{classes:r}=C();return(0,e.jsxs)(o.FormControl,{className:r.formControl,sx:i,children:[(0,e.jsx)(o.InputLabel,{children:l}),(0,e.jsx)(o.Select,{value:n,label:l,"data-testid":p,onChange:a=>{d(a.target.value)},children:t.map(({value:a,label:v,description:f})=>(0,e.jsx)(o.MenuItem,{value:a,children:f?(0,e.jsx)(o.Tooltip,{title:f,placement:"right",children:(0,e.jsx)("span",{children:v})}):v},a))})]})}var I=l=>l.map(({trackId:n,name:t})=>({value:n,label:t})),P=(0,b.observer)(function(n){let{model:t,open:p,onClose:i,children:d}=n,{classes:r}=C();return(0,e.jsxs)(L.Dialog,{open:p,onClose:i,title:"Graph settings",children:[(0,e.jsxs)(o.DialogContent,{children:[(0,e.jsx)("div",{className:r.section,children:(0,e.jsxs)(o.FormControl,{fullWidth:!0,children:[(0,e.jsx)(o.FormLabel,{component:"legend",children:"Layout quality"}),(0,e.jsx)(o.RadioGroup,{value:t.layoutQuality,onChange:a=>{t.setLayoutQuality(parseInt(a.target.value)),t.recomputeLayout()},children:m.map(a=>(0,e.jsx)(o.FormControlLabel,{value:a.value,control:(0,e.jsx)(o.Radio,{}),label:a.label},a.value))}),(0,e.jsx)(s,{children:"FMMM's iteration budget, the same scale Bandage exposes. Higher is slower: on a thousand-node cut the top setting is seconds rather than tenths."}),(0,e.jsx)(T,{model:t})]})}),(0,e.jsxs)(g,{label:"Draw paths",checked:t.drawPaths,onChange:a=>{t.setDrawPaths(a)},children:[(0,e.jsx)(s,{children:"Color each node and connector by the paths through it, one lane per path in legend order, so a path that skips a node leaves its lane empty"}),t.drawPaths&&!t.effectiveDrawPaths?(0,e.jsx)(s,{warn:!0,children:t.pathCount>u?`Off: ${t.pathCount.toLocaleString()} paths is past the ${u} this can tell apart`:"Off: this graph states no paths"}):null]}),(0,e.jsx)(g,{label:"Mark bubbles",checked:t.showBubbles,onChange:a=>{t.setShowBubbles(a)},children:(0,e.jsx)(s,{children:"A halo along the nodes of each bubble, labelled by what it is, with the label opening the bubble on its own"})}),(0,e.jsxs)(g,{label:"Genes on the backbone",checked:t.showGenes,onChange:a=>{t.setShowGenes(a)},children:[(0,e.jsx)(s,{children:"Exons along the reference nodes that carry them and each gene's name at its midpoint, from the assembly's annotation track"}),t.geneTrackChoices.length>1?(0,e.jsx)(h,{label:"Gene track",value:t.geneTrack?.trackId??"",options:I(t.geneTrackChoices),testId:"graph-gene-track-select",sx:{mt:1},onChange:a=>{t.setGeneTrackId(a),t.reloadGenes()}}):null,t.repeatTrackChoices.length>1?(0,e.jsx)(h,{label:"Repeat track",value:t.repeatTrack?.trackId??"",options:I(t.repeatTrackChoices),testId:"graph-repeat-track-select",sx:{mt:1},onChange:a=>{t.setRepeatTrackId(a),t.reloadRepeats()}}):null]}),t.anchorPaths.length>1?(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(h,{label:"Reference path",value:t.activeReferencePath??"",options:t.anchorPaths.map(({name:a})=>({value:a,label:a})),testId:"graph-reference-path-select",onChange:a=>{t.setReferencePath(a),t.recomputeLayout()}}),(0,e.jsx)(s,{children:"Which path the anchored layouts draw x against. A GFA with no rGFA tags states its coordinates only in its paths, and marks none of them as the reference."})]}):null,(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(h,{label:"Bubble spread",value:t.bubbleSpread,options:k,testId:"graph-bubble-spread-select",onChange:a=>{t.setBubbleSpread(a),t.recomputeLayout()}}),(0,e.jsx)(s,{children:"How far the force layout opens a bubble. A pangenome allele is a few bp, so at Bandage's own scale both arms land inside one node thickness and the graph draws as a rope."}),(0,e.jsx)(T,{model:t})]}),(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(h,{label:"Node width",value:t.nodeWidth,options:S,testId:"graph-node-width-select",onChange:a=>{t.setNodeWidth(a)}}),(0,e.jsx)(s,{children:"Bandage's depth as width. In a cut with walks, depth is how many haplotypes carry the node."})]}),d,(0,e.jsxs)("div",{className:r.section,children:[(0,e.jsx)(h,{label:"Color scheme",value:t.chosenColorScheme,options:w,onChange:a=>{t.setColorScheme(a)}}),t.colorSchemeLock?(0,e.jsxs)(s,{warn:!0,children:["No effect now. ",t.colorSchemeLock.why]}):null]})]}),(0,e.jsx)(o.DialogActions,{children:(0,e.jsx)(o.Button,{variant:"contained",color:"primary",onClick:i,children:"Close"})})]})}),W=P;export{W as a};
2
- //# sourceMappingURL=chunk-ZKLOV6MW.js.map