jbrowse-plugin-graphgenomeviewer 8.3.8 → 8.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{GraphGenomeView-SIOAXXAX.js → GraphGenomeView-GDZY3NRF.js} +2 -2
- package/dist/chunks/{LinearGraphDisplay-56NPMGFE.js → LinearGraphDisplay-VPKAF7RL.js} +2 -2
- package/dist/chunks/chunk-3TGEST7X.js +4 -0
- package/dist/chunks/{chunk-LYJ4FZFC.js.map → chunk-3TGEST7X.js.map} +3 -3
- package/dist/chunks/chunk-CFW2JQMT.js +4 -0
- package/dist/chunks/{chunk-JHUQMHCO.js.map → chunk-CFW2JQMT.js.map} +3 -3
- package/dist/chunks/{chunk-LVRR7SZH.js → chunk-OFUX4PZY.js} +3 -3
- package/dist/chunks/{chunk-LVRR7SZH.js.map → chunk-OFUX4PZY.js.map} +3 -3
- package/dist/chunks/chunk-PXIHCJUD.js +2 -0
- package/dist/chunks/{chunk-LAOGU5VK.js.map → chunk-PXIHCJUD.js.map} +3 -3
- package/dist/chunks/{renderSvg-IZZ2QBWS.js → renderSvg-XIBZTOXX.js} +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/GraphGenomeView/components/WalkRowsOverlay.tsx +9 -20
- package/src/GraphGenomeView/components/usePaneGestures.ts +2 -3
- package/src/GraphGenomeView/model.test.ts +56 -1
- package/src/GraphGenomeView/pane/fitViews.ts +8 -7
- package/src/GraphGenomeView/pane/graphViews.ts +26 -15
- package/src/GraphGenomeView/pane/walkRowViews.ts +16 -28
- package/src/GraphGenomeView/walkRowGroups.test.ts +28 -0
- package/src/GraphGenomeView/walkRowGroups.ts +64 -54
- package/src/GraphGenomeView/walkRowSpans.test.ts +16 -0
- package/src/GraphGenomeView/walkRowSpans.ts +61 -40
- package/src/version.ts +1 -1
- package/dist/chunks/chunk-JHUQMHCO.js +0 -4
- package/dist/chunks/chunk-LAOGU5VK.js +0 -2
- package/dist/chunks/chunk-LYJ4FZFC.js +0 -4
- /package/dist/chunks/{GraphGenomeView-SIOAXXAX.js.map → GraphGenomeView-GDZY3NRF.js.map} +0 -0
- /package/dist/chunks/{LinearGraphDisplay-56NPMGFE.js.map → LinearGraphDisplay-VPKAF7RL.js.map} +0 -0
- /package/dist/chunks/{renderSvg-IZZ2QBWS.js.map → renderSvg-XIBZTOXX.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as C}from"./chunk-
|
|
1
|
+
import{b as C}from"./chunk-PXIHCJUD.js";import"./chunk-BDBFDFIM.js";import"./chunk-3TGEST7X.js";import"./chunk-CFW2JQMT.js";import{p as d}from"./chunk-4NUDB5AY.js";import"./chunk-OFUX4PZY.js";import"./chunk-QX7UU3CV.js";import"./chunk-AK6XQ7XZ.js";import"./chunk-FUKZO5AZ.js";import"./chunk-YGTSPKS5.js";import"./chunk-7CZC4GOZ.js";import"./chunk-YBLNN5FU.js";import"./chunk-YRAIRXY6.js";import"./chunk-AZUO4NZ5.js";import"./chunk-YBLNN5FU.js";import"./chunk-ROZPEXN4.js";import"./chunk-JKW2OX73.js";import"./chunk-3VGXCEMQ.js";import"./chunk-6VNDP3UB.js";import"./chunk-3WG3GF2A.js";import"./chunk-J5RMHLFJ.js";import{i as L}from"./chunk-NIEZKWQV.js";import{A as l,F as G,H as p,e as s,j as v,o as n,x as y}from"./chunk-5Z4VIKXZ.js";import{a as h,b as e,c as r,d as i}from"./chunk-JMBDTNUR.js";var N=d()({paper:{padding:16,margin:8,maxWidth:560,marginInline:"auto",display:"flex",flexDirection:"column",gap:12},row:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8}}),S=i(function({model:a}){let{classes:t}=N();return!a.error&&!a.loadCanceled?r(l,{className:t.paper,"data-testid":"graph-genome-loading",children:[r("div",{className:t.row,children:[e(v,{variant:"h6",message:a.statusMessage||void 0}),a.canCancelLoad?e(n,{size:"small","data-testid":"graph-genome-cancel",onClick:()=>{a.cancelLoad()},children:"Cancel"}):null]}),e(y,{variant:"indeterminate"})]}):a.error?e(l,{className:t.paper,children:e(s,{error:a.error,onReset:()=>{a.retryLoad()}})}):e(l,{className:t.paper,"data-testid":"graph-genome-load-canceled",children:r("div",{className:t.row,children:[e(p,{variant:"h6",children:"Loading canceled"}),e(n,{variant:"contained",size:"small","data-testid":"graph-genome-retry",onClick:()=>{a.retryLoad()},children:"Retry"})]})})}),f=S;var T=`H VN:Z:1.0
|
|
2
2
|
S 1 ACGT
|
|
3
3
|
S 2 GGCC
|
|
4
4
|
S 3 TTAA
|
|
@@ -7,4 +7,4 @@ L 1 + 2 + 0M
|
|
|
7
7
|
L 1 + 3 + 0M
|
|
8
8
|
L 2 + 4 + 0M
|
|
9
9
|
L 3 + 4 + 0M`,E=d()({column:{display:"flex",flexDirection:"column",gap:8},rowEnd:{display:"flex",gap:8,alignItems:"flex-end"},rowCenter:{display:"flex",gap:8,alignItems:"center"},flex1:{flex:1},paper:{padding:16,margin:8,maxWidth:560,marginInline:"auto"},header:{marginBottom:12},footer:{marginTop:12,display:"flex",justifyContent:"flex-end"}}),F=i(function({model:a}){let{classes:t}=E(),[m,w]=L("");function u(){let o=m.trim();o&&a.openGfaLocation({uri:o,locationType:"UriLocation"})}function M(o){let c=o.target.files?.[0];o.target.value="",c&&a.loadGFAFile(c,c.name)}return r(l,{className:t.paper,children:[e("div",{className:t.header,children:e(p,{variant:"h6",children:"Load a GFA graph"})}),r("div",{className:t.column,children:[r("div",{className:t.rowCenter,children:[r(n,{variant:"outlined",component:"label",size:"small",children:["Choose file",e("input",{type:"file",accept:".gfa,.gfa1,.gfa2,.gz",hidden:!0,onChange:o=>{M(o)}})]}),e(p,{variant:"caption",color:"text.secondary",children:"Whole-file GFA; best for small/medium graphs."})]}),r("div",{className:t.rowEnd,children:[e(G,{size:"small",label:"URL",placeholder:"https://example.com/graph.gfa",value:m,onChange:o=>{w(o.target.value)},onKeyDown:o=>{o.key==="Enter"&&u()},className:t.flex1}),e(n,{variant:"contained",onClick:()=>{u()},disabled:!m.trim(),children:"Open"})]})]}),e("div",{className:t.footer,children:e(n,{size:"small",onClick:()=>{a.loadGFA(T,"Example graph")},children:"Load 4-node example"})}),a.error?e(s,{error:a.error}):null]})}),x=F;var B=i(function({model:a}){return a.hasGraph?e(C,{model:a}):a.canRetryLoad?e(f,{model:a}):r(h,{children:[a.isLoading?e(f,{model:a}):null,e("div",{hidden:a.isLoading,children:e(x,{model:a})})]})}),q=B;export{q as default};
|
|
10
|
-
//# sourceMappingURL=GraphGenomeView-
|
|
10
|
+
//# sourceMappingURL=GraphGenomeView-GDZY3NRF.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b as i}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=LinearGraphDisplay-
|
|
1
|
+
import{a,b as i}from"./chunk-PXIHCJUD.js";import"./chunk-BDBFDFIM.js";import"./chunk-3TGEST7X.js";import"./chunk-CFW2JQMT.js";import"./chunk-4NUDB5AY.js";import"./chunk-OFUX4PZY.js";import"./chunk-QX7UU3CV.js";import"./chunk-AK6XQ7XZ.js";import"./chunk-FUKZO5AZ.js";import"./chunk-YGTSPKS5.js";import"./chunk-7CZC4GOZ.js";import"./chunk-YBLNN5FU.js";import"./chunk-YRAIRXY6.js";import"./chunk-AZUO4NZ5.js";import"./chunk-YBLNN5FU.js";import"./chunk-ROZPEXN4.js";import"./chunk-JKW2OX73.js";import"./chunk-3VGXCEMQ.js";import"./chunk-6VNDP3UB.js";import"./chunk-3WG3GF2A.js";import"./chunk-J5RMHLFJ.js";import"./chunk-NIEZKWQV.js";import"./chunk-5Z4VIKXZ.js";import{b as o,d as t}from"./chunk-JMBDTNUR.js";var e=JBrowseExports["@jbrowse/display-kit/DisplayChrome"];var s=e&&e.__esModule?e.default:e;var p=t(function({model:r}){return o(s,{model:r,factory:a,testid:"linear-graph-display","data-layout":r.chosenLayoutMode,"data-cut-tier":r.cutTier,"data-recuts":r.recuts,"data-node-count":r.hasGraph?r.nodeCount:void 0,"data-loading":r.isLoading?"":void 0,style:{width:r.paneWidth,height:r.height,overflow:"hidden"},children:n=>o(i,{model:r,handle:n})})}),c=p;export{c as default};
|
|
2
|
+
//# sourceMappingURL=LinearGraphDisplay-VPKAF7RL.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{Cb as pe,Db as ue,Ea as $e,Fa as Ke,Ga as Xe,Ha as Ue,Ib as Ze,Ka as Fe,Kb as W,Lb as de,Mb as be,Oa as Ye,Pa as se,Qb as Qe,Sa as ze,Sb as et,Ub as tt,Va as Ve,Wa as ie,Wb as fe,_a as le,_b as nt,a as ye,b as X,da as Ae,dc as rt,eb as qe,f as Z,g as Q,jc as ot,la as P,lc as at,ma as oe,mb as je,ob as ce,rb as Je,sa as Ie,ta as Be,ua as We,va as ae,xa as Ge,ya as De,za as He}from"./chunk-OFUX4PZY.js";import{D as re,f as Ee,m as A,p as ne,q as Te,r as I}from"./chunk-QX7UU3CV.js";import{A as _e,E as te,T as Oe,U as Ne,Z as ve,m as T,o as F,p as ee,x as Ce}from"./chunk-FUKZO5AZ.js";import{b as _,c as B}from"./chunk-YGTSPKS5.js";import{c as J}from"./chunk-7CZC4GOZ.js";import{e as K}from"./chunk-3WG3GF2A.js";import{b as Se,d as L,e as Pe,f as Le,g as U,h as Me}from"./chunk-NIEZKWQV.js";import{a as N,b as p,c as m,d as k}from"./chunk-JMBDTNUR.js";var Et="data-pans-with-drawing";function st(e,t){return{position:"absolute",left:0,top:0,pointerEvents:"none",overflow:t,zIndex:e}}var M=k(function({model:t,zIndex:n,overflow:o="hidden",testId:r,pansWithDrawing:a,children:i}){return p("svg",{style:{...st(n,o),userSelect:a?"none":void 0},width:t.paneWidth,height:t.canvasHeight,"data-testid":r,...a?{[Et]:""}:{},children:i})}),it=k(function({model:t,children:n}){let{scaleX:o,scaleY:r,translateX:a,translateY:i}=t;return p("g",{transform:`translate(${a} ${i}) scale(${o} ${r})`,children:n})});function C({model:e,zIndex:t,shown:n=!0,testId:o,paint:r}){let a=Me(null);return Pe(()=>{if(n)return ye(()=>{let i=a.current,s=i?.getContext("2d");if(i&&s){let d=e.paneWidth,c=e.canvasHeight;Ae(at());let u=Ze(i,d,c);s.setTransform(u,0,0,u,0,0),s.clearRect(0,0,d,c),r(s,u)}})},[e,n,r]),p("canvas",{ref:a,"data-testid":n?o:void 0,style:{...st(t),display:n?"block":"none"}})}var Ot=k(function({model:t}){let{bubbleHalos:n,hoveredBubble:o}=t;if(n.length===0)return null;let r=t.contigThickness*Qe;return p(M,{model:t,zIndex:2,testId:"graph-bubble-halos",children:p(it,{model:t,children:n.filter(a=>!a.whole&&(!a.tick||o&&_(a.bubble,o))).map(a=>p("path",{d:a.path,fill:"none",stroke:P[a.kind],strokeOpacity:o&&_(a.bubble,o)?.45:t.bubbleFaded(a)?.06:.22,strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"},B(a.bubble)))})})}),Kn=Ot;var lt=["#d4735e","#d8a94a","#c98aa4"],Nt="#e6e6e6",vt="#555",Tt="bold 11px sans-serif";var he=e=>lt[e]??Nt;function Y(e){let t=String.fromCharCode(65+e%26);return e<26?t:Y(Math.floor(e/26)-1)+t}var z=lt.length;function ct(e,t,n){e.font=Tt,e.textAlign="center",e.textBaseline="middle";for(let{row:o,start:r,bp:a,block:i}of t){let s=n.x(r),d=n.x(r+a)-s,c=n.rowCentre(o)-n.barPx/2;e.fillStyle=he(i),e.fillRect(s,c,d,n.barPx),e.strokeStyle=vt,e.lineWidth=1,e.strokeRect(s+.5,c+.5,d-1,n.barPx-1),d>=12&&n.barPx>=9&&(e.fillStyle="#111",e.fillText(Y(i),s+d/2,n.rowCentre(o)))}}var R=18,we=32,dt="rgba(160, 160, 160, 0.45)",It="#18181c",Bt=6,bt=7,Wt="#b8b8c0",V=Be-4,Gt="rgba(119, 119, 119, 0.85)",Dt=15,pt=10;function j(e){return e.kind==="fill"?e.width??R:R}var ke=e=>e.length>1?3:4;function G(e){switch(e.kind){case"fill":return e.height??8;case"bands":return ke(e.bands)*e.bands.length;case"line":return 3;case"halo":case"overhang":return 10;case"outline":case"tick":return e.height;case"glyph":return 15;case"bracket":return 7;case"blank":return 0}}function Gr(e){return e.reduce((t,n)=>n.swatch?Math.max(t,j(n.swatch)):t,0)}function Dr(e){return e.reduce((t,n)=>n.swatch?Math.max(t,Math.ceil(G(n.swatch))+3):t,Dt)}var y=e=>[{offset:0,color:e}];function q(e,t,n){return{key:e,label:n,swatch:{kind:"fill",stops:y(t),width:pt,height:pt,edged:!0}}}function ut(e){return e.flatMap((t,n)=>[{offset:n/e.length,color:t},{offset:(n+1)/e.length,color:t}])}function Ht(e){let t=e.openBubble;if(!t)return[];let n=e.bubbleHalos.find(o=>_(o.bubble,t));return[{key:"open",label:`open: ${n?.label??"bubble"}`,swatch:n?{kind:"halo",color:P[n.kind]}:{kind:"blank"},closesBubble:!0}]}function $t(e){let t=e.walkLift?void 0:e.referenceRampDomain;if(!t)return[];let n=Math.round(t.start),o=Math.round(t.end);return[{key:"ramp",label:`position on ${e.graph?J(e.graph):"reference"}`,swatch:{kind:"fill",stops:A,width:we},under:`${n.toLocaleString("en-US")}-${o.toLocaleString("en-US")} (${te(o-n)})`},...e.referenceRampDrawsOffReference?[q("off",I,"off the reference")]:[]]}function Kt(e){let t=e.walkLift;if(t)return t.walks.map(r=>re(r.encoding));if(e.effectiveColorScheme==="reference-position")return[A];let n=e.referenceStripBlocks.map(r=>r.colors[0]).filter((r,a,i)=>r!==i[a-1]),o=Math.min(Bt,n.length);return[o===0?y(ne):Array.from({length:o},(r,a)=>({offset:o>1?a/(o-1):0,color:n[o>1?Math.round(a*(n.length-1)/(o-1)):0]}))]}function Xt(e){if(!e.referenceStripShown)return[];let t=(e.walkLift?.walks.length??0)>1;return[{key:"strip",label:`reference${t?", a row per walk":""}`,swatch:{kind:"bands",bands:Kt(e)}},...e.referenceStripFaded?[q("strip-faded",ne,e.walkLift?`reference not on ${t?"that row's walk":e.liftedWalksLabel}`:"reference outside the open bubble")]:[],...e.referenceStripOverhangs?[{key:"overhang",label:"graph runs past this edge",swatch:{kind:"overhang"}}]:[]]}function Ut(e){let t=new Map;for(let n of e.bubbleHalos)if(!n.whole){let o=P[n.kind],r=t.get(o)??new Set;r.add(oe[n.kind]),t.set(o,r)}return[...t].map(([n,o])=>{let r=[...o].join(" or ");return{key:`halo-${n}`,label:r===oe.superbubble?r:`${r} bubble`,swatch:{kind:"halo",color:n}}})}function ft(e){let{graph:t}=e;return t&&_e(e.deletions,e.walkLift).length>0?[{key:"deletion",label:Ce(J(t)),swatch:{kind:"line",color:e.walkLift?dt:It,dashed:!0}}]:[]}function ge(e,t,n,o){return{key:e,label:t,swatch:{kind:"fill",stops:y(o),width:we,height:n}}}var Ft=e=>e>=10?Math.round(e):Math.round(e*10)/10;function Yt(e){let{graph:t,contigThickness:n,depthRange:o}=e;if(!t||!e.drawsNodes||e.walkRowBars)return[];if(e.nodeWidth==="frequency"){let c=t.nodes.some(u=>u.frequency!==void 0);return Oe(n).map(({label:u,widthPx:b})=>ge(`width-${u}`,c?`AF ${u}`:`${u} of haplotypes`,b,I))}if(e.nodeWidth!=="depth"||!o||o.min===o.max)return[];let r=t.paths?.length??0,a=r>0,i=[...new Set([o.max,o.mean,o.min].map(a?Math.round:Ft))],s=i[0]>r,d=c=>s?`${c.toLocaleString("en-US")} walk pass${c===1?"":"es"}`:`${c.toLocaleString("en-US")} walk${c===1?"":"s"}`;return i.map(c=>ge(`width-${c}`,a?d(c):`depth ${c.toLocaleString("en-US")}`,Ne({depth:c},n,"depth",o.mean),I))}function zt(e){let t=e.busiestLink;return!e.drawsNodes||e.walkRowBars||e.linkWidth!=="walks"||t===0?[]:(t>1?[t,1]:[1]).map(o=>ge(`link-width-${o}`,`${o.toLocaleString("en-US")} walk${o===1?"":"s"}`,e.connectorThickness*ve(o,t,"walks"),Gt))}function Vt(e){return e.genePins.some(t=>t.exonsByNode.length>0)?[{key:"exon",label:"exon",swatch:{kind:"outline",color:W,stroke:2,radius:5,height:8}}]:[]}function qt(e){let t=e.foldNote;return t?[{key:"fold",label:t}]:[]}function jt(e){return e.pathLegend.map(({name:t,label:n,color:o})=>({key:`path-${t}`,label:n,swatch:{kind:"line",color:o}}))}function E(e,t,n){return{key:e,label:n,swatch:{kind:"fill",stops:t,height:bt,square:!0}}}function Jt(e){let{roles:t,haplotypeTube:n,bundled:o,values:r,logWidths:a,foldBp:i,forwardReads:s,reverseReads:d,substitution:c,insertion:u,deletion:b}=e.tubeMapKeys,h=e.readsShown,l=[];if(r){l.push(E("value-reference",y(ce),"reference"));for(let{value:f,color:g}of r)l.push(E(`value-${f}`,y(g),f))}return t&&l.push(E("ref",y(ce),"reference"),E("hap",y(n),o?"shared route, \xD7n haplotypes":"haplotype")),s&&l.push(E("fwd",ut(Z),"read on the forward strand")),d&&l.push(E("rev",ut(Q),"read on the reverse strand")),h&&h.shown<h.total&&l.push({key:"sampled",label:`${h.shown.toLocaleString("en-US")} of ${h.total.toLocaleString("en-US")} reads shown`,swatch:{kind:"blank"}}),c&&l.push({key:"sub",label:"read mismatch",swatch:{kind:"glyph",char:"A"}}),u&&l.push({key:"ins",label:"read insertion",swatch:{kind:"glyph",char:"*"}}),b&&l.push(E("del",y("grey"),"read deletion")),i!==void 0&&l.push({key:"tube-fold",label:`haplotype variant < ${te(i)}`,swatch:{kind:"tick",color:Ve(),height:bt,backing:Wt}}),a&&l.push({key:"log",label:"width grows with log of length",swatch:{kind:"bracket"}}),l}function Zt(e){return e.kind==="gene"?{kind:"outline",color:Ie,stroke:1.5,radius:0,height:V}:{kind:"fill",stops:e.kind==="bar"&&e.ramp?A:y(e.fill),height:e.kind==="gap"?e.px:V}}function Qt(e){let t=new Set(e.sharedBlocks?.map(o=>o.block)),n=o=>({kind:"fill",stops:y(he(o)),height:V});return[...[...t].filter(o=>o<z).sort((o,r)=>o-r).map(o=>({key:`block-${o}`,label:`${Y(o)}: off the reference, walked by several rows`,swatch:n(o)})),...[...t].some(o=>o>=z)?[{key:"block-more",label:"more shared blocks",swatch:n(z)}]:[]]}function en(e){let t=e.walkRowBars;if(!t)return[];let n=[t.reference,...t.rows].flatMap(r=>r.call??[]),o=(r,a,i)=>({key:r,label:i,swatch:{kind:"tick",color:a,height:V}});return[...$e(t,{ramp:e.referenceRampDomain,genes:e.walkRowGeneKey,annotation:e.walkRowAnnotation}).map(r=>({key:`rows-${r.label}`,label:r.label,swatch:r.note?void 0:Zt(r.swatch)})),...Qt(e),...n.some(r=>r.spanningReads!==0)?[o("call",Ke,"allele length called for this walk")]:[],...n.some(r=>r.spanningReads===0)?[o("unbacked",Xe,"called with no read spanning it")]:[],...n.some(r=>r.agrees===!1)?[o("disagrees",Ue,`walk and call over ${Math.round(.1*100)}% apart`)]:[]]}function tn(e,t){let n=nt(t,e.walkReference);return{key:`walk-${t.name}`,strong:e.walkLabel(t.name),label:n.delta+n.gaps+n.reversed,swatch:{kind:"fill",stops:re(t.encoding),width:n.shades?we:R},under:n.scale,title:n.hover,walk:t}}function ht(e,t){return[...e.liftPaintsOffReference?[q("lift-off",I,"off the reference")]:[],q("faded",dt,t)]}function nn(e){let t=e.walkLift;if(!t||e.facetPanels)return[];let n=t.walks.map(r=>tn(e,r)),o=e.graph?fe(e.graph,t,e.liftedWalksLabel):`not on ${e.liftedWalksLabel}`;return[...n,...ht(e,o)]}function Hr(e){let{graph:t,facetPanels:n}=e;if(!t||!n)return[];let o=new Set(n.map(r=>fe(t,r,"the panel's walk")));return[...ht(e,o.size===1?[...o][0]:"not on the panel's walk"),...ft(e)]}function $r(e){let t=[{testid:"graph-open-bubble-legend",rows:Ht(e)},{testid:"graph-ramp-legend",rows:$t(e),group:"Color"},{testid:"graph-walk-readout",rows:nn(e),group:"Walks"},{testid:"graph-width-legend",rows:Yt(e),group:"Node thickness"},{testid:"graph-link-width-legend",rows:zt(e),group:"Link thickness"},{testid:"graph-halo-legend",rows:Ut(e),group:"Marks"},{testid:"graph-deletion-legend",rows:ft(e),group:"Marks"},{testid:"graph-gene-legend",rows:Vt(e),group:"Marks"},{testid:"graph-path-legend",rows:jt(e),group:"Paths"},{testid:"graph-tube-map-legend",rows:Jt(e),group:"Tube map"},{testid:"graph-walk-rows-legend",rows:en(e),group:"Walk rows"},{testid:"graph-reference-strip-legend",rows:Xt(e),group:"Top strip"},{testid:"graph-fold-legend",rows:qt(e)}].filter(r=>r.rows.length>0);if(new Set(t.flatMap(r=>r.group??[])).size<2)return t;let o=new Set;return t.map((r,a)=>{let{group:i}=r;return i?o.has(i)?r:(o.add(i),{...r,heading:i}):a===0?r:{...r,spaced:!0}})}function rn(e){return e==="class"?"className":/^(data|aria)-/.test(e)?e:e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}function gt(e,t){if(typeof e=="string")return e;let n={key:t};for(let[o,r]of Object.entries(e.attrs))r!==void 0&&(n[rn(o)]=r);return Se(e.tag,n,e.children.map(gt))}function v(){return Le().replaceAll(/[^\w-]/g,"")}function D({el:e}){return gt(e,0)}var on="rgba(0, 0, 0, 0.28)";function wt({id:e,x:t,y:n,stops:o,width:r,height:a,square:i,edged:s}){let d=s?.5:0,c=u=>p("rect",{x:t+d,y:n+d,width:r-d*2,height:a-d*2,rx:i?0:2,fill:u,stroke:s?on:void 0});return o.length>1?m(N,{children:[p("defs",{children:p("linearGradient",{id:e,children:o.map((u,b)=>p("stop",{offset:u.offset,stopColor:u.color},b))})}),c(`url(#${e})`)]}):c(o[0].color)}function an({swatch:e,x:t,id:n}){switch(e.kind){case"fill":{let r=G(e);return p(wt,{id:n,x:t,y:-5-r/2,stops:e.stops,width:j(e),height:r,square:e.square,edged:e.edged})}case"bands":{let r=ke(e.bands),a=-5-G(e)/2;return p(N,{children:e.bands.map((i,s)=>p(wt,{id:`${n}-${s}`,x:t,y:a+s*r,stops:i,width:R,height:r,square:!0},s))})}case"line":return e.dashed?p("line",{x1:t+1,x2:t+R,y1:-5,y2:-5,stroke:e.color,strokeWidth:3,strokeDasharray:"4 3"}):p("rect",{x:t,y:-5-1.5,width:R,height:3,rx:2,fill:e.color});case"halo":return p("line",{x1:t+5,x2:t+13,y1:-5,y2:-5,stroke:e.color,strokeOpacity:.35,strokeWidth:8,strokeLinecap:"round"});case"outline":{let r=e.stroke/2;return p("rect",{x:t+r,y:-5-e.height/2+r,width:R-e.stroke,height:e.height-e.stroke,rx:Math.max(0,e.radius-r),fill:"none",stroke:e.color,strokeWidth:e.stroke})}case"overhang":return p("path",{transform:`translate(${t} -10)`,d:"M0,5 L8,0 L8,10 Z M18,5 L10,0 L10,10 Z",fill:"#18181c"});case"glyph":return p("text",{x:t+R/2,y:-1,textAnchor:"middle",fontFamily:"monospace",fontSize:12,fill:"currentColor",children:e.char});case"tick":{let r=-5-e.height/2;return m(N,{children:[e.backing?p("rect",{x:t,y:r,width:R,height:e.height,fill:e.backing}):null,p("rect",{x:t+R/2-1,y:r,width:2,height:e.height,fill:e.color})]})}case"bracket":return p("path",{transform:`translate(${t} ${-5-3.5})`,d:`M0.5,6 V1.5 H5.5 V6 M8.5,6 V1.5 H${R-.5} V6`,fill:"none",stroke:Ye()});case"blank":return null}}function Vr({swatch:e}){let t=v(),n=G(e);return p("svg",{width:j(e),height:n,overflow:"visible",style:{flex:"none"},children:p("g",{transform:`translate(0 ${n/2+5})`,children:p(an,{swatch:e,x:0,id:t})})})}var Jr={background:"#fff",padding:"3px 6px",fontSize:11,lineHeight:"15px",whiteSpace:"nowrap"},Zr={display:"flex",alignItems:"center",gap:5},Qr={color:"#666"},sn="#6b7479",eo=4,to={color:sn,fontSize:9.5,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase"};var ln=k(function({model:t}){let n=`exon-outline-${v()}`,o=U(()=>X(()=>{let{genePins:b,walkLift:h}=t,l=h?void 0:t.openBubbleFocus,f=l?b.map(g=>({...g,exonsByNode:g.exonsByNode.filter(w=>l.nodeIds.has(w.nodeId))})):b;return de(f,t.nodeInk.halfWidthPx,h)}),[t]),{scaleX:r,scaleY:a,translateX:i,translateY:s,paneWidth:d,canvasHeight:c}=t,u=be(o.get(),{id:n,width:d,height:c,transform:`translate(${i} ${s}) scale(${r} ${a})`});return u?p(M,{model:t,zIndex:2,testId:"graph-gene-pins",children:p(D,{el:u})}):null}),co=ln;function kt(e,t,n){return{x:e-n/2,y:t-T-F+2,width:n,height:T+F*2-2}}function mt(e,t,n){let o=kt(e.x,e.y,e.w);return t>=o.x&&t<=o.x+o.width&&n>=o.y&&n<=o.y+o.height}function H({x:e,y:t,w:n,text:o,note:r,color:a,edge:i=a,italic:s,dimmed:d,title:c,testId:u,onClick:b,onHover:h}){return m("g",{style:{pointerEvents:b||h?"auto":"none",cursor:b?"pointer":void 0,opacity:d?.35:1},"data-testid":u,onClick:b,onMouseEnter:()=>{h?.(!0)},onMouseLeave:()=>{h?.(!1)},...b&&{role:"button",tabIndex:0,"aria-label":(c??o).replaceAll(`
|
|
2
|
+
`,", "),onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),b())},onFocus:()=>{h?.(!0)},onBlur:()=>{h?.(!1)}},children:[c?p("title",{children:c}):null,p("rect",{...kt(e,t,n),rx:3,fill:"rgba(255,255,255,0.85)",stroke:i,strokeWidth:1}),m("text",{x:e,y:t,fontSize:T,fontFamily:"sans-serif",fontStyle:s?"italic":void 0,fontWeight:s?600:void 0,fill:a,textAnchor:"middle",children:[o,r?p("tspan",{fontStyle:"normal",fontWeight:"normal",children:r}):null]})]})}var Rt="#1c1c22",me=9,Re=3;function No({genes:e},t,n){let o=e.find(i=>mt(i,t,n))?.item;if(!o)return;let{gene:r}=o,a=et(o);return{label:r.name,readout:`${r.refName}:${r.start.toLocaleString()}-${r.end.toLocaleString()}${a?`, ${a} in the cut`:""}`}}var cn=k(function({model:t}){let{bubbles:n,genes:o,ticks:r}=t.overlayLabels;if(n.length+o.length+r.length===0)return null;let{scaleY:a,translateY:i,contigThickness:s,hoveredBubble:d}=t,c=d?r.find(l=>_(l.item.bubble,d)):void 0,u=l=>r[Number(l.getAttribute("data-tick"))],b=l=>t.bubbleFaded(l),h=l=>t.bubbleIsOpen(l.bubble);return m(M,{model:t,zIndex:3,testId:"graph-label-layer",pansWithDrawing:!0,children:[p("g",{"data-testid":"graph-bubble-ticks",onClick:l=>{let f=u(l.target);f&&t.toggleBubble(f.item.bubble)},onMouseOver:l=>{let f=u(l.target);f&&t.setHoveredBubble(f.item.bubble)},onMouseOut:()=>{K(t)&&t.setHoveredBubble(null)},onFocus:l=>{let f=u(l.target);f&&t.setHoveredBubble(f.item.bubble)},onBlur:()=>{K(t)&&t.setHoveredBubble(null)},onKeyDown:l=>{let f=u(l.target);f&&(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),t.toggleBubble(f.item.bubble))},children:r.map(({item:l,x:f,y:g},w)=>p("rect",{"data-tick":w,role:"button",tabIndex:0,"aria-label":`${l.label}, ${h(l)?"close":"open"} bubble`,x:f-Re/2,y:g-me,width:Re,height:me,rx:Re/2,fill:P[l.kind],opacity:b(l)?.35:1,style:{pointerEvents:"all",cursor:"pointer"}},B(l.bubble)))}),o.map(({item:l,x:f,y:g,w,text:x})=>{let{gene:S}=l,{y1:$,y2:_t}=tt({y:g},l.at.y*a+i,s);return m("g",{children:[p("line",{x1:f,x2:f,y1:$,y2:_t,stroke:Rt,strokeWidth:.8,strokeOpacity:.6}),p(H,{x:f,y:g,w,text:S.name,note:x.slice(S.name.length)||void 0,color:Rt,edge:W,italic:!0,testId:"graph-gene-pin-label"})]},`${S.name}-${S.start}`)}),n.map(({item:l,x:f,y:g,w,text:x})=>p(H,{x:f,y:g,w,text:x,color:P[l.kind],dimmed:b(l),title:`${l.label}
|
|
3
|
+
${l.bubble.segmentCount} segments${l.bubble.covering?"":h(l)?" \xB7 click to close":" \xB7 click to open"}`,testId:"graph-bubble-halo-label",onClick:l.bubble.covering?void 0:()=>{t.toggleBubble(l.bubble)},onHover:S=>{K(t)&&t.setHoveredBubble(S?l.bubble:null)}},B(l.bubble))),c?p(H,{x:c.x,y:c.y-me-4,w:ee(c.item.label),text:c.item.label,color:P[c.item.kind],testId:"graph-bubble-tick-label"}):null]})}),vo=cn;function pn(e,t,{lit:n,dpr:o}){let r=t.hostBpFrame;r&&ot(e,t.referenceStripBlocks,r,{width:t.paneWidth,lit:n,dpr:o})}var un=k(function({model:t}){let n=L((o,r)=>{pn(o,t,{lit:t.referenceStripLit,dpr:r})},[t]);return p(C,{model:t,zIndex:5,shown:t.referenceStripShown,testId:"graph-reference-strip",paint:n})}),Do=un;var dn=.45;function bn(e,t,{highlightNode:n}){let o=t.tubeMapPicture,r=t.tubeMapFrame;if(!o||!r)return;let a=t.paneWidth,i=t.tubeMapPanelViews;if(i){fn(e,t,i,n);return}let s={...r,width:a,highlightNode:n,tubeColors:t.tubeMapTubeColors,nodeColors:t.tubeMapNodeColors};le(e,o,s);let d=t.layoutResult?.tubeMap;d&&(pe(e,o,d.graph,s),ue(e,d,s)),ie(e,t.tubeMapDeviations,s),ze(e,t.tubeMapConnectors,t.connectorZoneBottom,s);let{bounds:c}=o;rt(e,t.tubeMapGenes,s,r.y(c.minY)-2);let u=t.tubeMapRulerBoxes;u&&se(e,u,s,r.y(c.maxY)+4,t.layoutResult?.referenceAxis)}function fn(e,t,n,o){let r=t.paneWidth;for(let s of n){if(s.bottom<0||s.titleTop>t.canvasHeight)continue;let d={...s.frame,width:r,highlightNode:o,tubeColors:s.tubeColors,nodeColors:s.nodeColors};le(e,s.picture,d),pe(e,s.picture,s.panel.result.tubeMap.graph,d),ue(e,s.panel.result.tubeMap,d),e.globalAlpha=dn,ie(e,s.deviations,d),e.globalAlpha=1,e.strokeStyle="rgba(0,0,0,0.15)",e.lineWidth=1,e.beginPath(),e.moveTo(0,Math.round(s.titleTop)+.5),e.lineTo(r,Math.round(s.titleTop)+.5),e.stroke(),e.font=Je,e.textAlign="left",e.textBaseline="top",e.fillStyle="rgba(0,0,0,0.85)",e.fillText(s.label,6,s.titleTop+4)}let a=n.at(-1),i=t.tubeMapPanelRulerBoxes;a&&i&&se(e,i,{...a.frame,width:r},a.bottom+4,!0)}var hn=k(function({model:t}){let n=L(o=>{bn(o,t,{highlightNode:t.selectedNode})},[t]);return p(C,{model:t,zIndex:1,shown:!!t.tubeMapPicture,testId:"graph-tube-map",paint:n})}),Jo=hn;var O=JBrowseExports["@jbrowse/render-core/marks"],gn=e=>O!=null&&e in Object(O)?O[e]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+e+"' from '@jbrowse/render-core/marks' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:e});var xt=gn("spanMark");var ea=O&&O.__esModule?O.default:O;var wn=["bars","gaps","hairlines"],yt=e=>(e.match(/-?\d*\.?\d+(?:e[-+]?\d+)?/gi)??[]).map(Number);function St(e){if(e.startsWith("#")){let r=Number.parseInt(e.slice(1),16);return[r>>16&255,r>>8&255,r&255]}let[t=0,n=0,o=0]=yt(e);return e.startsWith("hsl")?Te(t,n/100,o/100).map(r=>r*255):[t,n,o]}var Pt=([e,t,n])=>Ee(Math.round(e),Math.round(t),Math.round(n),255),Lt=e=>Pt(St(e));function kn(){let e=new Map;return t=>{let n=e.get(t);return n===void 0&&(n=Lt(t),e.set(t,n)),n}}function mn(e,t,n,o=Lt){let r=e.start+e.bp,a=He(e,t);if("fill"in a)return[[e.start,r,o(a.fill)]];let i=a.stops.map(St),s=a.stops.map(b=>yt(b)[0]),d=Math.abs(s.at(-1)-s[0]),c=Math.max(1,Math.min(Math.ceil(e.bp*n),Math.ceil(d),e.bp)),u=[];for(let b=0;b<c;b++){let h=(b+.5)/c*(i.length-1),l=Math.min(Math.floor(h),i.length-2),f=i[l],g=i[l+1],w=h-l;u.push([Math.round(e.start+e.bp*b/c),Math.round(e.start+e.bp*(b+1)/c),Pt([0,1,2].map(x=>f[x]+(g[x]-f[x])*w))])}return u}function xe(e){return{x:new Uint32Array(e),x2:new Uint32Array(e),row:new Uint32Array(e),color:new Uint32Array(e),count:0}}function Rn(e,t,n){return{x:e.x.subarray(t,n),x2:e.x2.subarray(t,n),row:e.row.subarray(t,n),color:e.color.subarray(t,n),count:n-t}}var xn=e=>e.gap?De(e.cause).px===ae?"hairlines":"gaps":"bars";function Mt(e,t,n){let o=kn(),r=e.map(c=>Fe(c.runs,t).map(u=>({kind:xn(u),pieces:mn(u,n,t,o)}))),a={bars:0,gaps:0,hairlines:0};for(let c of r)for(let u of c)a[u.kind]+=u.pieces.length;let i={bars:xe(a.bars),gaps:xe(a.gaps),hairlines:xe(a.hairlines)},s={bars:new Uint32Array(e.length+1),gaps:new Uint32Array(e.length+1),hairlines:new Uint32Array(e.length+1)},d=1;return r.forEach((c,u)=>{for(let b of c){let h=i[b.kind];for(let[l,f,g]of b.pieces){let w=h.count++;h.x[w]=l,h.x2[w]=f,h.row[w]=u,h.color[w]=g,d=Math.max(d,f)}}for(let b of wn)s[b][u+1]=i[b].count}),{...i,barRows:s.bars,gapRows:s.gaps,hairlineRows:s.hairlines,longest:d}}function Ct(e,t,n){let{longest:o}=t,r={start:0,end:o,screenStartPx:n.origin*n.scaleX+n.translateX,screenEndPx:(n.origin+o)*n.scaleX+n.translateX,reversed:!1,displayedRegionIndex:0},a={canvasWidth:n.width,canvasHeight:n.height},i=n.rowPx*n.scaleY;for(let{first:s,count:d,rowY:c}of n.blocks){let u=i/2-n.translateY-(c-s*n.rowPx)*n.scaleY,b=(c-n.rowPx/2)*n.scaleY+n.translateY;if(!(b>n.height||b+d*i<0))for(let[h,l,f]of[[t.bars,t.barRows,n.barPx],[t.gaps,t.gapRows,Math.min(We,n.barPx)],[t.hairlines,t.hairlineRows,Math.min(ae,n.barPx)]])xt.paintBlock(e,Rn(h,l[s],l[s+d]),r,a,{rowHeight:i,rowProportion:f/i,minWidthPx:1,seamPx:0,scrollTop:u})}}function yn({model:e}){let t=U(()=>X(()=>e.walkRowBars?Mt(e.walkRowList,e.scaleX,e.referenceRampDomain):void 0),[e]),n=L(o=>{let r=e.walkRowBars,a=e.walkRowPlacement,i=e.walkRowPitch,s=t.get();!r||!a||!i||!s||Ct(o,s,{...e.screenTransform,width:e.paneWidth,height:e.canvasHeight,rowPx:i.rowPx,barPx:i.barPx,origin:r.origin,blocks:a.blocks(r.rows.length+1)})},[e,t]);return p(C,{model:e,zIndex:3,testId:"graph-walk-rows-spans",paint:n})}var Sn="rgba(160, 196, 232, 0.55)",Pn="rgba(160, 140, 220, 0.55)";function Ln({model:e}){let t=L(n=>{let o=e.walkRowRibbons,r=e.walkRowBars,a=e.walkRowPlacement,i=e.walkRowPitch;if(!o||!r||!a||!i)return;let{scaleX:s,scaleY:d,translateX:c,translateY:u}=e.screenTransform,b=l=>(r.origin+l)*s+c,h=i.barPx/2;for(let{row:l,a0:f,a1:g,b0:w,b1:x}of o){let S=a.rowY(l)*d+u+h,$=a.rowY(l+1)*d+u-h;n.fillStyle=w>x?Pn:Sn,n.beginPath(),n.moveTo(b(f),S),n.lineTo(b(g),S),n.lineTo(b(x),$),n.lineTo(b(w),$),n.closePath(),n.fill()}},[e]);return p(C,{model:e,zIndex:2,testId:"graph-walk-rows-ribbons",paint:t})}function Mn({model:e}){let t=L(n=>{let o=e.sharedBlocks,r=e.walkRowBars,a=e.walkRowPlacement,i=e.walkRowPitch;if(!o||!r||!a||!i)return;let{scaleX:s,scaleY:d,translateX:c,translateY:u}=e.screenTransform;ct(n,o,{x:b=>(r.origin+b)*s+c,rowCentre:b=>a.rowY(b)*d+u,barPx:i.barPx})},[e]);return p(C,{model:e,zIndex:3,testId:"graph-walk-rows-blocks",paint:t})}var Cn=k(function({model:t}){let n=t.walkRowBars,o=t.walkRowPlacement,r=t.walkRowPitch;if(!n||!o||!r||!t.hoveredWalkRowText)return null;let a=t.walkRowList,i=a.findIndex(c=>c.name===t.hoveredWalkRow),s=a[i];if(!s)return null;let d=t.toScreen({x:n.origin,y:o.rowY(i)});return p("rect",{"data-testid":"graph-walk-row-hovered",x:d.x-2,y:d.y-r.rowPx/2-1,width:Ge(s)*t.scaleX+4,height:r.rowPx+2,fill:"none",stroke:"#111",strokeWidth:1})}),_n=k(function({model:t,vector:n=!1}){let o=v(),r=t.walkRowBars,a=t.walkRowPlacement,i=t.walkRowPitch;if(!r||!a||!i)return null;let{paneWidth:s,canvasHeight:d}=t,c={...t.screenTransform,width:s,height:d,...i,bars:n};return m(N,{children:[n||!t.walkRowRibbons?null:p(Ln,{model:t}),n?null:p(yn,{model:t}),n||!t.sharedBlocks?null:p(Mn,{model:t}),m(M,{model:t,zIndex:3,overflow:"visible",testId:"graph-walk-rows",children:[je(r,t.walkRowGroups?.sections??[],a.rowY,c,{ramp:t.referenceRampDomain,rowGenes:t.walkRowGenes,idPrefix:o}).map((u,b)=>p(D,{el:u},b)),a.headers.map(u=>p("text",{x:10,y:t.toScreen({x:0,y:u.top}).y+qe-4,fontFamily:"sans-serif",fontSize:11,fontWeight:"bold",fill:"#333","data-testid":"graph-walk-section",children:u.title},u.key)),p(Cn,{model:t})]})]})}),ga=_n;export{Et as a,st as b,M as c,Kn as d,v as e,D as f,j as g,Gr as h,Dr as i,Zt as j,tn as k,Hr as l,$r as m,an as n,Vr as o,Jr as p,Zr as q,Qr as r,sn as s,eo as t,to as u,co as v,No as w,vo as x,pn as y,Do as z,bn as A,Jo as B,ga as C};
|
|
4
|
+
//# sourceMappingURL=chunk-3TGEST7X.js.map
|