jbrowse-plugin-protein3d 0.5.7 → 0.5.8

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.
@@ -24,7 +24,7 @@ ${e}
24
24
  >3DI
25
25
  ${t}
26
26
  `,i=new URLSearchParams;i.append("q",r),i.append("mode","3diaa"),i.append("email","");for(let a of o)i.append("database[]",a);let s=await fetch("https://search.foldseek.com/api/ticket",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i,signal:n}),l=await s.text();if(!s.ok)throw new Error(`Foldseek submission failed: ${s.status} ${l}`);return JSON.parse(l)}async function Md({ticketId:e,signal:t}){let o=new URLSearchParams;o.append("tickets[]",e);let n=await fetch("https://search.foldseek.com/api/tickets",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:o,signal:t});if(!n.ok)throw new Error(`Failed to poll ticket status: ${n.status}`);let i=(await n.json())[0];if(!i)throw new Error("No ticket status returned");return i}async function Id({ticketId:e,signal:t}){return yo(`https://search.foldseek.com/api/result/${e}/0`,{signal:t})}async function $l({ticketId:e,onStatusChange:t,signal:o}){let r=0;for(;r<180;){if(o?.aborted)throw o.reason;let i=await Md({ticketId:e,signal:o});if(i.status==="ERROR")throw console.error("[Foldseek] Search error:",i),new Error(`Foldseek search failed: ${i.error??"Unknown error"}`);if(i.status==="COMPLETE"){t?.("Fetching results...");let s=await Id({ticketId:e,signal:o});return{query:s.queries[0]??{header:"",sequence:""},results:s.results.map(a=>({db:a.db,alignments:a.alignments}))}}t?.(`Search ${i.status.toLowerCase()}... (${r+1}s)`),await Vl(1e3,o),r++}throw new Error("Foldseek search timed out")}var Ed=(0,Zl.makeStyles)()({root:{display:"flex",flexDirection:"column",gap:8},header:{display:"flex",alignItems:"center",gap:8},buttons:{display:"flex",gap:4},checkboxGroup:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:0}});function ci({selected:e,onChange:t,disabled:o}){let{classes:n}=Ed();return lt.default.createElement("div",{className:n.root},lt.default.createElement("div",{className:n.header},lt.default.createElement(Qe.Typography,{variant:"subtitle2"},"Databases to search:"),lt.default.createElement("div",{className:n.buttons},lt.default.createElement(Qe.Button,{size:"small",onClick:()=>{t(mi.map(r=>r.id))},disabled:o},"Select all"),lt.default.createElement(Qe.Button,{size:"small",onClick:()=>{t([])},disabled:o},"Clear"))),lt.default.createElement(Qe.FormGroup,{className:n.checkboxGroup},mi.map(r=>lt.default.createElement(Qe.FormControlLabel,{key:r.id,control:lt.default.createElement(Qe.Checkbox,{size:"small",checked:e.includes(r.id),onChange:()=>{e.includes(r.id)?t(e.filter(i=>i!==r.id)):t([...e,r.id])},disabled:o}),label:r.label}))))}var U=p(x()),I=p(M()),tp=p(rt());var Oe=p(x()),ep=p(He()),Vt=p(M());var Ld={A:"ALA",C:"CYS",D:"ASP",E:"GLU",F:"PHE",G:"GLY",H:"HIS",I:"ILE",K:"LYS",L:"LEU",M:"MET",N:"ASN",P:"PRO",Q:"GLN",R:"ARG",S:"SER",T:"THR",V:"VAL",W:"TRP",Y:"TYR",X:"UNK"};function Xl(e,t){return e.padStart(t," ")}function Fd(e,t){return e.padEnd(t," ")}function di(e){return e.toFixed(3).padStart(8," ")}function Ql(e,t,o="A",n){let r=e.split(",").map(Number),i=[];n&&i.push(`TITLE ${n}`),i.push("REMARK 1 Generated from Foldseek C\u03B1 coordinates");let s=1,l=1;for(let a=0;a<r.length-2;a+=3){let m=r[a],u=r[a+1],c=r[a+2],d=t[l-1]??"X",b=Ld[d]??"UNK";if(m===void 0||u===void 0||c===void 0)break;let y="ATOM "+Xl(String(s),5)+" CA "+Fd(b,3)+" "+o+Xl(String(l),4)+" "+di(m)+di(u)+di(c)+" 1.00 0.00 C";i.push(y),s++,l++}return i.push("END"),i.join(`
27
- `)}function gi(e,t){return!e||!t?!1:e.split(",").length>=3&&t.length>0}Ye();function fi({hit:e,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}){let[l,a]=(0,Oe.useState)(null),m=!!l,u=hn(e.target),c=D=>{a(D.currentTarget)},d=()=>{a(null)},{runLaunch:b,launchError:y}=ao(s,d),w={session:t,view:o,feature:n,selectedTranscript:r,uniprotId:u},h=b(()=>{let D=!e.structureUrl&&gi(e.tCa,e.tSeq)?Ql(e.tCa,e.tSeq,"A",e.target):void 0;jt({...w,url:e.structureUrl,data:D,userProvidedTranscriptSequence:i})}),{launch1D:f,launchMsa:g}=bn({...w,confidenceUrl:ol(e.target)});return!!e.structureUrl||gi(e.tCa,e.tSeq)?Oe.default.createElement(Oe.default.Fragment,null,y?Oe.default.createElement(ep.ErrorMessage,{error:y}):null,Oe.default.createElement(Vt.Button,{size:"small",variant:"outlined",onClick:c},"Load"),Oe.default.createElement(Vt.Menu,{anchorEl:l,open:m,onClose:d},Oe.default.createElement(Vt.MenuItem,{onClick:h},"Launch 3D protein view"),f?Oe.default.createElement(Vt.MenuItem,{onClick:b(f)},"Launch 1D protein annotation view"):null,g?Oe.default.createElement(Vt.MenuItem,{onClick:b(g)},"Launch MSA view (AlphaFoldDB a3m)"):null)):Oe.default.createElement("span",null,"-")}Ye();var qd=(0,tp.makeStyles)()(e=>({root:{display:"flex",flexDirection:"column",gap:16},tableContainer:{maxHeight:400},headerCell:{fontWeight:"bold",backgroundColor:e.palette.mode==="dark"?e.palette.grey[900]:e.palette.grey[100]},noResults:{padding:16,textAlign:"center"}})),Dd=100;function Nd(e){let t=e.results.flatMap(o=>(o.alignments??[]).flat().map(n=>({...n,db:o.db,structureUrl:tl(n.target,o.db)})));return t.sort((o,n)=>(o.eval??1/0)-(n.eval??1/0)),t}function hi({results:e,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}){let{classes:l}=qd(),a=Nd(e),m=a.slice(0,Dd);return m.length===0?U.default.createElement(I.Paper,{className:l.noResults},U.default.createElement(I.Typography,null,"No similar structures found")):U.default.createElement("div",{className:l.root},U.default.createElement(I.Typography,{variant:"subtitle2"},"Found ",a.length," similar structures",a.length>m.length?` (showing top ${m.length})`:""),U.default.createElement(I.TableContainer,{component:I.Paper,className:l.tableContainer},U.default.createElement(I.Table,{size:"small",stickyHeader:!0},U.default.createElement(I.TableHead,null,U.default.createElement(I.TableRow,null,U.default.createElement(I.TableCell,{className:l.headerCell},"Database"),U.default.createElement(I.TableCell,{className:l.headerCell},"Target"),U.default.createElement(I.TableCell,{className:l.headerCell},"Organism"),U.default.createElement(I.TableCell,{className:l.headerCell},"Prob"),U.default.createElement(I.TableCell,{className:l.headerCell},"Seq. Id."),U.default.createElement(I.TableCell,{className:l.headerCell},"Coverage"),U.default.createElement(I.TableCell,{className:l.headerCell},"E-value"),U.default.createElement(I.TableCell,{className:l.headerCell},"Actions"))),U.default.createElement(I.TableBody,null,m.map((u,c)=>U.default.createElement(I.TableRow,{key:`${u.db}-${u.target}-${c}`},U.default.createElement(I.TableCell,null,u.db),U.default.createElement(I.TableCell,null,u.target),U.default.createElement(I.TableCell,null,u.taxName??"-"),U.default.createElement(I.TableCell,null,u.prob!=null?`${(u.prob*100).toFixed(1)}%`:"-"),U.default.createElement(I.TableCell,null,u.seqId!=null?`${u.seqId.toFixed(1)}%`:"-"),U.default.createElement(I.TableCell,null,u.alnLength!=null&&u.qLen!=null?`${(u.alnLength/u.qLen*100).toFixed(1)}%`:"-"),U.default.createElement(I.TableCell,null,u.eval!=null?u.eval.toExponential(2):"-"),U.default.createElement(I.TableCell,null,U.default.createElement(fi,{hit:u,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}))))))))}var et=p(x());function bi(){let[e,t]=(0,et.useState)(),[o,n]=(0,et.useState)(),[r,i]=(0,et.useState)(!1),[s,l]=(0,et.useState)(!1),[a,m]=(0,et.useState)(),[u,c]=(0,et.useState)(""),d=(0,et.useRef)(null);(0,et.useEffect)(()=>()=>{d.current?.abort()},[]);let b=()=>{d.current?.abort();let f=new AbortController;return d.current=f,f.signal},y=async f=>{let g=b();l(!0),m(void 0),c("Predicting 3Di structure...");try{let S=await Kl({aaSequence:f,signal:g});return n(S),S}catch(S){g.aborted||(console.error(S),m(S));return}finally{g.aborted||(l(!1),c(""))}},w=async(f,g,S=Gn)=>{let D=b();i(!0),m(void 0),c("Submitting search...");try{let C=await Yl({aaSequence:f,di3Sequence:g,databases:S,signal:D}),F=await $l({ticketId:C.id,onStatusChange:c,signal:D});return t(F),F}catch(C){D.aborted||(console.error(C),m(C));return}finally{D.aborted||(i(!1),c(""))}},h=()=>{d.current?.abort(),t(void 0),n(void 0),m(void 0),c("")};return{results:e,cleanedAaSequence:o?.aaSequence,di3Sequence:o?.di3Sequence,isLoading:r,isPredicting:s,error:a,statusMessage:u,predictStructure:y,search:w,reset:h}}le();var Vd=(0,np.makeStyles)()({dialogContent:{width:"80em",display:"flex",flexDirection:"column",gap:20},sequenceInput:{fontFamily:"monospace"},di3Section:{display:"flex",flexDirection:"column",gap:8}}),Bd=(0,op.observer)(function({feature:t,session:o,view:n,handleClose:r}){let{classes:i}=Vd(),[s,l]=(0,J.useState)(),[a,m]=(0,J.useState)(Gn),{results:u,cleanedAaSequence:c,di3Sequence:d,isLoading:b,isPredicting:y,error:w,statusMessage:h,predictStructure:f,search:g,reset:S}=bi(),{transcripts:D,isoformSequences:C,isLoading:F,error:j,selectedTranscriptId:ve,setSelectedTranscriptId:q,selectedTranscript:Te,selectedIsoform:oe}=_t({feature:t,view:n}),ge=oe?ie(oe.seq):"",ne=s??ge,re=We=>{q(We),l(void 0)},Ce=ne.trim().length>0&&!y&&!b,De=!!c&&!!d&&a.length>0&&!b,mt=w??j,je=b||y;return J.default.createElement(J.default.Fragment,null,J.default.createElement(ke.DialogContent,{className:i.dialogContent},mt&&!F?J.default.createElement(Vo.ErrorMessage,{error:mt}):null,F?J.default.createElement(Vo.LoadingEllipses,{variant:"subtitle2",message:"Loading transcript sequences"}):null,C?J.default.createElement(J.default.Fragment,null,J.default.createElement(Wt,{val:ve,setVal:re,isoforms:D,isoformSequences:C,feature:t,disabled:je}),J.default.createElement(ke.TextField,{label:"Protein sequence (amino acids)",multiline:!0,rows:4,value:ne,onChange:We=>{l(We.target.value)},placeholder:"MKTVRQERLKSIVRILERSKEPVSGAQLAEEL...",disabled:je,InputProps:{className:i.sequenceInput}})):null,d?J.default.createElement("div",{className:i.di3Section},J.default.createElement(ke.Typography,{variant:"subtitle2"},"3Di structural alphabet (used for searching):"),J.default.createElement(ke.TextField,{multiline:!0,rows:4,value:d,InputProps:{className:i.sequenceInput,readOnly:!0}})):null,J.default.createElement(ci,{selected:a,onChange:m,disabled:je}),h?J.default.createElement(Vo.LoadingEllipses,{variant:"subtitle2",message:h}):null,u?J.default.createElement(hi,{results:u,session:o,view:n,feature:t,selectedTranscript:Te,userProvidedTranscriptSequence:ne,onClose:r}):null),J.default.createElement(ke.DialogActions,null,J.default.createElement(ke.Button,{variant:"contained",color:"secondary",onClick:()=>{r()}},"Cancel"),u?J.default.createElement(ke.Button,{variant:"outlined",onClick:()=>{S()}},"New search"):null,d?J.default.createElement(ke.Button,{variant:"contained",color:"primary",disabled:!De,onClick:()=>{g(c,d,a)}},b?"Searching...":"Search Foldseek"):J.default.createElement(ke.Button,{variant:"contained",color:"primary",disabled:!Ce,onClick:()=>{f(ne.trim())}},y?"Predicting...":"Predict 3Di structure")))}),rp=Bd;var Fe=p(x());yi();var mp=p(M()),Hd=(0,Fe.lazy)(()=>Promise.resolve().then(()=>(up(),pp)));function Bo(){let[e,t]=(0,Fe.useState)(!1);return Fe.default.createElement(Fe.default.Fragment,null,Fe.default.createElement(mp.IconButton,{onClick:()=>{t(!0)}},Fe.default.createElement(On,null)),e?Fe.default.createElement(Fe.Suspense,{fallback:null},Fe.default.createElement(Hd,{handleClose:()=>{t(!1)}})):null)}var cp=p(x());function Ho({children:e,value:t,index:o,...n}){return cp.default.createElement("div",{role:"tabpanel",hidden:t!==o,...n},e)}var K=p(x()),zn=p(He()),Rt=p(M()),dp=p(W()),gp=p(rt());var se=p(x()),ee=p(M());Ye();function wi({choice:e,setChoice:t,structureURL:o,setStructureURL:n,setFile:r,pdbId:i,setPdbId:s}){return se.default.createElement("div",{style:{display:"flex",margin:30}},se.default.createElement(ee.Typography,null,"Open your structure file ",se.default.createElement(Bo,null)),se.default.createElement(ee.FormControl,{component:"fieldset"},se.default.createElement(ee.RadioGroup,{value:e,onChange:l=>{t(l.target.value)}},se.default.createElement(ee.FormControlLabel,{value:"url",control:se.default.createElement(ee.Radio,null),label:"URL"}),se.default.createElement(ee.FormControlLabel,{value:"file",control:se.default.createElement(ee.Radio,null),label:"File"}),se.default.createElement(ee.FormControlLabel,{value:"pdb",control:se.default.createElement(ee.Radio,null),label:"PDB ID"}))),e==="url"?se.default.createElement("div",null,se.default.createElement(ee.Typography,null,"Open a PDB/mmCIF/etc. file from remote URL"),se.default.createElement(ee.TextField,{label:"URL",value:o,onChange:l=>{n(l.target.value)}})):null,e==="file"?se.default.createElement("div",{style:{paddingTop:20}},se.default.createElement(ee.Typography,null,"Open a PDB/mmCIF/etc. file from your local drive"),se.default.createElement(ee.Button,{variant:"outlined",component:"label"},"Choose File",se.default.createElement("input",{type:"file",hidden:!0,onChange:({target:l})=>{let a=l.files?.[0];a&&r(a)}}))):null,e==="pdb"?se.default.createElement(ee.TextField,{value:i,onChange:l=>{let a=l.target.value;s(a),n(Lo(a))},label:"PDB ID"}):null)}Ye();le();var Ud=(0,gp.makeStyles)()(e=>({dialogContent:{marginTop:e.spacing(6),width:"80em"},textAreaFont:{fontFamily:"Courier New"}}));function Gd(){return K.default.createElement("div",{style:{marginBottom:20}},"Manually supply a protein structure (PDB, mmCIF, etc) for a given transcript. You can open the file from the result of running, for example,"," ",K.default.createElement(Ae,{href:"https://github.com/sokrypton/ColabFold"},"ColabFold"),". This plugin will align the protein sequence calculated from the genome to the protein sequence embedded in the structure file which allows for slight differences in these two representations.")}var Od=(0,dp.observer)(function({feature:t,session:o,view:n,handleClose:r,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}){let{classes:l}=Ud(),[a,m]=(0,K.useState)(),[u,c]=(0,K.useState)(""),[d,b]=(0,K.useState)("file"),[y,w]=(0,K.useState)(""),{runLaunch:h,launchError:f}=ao(r),g=d==="file"?a:void 0,S=d==="file"?"":y,{sequences:D,error:C}=No({file:g,url:S}),F=g?.name??S.slice(S.lastIndexOf("/")+1),j=D?.[0],{transcripts:ve,isoformSequences:q,selectedTranscriptId:Te,setSelectedTranscriptId:oe,selectedTranscript:ge,selectedIsoform:ne,error:re}=_t({feature:t,view:n,structureSequence:j}),Ce=re??f??C,De=!!(S||g)&&!!ne&&!!ge,mt=!!ne?.seq&&!!j&&ie(ne.seq)!==j,je=h(async()=>{if(ne&&ge){let We=g?await g.text():void 0;jt({session:o,view:n,feature:t,selectedTranscript:ge,url:S||void 0,data:We,userProvidedTranscriptSequence:ne.seq,alignmentAlgorithm:i})}});return K.default.createElement(K.default.Fragment,null,K.default.createElement(Rt.DialogContent,{className:l.dialogContent},Ce?K.default.createElement(zn.ErrorMessage,{error:Ce}):null,K.default.createElement(Gd,null),K.default.createElement(wi,{choice:d,setChoice:b,structureURL:y,setStructureURL:w,setFile:m,pdbId:u,setPdbId:c}),K.default.createElement("div",{style:{margin:20}},q?j?K.default.createElement(K.default.Fragment,null,K.default.createElement(Wt,{val:Te,setVal:oe,structureSequence:j,isoforms:ve,feature:t,isoformSequences:q}),K.default.createElement(Co,{structureSequence:j,structureName:F,isoformSequences:q})):null:K.default.createElement(zn.LoadingEllipses,{title:"Loading protein sequences",variant:"h6"}))),K.default.createElement(Rt.DialogActions,null,mt?K.default.createElement(Eo,{alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}):null,K.default.createElement(Rt.Button,{variant:"contained",color:"secondary",onClick:()=>{r()}},"Cancel"),K.default.createElement(Rt.Button,{variant:"contained",color:"primary",disabled:!De,onClick:()=>{je()}},"Launch 3-D protein structure view")))}),fp=Od;var hp=p(x());function bp(e,t){let[o,n]=(0,hp.useState)(()=>{let i=localStorage.getItem(e);if(i)try{return JSON.parse(i)}catch{return t}return t});function r(i){n(i),localStorage.setItem(e,JSON.stringify(i))}return[o,r]}function xi({handleClose:e,feature:t,model:o}){let[n,r]=(0,he.useState)(0),[i,s]=bp("jbrowse-protein3d-alignment-algorithm",Io),l=(0,jn.getSession)(o),a=(0,jn.getContainingView)(o);return he.default.createElement(yp.Dialog,{maxWidth:"xl",title:"Launch protein view",titleNode:he.default.createElement(he.default.Fragment,null,"Launch protein view ",he.default.createElement(Bo,null)),open:!0,onClose:e},he.default.createElement(So.Tabs,{value:n,onChange:(m,u)=>{r(u)}},he.default.createElement(So.Tab,{value:0,label:"AlphaFoldDB search"}),he.default.createElement(So.Tab,{value:1,label:"Foldseek search"}),he.default.createElement(So.Tab,{value:2,label:"Open file manually"})),he.default.createElement(Ho,{value:n,index:0},he.default.createElement(Jl,{session:l,view:a,feature:t,handleClose:e,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s})),he.default.createElement(Ho,{value:n,index:1},he.default.createElement(rp,{session:l,view:a,feature:t,handleClose:e})),he.default.createElement(Ho,{value:n,index:2},he.default.createElement(fp,{session:l,view:a,feature:t,handleClose:e,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s})))}function zd(e){return e.name==="LinearBasicDisplay"}function jd(e){return e.views(t=>{let o=t.contextMenuItems;return{contextMenuItems(){let n=t.contextMenuFeature,r=n!==void 0&&["gene","mRNA","transcript"].includes(n.get("type"));return[...o(),...r?[{label:"Launch protein view",icon:Sa,onClick:()=>{let i=(0,Wn.getContainingTrack)(t);(0,Wn.getSession)(i).queueDialog(l=>[xi,{model:i,handleClose:l,feature:n}])}}]:[]]}}})}function Si(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(zd(t)&&(t.stateModel=jd(t.stateModel)),t))}var wp=p(ro()),xp=p(X());Ye();le();function Wd(e){if(typeof e=="string")return e;let{trackId:t}=e;return typeof t=="string"?t:void 0}function _d(e,t){let o=ko(t);return[e.get("name"),e.get("id"),e.id()].some(n=>typeof n=="string"&&(n===t||ko(n)===o))}async function Sp({session:e,uniprotId:t,transcriptId:o,connectedView:n}){if(!o)throw new Error("transcriptId is required to launch from a uniprotId");let r=n?.assembly,i=n?.loc,s=n?.tracks??[];if(!r||!i)throw new Error("connectedView with assembly + loc is required to launch from a uniprotId");let l=await e.assemblyManager.waitForAssembly(r);if(!l)throw new Error(`assembly "${r}" not found`);let a=(0,xp.parseLocString)(i,f=>l.isValidRefName(f));if(a.start===void 0||a.end===void 0)throw new Error(`could not parse a start-end region from loc "${i}"`);let m={assemblyName:r,refName:l.getCanonicalRefName(a.refName)??a.refName,start:a.start,end:a.end},u=s.map(Wd).filter(f=>f!==void 0),c=e.getTracksById(),d="getFeatures",b=[];for(let f of u){let g=c[f];if(!g)continue;let S=await e.rpcManager.call(d,"CoreGetFeatures",{adapterConfig:(0,wp.readConfObject)(g,"adapter"),sessionId:d,regions:[m]});for(let D of S)b.push(...Ot(D))}let y=b.find(f=>_d(f,o));if(!y)throw new Error(`transcript "${o}" not found at ${i} in tracks [${u.join(", ")}]`);if(!(y.get("subfeatures")??[]).some(f=>f.get("type")==="CDS"))throw new Error(`transcript "${o}" has no CDS subfeatures`);let h=await Bn({session:e,assemblyName:r,feature:y});if(!h)throw new Error(`could not translate a protein sequence for "${o}"`);return{url:lo(t),feature:y.toJSON(),userProvidedTranscriptSequence:h}}dn();function vi(e){e.addToExtensionPoint("LaunchView-ProteinView",async({session:t,url:o,uniprotId:n,transcriptId:r,userProvidedTranscriptSequence:i,feature:s,connectedViewId:l,connectedView:a,alignmentAlgorithm:m,displayName:u,height:c,showControls:d,showHighlight:b,zoomToBaseLevel:y,sideBySide:w,initialSelection:h})=>{let f;if(!o&&n)try{f=await Sp({session:t,uniprotId:n,transcriptId:r,connectedView:a})}catch(F){console.error(F),t.notify(`Could not launch protein view: ${F}`,"error");return}let g=o??f?.url;if(!g){let F="No url or uniprotId provided when launching protein view";console.error(F),t.notify(`Could not launch protein view: ${F}`,"error");return}let S=!l&&!!a,D=l??(a?t.addView("LinearGenomeView",{type:"LinearGenomeView",init:a}).id:void 0),C=t.addView("ProteinView",{type:"ProteinView",alignmentAlgorithm:m,displayName:u,height:c,showControls:d,showHighlight:b,zoomToBaseLevel:y,structures:[{url:g,userProvidedTranscriptSequence:f?.userProvidedTranscriptSequence??i??"",feature:f?.feature??s,connectedViewId:D,initialSelection:h}]});S&&cn(t,C.id,w)})}var Um=p(x()),Gm=p(Ti());var Zp=p(Ti()),Xp=p(Ap()),ce=p(Uo());Je();var kp=p(Ke(),1),Ai=(0,Q.createSvgIcon)((0,kp.jsx)("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"}),"Visibility");var Wo=p(eo());Pi();function Ip(e,t){let o=e.obj?.data;if(!o)return;let{B_iso_or_equiv:n}=o.atomicConformation,{offsets:r,count:i}=o.atomicHierarchy.residueAtomSegments,s=t===void 0?i:Math.min(i,t),l=[];for(let a=0;a<s;a++)l.push(n.value(r[a]));return l}function Ep(e){return!!e&&e.length>1&&e.every(t=>t>=0&&t<=100)&&new Set(e).size>1}async function _n({structure:e,plugin:t}){let{model:o}=e.data?await Fn({data:e.data,plugin:t}):e.url?await qn({url:e.url,plugin:t}):{model:void 0},n=o?oi(o):void 0,r=o?Ip(o,n?.[0]?.seq.length):void 0;return{entities:n,confidence:r}}var ki=p(Uo());function Lp(e){let t=new Set;function o(n,r){t.add(n),_n({structure:n,plugin:r}).then(i=>{let s=(0,ki.isAlive)(n)?e.molstarPluginContext:void 0;s===r&&(n.setStructureData(i),n.setLoadedToMolstar(!0)),t.delete(n),s&&s!==r&&!n.loadedToMolstar&&o(n,s)}).catch(i=>{t.delete(n),(0,ki.isAlive)(e)&&(e.setError(i),console.error(i))})}return function(){let{structures:r,molstarPluginContext:i}=e;if(i)for(let s of r)!s.loadedToMolstar&&!t.has(s)&&o(s,i)}}var jo=p(X()),te=p(Uo()),To=p(eo());Mi();var Rn=["A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V","B","Z","X","*"],Kd=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],Fp={};for(let e=0;e<Rn.length;e++){let t={};for(let o=0;o<Rn.length;o++)t[Rn[o]]=Kd[e][o];Fp[Rn[e]]=t}function Oo(e,t){return Fp[e.toUpperCase()]?.[t.toUpperCase()]??-4}var qp=-10,Dp=-.5;function Yd(e,t,o=qp,n=Dp){let r=e.length,i=t.length,s=[],l=[],a=[];for(let h=0;h<=r;h++){s[h]=[],l[h]=[],a[h]=[];for(let f=0;f<=i;f++)s[h][f]=-1/0,l[h][f]=-1/0,a[h][f]=-1/0}s[0][0]=0;for(let h=1;h<=r;h++)l[h][0]=o+(h-1)*n;for(let h=1;h<=i;h++)a[0][h]=o+(h-1)*n;for(let h=1;h<=r;h++)for(let f=1;f<=i;f++){let g=Oo(e[h-1],t[f-1]);s[h][f]=Math.max(s[h-1][f-1],l[h-1][f-1],a[h-1][f-1])+g,l[h][f]=Math.max(s[h-1][f]+o,l[h-1][f]+n),a[h][f]=Math.max(s[h][f-1]+o,a[h][f-1]+n)}let m="",u="",c=r,d=i,b=[s[r][i],l[r][i],a[r][i]],y=Math.max(...b),w=y===s[r][i]?"M":y===l[r][i]?"Ix":"Iy";for(;c>0||d>0;)if(w==="M"&&c>0&&d>0){m=e[c-1]+m,u=t[d-1]+u;let h=Oo(e[c-1],t[d-1]),f=s[c-1][d-1],g=l[c-1][d-1];s[c][d]===f+h?w="M":s[c][d]===g+h?w="Ix":w="Iy",c--,d--}else if(w==="Ix"&&c>0)m=e[c-1]+m,u="-"+u,w=l[c][d]===s[c-1][d]+o?"M":"Ix",c--;else if(d>0)m="-"+m,u=t[d-1]+u,w=a[c][d]===s[c][d-1]+o?"M":"Iy",d--;else break;return{alignedSeq1:m,alignedSeq2:u,score:y}}function $d(e,t,o=qp,n=Dp){let r=e.length,i=t.length,s=[],l=[],a=[],m=0,u=0,c=0;for(let f=0;f<=r;f++){s[f]=[],l[f]=[],a[f]=[];for(let g=0;g<=i;g++)s[f][g]=0,l[f][g]=-1/0,a[f][g]=-1/0}for(let f=1;f<=r;f++)for(let g=1;g<=i;g++){let S=Oo(e[f-1],t[g-1]);s[f][g]=Math.max(0,s[f-1][g-1]+S,l[f-1][g-1]+S,a[f-1][g-1]+S),l[f][g]=Math.max(s[f-1][g]+o,l[f-1][g]+n),a[f][g]=Math.max(s[f][g-1]+o,a[f][g-1]+n);let D=Math.max(s[f][g],l[f][g],a[f][g]);D>m&&(m=D,u=f,c=g)}let d="",b="",y=u,w=c,h=s[y][w]>=l[y][w]&&s[y][w]>=a[y][w]?"M":l[y][w]>=a[y][w]?"Ix":"Iy";for(let f=e.length;f>u;f--)d=e[f-1]+d,b="-"+b;for(let f=t.length;f>c;f--)d="-"+d,b=t[f-1]+b;for(;y>0&&w>0;)if(h==="M"){if(s[y][w]===0)break;d=e[y-1]+d,b=t[w-1]+b;let f=Oo(e[y-1],t[w-1]),g=s[y-1][w-1],S=l[y-1][w-1];s[y][w]===g+f?h="M":s[y][w]===S+f?h="Ix":h="Iy",y--,w--}else h==="Ix"?(d=e[y-1]+d,b="-"+b,l[y][w]===s[y-1][w]+o&&(h="M"),y--):(d="-"+d,b=t[w-1]+b,a[y][w]===s[y][w-1]+o&&(h="M"),w--);for(;y>0;)d=e[y-1]+d,b="-"+b,y--;for(;w>0;)d="-"+d,b=t[w-1]+b,w--;return{alignedSeq1:d,alignedSeq2:b,score:m}}function Zd(e,t){let o=[];for(let n=0;n<e.length;n++){let r=e[n],i=t[n];r!=="-"&&i!=="-"&&r.toUpperCase()===i.toUpperCase()?o.push("|"):r!=="-"&&i!=="-"&&Oo(r,i)>0?o.push(":"):o.push(" ")}return o.join("")}function Np(e,t,o){let{alignedSeq1:n,alignedSeq2:r}=o==="smith_waterman"?$d(e,t):Yd(e,t);return{consensus:Zd(n,r),alns:[{id:"a",seq:n},{id:"b",seq:r}]}}le();function Vp(e,t){return t===void 0||e===t}function Xd(e){let t=e.alns[0].seq,o=e.alns[1].seq,n=0;for(let r=0;r<t.length;r++){let i=t[r],s=o[r];i!=="-"&&s!=="-"&&i?.toUpperCase()===s?.toUpperCase()&&n++}return n}function Bp(e,t,o){let n=ie(e);if(!n||t.length===0)return;let r=t.map(ie),i=r.findIndex(l=>l.length>0&&l===n);if(i!==-1)return{index:i,alignment:{consensus:"|".repeat(n.length),alns:[{id:"seq1",seq:n},{id:"seq2",seq:r[i]}]},matches:n.length};let s;for(let l=0;l<r.length;l++){let a=r[l];if(a.length===0)continue;let m=Np(n,a,o),u=Xd(m);(!s||u>s.matches)&&(s={index:l,alignment:m,matches:u})}return s}tt();oo();var Op=e=>e;var Ei=e=>e;function zp(e){let{structureSeqToTranscriptSeqPosition:t,transcriptSeqToStructureSeqPosition:o}=ws(e),n=Ss(e),r=vs(e),i=lr(n),s=lr(r);return{structureToTranscript:l=>t[l],transcriptToStructure:l=>o[l],structureToAlignment:l=>n[l],alignmentToStructure:l=>i[l],transcriptToAlignment:l=>r[l],alignmentToTranscript:l=>s[l],maps:{structureSeqToTranscriptSeqPosition:t,transcriptSeqToStructureSeqPosition:o,structurePositionToAlignmentMap:n,transcriptPositionToAlignmentMap:r,alignmentToStructurePosition:i,alignmentToTranscriptPosition:s}}}var jp=Object.fromEntries([{name:"alanine",abbreviation:"Ala",singleLetterCode:"A"},{name:"arginine",abbreviation:"Arg",singleLetterCode:"R"},{name:"asparagine",abbreviation:"Asn",singleLetterCode:"N"},{name:"aspartic acid",abbreviation:"Asp",singleLetterCode:"D"},{name:"cysteine",abbreviation:"Cys",singleLetterCode:"C"},{name:"glutamic acid",abbreviation:"Glu",singleLetterCode:"E"},{name:"glutamine",abbreviation:"Gln",singleLetterCode:"Q"},{name:"glycine",abbreviation:"Gly",singleLetterCode:"G"},{name:"histidine",abbreviation:"His",singleLetterCode:"H"},{name:"isoleucine",abbreviation:"Ile",singleLetterCode:"I"},{name:"leucine",abbreviation:"Leu",singleLetterCode:"L"},{name:"lysine",abbreviation:"Lys",singleLetterCode:"K"},{name:"methionine",abbreviation:"Met",singleLetterCode:"M"},{name:"phenylalanine",abbreviation:"Phe",singleLetterCode:"F"},{name:"proline",abbreviation:"Pro",singleLetterCode:"P"},{name:"serine",abbreviation:"Ser",singleLetterCode:"S"},{name:"threonine",abbreviation:"Thr",singleLetterCode:"T"},{name:"tryptophan",abbreviation:"Trp",singleLetterCode:"W"},{name:"tyrosine",abbreviation:"Tyr",singleLetterCode:"Y"},{name:"valine",abbreviation:"Val",singleLetterCode:"V"}].map(e=>[e.abbreviation.toUpperCase(),e]));Fi();Di();bo();function og(e,t){return{structureSeqPos:e.StructureProperties.residue.label_seq_id(t)-1,code:e.StructureProperties.atom.label_comp_id(t),chain:e.StructureProperties.chain.auth_asym_id(t),entityId:e.StructureProperties.entity.id(t)}}async function Ni({plugin:e,kind:t,onUpdate:o}){let n=await Le(),r=e.behaviors.interaction[t].subscribe(i=>{if(n.StructureElement.Loci.is(i.current.loci)){let s=n.StructureElement.Loci.getFirstLocation(i.current.loci);o(s?og(n,s):void 0)}else o(void 0)});return()=>{r.unsubscribe()}}Ye();le();oo();var ag=te.types.model({url:te.types.maybe(te.types.string),data:te.types.maybe(te.types.string),connectedViewId:te.types.maybe(te.types.string),pairwiseAlignment:te.types.frozen(),feature:te.types.frozen(),userProvidedTranscriptSequence:te.types.string,initialSelection:te.types.frozen()}).volatile(()=>({clickedStructureRange:void 0,hoverPosition:void 0,entities:void 0,mappedEntityIndex:0,structureConfidence:void 0,isMouseInAlignment:!1,loadedToMolstar:!1,alignmentHoverRange:void 0,selectedFeatureId:void 0,hiddenFeatureTypes:new Set,expandedFeatureTypes:new Set})).actions(e=>({setStructureData(t){e.entities=t.entities,e.structureConfidence=t.confidence},hideFeatureType(t){e.hiddenFeatureTypes=new Set([...e.hiddenFeatureTypes,t])},showFeatureType(t){let o=new Set(e.hiddenFeatureTypes);o.delete(t),e.hiddenFeatureTypes=o},showAllFeatureTypes(){e.hiddenFeatureTypes=new Set},toggleFeatureTypeExpanded(t){let o=new Set(e.expandedFeatureTypes);o.has(t)?o.delete(t):o.add(t),e.expandedFeatureTypes=o},setLoadedToMolstar(t){e.loadedToMolstar=t}})).views(e=>({get connectedView(){let{views:t}=(0,jo.getSession)(e);return t.find(o=>o.id===e.connectedViewId)}})).actions(e=>({setClickedStructureRange(t){e.clickedStructureRange=t},setAlignmentHoverRange(t){e.alignmentHoverRange=t},setSelectedFeatureId(t){e.selectedFeatureId=t},setHoveredPosition(t){e.hoverPosition=t?{...t,source:"structure"}:void 0},setGenomeHoveredPosition(t){e.hoverPosition=t===void 0?void 0:{structureSeqPos:t,source:"genome"}},setAlignment(t){e.pairwiseAlignment=t},setMappedEntityIndex(t){e.mappedEntityIndex=t},setIsMouseInAlignment(t){e.isMouseInAlignment=t}})).views(e=>({get structureSequences(){return e.entities?.map(t=>t.seq)},get mappedEntity(){return e.entities?.[e.mappedEntityIndex]},get mappedStructureSeq(){return this.mappedEntity?.seq},get mappedEntityId(){return this.mappedEntity?.entityId},get uniprotId(){let{url:t}=e;if(t)return hn(t)},get coordinateMapper(){return e.pairwiseAlignment?zp(e.pairwiseAlignment):void 0},get structureSeqToTranscriptSeqPosition(){return this.coordinateMapper?.maps.structureSeqToTranscriptSeqPosition},get transcriptSeqToStructureSeqPosition(){return this.coordinateMapper?.maps.transcriptSeqToStructureSeqPosition},get structurePositionToAlignmentMap(){return this.coordinateMapper?.maps.structurePositionToAlignmentMap},get transcriptPositionToAlignmentMap(){return this.coordinateMapper?.maps.transcriptPositionToAlignmentMap},get confidenceCells(){let t=e.structureConfidence;return Ep(t)?qi(t,this.structurePositionToAlignmentMap):[]},get hydrophobicityCells(){let t=this.mappedStructureSeq;return t?qi(Rp(ie(t)),this.structurePositionToAlignmentMap):[]},get pairwiseAlignmentToTranscriptPosition(){return this.coordinateMapper?.maps.alignmentToTranscriptPosition},get pairwiseAlignmentToStructurePosition(){return this.coordinateMapper?.maps.alignmentToStructurePosition},get hoverString(){let t=e.hoverPosition;if(t===void 0)return"";let o=this.hoverStructureLetter,n=this.hoverGenomeLetter,r=[];return t.structureSeqPos!==void 0&&r.push(`${t.structureSeqPos+1}`),o&&r.push(`Structure: ${o}`),n&&o&&n!==o&&r.push(`Genome: ${n}`),t.chain&&r.push(`Chain: ${t.chain}`),r.join(", ")},get genomeToTranscriptSeqMapping(){return e.feature?to(new jo.SimpleFeature(e.feature)):void 0},get structureSeqHoverPos(){return e.hoverPosition?.structureSeqPos},get alignmentHoverPos(){let t=this.structureSeqHoverPos;return t===void 0?void 0:this.coordinateMapper?.structureToAlignment(Op(t))},get hoverStructureRange(){let{alignmentHoverRange:t}=e,o=this.pairwiseAlignmentToStructurePosition;if(!t||!o)return;let n=o[t.start],r=o[t.end];return n===void 0||r===void 0?void 0:{start:n,end:r+1}},get hoverHighlightRange(){let t=this.structureSeqHoverPos;return this.hoverStructureRange??(t===void 0?void 0:{start:t,end:t+1})},get clickAlignmentRange(){let t=e.clickedStructureRange,o=this.structurePositionToAlignmentMap;if(!t||!o)return;let n=o[t.start],r=o[t.end-1];return n===void 0||r===void 0?void 0:{start:n,end:r}},structureRangeToGenomeHighlight(t){let o=e.connectedView?.assemblyNames[0],n=this.genomeToTranscriptSeqMapping;if(!t||!o||!n)return[];let r={genomeToTranscriptSeqMapping:n,pairwiseAlignment:e.pairwiseAlignment,structureSeqToTranscriptSeqPosition:this.structureSeqToTranscriptSeqPosition},i=t.end>t.start+1?Li({model:r,structureSeqPos:t.start,structureSeqEndPos:t.end}):Jn({model:r,structureSeqPos:t.start});if(!i)return[];let[s,l]=i;return[{assemblyName:o,refName:n.refName,start:s,end:l}]},get hoverGenomeHighlights(){return e.hoverPosition?.source==="genome"?[]:this.structureRangeToGenomeHighlight(this.hoverHighlightRange)},get clickGenomeHighlights(){return this.structureRangeToGenomeHighlight(e.clickedStructureRange)},get hoverStructureLetter(){let t=e.hoverPosition?.code;if(t)return jp[t]?.singleLetterCode;let o=this.structureSeqHoverPos,n=this.mappedStructureSeq;if(o!==void 0&&n)return n[o]},get hoverGenomeLetter(){let t=this.structureSeqHoverPos;if(t===void 0)return;let o=this.structureSeqToTranscriptSeqPosition?.[t];if(o!==void 0)return e.userProvidedTranscriptSequence[o]},get alignmentMatchSet(){let t=e.pairwiseAlignment?.consensus;if(!t)return;let o=new Set;for(let n=0;n<t.length;n++)(t[n]==="|"||t[n]===":")&&o.add(n);return o},get alignmentPending(){return!e.pairwiseAlignment&&!!e.userProvidedTranscriptSequence&&!!this.structureSequences?.length},get exactMatch(){let t=ie(e.userProvidedTranscriptSequence),o=this.mappedStructureSeq?ie(this.mappedStructureSeq):void 0;return t===o},get parentView(){return(0,te.getParent)(e,2)},get zoomToBaseLevel(){return this.parentView.zoomToBaseLevel},get autoScrollAlignment(){return this.parentView.autoScrollAlignment},get showHighlight(){return this.parentView.showHighlight},get showProteinTracks(){return this.parentView.showProteinTracks},get trackHeight(){return this.parentView.compactTracks?8:12},get trackGap(){return this.parentView.compactTracks?1:2},get alignmentAlgorithm(){return Oa(this.parentView.alignmentAlgorithm)},get molstarPluginContext(){return this.parentView.molstarPluginContext},get structureIndex(){return this.parentView.structures.indexOf(e)},get molstarStructure(){let t=this.structureIndex;return e.loadedToMolstar&&t>=0?this.molstarPluginContext?.managers.structure.hierarchy.current.structures[t]?.cell.obj?.data:void 0}})).actions(e=>({setError(t){e.parentView.setError(t)},hoverAlignmentPosition(t){if(!e.alignmentHoverRange){let o=e.coordinateMapper?.alignmentToStructure(Ei(t));e.setHoveredPosition(o!==void 0?{structureSeqPos:o}:void 0)}},clickAlignmentPosition(t){let o=e.coordinateMapper?.alignmentToStructure(Ei(t));e.setSelectedFeatureId(void 0),o!==void 0?zo({model:e,structureSeqPos:o}).catch(n=>{console.error(n),e.parentView.setError(n)}):e.setClickedStructureRange(void 0)}})).actions(e=>({afterAttach(){e.initialSelection&&e.setClickedStructureRange(e.initialSelection);let t=(n,r)=>{(0,te.addDisposer)(e,(0,To.autorun)(async()=>{let{molstarPluginContext:i}=e;i&&(0,te.addDisposer)(e,await Ni({plugin:i,kind:n,onUpdate:r}))}))};(0,te.addDisposer)(e,(0,To.autorun)(async()=>{try{let{userProvidedTranscriptSequence:n,structureSequences:r,alignmentAlgorithm:i}=e;if(e.pairwiseAlignment||!n||!r?.length)return;let s=Bp(n,r,i);if(!s)return;e.setMappedEntityIndex(s.index),e.setAlignment(s.alignment),s.matches<s.alignment.alns[0].seq.length&&e.parentView.setShowAlignment(!0)}catch(n){console.error(n),e.parentView.setError(n)}})),(0,te.addDisposer)(e,(0,To.autorun)(()=>{let{hovered:n}=(0,jo.getSession)(e),{transcriptSeqToStructureSeqPosition:r,genomeToTranscriptSeqMapping:i,connectedView:s}=e;if(s?.initialized&&i&&Ct(n)){let{hoverPosition:l}=n,a=i.g2p[l.coord-1],m=a===void 0?void 0:r?.[a];e.setGenomeHoveredPosition(m)}else e.hoverPosition?.source==="genome"&&e.setGenomeHoveredPosition(void 0)}));let o=n=>n&&Vp(n.entityId,e.coordinateMapper?e.mappedEntityId:void 0)?n:void 0;t("click",n=>{let r=o(n);r&&(e.setHoveredPosition(r),e.setSelectedFeatureId(void 0),zo({model:e,structureSeqPos:r.structureSeqPos}).catch(i=>{console.error(i),e.parentView.setError(i)}))}),t("hover",n=>{e.setHoveredPosition(o(n))}),(0,te.addDisposer)(e,(0,To.autorun)(async()=>{let{showHighlight:n,clickedStructureRange:r,structureSeqToTranscriptSeqPosition:i,molstarPluginContext:s,molstarStructure:l}=e;l&&s&&i&&await Go({structure:l,plugin:s,channel:"select",entityId:e.mappedEntityId,spec:r?{kind:"range",...r}:n?{kind:"list",residues:Object.keys(i).map(a=>+a)}:void 0})})),(0,te.addDisposer)(e,(0,To.autorun)(async()=>{let{molstarStructure:n,molstarPluginContext:r,hoverHighlightRange:i}=e;n&&r&&await Go({structure:n,plugin:r,channel:"highlight",entityId:e.mappedEntityId,spec:i?{kind:"range",...i}:void 0})}))}})),Kn=ag;bo();var lg="SuperpositionTransform";async function Vi(e){let{QueryContext:t,StructureElement:o,StructureSelection:n,StructureSelectionQueries:r,PluginCommands:i,PluginStateObject:s,tmAlign:l}=await Le(),a=e.managers.structure.hierarchy.current.structures;if(a.length<2)return;let{query:m}=r.trace,c=a.map(y=>{let w=y.cell.obj?.data;if(!w)return;let h=e.helpers.substructureParent.get(w);if(!h)return;let f=e.state.data.selectQ(S=>S.byValue(h).rootOfType(s.Molecule.Structure))[0]?.obj?.data;if(!f)return;let g=n.toLociWithSourceUnits(m(new t(w)));return o.Loci.remap(g,f)}).filter(y=>y!==void 0);if(c.length<2)return;let b=e.managers.structure.hierarchy.findStructure(c[0]?.structure)?.transform?.cell.obj?.data.coordinateSystem;for(let y=1;y<c.length;y++){let w=l(c[0],c[y]),{bTransform:h,tmScoreA:f,tmScoreB:g,rmsd:S,alignedLength:D}=w;await pg(e,a[y].cell,h,b),e.log.info(`TM-align: TM-score=${f.toFixed(4)}/${g.toFixed(4)}, RMSD=${S.toFixed(2)} \xC5, aligned ${D} residues.`)}await new Promise(y=>requestAnimationFrame(y)),await i.Camera.Reset(e)}async function pg(e,t,o,n){let{Mat4:r,StateObjectRef:i,StateTransforms:s}=await Le(),l=i.resolveAndCheck(e.state.data,t);if(!l)return;let a=e.state.data.selectQ(d=>d.byRef(l.transform.ref).subtree().withTransformer(s.Model.TransformStructureConformation))[0],u={transform:{name:"matrix",params:{data:n&&!r.isIdentity(n.matrix)?r.mul(r(),n.matrix,o):o,transpose:!1}}},c=a?e.state.data.build().to(a).update(u):e.state.data.build().to(t).insert(s.Model.TransformStructureConformation,u,{tags:lg});await e.runTask(e.state.data.updateTree(c))}var Yp="proteinView-settings",$p=["showAlignment","showProteinTracks","showHighlight","zoomToBaseLevel","autoScrollAlignment","compactTracks"];function ug(){return ce.types.compose("ProteinView",Zp.BaseViewModel,ce.types.model({id:Xp.ElementId,type:ce.types.literal("ProteinView"),structures:ce.types.array(Kn),showControls:!1,height:ce.types.optional(ce.types.number,650),showHighlight:!1,zoomToBaseLevel:!0,autoScrollAlignment:!1,colorScheme:ce.types.optional(ce.types.enumeration("ColorScheme",Cp),"default"),showAlignment:!0,showProteinTracks:!0,compactTracks:!0,alignmentAlgorithm:ce.types.optional(ce.types.string,Io),connectedMsaViewId:ce.types.maybe(ce.types.string),init:ce.types.frozen()})).volatile(()=>({error:void 0,molstarPluginContext:void 0,showManualAlignmentDialog:!1,showAddStructureDialog:!1})).actions(e=>({setHeight(t){return e.height=t,t},setShowAlignment(t){e.showAlignment=t},setShowControls(t){e.showControls=t},setError(t){e.error=t},setShowHighlight(t){e.showHighlight=t},setShowProteinTracks(t){e.showProteinTracks=t},setCompactTracks(t){e.compactTracks=t},setZoomToBaseLevel(t){e.zoomToBaseLevel=t},setAutoScrollAlignment(t){e.autoScrollAlignment=t},setAlignmentAlgorithm(t){e.alignmentAlgorithm=t},setColorScheme(t){e.colorScheme=t},setMolstarPluginContext(t){if(t!==e.molstarPluginContext)for(let o of e.structures)o.setLoadedToMolstar(!1);e.molstarPluginContext=t},setShowManualAlignmentDialog(t){e.showManualAlignmentDialog=t},setShowAddStructureDialog(t){e.showAddStructureDialog=t},setInit(t){e.init=t},setConnectedMsaViewId(t){e.connectedMsaViewId=t},addStructure(t){e.structures.push(Kn.create({url:t.url,data:t.data,userProvidedTranscriptSequence:""}))}})).actions(e=>({async addStructureAndSuperpose(t){let{molstarPluginContext:o}=e;if(!o)return;let n=Kn.create({url:t.url,data:t.data,userProvidedTranscriptSequence:""});n.setLoadedToMolstar(!0),e.structures.push(n);try{n.setStructureData(await _n({structure:t,plugin:o})),e.structures.length>1&&await Vi(o)}catch(r){e.setError(r),console.error(r)}}})).actions(e=>({afterAttach(){try{let t=localStorage.getItem(Yp);if(t){let o=JSON.parse(t);for(let n of $p)o[n]!==void 0&&(e[n]=o[n])}}catch(t){console.error("Failed to restore protein view settings",t)}(0,ce.addDisposer)(e,(0,Wo.autorun)(()=>{try{let t={};for(let o of $p)t[o]=e[o];localStorage.setItem(Yp,JSON.stringify(t))}catch(t){console.error("Failed to save protein view settings",t)}})),(0,ce.addDisposer)(e,(0,Wo.autorun)(()=>{let{init:t}=e;if(t){let{structures:o,showControls:n,showAlignment:r}=t;if(o)for(let i of o)e.addStructure(i);n!==void 0&&e.setShowControls(n),r!==void 0&&e.setShowAlignment(r),e.setInit(void 0)}})),(0,ce.addDisposer)(e,(0,Wo.autorun)(()=>{let{molstarPluginContext:t,colorScheme:o}=e,n=e.structures.filter(r=>r.structureSequences!==void 0).length;t&&n>0&&Mp({plugin:t,colorScheme:o}).catch(r=>{console.error(r),e.setError(r)})})),(0,ce.addDisposer)(e,(0,Wo.autorun)(Lp(e)))}})).views(e=>({get primaryStructure(){return e.structures[0]},menuItems(){return[{label:"Pairwise alignment",icon:Ai,type:"checkbox",checked:e.showAlignment,onClick:()=>{e.setShowAlignment(!e.showAlignment)}},{label:"Protein feature tracks",icon:Ai,type:"checkbox",checked:e.showProteinTracks,onClick:()=>{e.setShowProteinTracks(!e.showProteinTracks)}},{label:"Color scheme...",subMenu:vo.map(t=>({label:t.label,type:"radio",checked:e.colorScheme===t.value,onClick:()=>{e.setColorScheme(t.value)}}))},{label:"Add structure...",onClick:()=>{e.setShowAddStructureDialog(!0)}},{label:"Advanced...",icon:so,subMenu:[{label:"Pairwise alignment as green highlight",type:"checkbox",checked:e.showHighlight,onClick:()=>{e.setShowHighlight(!e.showHighlight)}},{label:"Show all protein feature tracks",onClick:()=>{for(let t of e.structures)t.showAllFeatureTypes()}},{label:"Import manual alignment...",onClick:()=>{e.setShowManualAlignmentDialog(!0)}},{label:"Re-align structures (TM-align)",onClick:()=>{e.molstarPluginContext&&Vi(e.molstarPluginContext).catch(t=>{console.error(t),e.setError(t)})}},{label:"Zoom to base level on click",type:"checkbox",checked:e.zoomToBaseLevel,onClick:()=>{e.setZoomToBaseLevel(!e.zoomToBaseLevel)}},{label:"Auto-scroll alignment to hovered position",type:"checkbox",checked:e.autoScrollAlignment,onClick:()=>{e.setAutoScrollAlignment(!e.autoScrollAlignment)}}]}]}}))}var Qp=ug;var Hg=(0,Um.lazy)(()=>Promise.resolve().then(()=>(Hm(),Bm)));function Ki(e){e.addViewType(()=>new Gm.ViewType({name:"ProteinView",displayName:"Protein view",stateModel:Qp(),ReactComponent:Hg}))}var Km=p(nn());var Om=p(ro());var Ug=(0,Om.ConfigurationSchema)("UniProtVariationAdapter",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz",locationType:"UriLocation"}},scoreField:{type:"string",defaultValue:""}},{explicitlyTyped:!0}),zm=Ug;function Yi(e){e.addAdapterType(()=>new Km.default({name:"UniProtVariationAdapter",displayName:"UniProtVariation adapter",configSchema:zm,getAdapterClass:()=>Promise.resolve().then(()=>(Jm(),Rm)).then(t=>t.default)}))}var Ym="0.5.7";var tr=class extends $m.default{name="ProteinViewer";version=Ym;install(t){Ki(t),Si(t),vi(t),gr(t),fr(t),hr(t),Yi(t)}configure(t){}};return nc(Gg);})();
27
+ `)}function gi(e,t){return!e||!t?!1:e.split(",").length>=3&&t.length>0}Ye();function fi({hit:e,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}){let[l,a]=(0,Oe.useState)(null),m=!!l,u=hn(e.target),c=D=>{a(D.currentTarget)},d=()=>{a(null)},{runLaunch:b,launchError:y}=ao(s,d),w={session:t,view:o,feature:n,selectedTranscript:r,uniprotId:u},h=b(()=>{let D=!e.structureUrl&&gi(e.tCa,e.tSeq)?Ql(e.tCa,e.tSeq,"A",e.target):void 0;jt({...w,url:e.structureUrl,data:D,userProvidedTranscriptSequence:i})}),{launch1D:f,launchMsa:g}=bn({...w,confidenceUrl:ol(e.target)});return!!e.structureUrl||gi(e.tCa,e.tSeq)?Oe.default.createElement(Oe.default.Fragment,null,y?Oe.default.createElement(ep.ErrorMessage,{error:y}):null,Oe.default.createElement(Vt.Button,{size:"small",variant:"outlined",onClick:c},"Load"),Oe.default.createElement(Vt.Menu,{anchorEl:l,open:m,onClose:d},Oe.default.createElement(Vt.MenuItem,{onClick:h},"Launch 3D protein view"),f?Oe.default.createElement(Vt.MenuItem,{onClick:b(f)},"Launch 1D protein annotation view"):null,g?Oe.default.createElement(Vt.MenuItem,{onClick:b(g)},"Launch MSA view (AlphaFoldDB a3m)"):null)):Oe.default.createElement("span",null,"-")}Ye();var qd=(0,tp.makeStyles)()(e=>({root:{display:"flex",flexDirection:"column",gap:16},tableContainer:{maxHeight:400},headerCell:{fontWeight:"bold",backgroundColor:e.palette.mode==="dark"?e.palette.grey[900]:e.palette.grey[100]},noResults:{padding:16,textAlign:"center"}})),Dd=100;function Nd(e){let t=e.results.flatMap(o=>(o.alignments??[]).flat().map(n=>({...n,db:o.db,structureUrl:tl(n.target,o.db)})));return t.sort((o,n)=>(o.eval??1/0)-(n.eval??1/0)),t}function hi({results:e,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}){let{classes:l}=qd(),a=Nd(e),m=a.slice(0,Dd);return m.length===0?U.default.createElement(I.Paper,{className:l.noResults},U.default.createElement(I.Typography,null,"No similar structures found")):U.default.createElement("div",{className:l.root},U.default.createElement(I.Typography,{variant:"subtitle2"},"Found ",a.length," similar structures",a.length>m.length?` (showing top ${m.length})`:""),U.default.createElement(I.TableContainer,{component:I.Paper,className:l.tableContainer},U.default.createElement(I.Table,{size:"small",stickyHeader:!0},U.default.createElement(I.TableHead,null,U.default.createElement(I.TableRow,null,U.default.createElement(I.TableCell,{className:l.headerCell},"Database"),U.default.createElement(I.TableCell,{className:l.headerCell},"Target"),U.default.createElement(I.TableCell,{className:l.headerCell},"Organism"),U.default.createElement(I.TableCell,{className:l.headerCell},"Prob"),U.default.createElement(I.TableCell,{className:l.headerCell},"Seq. Id."),U.default.createElement(I.TableCell,{className:l.headerCell},"Coverage"),U.default.createElement(I.TableCell,{className:l.headerCell},"E-value"),U.default.createElement(I.TableCell,{className:l.headerCell},"Actions"))),U.default.createElement(I.TableBody,null,m.map((u,c)=>U.default.createElement(I.TableRow,{key:`${u.db}-${u.target}-${c}`},U.default.createElement(I.TableCell,null,u.db),U.default.createElement(I.TableCell,null,u.target),U.default.createElement(I.TableCell,null,u.taxName??"-"),U.default.createElement(I.TableCell,null,u.prob!=null?`${(u.prob*100).toFixed(1)}%`:"-"),U.default.createElement(I.TableCell,null,u.seqId!=null?`${u.seqId.toFixed(1)}%`:"-"),U.default.createElement(I.TableCell,null,u.alnLength!=null&&u.qLen!=null?`${(u.alnLength/u.qLen*100).toFixed(1)}%`:"-"),U.default.createElement(I.TableCell,null,u.eval!=null?u.eval.toExponential(2):"-"),U.default.createElement(I.TableCell,null,U.default.createElement(fi,{hit:u,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}))))))))}var et=p(x());function bi(){let[e,t]=(0,et.useState)(),[o,n]=(0,et.useState)(),[r,i]=(0,et.useState)(!1),[s,l]=(0,et.useState)(!1),[a,m]=(0,et.useState)(),[u,c]=(0,et.useState)(""),d=(0,et.useRef)(null);(0,et.useEffect)(()=>()=>{d.current?.abort()},[]);let b=()=>{d.current?.abort();let f=new AbortController;return d.current=f,f.signal},y=async f=>{let g=b();l(!0),m(void 0),c("Predicting 3Di structure...");try{let S=await Kl({aaSequence:f,signal:g});return n(S),S}catch(S){g.aborted||(console.error(S),m(S));return}finally{g.aborted||(l(!1),c(""))}},w=async(f,g,S=Gn)=>{let D=b();i(!0),m(void 0),c("Submitting search...");try{let C=await Yl({aaSequence:f,di3Sequence:g,databases:S,signal:D}),F=await $l({ticketId:C.id,onStatusChange:c,signal:D});return t(F),F}catch(C){D.aborted||(console.error(C),m(C));return}finally{D.aborted||(i(!1),c(""))}},h=()=>{d.current?.abort(),t(void 0),n(void 0),m(void 0),c("")};return{results:e,cleanedAaSequence:o?.aaSequence,di3Sequence:o?.di3Sequence,isLoading:r,isPredicting:s,error:a,statusMessage:u,predictStructure:y,search:w,reset:h}}le();var Vd=(0,np.makeStyles)()({dialogContent:{width:"80em",display:"flex",flexDirection:"column",gap:20},sequenceInput:{fontFamily:"monospace"},di3Section:{display:"flex",flexDirection:"column",gap:8}}),Bd=(0,op.observer)(function({feature:t,session:o,view:n,handleClose:r}){let{classes:i}=Vd(),[s,l]=(0,J.useState)(),[a,m]=(0,J.useState)(Gn),{results:u,cleanedAaSequence:c,di3Sequence:d,isLoading:b,isPredicting:y,error:w,statusMessage:h,predictStructure:f,search:g,reset:S}=bi(),{transcripts:D,isoformSequences:C,isLoading:F,error:j,selectedTranscriptId:ve,setSelectedTranscriptId:q,selectedTranscript:Te,selectedIsoform:oe}=_t({feature:t,view:n}),ge=oe?ie(oe.seq):"",ne=s??ge,re=We=>{q(We),l(void 0)},Ce=ne.trim().length>0&&!y&&!b,De=!!c&&!!d&&a.length>0&&!b,mt=w??j,je=b||y;return J.default.createElement(J.default.Fragment,null,J.default.createElement(ke.DialogContent,{className:i.dialogContent},mt&&!F?J.default.createElement(Vo.ErrorMessage,{error:mt}):null,F?J.default.createElement(Vo.LoadingEllipses,{variant:"subtitle2",message:"Loading transcript sequences"}):null,C?J.default.createElement(J.default.Fragment,null,J.default.createElement(Wt,{val:ve,setVal:re,isoforms:D,isoformSequences:C,feature:t,disabled:je}),J.default.createElement(ke.TextField,{label:"Protein sequence (amino acids)",multiline:!0,rows:4,value:ne,onChange:We=>{l(We.target.value)},placeholder:"MKTVRQERLKSIVRILERSKEPVSGAQLAEEL...",disabled:je,InputProps:{className:i.sequenceInput}})):null,d?J.default.createElement("div",{className:i.di3Section},J.default.createElement(ke.Typography,{variant:"subtitle2"},"3Di structural alphabet (used for searching):"),J.default.createElement(ke.TextField,{multiline:!0,rows:4,value:d,InputProps:{className:i.sequenceInput,readOnly:!0}})):null,J.default.createElement(ci,{selected:a,onChange:m,disabled:je}),h?J.default.createElement(Vo.LoadingEllipses,{variant:"subtitle2",message:h}):null,u?J.default.createElement(hi,{results:u,session:o,view:n,feature:t,selectedTranscript:Te,userProvidedTranscriptSequence:ne,onClose:r}):null),J.default.createElement(ke.DialogActions,null,J.default.createElement(ke.Button,{variant:"contained",color:"secondary",onClick:()=>{r()}},"Cancel"),u?J.default.createElement(ke.Button,{variant:"outlined",onClick:()=>{S()}},"New search"):null,d?J.default.createElement(ke.Button,{variant:"contained",color:"primary",disabled:!De,onClick:()=>{g(c,d,a)}},b?"Searching...":"Search Foldseek"):J.default.createElement(ke.Button,{variant:"contained",color:"primary",disabled:!Ce,onClick:()=>{f(ne.trim())}},y?"Predicting...":"Predict 3Di structure")))}),rp=Bd;var Fe=p(x());yi();var mp=p(M()),Hd=(0,Fe.lazy)(()=>Promise.resolve().then(()=>(up(),pp)));function Bo(){let[e,t]=(0,Fe.useState)(!1);return Fe.default.createElement(Fe.default.Fragment,null,Fe.default.createElement(mp.IconButton,{onClick:()=>{t(!0)}},Fe.default.createElement(On,null)),e?Fe.default.createElement(Fe.Suspense,{fallback:null},Fe.default.createElement(Hd,{handleClose:()=>{t(!1)}})):null)}var cp=p(x());function Ho({children:e,value:t,index:o,...n}){return cp.default.createElement("div",{role:"tabpanel",hidden:t!==o,...n},e)}var K=p(x()),zn=p(He()),Rt=p(M()),dp=p(W()),gp=p(rt());var se=p(x()),ee=p(M());Ye();function wi({choice:e,setChoice:t,structureURL:o,setStructureURL:n,setFile:r,pdbId:i,setPdbId:s}){return se.default.createElement("div",{style:{display:"flex",margin:30}},se.default.createElement(ee.Typography,null,"Open your structure file ",se.default.createElement(Bo,null)),se.default.createElement(ee.FormControl,{component:"fieldset"},se.default.createElement(ee.RadioGroup,{value:e,onChange:l=>{t(l.target.value)}},se.default.createElement(ee.FormControlLabel,{value:"url",control:se.default.createElement(ee.Radio,null),label:"URL"}),se.default.createElement(ee.FormControlLabel,{value:"file",control:se.default.createElement(ee.Radio,null),label:"File"}),se.default.createElement(ee.FormControlLabel,{value:"pdb",control:se.default.createElement(ee.Radio,null),label:"PDB ID"}))),e==="url"?se.default.createElement("div",null,se.default.createElement(ee.Typography,null,"Open a PDB/mmCIF/etc. file from remote URL"),se.default.createElement(ee.TextField,{label:"URL",value:o,onChange:l=>{n(l.target.value)}})):null,e==="file"?se.default.createElement("div",{style:{paddingTop:20}},se.default.createElement(ee.Typography,null,"Open a PDB/mmCIF/etc. file from your local drive"),se.default.createElement(ee.Button,{variant:"outlined",component:"label"},"Choose File",se.default.createElement("input",{type:"file",hidden:!0,onChange:({target:l})=>{let a=l.files?.[0];a&&r(a)}}))):null,e==="pdb"?se.default.createElement(ee.TextField,{value:i,onChange:l=>{let a=l.target.value;s(a),n(Lo(a))},label:"PDB ID"}):null)}Ye();le();var Ud=(0,gp.makeStyles)()(e=>({dialogContent:{marginTop:e.spacing(6),width:"80em"},textAreaFont:{fontFamily:"Courier New"}}));function Gd(){return K.default.createElement("div",{style:{marginBottom:20}},"Manually supply a protein structure (PDB, mmCIF, etc) for a given transcript. You can open the file from the result of running, for example,"," ",K.default.createElement(Ae,{href:"https://github.com/sokrypton/ColabFold"},"ColabFold"),". This plugin will align the protein sequence calculated from the genome to the protein sequence embedded in the structure file which allows for slight differences in these two representations.")}var Od=(0,dp.observer)(function({feature:t,session:o,view:n,handleClose:r,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}){let{classes:l}=Ud(),[a,m]=(0,K.useState)(),[u,c]=(0,K.useState)(""),[d,b]=(0,K.useState)("file"),[y,w]=(0,K.useState)(""),{runLaunch:h,launchError:f}=ao(r),g=d==="file"?a:void 0,S=d==="file"?"":y,{sequences:D,error:C}=No({file:g,url:S}),F=g?.name??S.slice(S.lastIndexOf("/")+1),j=D?.[0],{transcripts:ve,isoformSequences:q,selectedTranscriptId:Te,setSelectedTranscriptId:oe,selectedTranscript:ge,selectedIsoform:ne,error:re}=_t({feature:t,view:n,structureSequence:j}),Ce=re??f??C,De=!!(S||g)&&!!ne&&!!ge,mt=!!ne?.seq&&!!j&&ie(ne.seq)!==j,je=h(async()=>{if(ne&&ge){let We=g?await g.text():void 0;jt({session:o,view:n,feature:t,selectedTranscript:ge,url:S||void 0,data:We,userProvidedTranscriptSequence:ne.seq,alignmentAlgorithm:i})}});return K.default.createElement(K.default.Fragment,null,K.default.createElement(Rt.DialogContent,{className:l.dialogContent},Ce?K.default.createElement(zn.ErrorMessage,{error:Ce}):null,K.default.createElement(Gd,null),K.default.createElement(wi,{choice:d,setChoice:b,structureURL:y,setStructureURL:w,setFile:m,pdbId:u,setPdbId:c}),K.default.createElement("div",{style:{margin:20}},q?j?K.default.createElement(K.default.Fragment,null,K.default.createElement(Wt,{val:Te,setVal:oe,structureSequence:j,isoforms:ve,feature:t,isoformSequences:q}),K.default.createElement(Co,{structureSequence:j,structureName:F,isoformSequences:q})):null:K.default.createElement(zn.LoadingEllipses,{title:"Loading protein sequences",variant:"h6"}))),K.default.createElement(Rt.DialogActions,null,mt?K.default.createElement(Eo,{alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}):null,K.default.createElement(Rt.Button,{variant:"contained",color:"secondary",onClick:()=>{r()}},"Cancel"),K.default.createElement(Rt.Button,{variant:"contained",color:"primary",disabled:!De,onClick:()=>{je()}},"Launch 3-D protein structure view")))}),fp=Od;var hp=p(x());function bp(e,t){let[o,n]=(0,hp.useState)(()=>{let i=localStorage.getItem(e);if(i)try{return JSON.parse(i)}catch{return t}return t});function r(i){n(i),localStorage.setItem(e,JSON.stringify(i))}return[o,r]}function xi({handleClose:e,feature:t,model:o}){let[n,r]=(0,he.useState)(0),[i,s]=bp("jbrowse-protein3d-alignment-algorithm",Io),l=(0,jn.getSession)(o),a=(0,jn.getContainingView)(o);return he.default.createElement(yp.Dialog,{maxWidth:"xl",title:"Launch protein view",titleNode:he.default.createElement(he.default.Fragment,null,"Launch protein view ",he.default.createElement(Bo,null)),open:!0,onClose:e},he.default.createElement(So.Tabs,{value:n,onChange:(m,u)=>{r(u)}},he.default.createElement(So.Tab,{value:0,label:"AlphaFoldDB search"}),he.default.createElement(So.Tab,{value:1,label:"Foldseek search"}),he.default.createElement(So.Tab,{value:2,label:"Open file manually"})),he.default.createElement(Ho,{value:n,index:0},he.default.createElement(Jl,{session:l,view:a,feature:t,handleClose:e,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s})),he.default.createElement(Ho,{value:n,index:1},he.default.createElement(rp,{session:l,view:a,feature:t,handleClose:e})),he.default.createElement(Ho,{value:n,index:2},he.default.createElement(fp,{session:l,view:a,feature:t,handleClose:e,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s})))}function zd(e){return e.name==="LinearBasicDisplay"}function jd(e){return e.views(t=>{let o=t.contextMenuItems;return{contextMenuItems(){let n=t.contextMenuFeature,r=n!==void 0&&["gene","mRNA","transcript"].includes(n.get("type"));return[...o(),...r?[{label:"Launch protein view",icon:Sa,onClick:()=>{let i=(0,Wn.getContainingTrack)(t);(0,Wn.getSession)(i).queueDialog(l=>[xi,{model:i,handleClose:l,feature:n}])}}]:[]]}}})}function Si(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(zd(t)&&(t.stateModel=jd(t.stateModel)),t))}var wp=p(ro()),xp=p(X());Ye();le();function Wd(e){if(typeof e=="string")return e;let{trackId:t}=e;return typeof t=="string"?t:void 0}function _d(e,t){let o=ko(t);return[e.get("name"),e.get("id"),e.id()].some(n=>typeof n=="string"&&(n===t||ko(n)===o))}async function Sp({session:e,uniprotId:t,transcriptId:o,connectedView:n}){if(!o)throw new Error("transcriptId is required to launch from a uniprotId");let r=n?.assembly,i=n?.loc,s=n?.tracks??[];if(!r||!i)throw new Error("connectedView with assembly + loc is required to launch from a uniprotId");let l=await e.assemblyManager.waitForAssembly(r);if(!l)throw new Error(`assembly "${r}" not found`);let a=(0,xp.parseLocString)(i,f=>l.isValidRefName(f));if(a.start===void 0||a.end===void 0)throw new Error(`could not parse a start-end region from loc "${i}"`);let m={assemblyName:r,refName:l.getCanonicalRefName(a.refName)??a.refName,start:a.start,end:a.end},u=s.map(Wd).filter(f=>f!==void 0),c=e.getTracksById(),d="getFeatures",b=[];for(let f of u){let g=c[f];if(!g)continue;let S=await e.rpcManager.call(d,"CoreGetFeatures",{adapterConfig:(0,wp.readConfObject)(g,"adapter"),sessionId:d,regions:[m]});for(let D of S)b.push(...Ot(D))}let y=b.find(f=>_d(f,o));if(!y)throw new Error(`transcript "${o}" not found at ${i} in tracks [${u.join(", ")}]`);if(!(y.get("subfeatures")??[]).some(f=>f.get("type")==="CDS"))throw new Error(`transcript "${o}" has no CDS subfeatures`);let h=await Bn({session:e,assemblyName:r,feature:y});if(!h)throw new Error(`could not translate a protein sequence for "${o}"`);return{url:lo(t),feature:y.toJSON(),userProvidedTranscriptSequence:h}}dn();function vi(e){e.addToExtensionPoint("LaunchView-ProteinView",async({session:t,url:o,uniprotId:n,transcriptId:r,userProvidedTranscriptSequence:i,feature:s,connectedViewId:l,connectedView:a,alignmentAlgorithm:m,displayName:u,height:c,showControls:d,showHighlight:b,zoomToBaseLevel:y,sideBySide:w,initialSelection:h})=>{let f;if(!o&&n)try{f=await Sp({session:t,uniprotId:n,transcriptId:r,connectedView:a})}catch(F){console.error(F),t.notify(`Could not launch protein view: ${F}`,"error");return}let g=o??f?.url;if(!g){let F="No url or uniprotId provided when launching protein view";console.error(F),t.notify(`Could not launch protein view: ${F}`,"error");return}let S=!l&&!!a,D=l??(a?t.addView("LinearGenomeView",{type:"LinearGenomeView",init:a}).id:void 0),C=t.addView("ProteinView",{type:"ProteinView",alignmentAlgorithm:m,displayName:u,height:c,showControls:d,showHighlight:b,zoomToBaseLevel:y,structures:[{url:g,userProvidedTranscriptSequence:f?.userProvidedTranscriptSequence??i??"",feature:f?.feature??s,connectedViewId:D,initialSelection:h}]});S&&cn(t,C.id,w)})}var Um=p(x()),Gm=p(Ti());var Zp=p(Ti()),Xp=p(Ap()),ce=p(Uo());Je();var kp=p(Ke(),1),Ai=(0,Q.createSvgIcon)((0,kp.jsx)("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"}),"Visibility");var Wo=p(eo());Pi();function Ip(e,t){let o=e.obj?.data;if(!o)return;let{B_iso_or_equiv:n}=o.atomicConformation,{offsets:r,count:i}=o.atomicHierarchy.residueAtomSegments,s=t===void 0?i:Math.min(i,t),l=[];for(let a=0;a<s;a++)l.push(n.value(r[a]));return l}function Ep(e){return!!e&&e.length>1&&e.every(t=>t>=0&&t<=100)&&new Set(e).size>1}async function _n({structure:e,plugin:t}){let{model:o}=e.data?await Fn({data:e.data,plugin:t}):e.url?await qn({url:e.url,plugin:t}):{model:void 0},n=o?oi(o):void 0,r=o?Ip(o,n?.[0]?.seq.length):void 0;return{entities:n,confidence:r}}var ki=p(Uo());function Lp(e){let t=new Set;function o(n,r){t.add(n),_n({structure:n,plugin:r}).then(i=>{let s=(0,ki.isAlive)(n)?e.molstarPluginContext:void 0;s===r&&(n.setStructureData(i),n.setLoadedToMolstar(!0)),t.delete(n),s&&s!==r&&!n.loadedToMolstar&&o(n,s)}).catch(i=>{t.delete(n),(0,ki.isAlive)(e)&&(e.setError(i),console.error(i))})}return function(){let{structures:r,molstarPluginContext:i}=e;if(i)for(let s of r)!s.loadedToMolstar&&!t.has(s)&&o(s,i)}}var jo=p(X()),te=p(Uo()),To=p(eo());Mi();var Rn=["A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V","B","Z","X","*"],Kd=[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],Fp={};for(let e=0;e<Rn.length;e++){let t={};for(let o=0;o<Rn.length;o++)t[Rn[o]]=Kd[e][o];Fp[Rn[e]]=t}function Oo(e,t){return Fp[e.toUpperCase()]?.[t.toUpperCase()]??-4}var qp=-10,Dp=-.5;function Yd(e,t,o=qp,n=Dp){let r=e.length,i=t.length,s=[],l=[],a=[];for(let h=0;h<=r;h++){s[h]=[],l[h]=[],a[h]=[];for(let f=0;f<=i;f++)s[h][f]=-1/0,l[h][f]=-1/0,a[h][f]=-1/0}s[0][0]=0;for(let h=1;h<=r;h++)l[h][0]=o+(h-1)*n;for(let h=1;h<=i;h++)a[0][h]=o+(h-1)*n;for(let h=1;h<=r;h++)for(let f=1;f<=i;f++){let g=Oo(e[h-1],t[f-1]);s[h][f]=Math.max(s[h-1][f-1],l[h-1][f-1],a[h-1][f-1])+g,l[h][f]=Math.max(s[h-1][f]+o,l[h-1][f]+n),a[h][f]=Math.max(s[h][f-1]+o,a[h][f-1]+n)}let m="",u="",c=r,d=i,b=[s[r][i],l[r][i],a[r][i]],y=Math.max(...b),w=y===s[r][i]?"M":y===l[r][i]?"Ix":"Iy";for(;c>0||d>0;)if(w==="M"&&c>0&&d>0){m=e[c-1]+m,u=t[d-1]+u;let h=Oo(e[c-1],t[d-1]),f=s[c-1][d-1],g=l[c-1][d-1];s[c][d]===f+h?w="M":s[c][d]===g+h?w="Ix":w="Iy",c--,d--}else if(w==="Ix"&&c>0)m=e[c-1]+m,u="-"+u,w=l[c][d]===s[c-1][d]+o?"M":"Ix",c--;else if(d>0)m="-"+m,u=t[d-1]+u,w=a[c][d]===s[c][d-1]+o?"M":"Iy",d--;else break;return{alignedSeq1:m,alignedSeq2:u,score:y}}function $d(e,t,o=qp,n=Dp){let r=e.length,i=t.length,s=[],l=[],a=[],m=0,u=0,c=0;for(let f=0;f<=r;f++){s[f]=[],l[f]=[],a[f]=[];for(let g=0;g<=i;g++)s[f][g]=0,l[f][g]=-1/0,a[f][g]=-1/0}for(let f=1;f<=r;f++)for(let g=1;g<=i;g++){let S=Oo(e[f-1],t[g-1]);s[f][g]=Math.max(0,s[f-1][g-1]+S,l[f-1][g-1]+S,a[f-1][g-1]+S),l[f][g]=Math.max(s[f-1][g]+o,l[f-1][g]+n),a[f][g]=Math.max(s[f][g-1]+o,a[f][g-1]+n);let D=Math.max(s[f][g],l[f][g],a[f][g]);D>m&&(m=D,u=f,c=g)}let d="",b="",y=u,w=c,h=s[y][w]>=l[y][w]&&s[y][w]>=a[y][w]?"M":l[y][w]>=a[y][w]?"Ix":"Iy";for(let f=e.length;f>u;f--)d=e[f-1]+d,b="-"+b;for(let f=t.length;f>c;f--)d="-"+d,b=t[f-1]+b;for(;y>0&&w>0;)if(h==="M"){if(s[y][w]===0)break;d=e[y-1]+d,b=t[w-1]+b;let f=Oo(e[y-1],t[w-1]),g=s[y-1][w-1],S=l[y-1][w-1];s[y][w]===g+f?h="M":s[y][w]===S+f?h="Ix":h="Iy",y--,w--}else h==="Ix"?(d=e[y-1]+d,b="-"+b,l[y][w]===s[y-1][w]+o&&(h="M"),y--):(d="-"+d,b=t[w-1]+b,a[y][w]===s[y][w-1]+o&&(h="M"),w--);for(;y>0;)d=e[y-1]+d,b="-"+b,y--;for(;w>0;)d="-"+d,b=t[w-1]+b,w--;return{alignedSeq1:d,alignedSeq2:b,score:m}}function Zd(e,t){let o=[];for(let n=0;n<e.length;n++){let r=e[n],i=t[n];r!=="-"&&i!=="-"&&r.toUpperCase()===i.toUpperCase()?o.push("|"):r!=="-"&&i!=="-"&&Oo(r,i)>0?o.push(":"):o.push(" ")}return o.join("")}function Np(e,t,o){let{alignedSeq1:n,alignedSeq2:r}=o==="smith_waterman"?$d(e,t):Yd(e,t);return{consensus:Zd(n,r),alns:[{id:"a",seq:n},{id:"b",seq:r}]}}le();function Vp(e,t){return t===void 0||e===t}function Xd(e){let t=e.alns[0].seq,o=e.alns[1].seq,n=0;for(let r=0;r<t.length;r++){let i=t[r],s=o[r];i!=="-"&&s!=="-"&&i?.toUpperCase()===s?.toUpperCase()&&n++}return n}function Bp(e,t,o){let n=ie(e);if(!n||t.length===0)return;let r=t.map(ie),i=r.findIndex(l=>l.length>0&&l===n);if(i!==-1)return{index:i,alignment:{consensus:"|".repeat(n.length),alns:[{id:"seq1",seq:n},{id:"seq2",seq:r[i]}]},matches:n.length};let s;for(let l=0;l<r.length;l++){let a=r[l];if(a.length===0)continue;let m=Np(n,a,o),u=Xd(m);(!s||u>s.matches)&&(s={index:l,alignment:m,matches:u})}return s}tt();oo();var Op=e=>e;var Ei=e=>e;function zp(e){let{structureSeqToTranscriptSeqPosition:t,transcriptSeqToStructureSeqPosition:o}=ws(e),n=Ss(e),r=vs(e),i=lr(n),s=lr(r);return{structureToTranscript:l=>t[l],transcriptToStructure:l=>o[l],structureToAlignment:l=>n[l],alignmentToStructure:l=>i[l],transcriptToAlignment:l=>r[l],alignmentToTranscript:l=>s[l],maps:{structureSeqToTranscriptSeqPosition:t,transcriptSeqToStructureSeqPosition:o,structurePositionToAlignmentMap:n,transcriptPositionToAlignmentMap:r,alignmentToStructurePosition:i,alignmentToTranscriptPosition:s}}}var jp=Object.fromEntries([{name:"alanine",abbreviation:"Ala",singleLetterCode:"A"},{name:"arginine",abbreviation:"Arg",singleLetterCode:"R"},{name:"asparagine",abbreviation:"Asn",singleLetterCode:"N"},{name:"aspartic acid",abbreviation:"Asp",singleLetterCode:"D"},{name:"cysteine",abbreviation:"Cys",singleLetterCode:"C"},{name:"glutamic acid",abbreviation:"Glu",singleLetterCode:"E"},{name:"glutamine",abbreviation:"Gln",singleLetterCode:"Q"},{name:"glycine",abbreviation:"Gly",singleLetterCode:"G"},{name:"histidine",abbreviation:"His",singleLetterCode:"H"},{name:"isoleucine",abbreviation:"Ile",singleLetterCode:"I"},{name:"leucine",abbreviation:"Leu",singleLetterCode:"L"},{name:"lysine",abbreviation:"Lys",singleLetterCode:"K"},{name:"methionine",abbreviation:"Met",singleLetterCode:"M"},{name:"phenylalanine",abbreviation:"Phe",singleLetterCode:"F"},{name:"proline",abbreviation:"Pro",singleLetterCode:"P"},{name:"serine",abbreviation:"Ser",singleLetterCode:"S"},{name:"threonine",abbreviation:"Thr",singleLetterCode:"T"},{name:"tryptophan",abbreviation:"Trp",singleLetterCode:"W"},{name:"tyrosine",abbreviation:"Tyr",singleLetterCode:"Y"},{name:"valine",abbreviation:"Val",singleLetterCode:"V"}].map(e=>[e.abbreviation.toUpperCase(),e]));Fi();Di();bo();function og(e,t){return{structureSeqPos:e.StructureProperties.residue.label_seq_id(t)-1,code:e.StructureProperties.atom.label_comp_id(t),chain:e.StructureProperties.chain.auth_asym_id(t),entityId:e.StructureProperties.entity.id(t)}}async function Ni({plugin:e,kind:t,onUpdate:o}){let n=await Le(),r=e.behaviors.interaction[t].subscribe(i=>{if(n.StructureElement.Loci.is(i.current.loci)){let s=n.StructureElement.Loci.getFirstLocation(i.current.loci);o(s?og(n,s):void 0)}else o(void 0)});return()=>{r.unsubscribe()}}Ye();le();oo();var ag=te.types.model({url:te.types.maybe(te.types.string),data:te.types.maybe(te.types.string),connectedViewId:te.types.maybe(te.types.string),pairwiseAlignment:te.types.frozen(),feature:te.types.frozen(),userProvidedTranscriptSequence:te.types.string,initialSelection:te.types.frozen()}).volatile(()=>({clickedStructureRange:void 0,hoverPosition:void 0,entities:void 0,mappedEntityIndex:0,structureConfidence:void 0,isMouseInAlignment:!1,loadedToMolstar:!1,alignmentHoverRange:void 0,selectedFeatureId:void 0,hiddenFeatureTypes:new Set,expandedFeatureTypes:new Set})).actions(e=>({setStructureData(t){e.entities=t.entities,e.structureConfidence=t.confidence},hideFeatureType(t){e.hiddenFeatureTypes=new Set([...e.hiddenFeatureTypes,t])},showFeatureType(t){let o=new Set(e.hiddenFeatureTypes);o.delete(t),e.hiddenFeatureTypes=o},showAllFeatureTypes(){e.hiddenFeatureTypes=new Set},toggleFeatureTypeExpanded(t){let o=new Set(e.expandedFeatureTypes);o.has(t)?o.delete(t):o.add(t),e.expandedFeatureTypes=o},setLoadedToMolstar(t){e.loadedToMolstar=t}})).views(e=>({get connectedView(){let{views:t}=(0,jo.getSession)(e);return t.find(o=>o.id===e.connectedViewId)}})).actions(e=>({setClickedStructureRange(t){e.clickedStructureRange=t},setAlignmentHoverRange(t){e.alignmentHoverRange=t},setSelectedFeatureId(t){e.selectedFeatureId=t},setHoveredPosition(t){e.hoverPosition=t?{...t,source:"structure"}:void 0},setGenomeHoveredPosition(t){e.hoverPosition=t===void 0?void 0:{structureSeqPos:t,source:"genome"}},setAlignment(t){e.pairwiseAlignment=t},setMappedEntityIndex(t){e.mappedEntityIndex=t},setIsMouseInAlignment(t){e.isMouseInAlignment=t}})).views(e=>({get structureSequences(){return e.entities?.map(t=>t.seq)},get mappedEntity(){return e.entities?.[e.mappedEntityIndex]},get mappedStructureSeq(){return this.mappedEntity?.seq},get mappedEntityId(){return this.mappedEntity?.entityId},get uniprotId(){let{url:t}=e;if(t)return hn(t)},get coordinateMapper(){return e.pairwiseAlignment?zp(e.pairwiseAlignment):void 0},get structureSeqToTranscriptSeqPosition(){return this.coordinateMapper?.maps.structureSeqToTranscriptSeqPosition},get transcriptSeqToStructureSeqPosition(){return this.coordinateMapper?.maps.transcriptSeqToStructureSeqPosition},get structurePositionToAlignmentMap(){return this.coordinateMapper?.maps.structurePositionToAlignmentMap},get transcriptPositionToAlignmentMap(){return this.coordinateMapper?.maps.transcriptPositionToAlignmentMap},get confidenceCells(){let t=e.structureConfidence;return Ep(t)?qi(t,this.structurePositionToAlignmentMap):[]},get hydrophobicityCells(){let t=this.mappedStructureSeq;return t?qi(Rp(ie(t)),this.structurePositionToAlignmentMap):[]},get pairwiseAlignmentToTranscriptPosition(){return this.coordinateMapper?.maps.alignmentToTranscriptPosition},get pairwiseAlignmentToStructurePosition(){return this.coordinateMapper?.maps.alignmentToStructurePosition},get hoverString(){let t=e.hoverPosition;if(t===void 0)return"";let o=this.hoverStructureLetter,n=this.hoverGenomeLetter,r=[];return t.structureSeqPos!==void 0&&r.push(`${t.structureSeqPos+1}`),o&&r.push(`Structure: ${o}`),n&&o&&n!==o&&r.push(`Genome: ${n}`),t.chain&&r.push(`Chain: ${t.chain}`),r.join(", ")},get genomeToTranscriptSeqMapping(){return e.feature?to(new jo.SimpleFeature(e.feature)):void 0},get structureSeqHoverPos(){return e.hoverPosition?.structureSeqPos},get alignmentHoverPos(){let t=this.structureSeqHoverPos;return t===void 0?void 0:this.coordinateMapper?.structureToAlignment(Op(t))},get hoverStructureRange(){let{alignmentHoverRange:t}=e,o=this.pairwiseAlignmentToStructurePosition;if(!t||!o)return;let n=o[t.start],r=o[t.end];return n===void 0||r===void 0?void 0:{start:n,end:r+1}},get hoverHighlightRange(){let t=this.structureSeqHoverPos;return this.hoverStructureRange??(t===void 0?void 0:{start:t,end:t+1})},get clickAlignmentRange(){let t=e.clickedStructureRange,o=this.structurePositionToAlignmentMap;if(!t||!o)return;let n=o[t.start],r=o[t.end-1];return n===void 0||r===void 0?void 0:{start:n,end:r}},structureRangeToGenomeHighlight(t){let o=e.connectedView?.assemblyNames[0],n=this.genomeToTranscriptSeqMapping;if(!t||!o||!n)return[];let r={genomeToTranscriptSeqMapping:n,pairwiseAlignment:e.pairwiseAlignment,structureSeqToTranscriptSeqPosition:this.structureSeqToTranscriptSeqPosition},i=t.end>t.start+1?Li({model:r,structureSeqPos:t.start,structureSeqEndPos:t.end}):Jn({model:r,structureSeqPos:t.start});if(!i)return[];let[s,l]=i;return[{assemblyName:o,refName:n.refName,start:s,end:l}]},get hoverGenomeHighlights(){return e.hoverPosition?.source==="genome"?[]:this.structureRangeToGenomeHighlight(this.hoverHighlightRange)},get clickGenomeHighlights(){return this.structureRangeToGenomeHighlight(e.clickedStructureRange)},get hoverStructureLetter(){let t=e.hoverPosition?.code;if(t)return jp[t]?.singleLetterCode;let o=this.structureSeqHoverPos,n=this.mappedStructureSeq;if(o!==void 0&&n)return n[o]},get hoverGenomeLetter(){let t=this.structureSeqHoverPos;if(t===void 0)return;let o=this.structureSeqToTranscriptSeqPosition?.[t];if(o!==void 0)return e.userProvidedTranscriptSequence[o]},get alignmentMatchSet(){let t=e.pairwiseAlignment?.consensus;if(!t)return;let o=new Set;for(let n=0;n<t.length;n++)(t[n]==="|"||t[n]===":")&&o.add(n);return o},get alignmentPending(){return!e.pairwiseAlignment&&!!e.userProvidedTranscriptSequence&&!!this.structureSequences?.length},get exactMatch(){let t=ie(e.userProvidedTranscriptSequence),o=this.mappedStructureSeq?ie(this.mappedStructureSeq):void 0;return t===o},get parentView(){return(0,te.getParent)(e,2)},get zoomToBaseLevel(){return this.parentView.zoomToBaseLevel},get autoScrollAlignment(){return this.parentView.autoScrollAlignment},get showHighlight(){return this.parentView.showHighlight},get showProteinTracks(){return this.parentView.showProteinTracks},get trackHeight(){return this.parentView.compactTracks?8:12},get trackGap(){return this.parentView.compactTracks?1:2},get alignmentAlgorithm(){return Oa(this.parentView.alignmentAlgorithm)},get molstarPluginContext(){return this.parentView.molstarPluginContext},get structureIndex(){return this.parentView.structures.indexOf(e)},get molstarStructure(){let t=this.structureIndex;return e.loadedToMolstar&&t>=0?this.molstarPluginContext?.managers.structure.hierarchy.current.structures[t]?.cell.obj?.data:void 0}})).actions(e=>({setError(t){e.parentView.setError(t)},hoverAlignmentPosition(t){if(!e.alignmentHoverRange){let o=e.coordinateMapper?.alignmentToStructure(Ei(t));e.setHoveredPosition(o!==void 0?{structureSeqPos:o}:void 0)}},clickAlignmentPosition(t){let o=e.coordinateMapper?.alignmentToStructure(Ei(t));e.setSelectedFeatureId(void 0),o!==void 0?zo({model:e,structureSeqPos:o}).catch(n=>{console.error(n),e.parentView.setError(n)}):e.setClickedStructureRange(void 0)}})).actions(e=>({afterAttach(){e.initialSelection&&e.setClickedStructureRange(e.initialSelection);let t=(n,r)=>{(0,te.addDisposer)(e,(0,To.autorun)(async()=>{let{molstarPluginContext:i}=e;i&&(0,te.addDisposer)(e,await Ni({plugin:i,kind:n,onUpdate:r}))}))};(0,te.addDisposer)(e,(0,To.autorun)(async()=>{try{let{userProvidedTranscriptSequence:n,structureSequences:r,alignmentAlgorithm:i}=e;if(e.pairwiseAlignment||!n||!r?.length)return;let s=Bp(n,r,i);if(!s)return;e.setMappedEntityIndex(s.index),e.setAlignment(s.alignment),s.matches<s.alignment.alns[0].seq.length&&e.parentView.setShowAlignment(!0)}catch(n){console.error(n),e.parentView.setError(n)}})),(0,te.addDisposer)(e,(0,To.autorun)(()=>{let{hovered:n}=(0,jo.getSession)(e),{transcriptSeqToStructureSeqPosition:r,genomeToTranscriptSeqMapping:i,connectedView:s}=e;if(s?.initialized&&i&&Ct(n)){let{hoverPosition:l}=n,a=i.g2p[l.coord-1],m=a===void 0?void 0:r?.[a];e.setGenomeHoveredPosition(m)}else e.hoverPosition?.source==="genome"&&e.setGenomeHoveredPosition(void 0)}));let o=n=>n&&Vp(n.entityId,e.coordinateMapper?e.mappedEntityId:void 0)?n:void 0;t("click",n=>{let r=o(n);r&&(e.setHoveredPosition(r),e.setSelectedFeatureId(void 0),zo({model:e,structureSeqPos:r.structureSeqPos}).catch(i=>{console.error(i),e.parentView.setError(i)}))}),t("hover",n=>{e.setHoveredPosition(o(n))}),(0,te.addDisposer)(e,(0,To.autorun)(async()=>{let{showHighlight:n,clickedStructureRange:r,structureSeqToTranscriptSeqPosition:i,molstarPluginContext:s,molstarStructure:l}=e;l&&s&&i&&await Go({structure:l,plugin:s,channel:"select",entityId:e.mappedEntityId,spec:r?{kind:"range",...r}:n?{kind:"list",residues:Object.keys(i).map(a=>+a)}:void 0})})),(0,te.addDisposer)(e,(0,To.autorun)(async()=>{let{molstarStructure:n,molstarPluginContext:r,hoverHighlightRange:i}=e;n&&r&&await Go({structure:n,plugin:r,channel:"highlight",entityId:e.mappedEntityId,spec:i?{kind:"range",...i}:void 0})}))}})),Kn=ag;bo();var lg="SuperpositionTransform";async function Vi(e){let{QueryContext:t,StructureElement:o,StructureSelection:n,StructureSelectionQueries:r,PluginCommands:i,PluginStateObject:s,tmAlign:l}=await Le(),a=e.managers.structure.hierarchy.current.structures;if(a.length<2)return;let{query:m}=r.trace,c=a.map(y=>{let w=y.cell.obj?.data;if(!w)return;let h=e.helpers.substructureParent.get(w);if(!h)return;let f=e.state.data.selectQ(S=>S.byValue(h).rootOfType(s.Molecule.Structure))[0]?.obj?.data;if(!f)return;let g=n.toLociWithSourceUnits(m(new t(w)));return o.Loci.remap(g,f)}).filter(y=>y!==void 0);if(c.length<2)return;let b=e.managers.structure.hierarchy.findStructure(c[0]?.structure)?.transform?.cell.obj?.data.coordinateSystem;for(let y=1;y<c.length;y++){let w=l(c[0],c[y]),{bTransform:h,tmScoreA:f,tmScoreB:g,rmsd:S,alignedLength:D}=w;await pg(e,a[y].cell,h,b),e.log.info(`TM-align: TM-score=${f.toFixed(4)}/${g.toFixed(4)}, RMSD=${S.toFixed(2)} \xC5, aligned ${D} residues.`)}await new Promise(y=>requestAnimationFrame(y)),await i.Camera.Reset(e)}async function pg(e,t,o,n){let{Mat4:r,StateObjectRef:i,StateTransforms:s}=await Le(),l=i.resolveAndCheck(e.state.data,t);if(!l)return;let a=e.state.data.selectQ(d=>d.byRef(l.transform.ref).subtree().withTransformer(s.Model.TransformStructureConformation))[0],u={transform:{name:"matrix",params:{data:n&&!r.isIdentity(n.matrix)?r.mul(r(),n.matrix,o):o,transpose:!1}}},c=a?e.state.data.build().to(a).update(u):e.state.data.build().to(t).insert(s.Model.TransformStructureConformation,u,{tags:lg});await e.runTask(e.state.data.updateTree(c))}var Yp="proteinView-settings",$p=["showAlignment","showProteinTracks","showHighlight","zoomToBaseLevel","autoScrollAlignment","compactTracks"];function ug(){return ce.types.compose("ProteinView",Zp.BaseViewModel,ce.types.model({id:Xp.ElementId,type:ce.types.literal("ProteinView"),structures:ce.types.array(Kn),showControls:!1,height:ce.types.optional(ce.types.number,650),showHighlight:!1,zoomToBaseLevel:!0,autoScrollAlignment:!1,colorScheme:ce.types.optional(ce.types.enumeration("ColorScheme",Cp),"default"),showAlignment:!0,showProteinTracks:!0,compactTracks:!0,alignmentAlgorithm:ce.types.optional(ce.types.string,Io),connectedMsaViewId:ce.types.maybe(ce.types.string),init:ce.types.frozen()})).volatile(()=>({error:void 0,molstarPluginContext:void 0,showManualAlignmentDialog:!1,showAddStructureDialog:!1})).actions(e=>({setHeight(t){return e.height=t,t},setShowAlignment(t){e.showAlignment=t},setShowControls(t){e.showControls=t},setError(t){e.error=t},setShowHighlight(t){e.showHighlight=t},setShowProteinTracks(t){e.showProteinTracks=t},setCompactTracks(t){e.compactTracks=t},setZoomToBaseLevel(t){e.zoomToBaseLevel=t},setAutoScrollAlignment(t){e.autoScrollAlignment=t},setAlignmentAlgorithm(t){e.alignmentAlgorithm=t},setColorScheme(t){e.colorScheme=t},setMolstarPluginContext(t){if(t!==e.molstarPluginContext)for(let o of e.structures)o.setLoadedToMolstar(!1);e.molstarPluginContext=t},setShowManualAlignmentDialog(t){e.showManualAlignmentDialog=t},setShowAddStructureDialog(t){e.showAddStructureDialog=t},setInit(t){e.init=t},setConnectedMsaViewId(t){e.connectedMsaViewId=t},addStructure(t){e.structures.push(Kn.create({url:t.url,data:t.data,userProvidedTranscriptSequence:""}))}})).actions(e=>({async addStructureAndSuperpose(t){let{molstarPluginContext:o}=e;if(!o)return;let n=Kn.create({url:t.url,data:t.data,userProvidedTranscriptSequence:""});n.setLoadedToMolstar(!0),e.structures.push(n);try{n.setStructureData(await _n({structure:t,plugin:o})),e.structures.length>1&&await Vi(o)}catch(r){e.setError(r),console.error(r)}}})).actions(e=>({afterAttach(){try{let t=localStorage.getItem(Yp);if(t){let o=JSON.parse(t);for(let n of $p)o[n]!==void 0&&(e[n]=o[n])}}catch(t){console.error("Failed to restore protein view settings",t)}(0,ce.addDisposer)(e,(0,Wo.autorun)(()=>{try{let t={};for(let o of $p)t[o]=e[o];localStorage.setItem(Yp,JSON.stringify(t))}catch(t){console.error("Failed to save protein view settings",t)}})),(0,ce.addDisposer)(e,(0,Wo.autorun)(()=>{let{init:t}=e;if(t){let{structures:o,showControls:n,showAlignment:r}=t;if(o)for(let i of o)e.addStructure(i);n!==void 0&&e.setShowControls(n),r!==void 0&&e.setShowAlignment(r),e.setInit(void 0)}})),(0,ce.addDisposer)(e,(0,Wo.autorun)(()=>{let{molstarPluginContext:t,colorScheme:o}=e,n=e.structures.filter(r=>r.structureSequences!==void 0).length;t&&n>0&&Mp({plugin:t,colorScheme:o}).catch(r=>{console.error(r),e.setError(r)})})),(0,ce.addDisposer)(e,(0,Wo.autorun)(Lp(e)))}})).views(e=>({get primaryStructure(){return e.structures[0]},menuItems(){return[{label:"Pairwise alignment",icon:Ai,type:"checkbox",checked:e.showAlignment,onClick:()=>{e.setShowAlignment(!e.showAlignment)}},{label:"Protein feature tracks",icon:Ai,type:"checkbox",checked:e.showProteinTracks,onClick:()=>{e.setShowProteinTracks(!e.showProteinTracks)}},{label:"Color scheme...",subMenu:vo.map(t=>({label:t.label,type:"radio",checked:e.colorScheme===t.value,onClick:()=>{e.setColorScheme(t.value)}}))},{label:"Add structure...",onClick:()=>{e.setShowAddStructureDialog(!0)}},{label:"Advanced...",icon:so,subMenu:[{label:"Pairwise alignment as green highlight",type:"checkbox",checked:e.showHighlight,onClick:()=>{e.setShowHighlight(!e.showHighlight)}},{label:"Show all protein feature tracks",onClick:()=>{for(let t of e.structures)t.showAllFeatureTypes()}},{label:"Import manual alignment...",onClick:()=>{e.setShowManualAlignmentDialog(!0)}},{label:"Re-align structures (TM-align)",onClick:()=>{e.molstarPluginContext&&Vi(e.molstarPluginContext).catch(t=>{console.error(t),e.setError(t)})}},{label:"Zoom to base level on click",type:"checkbox",checked:e.zoomToBaseLevel,onClick:()=>{e.setZoomToBaseLevel(!e.zoomToBaseLevel)}},{label:"Auto-scroll alignment to hovered position",type:"checkbox",checked:e.autoScrollAlignment,onClick:()=>{e.setAutoScrollAlignment(!e.autoScrollAlignment)}}]}]}}))}var Qp=ug;var Hg=(0,Um.lazy)(()=>Promise.resolve().then(()=>(Hm(),Bm)));function Ki(e){e.addViewType(()=>new Gm.ViewType({name:"ProteinView",displayName:"Protein view",stateModel:Qp(),ReactComponent:Hg}))}var Km=p(nn());var Om=p(ro());var Ug=(0,Om.ConfigurationSchema)("UniProtVariationAdapter",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz",locationType:"UriLocation"}},scoreField:{type:"string",defaultValue:""}},{explicitlyTyped:!0}),zm=Ug;function Yi(e){e.addAdapterType(()=>new Km.default({name:"UniProtVariationAdapter",displayName:"UniProtVariation adapter",configSchema:zm,getAdapterClass:()=>Promise.resolve().then(()=>(Jm(),Rm)).then(t=>t.default)}))}var Ym="0.5.8";var tr=class extends $m.default{name="ProteinViewer";version=Ym;install(t){Ki(t),Si(t),vi(t),gr(t),fr(t),hr(t),Yi(t)}configure(t){}};return nc(Gg);})();
28
28
  /*! Bundled license information:
29
29
 
30
30
  use-sync-external-store/cjs/use-sync-external-store-shim.production.js: