jbrowse-plugin-protein3d 0.4.13 → 0.5.0
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/LaunchProteinView/components/FoldseekActionMenu.js +15 -14
- package/dist/LaunchProteinView/components/ProteinViewActions.js +27 -15
- package/dist/LaunchProteinView/components/UserProvidedStructure.js +1 -2
- package/dist/LaunchProteinView/hooks/useSafeLaunch.d.ts +9 -0
- package/dist/LaunchProteinView/hooks/useSafeLaunch.js +15 -0
- package/dist/LaunchProteinView/utils/launchViewUtils.d.ts +9 -11
- package/dist/LaunchProteinView/utils/launchViewUtils.js +6 -8
- package/dist/LaunchProteinView/utils/sideBySide.d.ts +5 -0
- package/dist/LaunchProteinView/utils/sideBySide.js +9 -0
- package/dist/LaunchProteinViewExtensionPoint/index.js +7 -4
- package/dist/ProteinView/applyLociInteractivity.d.ts +23 -17
- package/dist/ProteinView/applyLociInteractivity.js +33 -61
- package/dist/ProteinView/components/FeatureBar.d.ts +1 -1
- package/dist/ProteinView/components/FeatureBar.js +36 -34
- package/dist/ProteinView/components/FeatureTypeLabel.js +5 -9
- package/dist/ProteinView/components/ProteinFeatureTrack.js +7 -15
- package/dist/ProteinView/components/ProteinViewHeader.js +9 -1
- package/dist/ProteinView/components/ResidueValueTrack.js +26 -15
- package/dist/ProteinView/hooks/useProteinFeatureTrackData.d.ts +1 -0
- package/dist/ProteinView/hooks/useProteinFeatureTrackData.js +3 -2
- package/dist/ProteinView/model.d.ts +12 -0
- package/dist/ProteinView/structureModel.d.ts +14 -5
- package/dist/ProteinView/structureModel.js +69 -92
- package/dist/ProteinView/subscribeMolstarInteraction.d.ts +8 -0
- package/dist/ProteinView/subscribeMolstarInteraction.js +1 -1
- package/dist/ProteinView/util.d.ts +0 -5
- package/dist/ProteinView/util.js +0 -11
- package/dist/jbrowse-plugin-protein3d.umd.production.min.js +15 -15
- package/dist/jbrowse-plugin-protein3d.umd.production.min.js.map +4 -4
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/src/LaunchProteinView/components/FoldseekActionMenu.tsx +22 -17
- package/src/LaunchProteinView/components/ProteinViewActions.tsx +32 -17
- package/src/LaunchProteinView/components/UserProvidedStructure.tsx +1 -6
- package/src/LaunchProteinView/hooks/useSafeLaunch.ts +17 -0
- package/src/LaunchProteinView/utils/launchViewUtils.ts +30 -29
- package/src/LaunchProteinView/utils/sideBySide.ts +14 -0
- package/src/LaunchProteinViewExtensionPoint/index.ts +8 -9
- package/src/ProteinView/applyLociInteractivity.ts +62 -114
- package/src/ProteinView/components/FeatureBar.tsx +40 -44
- package/src/ProteinView/components/FeatureTypeLabel.tsx +6 -11
- package/src/ProteinView/components/ProteinFeatureTrack.tsx +5 -17
- package/src/ProteinView/components/ProteinViewHeader.tsx +15 -0
- package/src/ProteinView/components/ResidueValueTrack.tsx +40 -23
- package/src/ProteinView/hooks/useProteinFeatureTrackData.ts +6 -2
- package/src/ProteinView/structureModel.ts +90 -108
- package/src/ProteinView/subscribeMolstarInteraction.ts +9 -1
- package/src/ProteinView/util.ts +0 -25
- package/src/version.ts +1 -1
- package/dist/ProteinView/highlightResidueRange.d.ts +0 -14
- package/dist/ProteinView/highlightResidueRange.js +0 -19
- package/src/ProteinView/highlightResidueRange.ts +0 -44
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
"use strict";var JBrowsePluginProtein3d=(()=>{var
|
|
2
|
-
`).slice(1).map(t=>t.trim()).filter(t=>!!t).flatMap((t,o)=>{let[n="",r,i]=t.split(","),s=n[0],l=n.at(-1),a=+n.slice(1,-1);return s!==void 0&&l!==void 0&&!Number.isNaN(a)&&r!==void 0&&i!==void 0?[{uniqueId:`feat-${o}`,ref:s,variant:l,start:a,end:a+1,score:+r,am_class:i}]:[]})}var
|
|
1
|
+
"use strict";var JBrowsePluginProtein3d=(()=>{var Gm=Object.create;var Yo=Object.defineProperty;var zm=Object.getOwnPropertyDescriptor;var jm=Object.getOwnPropertyNames;var Wm=Object.getPrototypeOf,_m=Object.prototype.hasOwnProperty;var S=(e,t)=>()=>(e&&(t=e(e=0)),t);var V=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),At=(e,t)=>{for(var o in t)Yo(e,o,{get:t[o],enumerable:!0})},Qi=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of jm(t))!_m.call(e,r)&&r!==o&&Yo(e,r,{get:()=>t[r],enumerable:!(n=zm(t,r))||n.enumerable});return e};var p=(e,t,o)=>(o=e!=null?Gm(Wm(e)):{},Qi(t||!e||!e.__esModule?Yo(o,"default",{value:e,enumerable:!0}):o,e)),Jm=e=>Qi(Yo({},"__esModule",{value:!0}),e);var ts=V((Mg,es)=>{es.exports=JBrowseExports["@jbrowse/core/Plugin"]});var x=V((Ig,os)=>{os.exports=JBrowseExports.react});var _=V((Fg,ns)=>{ns.exports=JBrowseExports["mobx-react"]});var $=V((Lg,rs)=>{rs.exports=JBrowseExports["@jbrowse/core/util"]});var tt=V((Eg,is)=>{is.exports=JBrowseExports["tss-react/mui"]});function fs(e){let t=e.strand,o=e.refName;if(t!==-1&&t!==1)throw new Error(`Invalid strand value: ${t}. Expected 1 or -1.`);if(!o)throw new Error("refName is required");let n=new Map;for(let a of e.subfeatures??[])if(a.type==="CDS"&&a.start<a.end){let u=`${a.start}-${a.end}`;n.has(u)||n.set(u,a)}let r=[...n.values()].sort((a,u)=>t*(a.start-u.start)),i={},s={},l={};if(r.length!==0){let u=(3-(r[0]?.phase??0))%3,m=-1;for(let d of r){let c=d.end-d.start;for(let b=0;b<c;b++){let w=t===1?d.start+b:d.end-1-b,h=Math.floor(u++/3);i[w]=h,h!==m?(s[h]=w,l[h]=[w],m=h):l[h].push(w)}}}return{g2p:i,p2g:s,p2gCodon:l,refName:o,strand:t}}function Zo(e,t,o){let n=e[t];if(n!==void 0)return o===1?[n,n+3]:[n-2,n+1]}var Xo=S(()=>{});var Qt=V((Gg,hs)=>{hs.exports=JBrowseExports.mobx});function bs(e){let t=e.alns[1].seq,o=e.alns[0].seq;if(t.length!==o.length)throw new Error("mismatched length");let n=0,r=0,i={},s={};for(let l=0;l<t.length;l++){let a=t[l];o[l]==="-"?n++:a==="-"?r++:(i[n]=r,s[r]=n,r++,n++)}return{structureSeqToTranscriptSeqPosition:i,transcriptSeqToStructureSeqPosition:s}}function ys(e){let t={};for(let o=0,n=0;o<e.length;o++)e[o]!=="-"&&(t[n]=o,n++);return t}function ws(e){return ys(e.alns[1].seq)}function xs(e){return ys(e.alns[0].seq)}function eo(e){return fs(e.toJSON())}var Po=S(()=>{"use strict";Xo()});var Ss,ot,dr,Ut,Qo=S(()=>{"use strict";Ss=p($());Xo();ot=p(Qt());Po();dr=class{views=ot.observable.map();constructor(){(0,ot.makeObservable)(this,{register:ot.action,unregister:ot.action,cleanupStaleViews:ot.action,entries:ot.computed})}register(t){this.views.set(t.viewId,t)}unregister(t){this.views.delete(t)}cleanupStaleViews(t){let o=new Set(t.views.map(n=>n.id));for(let n of this.views.keys())o.has(n)||this.views.delete(n)}get(t){return this.views.get(t)}getByUniprotId(t,o){o&&this.cleanupStaleViews(o);for(let n of this.views.values())if(n.uniprotId===t)return n}get entries(){return[...this.views.values()]}getGenomeHighlightForProteinPosition(t,o,n){let r=this.getByUniprotId(t,n);if(!r)return;let i=new Ss.SimpleFeature(r.feature),s=eo(i);if(!s)return;let{p2g:l,strand:a,refName:u}=s,m=Zo(l,o,a);if(!m)return;let[d,c]=m;return{refName:u,start:d,end:c}}},Ut=new dr});function ee(e){return e.replaceAll("*","")}function Ot(e){let o=(e.get("subfeatures")??[]).filter(n=>n.get("type")==="mRNA"||n.get("type")==="transcript");return o.length>0?o:[e]}function ko(e){return e?.replace(/\.[^./]+$/,"")}function Ds(e){return e===void 0?"":e.id()}function Ie(e){return e===void 0?"":e.get("name")??e.get("id")??""}function on(e){return e===void 0?"":e.get("gene_name")??e.get("name")??e.get("id")??""}function Ct(e){return Ns.test(e)||Vs.test(e)||Bs.test(e)||Hs.test(e)||Us.test(e)||Os.test(e)||br.test(e)}function nn(e){if(Ns.test(e)||Vs.test(e)||Bs.test(e))return"ensembl";if(Hs.test(e)||Us.test(e))return"refseq";if(Os.test(e))return"ccds";if(br.test(e))return"hgnc"}function Qm(e){return e?Array.isArray(e)?e.flatMap(t=>typeof t=="string"?t.split(","):[]):typeof e=="string"?e.split(",").map(t=>t.trim()):[]:[]}function ec(e){let t=[];for(let o of e){let n=o.split(":"),r=n[n.length-1];r&&Ct(r)&&t.push(r),Ct(o)&&t.push(o),o.startsWith("HGNC:HGNC:")?t.push(o.replace("HGNC:HGNC:","HGNC:")):o.startsWith("HGNC:")&&/^HGNC:\d+$/.test(o)&&t.push(o)}return[...new Set(t)]}function tc(e){if(!e)return[];let t=[],o=[e.get("ID"),e.get("id"),e.get("name"),e.get("Name"),e.get("transcript_id"),e.get("protein_id"),e.get("protAcc"),e.get("mrnaAcc")];for(let s of o)if(typeof s=="string"){let l=s.replace(/\.[^./]+$/,"");Ct(l)&&t.push(l)}let n=e.get("hgnc")??e.get("HGNC");if(typeof n=="string"||typeof n=="number"){let s=String(n);/^\d+$/.test(s)?t.push(`HGNC:${s}`):br.test(s)&&t.push(s)}let r=e.get("Dbxref")??e.get("dbxref")??e.get("db_xref"),i=ec(Qm(r));for(let s of i)t.push(s);return[...new Set(t)]}function Gs(e){if(!e)return{recognizedIds:[]};let t=e;if(e.get("type")==="gene"){let l=Ot(e);l.length>0&&(t=l[0])}let o=tc(t),n=t.get("uniprot")??t.get("uniprotId")??t.get("uniprotid")??t.get("UniProt"),r=typeof n=="string"&&n.length>0?n:void 0,i=e.get("gene_id")??e.get("ID"),s=e.get("gene_name")??e.get("gene")??e.get("name")??e.get("Name");return{recognizedIds:[...new Set(o)],uniprotId:r,geneId:typeof i=="string"?i:void 0,geneName:typeof s=="string"?s:void 0}}function zs({options:e,isoformSequences:t,structureSequence:o}){let n=e.find(i=>o&&ee(t[i.id()]?.seq??"")===o),r=e.filter(i=>!!t[i.id()]).toSorted((i,s)=>t[s.id()].seq.length-t[i.id()].seq.length)[0];return n??r}var Ns,Vs,Bs,Hs,Us,Os,br,ce=S(()=>{"use strict";Ns=/^ENS[A-Z]*G\d+/i,Vs=/^ENS[A-Z]*T\d+/i,Bs=/^ENS[A-Z]*P\d+/i,Hs=/^[NX][MR]_\d+/i,Us=/^[NX]P_\d+/i,Os=/^CCDS\d+/i,br=/^HGNC:\d+/i});var rn=V((vf,$s)=>{$s.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes/AdapterType"]});var oo=V((Tf,Zs)=>{Zs.exports=JBrowseExports["@jbrowse/core/configuration"]});var sn=V((Pf,ea)=>{ea.exports=JBrowseExports["@jbrowse/core/data_adapters/BaseAdapter"]});var an=V((kf,ta)=>{ta.exports=JBrowseExports["@jbrowse/core/util/io"]});var ln=V((Cf,oa)=>{oa.exports=JBrowseExports["@jbrowse/core/util/rxjs"]});var sa={};At(sa,{default:()=>pn});var na,un,ra,ia,pn,aa=S(()=>{"use strict";na=p(sn()),un=p($()),ra=p(an()),ia=p(ln()),pn=class extends na.BaseFeatureDataAdapter{static capabilities=["getFeatures","getRefNames"];feats;async loadDataP(){let t=JSON.parse(await(0,ra.openLocation)(this.getConf("location")).readFile("utf8"));return t.residueNumber.map((o,n)=>({uniqueId:`feat-${n}`,start:o,end:o+1,score:t.confidenceScore[n]}))}async loadData(t={}){return this.feats??=this.loadDataP().catch(o=>{throw this.feats=void 0,o}),this.feats}async getRefNames(t={}){return[]}getFeatures(t,o={}){return(0,ia.ObservableCreate)(async n=>{let{start:r,end:i,refName:s}=t,l=await this.loadData();for(let a of l)(0,un.doesIntersect2)(a.start,a.end,r,i)&&n.next(new un.SimpleFeature({...a,refName:s}));n.complete()})}freeResources(){}}});var fa={};At(fa,{default:()=>mn,parseAlphaMissense:()=>ga});function ga(e){return e.split(`
|
|
2
|
+
`).slice(1).map(t=>t.trim()).filter(t=>!!t).flatMap((t,o)=>{let[n="",r,i]=t.split(","),s=n[0],l=n.at(-1),a=+n.slice(1,-1);return s!==void 0&&l!==void 0&&!Number.isNaN(a)&&r!==void 0&&i!==void 0?[{uniqueId:`feat-${o}`,ref:s,variant:l,start:a,end:a+1,score:+r,am_class:i}]:[]})}var ma,Mt,ca,da,mn,ha=S(()=>{"use strict";ma=p(sn()),Mt=p($()),ca=p(an()),da=p(ln());mn=class extends ma.BaseFeatureDataAdapter{static capabilities=["getFeatures","getRefNames"];feats;async loadDataP(){let t=await(0,ca.openLocation)(this.getConf("location")).readFile("utf8");return ga(t)}async loadData(t={}){return this.feats??=this.loadDataP().catch(o=>{throw this.feats=void 0,o}),this.feats}async getGlobalStats(t){let n=(await this.loadData()).map(r=>r.score);return{scoreMin:(0,Mt.min)(n),scoreMax:(0,Mt.max)(n)}}async getMultiRegionFeatureDensityStats(t){return{featureDensity:0}}async getRefNames(t={}){return[]}getFeatures(t,o={}){return(0,da.ObservableCreate)(async n=>{let{start:r,end:i,refName:s}=t,l=await this.loadData();for(let a of l)(0,Mt.doesIntersect2)(a.start,a.end,r,i)&&n.next(new Mt.SimpleFeature({...a,refName:s,source:a.variant}));n.complete()})}async getSources(){let t=new Set,o=await this.loadData();for(let n of o)t.add(n.variant);return[...t].map(n=>({name:n,__name:n}))}freeResources(){}}});var wa=V((qf,ya)=>{ya.exports=JBrowseExports["@mui/material/utils"]});var ge,dt=S(()=>{"use client";ge=p(wa(),1)});var gt=V((Nf,xa)=>{xa.exports=JBrowseExports["react/jsx-runtime"]});var Oe=V((Hf,Ta)=>{Ta.exports=JBrowseExports["@jbrowse/core/ui"]});var M=V((Uf,Aa)=>{Aa.exports=JBrowseExports["@mui/material"]});function Mr(){let e=localStorage.getItem(Va);return e===null?!0:e==="true"}function Ba(e){localStorage.setItem(Va,e?"true":"false")}function uc(e){return"setUseWorkspaces"in e&&typeof e.setUseWorkspaces=="function"&&"setPendingMove"in e&&typeof e.setPendingMove=="function"}function mc(e,t){uc(e)&&(e.setPendingMove({type:"splitRight",viewId:t}),e.setUseWorkspaces(!0))}function dn(e,t,o){(o??Mr())&&mc(e,t)}var Va,gn=S(()=>{"use strict";Va="proteinView-launchSideBySide"});function Fr(e){let t=e.next();for(;!t.done&&t.value.trim()==="";)t=e.next();return t.value}var Lr=S(()=>{});function Ua(e){let t=e.trim();return t?t.split(/\s+/).every(n=>/^\d+$/.test(n)):!1}function cc(e){let t=e.trim();return/^\w+\s+/.test(t)&&!Ua(e)}function dc(e){return e.length>=3&&/^\d+$/.test(e[1])}function gc(e,t){let n=e.trim().split(/\s+/),r=n[t],i=e.indexOf(r,e.indexOf(n[0])+n[0].length);return[i,i+r.length]}function Ha(e){let t=Fr(e),o=[],n="";if(!t)return;for(;t;)Ua(t)||(cc(t)?o.push(t):n=t),t=e.next().value;if(o.length===0)return;let r=o.map(b=>b.trim().split(/\s+/)),i=r[0];if(!i)return;let s=dc(i)?2:1,[l,a]=gc(o[0],s),u=r.map(b=>b[0]),m=r.map(b=>b[s]),d=n.slice(l,a),c=m[0];if(c){let b=c.length-d.length;b>0&&(d+=" ".repeat(b))}return{ids:u,seqs:m,consensus:d}}function Oa(e){let t,o=Ha(e);if(o!==void 0)for(;t=Ha(e);){for(let n=0;n<t.seqs.length;n++)o.seqs[n]+=t.seqs[n];o.consensus+=t.consensus}return o}var Ga=S(()=>{Lr()});function fn(e){let t=e.split(`
|
|
3
3
|
`).filter(s=>!s.startsWith("#")).join(`
|
|
4
|
-
`),o=
|
|
5
|
-
`)[Symbol.iterator]());if(o===void 0)throw new Error("No blocks parsed");let n=o.seqs.map((s,l)=>({id:o.ids[l],seq:s})),{consensus:r}=o,i=n[0];if(!i)throw new Error("No alignments found");if(r.length!==i.seq.length)throw new Error(`Consensus length !== sequence length. Con ${r.length} seq ${i.seq.length}`);if(n.length!==2)throw new Error(`Expected exactly 2 sequences in pairwise alignment, got ${n.length}`);return{consensus:r,alns:n}}var
|
|
6
|
-
`).filter(r=>!r.startsWith("#")).map(r=>r.trim()).filter(r=>!!r).map(r=>r.split(" ")[2]))]}function xc({session:e,uniprotId:t,featureTypes:o}){o.forEach(n=>{let r=`${t}-${n}`;e.addTrackConf({type:"FeatureTrack",trackId:r,name:n,adapter:{type:"Gff3Adapter",gffLocation:{uri:`https://rest.uniprot.org/uniprotkb/${t}.gff`}},assemblyNames:[t],displays:[{displayId:`${r}-LinearBasicDisplay`,type:"LinearBasicDisplay",jexlFilters:[`get(feature,'type')=='${n}'`]}]})})}function Sc({session:e,uniprotId:t}){e.addTrackConf({type:"FeatureTrack",trackId:`${t}-Antigen`,name:"Antigen",adapter:{type:"Gff3Adapter",gffLocation:{uri:`https://www.ebi.ac.uk/proteins/api/antigen/${t}?format=gff`}},assemblyNames:[t]})}function vc({session:e,uniprotId:t}){e.addTrackConf({type:"FeatureTrack",trackId:`${t}-Variation`,name:"Variation",adapter:{type:"UniProtVariationAdapter",location:{uri:`https://www.ebi.ac.uk/proteins/api/variation/${t}.json`}},assemblyNames:[t]})}function Tc({session:e,uniprotId:t,confidenceUrl:o}){o&&e.addTrackConf({type:"QuantitativeTrack",trackId:`${t}-AlphaFold-confidence`,name:"AlphaFold confidence",adapter:{type:"AlphaFoldConfidenceAdapter",location:{uri:o}},assemblyNames:[t]})}function Pc({session:e,uniprotId:t}){e.addTrackConf({type:"MultiQuantitativeTrack",trackId:`${t}-AlphaMissense-scores`,name:"AlphaMissense scores",assemblyNames:[t],adapter:{type:"AlphaMissensePathogenicityAdapter",location:{uri:`https://alphafold.ebi.ac.uk/files/AF-${t}-F1-aa-substitutions.csv`}},displays:[{type:"MultiLinearWiggleDisplay",displayId:`${t}-AlphaMissense-scores-MultiLinearWiggleDisplay`,defaultRendering:"multirowdensity",renderers:{MultiDensityRenderer:{type:"MultiDensityRenderer",bicolorPivotValue:.5,posColor:"red",negColor:"blue"}}}]})}async function Xa({session:e,uniprotId:t,confidenceUrl:o}){let n=await wc(t);xc({session:e,uniprotId:t,featureTypes:n}),Sc({session:e,uniprotId:t}),vc({session:e,uniprotId:t}),Tc({session:e,uniprotId:t,confidenceUrl:o}),Pc({session:e,uniprotId:t})}var Qa=S(()=>{"use strict"});async function el({session:e,feature:t,selectedTranscript:o,uniprotId:n,confidenceUrl:r,connectedViewId:i}){$a(e,n),await Xa({session:e,uniprotId:n,confidenceUrl:r});let s=e.addView("LinearGenomeView",{type:"LinearGenomeView",displayName:yn("Protein view",t,o,n)});i&&o&&Gt.register({viewId:s.id,connectedViewId:i,feature:o.toJSON(),uniprotId:n}),await s.navToLocString(n,n)}var tl=S(()=>{"use strict";Za();Qa();tn();Je()});function po(e,t=Nr){return`https://alphafold.ebi.ac.uk/files/AF-${e}-F1-model_${t}.cif`}function nl(e,t=Nr){return`https://alphafold.ebi.ac.uk/files/AF-${e}-F1-confidence_${t}.json`}function Ac(e,t=Nr){return`https://alphafold.ebi.ac.uk/files/msa/AF-${e}-F1-msa_${t}.a3m`}function Eo(e){return`https://files.rcsb.org/download/${e}.cif`}function Vr(e){return e.split(" ")[0]}function wn(e){return/AF-([A-Z0-9]+)-F\d+/.exec(Vr(e))?.[1]}function rl(e,t){let o=Vr(e);if(o.startsWith("AF-"))return`https://alphafold.ebi.ac.uk/files/${o}.cif`;if(t==="pdb100"){let n=o.split("_")[0];if(n.length===4)return Eo(n)}}function il(e){let t=Vr(e);if(t.startsWith("AF-"))return`https://alphafold.ebi.ac.uk/files/${t.replace("-model_","-confidence_")}.json`}function yn(e,t,o,n){return[...new Set([e,n,no(t),Ae(o)])].filter(r=>!!r).join(" - ")}function jt({session:e,view:t,feature:o,selectedTranscript:n,uniprotId:r,url:i,data:s,userProvidedTranscriptSequence:l,alignmentAlgorithm:a,displayName:u,connectedMsaViewId:m,sideBySide:d}){let c={type:"ProteinView",alignmentAlgorithm:a,connectedMsaViewId:m,structures:[{url:i,data:s,userProvidedTranscriptSequence:l??"",feature:n?.toJSON(),connectedViewId:t.id}],displayName:u??yn("Protein view",o,n,r)},y=e.addView("ProteinView",c);return(d??lo())&&gn(e,y.id),y}async function xn({session:e,view:t,feature:o,selectedTranscript:n,uniprotId:r,confidenceUrl:i}){!r||!(0,ol.isSessionWithAddTracks)(e)||await el({session:e,selectedTranscript:n,feature:o,uniprotId:r,confidenceUrl:i,connectedViewId:t.id})}function qo({session:e,view:t,feature:o,selectedTranscript:n,uniprotId:r,displayName:i}){if(r)return e.addView("MsaView",{type:"MsaView",displayName:i??yn("MSA view",o,n,r),connectedViewId:t.id,connectedFeature:n?.toJSON(),init:{msaUrl:Ac(r),colorSchemeName:"percent_identity"}})}function Sn(){return window.JBrowsePluginMsaView!==void 0}function sl(e){let{uniprotId:t}=e;if(!t)return;let o=qo(e);return jt({...e,connectedMsaViewId:o?.id})}var ol,Nr,Je=S(()=>{"use strict";ol=p(te());fn();ce();tl();Nr="v6"});var ul=V(pl=>{"use strict";var co=x();function Cc(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Mc=typeof Object.is=="function"?Object.is:Cc,Ic=co.useState,Fc=co.useEffect,Lc=co.useLayoutEffect,Ec=co.useDebugValue;function qc(e,t){var o=t(),n=Ic({inst:{value:o,getSnapshot:t}}),r=n[0].inst,i=n[1];return Lc(function(){r.value=o,r.getSnapshot=t,zr(r)&&i({inst:r})},[e,o,t]),Fc(function(){return zr(r)&&i({inst:r}),e(function(){zr(r)&&i({inst:r})})},[e]),Ec(o),o}function zr(e){var t=e.getSnapshot;e=e.value;try{var o=t();return!Mc(e,o)}catch{return!0}}function Dc(e,t){return t()}var Nc=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Dc:qc;pl.useSyncExternalStore=co.useSyncExternalStore!==void 0?co.useSyncExternalStore:Nc});var cl=V((nb,ml)=>{"use strict";ml.exports=ul()});var Ft={};vt(Ft,{ERROR_REVALIDATE_EVENT:()=>Vc,FOCUS_EVENT:()=>dl,MUTATE_EVENT:()=>fl,RECONNECT_EVENT:()=>gl});var dl,gl,fl,Vc,hl=S(()=>{dl=0,gl=1,fl=2,Vc=3});function vn(e,t){var o,n;if(e===t)return!0;if(e&&t&&(o=e.constructor)===t.constructor){if(o===Date)return e.getTime()===t.getTime();if(o===RegExp)return e.toString()===t.toString();if(o===Array){if((n=e.length)===t.length)for(;n--&&vn(e[n],t[n]););return n===-1}if(!o||typeof e=="object"){n=0;for(o in e)if(bl.call(e,o)&&++n&&!bl.call(t,o)||!(o in t)||!vn(e[o],t[o]))return!1;return Object.keys(t).length===n}}return e!==e&&t!==t}var bl,yl=S(()=>{bl=Object.prototype.hasOwnProperty});async function Ln(...e){let[t,o,n,r]=e,i=$e({populateCache:!0,throwOnError:!0},typeof r=="boolean"?{revalidate:r}:r||{}),s=i.populateCache,l=i.rollbackOnError,a=i.optimisticData,u=c=>typeof l=="function"?l(c):l!==!1,m=i.throwOnError;if(qe(o)){let c=o,y=[],w=t.keys();for(let h of w)!/^\$(inf|sub)\$/.test(h)&&c(t.get(h)._k)&&y.push(h);return Promise.all(y.map(d))}return d(o);async function d(c){let[y]=Vo(c);if(!y)return;let[w,h]=In(t,y),[b,f,g,v]=Ke.get(t),D=()=>{let $=b[y];return(qe(i.revalidate)?i.revalidate(w().data,c):i.revalidate!==!1)&&(delete g[y],delete v[y],$&&$[0])?$[0](2).then(()=>w().data):w().data};if(e.length<3)return D();let T=n,O,z=!1,ve=No();f[y]=[ve,0];let M=!A(a),Te=w(),se=Te.data,me=Te._c,Y=A(me)?se:me;if(M&&(a=qe(a)?a(Y,se):a,h({data:a,_c:Y})),qe(T))try{T=T(Y)}catch($){O=$,z=!0}if(T&&Mn(T))if(T=await T.catch($=>{O=$,z=!0}),ve!==f[y][0]){if(z)throw O;return T}else z&&M&&u(O)&&(s=!0,h({data:Y,_c:le}));if(s&&!z)if(qe(s)){let $=s(T,Y);h({data:$,error:le,_c:le})}else h({data:T,error:le,_c:le});if(f[y][1]=No(),Promise.resolve(D()).then(()=>{h({_c:le})}),z){if(m)throw O;return}return T}}var fe,Ke,Ye,le,go,A,qe,$e,Mn,jr,Tn,$r,fo,An,xl,Sl,In,Rr,Bc,Jr,Kr,Hc,Uc,Gc,vl,Tl,Fn,Lt,Zr,ho,Wr,Yr,Pn,Oc,_r,zc,kn,Vo,jc,No,wl,Xr,Wc,Pl,En,Al,qn,Qr,Cn,ei,ti=S(()=>{"use client";fe=p(x(),1);yl();Ke=new WeakMap,Ye=()=>{},le=Ye(),go=Object,A=e=>e===le,qe=e=>typeof e=="function",$e=(e,t)=>({...e,...t}),Mn=e=>qe(e.then),jr={},Tn={},$r="undefined",fo=typeof window!=$r,An=typeof document!=$r,xl=fo&&"Deno"in window,Sl=()=>fo&&typeof window.requestAnimationFrame!=$r,In=(e,t)=>{let o=Ke.get(e);return[()=>!A(t)&&e.get(t)||jr,n=>{if(!A(t)){let r=e.get(t);t in Tn||(Tn[t]=r),o[5](t,$e(r,n),r||jr)}},o[6],()=>!A(t)&&t in Tn?Tn[t]:!A(t)&&e.get(t)||jr]},Rr=!0,Bc=()=>Rr,[Jr,Kr]=fo&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[Ye,Ye],Hc=()=>{let e=An&&document.visibilityState;return A(e)||e!=="hidden"},Uc=e=>(An&&document.addEventListener("visibilitychange",e),Jr("focus",e),()=>{An&&document.removeEventListener("visibilitychange",e),Kr("focus",e)}),Gc=e=>{let t=()=>{Rr=!0,e()},o=()=>{Rr=!1};return Jr("online",t),Jr("offline",o),()=>{Kr("online",t),Kr("offline",o)}},vl={isOnline:Bc,isVisible:Hc},Tl={initFocus:Uc,initReconnect:Gc},Fn=!fe.default.useId,Lt=!fo||xl,Zr=e=>Sl()?window.requestAnimationFrame(e):setTimeout(e,1),ho=Lt?fe.useEffect:fe.useLayoutEffect,Wr=typeof navigator<"u"&&navigator.connection,Yr=!Lt&&Wr&&(["slow-2g","2g"].includes(Wr.effectiveType)||Wr.saveData),Pn=new WeakMap,Oc=e=>go.prototype.toString.call(e),_r=(e,t)=>e===`[object ${t}]`,zc=0,kn=e=>{let t=typeof e,o=Oc(e),n=_r(o,"Date"),r=_r(o,"RegExp"),i=_r(o,"Object"),s,l;if(go(e)===e&&!n&&!r){if(s=Pn.get(e),s)return s;if(s=++zc+"~",Pn.set(e,s),Array.isArray(e)){for(s="@",l=0;l<e.length;l++)s+=kn(e[l])+",";Pn.set(e,s)}if(i){s="#";let a=go.keys(e).sort();for(;!A(l=a.pop());)A(e[l])||(s+=l+":"+kn(e[l])+",");Pn.set(e,s)}}else s=n?e.toJSON():t=="symbol"?e.toString():t=="string"?JSON.stringify(e):""+e;return s},Vo=e=>{if(qe(e))try{e=e()}catch{e=""}let t=e;return e=typeof e=="string"?e:(Array.isArray(e)?e.length:e)?kn(e):"",[e,t]},jc=0,No=()=>++jc;wl=(e,t)=>{for(let o in e)e[o][0]&&e[o][0](t)},Xr=(e,t)=>{if(!Ke.has(e)){let o=$e(Tl,t),n=Object.create(null),r=Ln.bind(le,e),i=Ye,s=Object.create(null),l=(m,d)=>{let c=s[m]||[];return s[m]=c,c.push(d),()=>c.splice(c.indexOf(d),1)},a=(m,d,c)=>{e.set(m,d);let y=s[m];if(y)for(let w of y)w(d,c)},u=()=>{if(!Ke.has(e)&&(Ke.set(e,[n,Object.create(null),Object.create(null),Object.create(null),r,a,l]),!Lt)){let m=o.initFocus(setTimeout.bind(le,wl.bind(le,n,0))),d=o.initReconnect(setTimeout.bind(le,wl.bind(le,n,1)));i=()=>{m&&m(),d&&d(),Ke.delete(e)}}};return u(),[e,r,u,i]}return[e,Ke.get(e)[4]]},Wc=(e,t,o,n,r)=>{let i=o.errorRetryCount,s=r.retryCount,l=~~((Math.random()+.5)*(1<<(s<8?s:8)))*o.errorRetryInterval;!A(i)&&s>i||setTimeout(n,l,r)},Pl=vn,[En,Al]=Xr(new Map),qn=$e({onLoadingSlow:Ye,onSuccess:Ye,onError:Ye,onErrorRetry:Wc,onDiscarded:Ye,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:Yr?1e4:5e3,focusThrottleInterval:5*1e3,dedupingInterval:2*1e3,loadingTimeout:Yr?5e3:3e3,compare:Pl,isPaused:()=>!1,cache:En,mutate:Al,fallback:{}},vl),Qr=(e,t)=>{let o=$e(e,t);if(t){let{use:n,fallback:r}=e,{use:i,fallback:s}=t;n&&i&&(o.use=n.concat(i)),r&&s&&(o.fallback=$e(r,s))}return o},Cn=(0,fe.createContext)({}),ei=e=>{let{value:t}=e,o=(0,fe.useContext)(Cn),n=qe(t),r=(0,fe.useMemo)(()=>n?t(o):t,[n,o,t]),i=(0,fe.useMemo)(()=>n?r:Qr(o,r),[n,o,r]),s=r&&r.provider,l=(0,fe.useRef)(le);s&&!l.current&&(l.current=Xr(s(i.cache||En),r));let a=l.current;return a&&(i.cache=a[0],i.mutate=a[1]),ho(()=>{if(a)return a[2]&&a[2](),a[3]},[]),(0,fe.createElement)(Cn.Provider,$e(e,{value:i}))}});var kl,Cl=S(()=>{kl="$inf$"});var Ml=S(()=>{});var bo,Il,_c,Rc,Jc,Kc,Yc,$c,Fl,Ll,El=S(()=>{ti();ti();hl();Cl();bo=p(x(),1);Ml();Il=fo&&window.__SWR_DEVTOOLS_USE__,_c=Il?window.__SWR_DEVTOOLS_USE__:[],Rc=()=>{Il&&(window.__SWR_DEVTOOLS_REACT__=bo.default)},Jc=e=>qe(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(e[1]===null?e[2]:e[1])||{}],Kc=()=>{let e=(0,bo.useContext)(Cn);return(0,bo.useMemo)(()=>$e(qn,e),[e])},Yc=e=>(t,o,n)=>e(t,o&&((...i)=>{let[s]=Vo(t),[,,,l]=Ke.get(En);if(s.startsWith(kl))return o(...i);let a=l[s];return A(a)?o(...i):(delete l[s],a)}),n),$c=_c.concat(Yc),Fl=e=>function(...o){let n=Kc(),[r,i,s]=Jc(o),l=Qr(n,s),a=e,{use:u}=l,m=(u||[]).concat($c);for(let d=m.length;d--;)a=m[d](a);return a(r,i||l.fetcher||null,l)},Ll=(e,t,o)=>{let n=t[e]||(t[e]=[]);return n.push(o),()=>{let r=n.indexOf(o);r>=0&&(n[r]=n[n.length-1],n.pop())}};Rc()});var pe,ri,Zc,gb,oi,ni,ql,Xc,Qc,fb,rt,yo=S(()=>{pe=p(x(),1),ri=p(cl(),1);El();Zc=()=>{},gb=Zc(),oi=pe.default.use||(e=>{switch(e.status){case"pending":throw e;case"fulfilled":return e.value;case"rejected":throw e.reason;default:throw e.status="pending",e.then(t=>{e.status="fulfilled",e.value=t},t=>{e.status="rejected",e.reason=t}),e}}),ni={dedupe:!0},ql=Promise.resolve(le),Xc=()=>Ye,Qc=(e,t,o)=>{let{cache:n,compare:r,suspense:i,fallbackData:s,revalidateOnMount:l,revalidateIfStale:a,refreshInterval:u,refreshWhenHidden:m,refreshWhenOffline:d,keepPreviousData:c,strictServerPrefetchWarning:y}=o,[w,h,b,f]=Ke.get(n),[g,v]=Vo(e),D=(0,pe.useRef)(!1),T=(0,pe.useRef)(!1),O=(0,pe.useRef)(g),z=(0,pe.useRef)(t),ve=(0,pe.useRef)(o),M=()=>ve.current,Te=()=>M().isVisible()&&M().isOnline(),[se,me,Y,$]=In(n,g),Pe=(0,pe.useRef)({}).current,Be=A(s)?A(o.fallback)?le:o.fallback[g]:s,lt=(N,X)=>{for(let Q in Pe){let ee=Q;if(ee==="data"){if(!r(N[ee],X[ee])&&(!A(N[ee])||!r(Qt,X[ee])))return!1}else if(X[ee]!==N[ee])return!1}return!0},_e=!D.current,Ie=(0,pe.useMemo)(()=>{let N=se(),X=$(),Q=ae=>{let Re=$e(ae);return delete Re._k,(()=>{if(!g||!t||M().isPaused())return!1;if(_e&&!A(l))return l;let Ao=A(Be)?Re.data:Be;return i?A(Ao)||a:A(Ao)||a})()?{isValidating:!0,isLoading:!0,...Re}:Re},ee=Q(N),et=N===X?ee:Q(X),Ue=ee;return[()=>{let ae=Q(se());return lt(ae,Ue)?(Ue.data=ae.data,Ue.isLoading=ae.isLoading,Ue.isValidating=ae.isValidating,Ue.error=ae.error,Ue):(Ue=ae,ae)},()=>et]},[n,g]),He=(0,ri.useSyncExternalStore)((0,pe.useCallback)(N=>Y(g,(X,Q)=>{lt(Q,X)||N()}),[n,g]),Ie[0],Ie[1]),sr=w[g]&&w[g].length>0,wt=He.data,pt=A(wt)?Be&&Mn(Be)?oi(Be):Be:wt,Zt=He.error,Xt=(0,pe.useRef)(pt),Qt=c?A(wt)?A(Xt.current)?pt:Xt.current:wt:pt,ut=g&&A(pt),Bt=(0,pe.useRef)(null);!Lt&&(0,ri.useSyncExternalStore)(Xc,()=>(Bt.current=!1,Bt),()=>(Bt.current=!0,Bt));let ar=Bt.current;y&&ar&&!i&&ut&&console.warn(`Missing pre-initiated data for serialized key "${g}" during server-side rendering. Data fetching should be initiated on the server and provided to SWR via fallback data. You can set "strictServerPrefetchWarning: false" to disable this warning.`);let xt=!g||!t||M().isPaused()||sr&&!A(Zt)?!1:_e&&!A(l)?l:i?A(pt)?!1:a:A(pt)||a,eo=_e&&xt,lr=A(He.isValidating)?eo:He.isValidating,Yo=A(He.isLoading)?eo:He.isLoading,St=(0,pe.useCallback)(async N=>{let X=z.current;if(!g||!X||T.current||M().isPaused())return!1;let Q,ee,et=!0,Ue=N||{},ae=!b[g]||!Ue.dedupe,Re=()=>Fn?!T.current&&g===O.current&&D.current:g===O.current,Po={isValidating:!1,isLoading:!1},Ao=()=>{me(Po)},Qi=()=>{let Ge=b[g];Ge&&Ge[1]===ee&&delete b[g]},es={isValidating:!0};A(se().data)&&(es.isLoading=!0);try{if(ae&&(me(es),o.loadingTimeout&&A(se().data)&&setTimeout(()=>{et&&Re()&&M().onLoadingSlow(g,o)},o.loadingTimeout),b[g]=[X(v),No()]),[Q,ee]=b[g],Q=await Q,ae&&setTimeout(Qi,o.dedupingInterval),!b[g]||b[g][1]!==ee)return ae&&Re()&&M().onDiscarded(g),!1;Po.error=le;let Ge=h[g];if(!A(Ge)&&(ee<=Ge[0]||ee<=Ge[1]||Ge[1]===0))return Ao(),ae&&Re()&&M().onDiscarded(g),!1;let mt=se().data;Po.data=r(mt,Q)?mt:Q,ae&&Re()&&M().onSuccess(Q,g,o)}catch(Ge){Qi();let mt=M(),{shouldRetryOnError:ur}=mt;mt.isPaused()||(Po.error=Ge,ae&&Re()&&(mt.onError(Ge,g,mt),(ur===!0||qe(ur)&&ur(Ge))&&(!M().revalidateOnFocus||!M().revalidateOnReconnect||Te())&&mt.onErrorRetry(Ge,g,mt,jm=>{let mr=w[g];mr&&mr[0]&&mr[0](Ft.ERROR_REVALIDATE_EVENT,jm)},{retryCount:(Ue.retryCount||0)+1,dedupe:!0})))}return et=!1,Ao(),!0},[g,n]),pr=(0,pe.useCallback)((...N)=>Ln(n,O.current,...N),[]);if(ho(()=>{z.current=t,ve.current=o,A(wt)||(Xt.current=wt)}),ho(()=>{if(!g)return;let N=St.bind(le,ni),X=0;M().revalidateOnFocus&&(X=Date.now()+M().focusThrottleInterval);let ee=Ll(g,w,(et,Ue={})=>{if(et==Ft.FOCUS_EVENT){let ae=Date.now();M().revalidateOnFocus&&ae>X&&Te()&&(X=ae+M().focusThrottleInterval,N())}else if(et==Ft.RECONNECT_EVENT)M().revalidateOnReconnect&&Te()&&N();else{if(et==Ft.MUTATE_EVENT)return St();if(et==Ft.ERROR_REVALIDATE_EVENT)return St(Ue)}});return T.current=!1,O.current=g,D.current=!0,me({_k:v}),xt&&(b[g]||(A(pt)||Lt?N():Zr(N))),()=>{T.current=!0,ee()}},[g]),ho(()=>{let N;function X(){let ee=qe(u)?u(se().data):u;ee&&N!==-1&&(N=setTimeout(Q,ee))}function Q(){!se().error&&(m||M().isVisible())&&(d||M().isOnline())?St(ni).then(X):X()}return X(),()=>{N&&(clearTimeout(N),N=-1)}},[u,m,d,g]),(0,pe.useDebugValue)(Qt),i){if(!Fn&&Lt&&ut)throw new Error("Fallback data is required when using Suspense in SSR.");ut&&(z.current=t,ve.current=o,T.current=!1);let N=f[g],X=!A(N)&&ut?pr(N):ql;if(oi(X),!A(Zt)&&ut)throw Zt;let Q=ut?St(ni):ql;!A(Qt)&&ut&&(Q.status="fulfilled",Q.value=!0),oi(Q)}return{mutate:pr,get data(){return Pe.data=!0,Qt},get error(){return Pe.error=!0,Zt},get isValidating(){return Pe.isValidating=!0,lr},get isLoading(){return Pe.isLoading=!0,Yo}}},fb=go.defineProperty(ei,"defaultValue",{value:qn}),rt=Fl(Qc)});var ip,Wn,wi=S(()=>{"use client";Ct();ip=p(Mt(),1),Wn=(0,ke.createSvgIcon)((0,ip.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 17h-2v-2h2zm2.07-7.75-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25"}),"Help")});var pp={};vt(pp,{default:()=>lp});function sp({children:e}){return Me.default.createElement(st.Typography,{style:{margin:4}},e)}function lp({handleClose:e}){return Me.default.createElement(ap.Dialog,{open:!0,maxWidth:"lg",onClose:e,title:"Help"},Me.default.createElement(st.DialogContent,null,Me.default.createElement(sp,null,"The procedure for the protein lookup is as follows:",Me.default.createElement("ul",null,Me.default.createElement("li",null,"(Automatic lookup) Searches UniProt for the transcript ID or gene name to retrieve the UniProt ID, which is then used to lookup the structure in AlphaFoldDB"),Me.default.createElement("li",null,"(Manual) Allows you to choose your own structure file from your local machine (e.g. a PDB file predicted by e.g. ColabFold) or supply a specific URL"),Me.default.createElement("li",null,"The residues from the structure are downloaded, and then you can choose the transcript isoform from the selected gene that best represents the structure. Asterisks are displayed if there is an exact sequence match"),Me.default.createElement("li",null,"The residues from the structure are finally aligned to the to the selected transcript's protein sequence representation, and this creates a mapping from the reference genome coordinates to positions in the 3-D structure"),Me.default.createElement("li",null,"Finally the molstar panel is opened, and this contains many specialized features features, plus additional mouseover and selection features supplied by the plugin to connect mouse click actions and mouse hover with coordinates on the linear genome view"))),Me.default.createElement(sp,null,"If you run into challenges with this workflow e.g. your transcripts are not being found in UniProt then you can use the Manual import form, or contact colin.diesh@gmail.com for troubleshooting")),Me.default.createElement(st.Divider,null),Me.default.createElement(st.DialogActions,null,Me.default.createElement(st.Button,{onClick:e,color:"primary"},"Close")))}var Me,ap,st,up=S(()=>{"use strict";Me=p(x()),ap=p(Oe()),st=p(I())});var Ai=V((N0,Sp)=>{Sp.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var Tp=V((V0,vp)=>{vp.exports=JBrowseExports["@jbrowse/core/util/types/mst"]});var zo=V((B0,Pp)=>{Pp.exports=JBrowseExports["mobx-state-tree"]});async function Cp({plugin:e,colorScheme:t}){let{structures:o}=e.managers.structure.hierarchy.current;for(let n of o)await e.managers.structure.component.updateRepresentationsTheme(n.components,{color:t})}var To,kp,Ci=S(()=>{"use strict";To=[{value:"default",label:"Default (element/chain)"},{value:"plddt-confidence",label:"pLDDT confidence (AlphaFold)"},{value:"chain-id",label:"Chain"},{value:"secondary-structure",label:"Secondary structure"},{value:"hydrophobicity",label:"Hydrophobicity (Kyte-Doolittle)"},{value:"residue-name",label:"Residue type"},{value:"uncertainty",label:"B-factor / uncertainty"},{value:"molecule-type",label:"Molecule type"}],kp=To.map(e=>e.value)});function Ii(e){e.managers.interactivity.lociHighlights.clearHighlights(),e.managers.interactivity.lociSelects.deselectAll()}function Fi(e,t,o){o==="highlight"?(e.managers.interactivity.lociHighlights.clearHighlights(),e.managers.interactivity.lociHighlights.highlight({loci:t})):(e.managers.interactivity.lociSelects.deselectAll(),e.managers.interactivity.lociSelects.select({loci:t}))}async function Lp({structure:e,residues:t,plugin:o,mode:n}){if(n==="clear"||t.length===0){Ii(o);return}let{StructureSelection:r,Script:i}=await ge(),s=i.getStructureSelection(a=>a.struct.generator.atomGroups({"residue-test":a.core.logic.or(t.map(u=>a.core.rel.eq([a.struct.atomProperty.macromolecular.label_seq_id(),u]))),"group-by":a.struct.atomProperty.macromolecular.residueKey()}),e),l=r.toLociWithSourceUnits(s);Fi(o,l,n)}async function Li({structure:e,startResidue:t,endResidue:o,plugin:n,mode:r}){if(r==="clear"){Ii(n);return}let{StructureSelection:i,Script:s}=await ge(),l=s.getStructureSelection(u=>u.struct.generator.atomGroups({"residue-test":u.core.logic.and([u.core.rel.gre([u.struct.atomProperty.macromolecular.label_seq_id(),t]),u.core.rel.lte([u.struct.atomProperty.macromolecular.label_seq_id(),o])]),"group-by":u.struct.atomProperty.macromolecular.residueKey()}),e),a=i.toLociWithSourceUnits(l);Fi(n,a,r)}async function Ep({structure:e,selectedResidue:t,plugin:o,mode:n}){if(n==="clear"){Ii(o);return}let{StructureSelection:r}=await ge(),i=await gs({structure:e,selectedResidue:t+1}),s=r.toLociWithSourceUnits(i);Fi(o,s,n)}var Ei=S(()=>{"use strict";Ht();Ut()});var qp,Dp,Np,Vp,gt=S(()=>{"use strict";qp="rgba(255, 105, 180, 0.5)",Dp="2px solid #333",Np="1px solid black",Vp="#999"});async function Di({structure:e,startResidue:t,endResidue:o,plugin:n}){await Li({structure:e,startResidue:t,endResidue:o,plugin:n,mode:"highlight"})}async function Up({structure:e,startResidue:t,endResidue:o,plugin:n}){await Li({structure:e,startResidue:t,endResidue:o,plugin:n,mode:"select"})}var Ni=S(()=>{"use strict";Ei()});function $n({model:e,structureSeqPos:t}){let{genomeToTranscriptSeqMapping:o,pairwiseAlignment:n,structureSeqToTranscriptSeqPosition:r}=e;if(!o||!n)return;let{p2g:i,strand:s}=o,l=r?.[t];if(l!==void 0)return Qo(i,l,s)}function Vi({model:e,structureSeqPos:t,structureSeqEndPos:o}){let n,r;for(let i=t;i<o;i++){let s=$n({structureSeqPos:i,model:e});if(s){let[l,a]=s;(n===void 0||l<n)&&(n=l),(r===void 0||a>r)&&(r=a)}}if(n!==void 0&&r!==void 0)return[n,r]}async function Ud({model:e,structureSeqPos:t,structureSeqEndPos:o,zoomToBaseLevel:n}){let r=(0,_p.getSession)(e),{connectedView:i,genomeToTranscriptSeqMapping:s}=e;if(!s||!i)return;let{strand:l,refName:a}=s,u=i.assemblyNames[0];if(!u)return;let m=o!==void 0?Vi({structureSeqPos:t,structureSeqEndPos:o,model:e}):$n({structureSeqPos:t,model:e});if(!m)return;let[d,c]=m;if(n)await i.navToLocString(`${a}:${d}-${c}${l===-1?"[rev]":""}`,void 0,.2);else{let{assemblyManager:y}=r,h=y.get(u)?.getCanonicalRefName(a)??a;i.centerAt(d,h)}}async function Wo({model:e,structureSeqPos:t,structureSeqEndPos:o}){e.setClickedStructureRange({start:t,end:o??t+1}),await Ud({model:e,structureSeqPos:t,structureSeqEndPos:o,zoomToBaseLevel:e.zoomToBaseLevel})}var _p,Bi=S(()=>{"use strict";_p=p(te());en()});function Jp(e){return Array.from(e,t=>Gd[t])}function Kp(e){return e<0?"#cccccc":e<=50?"#ff7d45":e<=70?"#ffdb13":e<=90?"#65cbf3":"#0053d6"}function Yp(e){let t=Math.max(0,Math.min(1,(e-Rp)/(Od-Rp))),o=Math.round(51+179*t),n=Math.round(102+38*t),r=Math.round(204+-164*t);return`rgb(${o}, ${n}, ${r})`}function Hi(e,t){return t?e.flatMap((o,n)=>{let r=t[n];return o!==void 0&&r!==void 0?[{col:r,value:o}]:[]}):[]}var Gd,Rp,Od,Ui=S(()=>{"use strict";Gd={I:4.5,V:4.2,L:3.8,F:2.8,C:2.5,M:1.9,A:1.8,G:-.4,T:-.7,S:-.8,W:-.9,Y:-1.3,P:-1.6,H:-3.2,E:-3.5,Q:-3.5,D:-3.5,N:-3.5,K:-3.9,R:-4.5},Rp=-4.5,Od=4.5});var Ve,Se,tu,Zd,ou,nu=S(()=>{"use strict";Ve=p(x()),Se=p(I());Lr();tu=p(_()),Zd=(0,tu.observer)(function({model:t}){let[o,n]=(0,Ve.useState)(""),[r,i]=(0,Ve.useState)(),{showManualAlignmentDialog:s,primaryStructure:l}=t,a=()=>{n(""),i(void 0),t.setShowManualAlignmentDialog(!1)},u=()=>{if(o.trim())try{let m=hn(o.trim());if(!l){i("No structure loaded to apply alignment to");return}l.setAlignment(m),a()}catch(m){i(`Failed to parse alignment: ${m}`)}};return s?Ve.default.createElement(Se.Dialog,{open:!0,onClose:a,maxWidth:"md",fullWidth:!0},Ve.default.createElement(Se.DialogTitle,null,"Import Manual Alignment"),Ve.default.createElement(Se.DialogContent,null,Ve.default.createElement(Se.Typography,{variant:"body2",color:"text.secondary",sx:{mb:2}},"Paste a pre-computed alignment in Clustal format. The first sequence should be the transcript and the second should be the structure."),Ve.default.createElement(Se.TextField,{multiline:!0,rows:12,fullWidth:!0,placeholder:`Example:
|
|
4
|
+
`),o=Oa(t.split(`
|
|
5
|
+
`)[Symbol.iterator]());if(o===void 0)throw new Error("No blocks parsed");let n=o.seqs.map((s,l)=>({id:o.ids[l],seq:s})),{consensus:r}=o,i=n[0];if(!i)throw new Error("No alignments found");if(r.length!==i.seq.length)throw new Error(`Consensus length !== sequence length. Con ${r.length} seq ${i.seq.length}`);if(n.length!==2)throw new Error(`Expected exactly 2 sequences in pairwise alignment, got ${n.length}`);return{consensus:r,alns:n}}var Er=S(()=>{Ga();Lr()});function Ka(e,t){e.addTemporaryAssembly?.({name:t,sequence:{type:"ReferenceSequenceTrack",trackId:`${t}-ReferenceSequenceTrack`,sequenceType:"pep",adapter:{type:"UnindexedFastaAdapter",rewriteRefNames:"jexl:split(refName,'|')[1]",fastaLocation:{uri:`https://rest.uniprot.org/uniprotkb/${t}.fasta`}}}})}var Ya=S(()=>{"use strict"});async function hc(e){let t=`https://rest.uniprot.org/uniprotkb/${e}.gff`,o=await fetch(t);if(!o.ok)throw new Error(`HTTP ${o.status} fetching ${t}`);let n=await o.text();return[...new Set(n.split(`
|
|
6
|
+
`).filter(r=>!r.startsWith("#")).map(r=>r.trim()).filter(r=>!!r).map(r=>r.split(" ")[2]))]}function bc({session:e,uniprotId:t,featureTypes:o}){o.forEach(n=>{let r=`${t}-${n}`;e.addTrackConf({type:"FeatureTrack",trackId:r,name:n,adapter:{type:"Gff3Adapter",gffLocation:{uri:`https://rest.uniprot.org/uniprotkb/${t}.gff`}},assemblyNames:[t],displays:[{displayId:`${r}-LinearBasicDisplay`,type:"LinearBasicDisplay",jexlFilters:[`get(feature,'type')=='${n}'`]}]})})}function yc({session:e,uniprotId:t}){e.addTrackConf({type:"FeatureTrack",trackId:`${t}-Antigen`,name:"Antigen",adapter:{type:"Gff3Adapter",gffLocation:{uri:`https://www.ebi.ac.uk/proteins/api/antigen/${t}?format=gff`}},assemblyNames:[t]})}function wc({session:e,uniprotId:t}){e.addTrackConf({type:"FeatureTrack",trackId:`${t}-Variation`,name:"Variation",adapter:{type:"UniProtVariationAdapter",location:{uri:`https://www.ebi.ac.uk/proteins/api/variation/${t}.json`}},assemblyNames:[t]})}function xc({session:e,uniprotId:t,confidenceUrl:o}){o&&e.addTrackConf({type:"QuantitativeTrack",trackId:`${t}-AlphaFold-confidence`,name:"AlphaFold confidence",adapter:{type:"AlphaFoldConfidenceAdapter",location:{uri:o}},assemblyNames:[t]})}function Sc({session:e,uniprotId:t}){e.addTrackConf({type:"MultiQuantitativeTrack",trackId:`${t}-AlphaMissense-scores`,name:"AlphaMissense scores",assemblyNames:[t],adapter:{type:"AlphaMissensePathogenicityAdapter",location:{uri:`https://alphafold.ebi.ac.uk/files/AF-${t}-F1-aa-substitutions.csv`}},displays:[{type:"MultiLinearWiggleDisplay",displayId:`${t}-AlphaMissense-scores-MultiLinearWiggleDisplay`,defaultRendering:"multirowdensity",renderers:{MultiDensityRenderer:{type:"MultiDensityRenderer",bicolorPivotValue:.5,posColor:"red",negColor:"blue"}}}]})}async function $a({session:e,uniprotId:t,confidenceUrl:o}){let n=await hc(t);bc({session:e,uniprotId:t,featureTypes:n}),yc({session:e,uniprotId:t}),wc({session:e,uniprotId:t}),xc({session:e,uniprotId:t,confidenceUrl:o}),Sc({session:e,uniprotId:t})}var Za=S(()=>{"use strict"});async function Xa({session:e,feature:t,selectedTranscript:o,uniprotId:n,confidenceUrl:r,connectedViewId:i}){Ka(e,n),await $a({session:e,uniprotId:n,confidenceUrl:r});let s=e.addView("LinearGenomeView",{type:"LinearGenomeView",displayName:bn("Protein view",t,o,n)});i&&o&&Ut.register({viewId:s.id,connectedViewId:i,feature:o.toJSON(),uniprotId:n}),await s.navToLocString(n,n)}var Qa=S(()=>{"use strict";Ya();Za();Qo();Re()});function io(e,t=Vr){return`https://alphafold.ebi.ac.uk/files/AF-${e}-F1-model_${t}.cif`}function el(e,t=Vr){return`https://alphafold.ebi.ac.uk/files/AF-${e}-F1-confidence_${t}.json`}function vc(e,t=Vr){return`https://alphafold.ebi.ac.uk/files/msa/AF-${e}-F1-msa_${t}.a3m`}function Lo(e){return`https://files.rcsb.org/download/${e}.cif`}function Br(e){return e.split(" ")[0]}function yn(e){return/AF-([A-Z0-9]+)-F\d+/.exec(Br(e))?.[1]}function tl(e,t){let o=Br(e);if(o.startsWith("AF-"))return`https://alphafold.ebi.ac.uk/files/${o}.cif`;if(t==="pdb100"){let n=o.split("_")[0];if(n.length===4)return Lo(n)}}function ol(e){let t=Br(e);if(t.startsWith("AF-"))return`https://alphafold.ebi.ac.uk/files/${t.replace("-model_","-confidence_")}.json`}function bn(e,t,o,n){return[...new Set([e,n,on(t),Ie(o)])].filter(r=>!!r).join(" - ")}function zt({session:e,view:t,feature:o,selectedTranscript:n,uniprotId:r,url:i,data:s,userProvidedTranscriptSequence:l,alignmentAlgorithm:a,displayName:u,connectedMsaViewId:m,sideBySide:d}){let c={type:"ProteinView",alignmentAlgorithm:a,connectedMsaViewId:m,structures:[{url:i,data:s,userProvidedTranscriptSequence:l??"",feature:n?.toJSON(),connectedViewId:t.id}],displayName:u??bn("Protein view",o,n,r)},b=e.addView("ProteinView",c);return dn(e,b.id,d),b}async function wn({session:e,view:t,feature:o,selectedTranscript:n,uniprotId:r,confidenceUrl:i}){await Xa({session:e,selectedTranscript:n,feature:o,uniprotId:r,confidenceUrl:i,connectedViewId:t.id})}function Eo({session:e,view:t,feature:o,selectedTranscript:n,uniprotId:r,displayName:i}){if(r)return e.addView("MsaView",{type:"MsaView",displayName:i??bn("MSA view",o,n,r),connectedViewId:t.id,connectedFeature:n?.toJSON(),init:{msaUrl:vc(r),colorSchemeName:"percent_identity"}})}function xn(){return window.JBrowsePluginMsaView!==void 0}function nl(e){let{uniprotId:t}=e;if(!t)return;let o=Eo(e);return zt({...e,connectedMsaViewId:o?.id})}var Vr,Re=S(()=>{"use strict";gn();ce();Qa();Vr="v6"});var ll=V(al=>{"use strict";var lo=x();function Ac(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Pc=typeof Object.is=="function"?Object.is:Ac,kc=lo.useState,Cc=lo.useEffect,Mc=lo.useLayoutEffect,Ic=lo.useDebugValue;function Fc(e,t){var o=t(),n=kc({inst:{value:o,getSnapshot:t}}),r=n[0].inst,i=n[1];return Mc(function(){r.value=o,r.getSnapshot=t,jr(r)&&i({inst:r})},[e,o,t]),Cc(function(){return jr(r)&&i({inst:r}),e(function(){jr(r)&&i({inst:r})})},[e]),Ic(o),o}function jr(e){var t=e.getSnapshot;e=e.value;try{var o=t();return!Pc(e,o)}catch{return!0}}function Lc(e,t){return t()}var Ec=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Lc:Fc;al.useSyncExternalStore=lo.useSyncExternalStore!==void 0?lo.useSyncExternalStore:Ec});var ul=V((nb,pl)=>{"use strict";pl.exports=ll()});var Ft={};At(Ft,{ERROR_REVALIDATE_EVENT:()=>qc,FOCUS_EVENT:()=>ml,MUTATE_EVENT:()=>dl,RECONNECT_EVENT:()=>cl});var ml,cl,dl,qc,gl=S(()=>{ml=0,cl=1,dl=2,qc=3});function Sn(e,t){var o,n;if(e===t)return!0;if(e&&t&&(o=e.constructor)===t.constructor){if(o===Date)return e.getTime()===t.getTime();if(o===RegExp)return e.toString()===t.toString();if(o===Array){if((n=e.length)===t.length)for(;n--&&Sn(e[n],t[n]););return n===-1}if(!o||typeof e=="object"){n=0;for(o in e)if(fl.call(e,o)&&++n&&!fl.call(t,o)||!(o in t)||!Sn(e[o],t[o]))return!1;return Object.keys(t).length===n}}return e!==e&&t!==t}var fl,hl=S(()=>{fl=Object.prototype.hasOwnProperty});async function Fn(...e){let[t,o,n,r]=e,i=$e({populateCache:!0,throwOnError:!0},typeof r=="boolean"?{revalidate:r}:r||{}),s=i.populateCache,l=i.rollbackOnError,a=i.optimisticData,u=c=>typeof l=="function"?l(c):l!==!1,m=i.throwOnError;if(Ee(o)){let c=o,b=[],w=t.keys();for(let h of w)!/^\$(inf|sub)\$/.test(h)&&c(t.get(h)._k)&&b.push(h);return Promise.all(b.map(d))}return d(o);async function d(c){let[b]=No(c);if(!b)return;let[w,h]=Mn(t,b),[y,f,g,v]=Ke.get(t),E=()=>{let oe=y[b];return(Ee(i.revalidate)?i.revalidate(w().data,c):i.revalidate!==!1)&&(delete g[b],delete v[b],oe&&oe[0])?oe[0](2).then(()=>w().data):w().data};if(e.length<3)return E();let T=n,G,W=!1,ve=Do();f[b]=[ve,0];let q=!P(a),Pe=w(),ie=Pe.data,me=Pe._c,Y=P(me)?ie:me;if(q&&(a=Ee(a)?a(Y,ie):a,h({data:a,_c:Y})),Ee(T))try{T=T(Y)}catch(oe){G=oe,W=!0}if(T&&Cn(T))if(T=await T.catch(oe=>{G=oe,W=!0}),ve!==f[b][0]){if(W)throw G;return T}else W&&q&&u(G)&&(s=!0,h({data:Y,_c:le}));if(s&&!W)if(Ee(s)){let oe=s(T,Y);h({data:oe,error:le,_c:le})}else h({data:T,error:le,_c:le});if(f[b][1]=Do(),Promise.resolve(E()).then(()=>{h({_c:le})}),W){if(m)throw G;return}return T}}var fe,Ke,Ye,le,po,P,Ee,$e,Cn,Wr,vn,Zr,uo,An,yl,wl,Mn,Rr,Dc,Kr,Yr,Nc,Vc,Bc,xl,Sl,In,Lt,Xr,mo,_r,$r,Tn,Hc,Jr,Uc,Pn,No,Oc,Do,bl,Qr,Gc,vl,Ln,Tl,En,ei,kn,ti,oi=S(()=>{"use client";fe=p(x(),1);hl();Ke=new WeakMap,Ye=()=>{},le=Ye(),po=Object,P=e=>e===le,Ee=e=>typeof e=="function",$e=(e,t)=>({...e,...t}),Cn=e=>Ee(e.then),Wr={},vn={},Zr="undefined",uo=typeof window!=Zr,An=typeof document!=Zr,yl=uo&&"Deno"in window,wl=()=>uo&&typeof window.requestAnimationFrame!=Zr,Mn=(e,t)=>{let o=Ke.get(e);return[()=>!P(t)&&e.get(t)||Wr,n=>{if(!P(t)){let r=e.get(t);t in vn||(vn[t]=r),o[5](t,$e(r,n),r||Wr)}},o[6],()=>!P(t)&&t in vn?vn[t]:!P(t)&&e.get(t)||Wr]},Rr=!0,Dc=()=>Rr,[Kr,Yr]=uo&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[Ye,Ye],Nc=()=>{let e=An&&document.visibilityState;return P(e)||e!=="hidden"},Vc=e=>(An&&document.addEventListener("visibilitychange",e),Kr("focus",e),()=>{An&&document.removeEventListener("visibilitychange",e),Yr("focus",e)}),Bc=e=>{let t=()=>{Rr=!0,e()},o=()=>{Rr=!1};return Kr("online",t),Kr("offline",o),()=>{Yr("online",t),Yr("offline",o)}},xl={isOnline:Dc,isVisible:Nc},Sl={initFocus:Vc,initReconnect:Bc},In=!fe.default.useId,Lt=!uo||yl,Xr=e=>wl()?window.requestAnimationFrame(e):setTimeout(e,1),mo=Lt?fe.useEffect:fe.useLayoutEffect,_r=typeof navigator<"u"&&navigator.connection,$r=!Lt&&_r&&(["slow-2g","2g"].includes(_r.effectiveType)||_r.saveData),Tn=new WeakMap,Hc=e=>po.prototype.toString.call(e),Jr=(e,t)=>e===`[object ${t}]`,Uc=0,Pn=e=>{let t=typeof e,o=Hc(e),n=Jr(o,"Date"),r=Jr(o,"RegExp"),i=Jr(o,"Object"),s,l;if(po(e)===e&&!n&&!r){if(s=Tn.get(e),s)return s;if(s=++Uc+"~",Tn.set(e,s),Array.isArray(e)){for(s="@",l=0;l<e.length;l++)s+=Pn(e[l])+",";Tn.set(e,s)}if(i){s="#";let a=po.keys(e).sort();for(;!P(l=a.pop());)P(e[l])||(s+=l+":"+Pn(e[l])+",");Tn.set(e,s)}}else s=n?e.toJSON():t=="symbol"?e.toString():t=="string"?JSON.stringify(e):""+e;return s},No=e=>{if(Ee(e))try{e=e()}catch{e=""}let t=e;return e=typeof e=="string"?e:(Array.isArray(e)?e.length:e)?Pn(e):"",[e,t]},Oc=0,Do=()=>++Oc;bl=(e,t)=>{for(let o in e)e[o][0]&&e[o][0](t)},Qr=(e,t)=>{if(!Ke.has(e)){let o=$e(Sl,t),n=Object.create(null),r=Fn.bind(le,e),i=Ye,s=Object.create(null),l=(m,d)=>{let c=s[m]||[];return s[m]=c,c.push(d),()=>c.splice(c.indexOf(d),1)},a=(m,d,c)=>{e.set(m,d);let b=s[m];if(b)for(let w of b)w(d,c)},u=()=>{if(!Ke.has(e)&&(Ke.set(e,[n,Object.create(null),Object.create(null),Object.create(null),r,a,l]),!Lt)){let m=o.initFocus(setTimeout.bind(le,bl.bind(le,n,0))),d=o.initReconnect(setTimeout.bind(le,bl.bind(le,n,1)));i=()=>{m&&m(),d&&d(),Ke.delete(e)}}};return u(),[e,r,u,i]}return[e,Ke.get(e)[4]]},Gc=(e,t,o,n,r)=>{let i=o.errorRetryCount,s=r.retryCount,l=~~((Math.random()+.5)*(1<<(s<8?s:8)))*o.errorRetryInterval;!P(i)&&s>i||setTimeout(n,l,r)},vl=Sn,[Ln,Tl]=Qr(new Map),En=$e({onLoadingSlow:Ye,onSuccess:Ye,onError:Ye,onErrorRetry:Gc,onDiscarded:Ye,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:$r?1e4:5e3,focusThrottleInterval:5*1e3,dedupingInterval:2*1e3,loadingTimeout:$r?5e3:3e3,compare:vl,isPaused:()=>!1,cache:Ln,mutate:Tl,fallback:{}},xl),ei=(e,t)=>{let o=$e(e,t);if(t){let{use:n,fallback:r}=e,{use:i,fallback:s}=t;n&&i&&(o.use=n.concat(i)),r&&s&&(o.fallback=$e(r,s))}return o},kn=(0,fe.createContext)({}),ti=e=>{let{value:t}=e,o=(0,fe.useContext)(kn),n=Ee(t),r=(0,fe.useMemo)(()=>n?t(o):t,[n,o,t]),i=(0,fe.useMemo)(()=>n?r:ei(o,r),[n,o,r]),s=r&&r.provider,l=(0,fe.useRef)(le);s&&!l.current&&(l.current=Qr(s(i.cache||Ln),r));let a=l.current;return a&&(i.cache=a[0],i.mutate=a[1]),mo(()=>{if(a)return a[2]&&a[2](),a[3]},[]),(0,fe.createElement)(kn.Provider,$e(e,{value:i}))}});var Al,Pl=S(()=>{Al="$inf$"});var kl=S(()=>{});var co,Cl,zc,jc,Wc,_c,Jc,Rc,Ml,Il,Fl=S(()=>{oi();oi();gl();Pl();co=p(x(),1);kl();Cl=uo&&window.__SWR_DEVTOOLS_USE__,zc=Cl?window.__SWR_DEVTOOLS_USE__:[],jc=()=>{Cl&&(window.__SWR_DEVTOOLS_REACT__=co.default)},Wc=e=>Ee(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(e[1]===null?e[2]:e[1])||{}],_c=()=>{let e=(0,co.useContext)(kn);return(0,co.useMemo)(()=>$e(En,e),[e])},Jc=e=>(t,o,n)=>e(t,o&&((...i)=>{let[s]=No(t),[,,,l]=Ke.get(Ln);if(s.startsWith(Al))return o(...i);let a=l[s];return P(a)?o(...i):(delete l[s],a)}),n),Rc=zc.concat(Jc),Ml=e=>function(...o){let n=_c(),[r,i,s]=Wc(o),l=ei(n,s),a=e,{use:u}=l,m=(u||[]).concat(Rc);for(let d=m.length;d--;)a=m[d](a);return a(r,i||l.fetcher||null,l)},Il=(e,t,o)=>{let n=t[e]||(t[e]=[]);return n.push(o),()=>{let r=n.indexOf(o);r>=0&&(n[r]=n[n.length-1],n.pop())}};jc()});var pe,ii,Kc,gb,ni,ri,Ll,Yc,$c,fb,rt,go=S(()=>{pe=p(x(),1),ii=p(ul(),1);Fl();Kc=()=>{},gb=Kc(),ni=pe.default.use||(e=>{switch(e.status){case"pending":throw e;case"fulfilled":return e.value;case"rejected":throw e.reason;default:throw e.status="pending",e.then(t=>{e.status="fulfilled",e.value=t},t=>{e.status="rejected",e.reason=t}),e}}),ri={dedupe:!0},Ll=Promise.resolve(le),Yc=()=>Ye,$c=(e,t,o)=>{let{cache:n,compare:r,suspense:i,fallbackData:s,revalidateOnMount:l,revalidateIfStale:a,refreshInterval:u,refreshWhenHidden:m,refreshWhenOffline:d,keepPreviousData:c,strictServerPrefetchWarning:b}=o,[w,h,y,f]=Ke.get(n),[g,v]=No(e),E=(0,pe.useRef)(!1),T=(0,pe.useRef)(!1),G=(0,pe.useRef)(g),W=(0,pe.useRef)(t),ve=(0,pe.useRef)(o),q=()=>ve.current,Pe=()=>q().isVisible()&&q().isOnline(),[ie,me,Y,oe]=Mn(n,g),Me=(0,pe.useRef)({}).current,Ve=P(s)?P(o.fallback)?le:o.fallback[g]:s,lt=(N,Z)=>{for(let X in Me){let Q=X;if(Q==="data"){if(!r(N[Q],Z[Q])&&(!P(N[Q])||!r(Zt,Z[Q])))return!1}else if(Z[Q]!==N[Q])return!1}return!0},_e=!E.current,ke=(0,pe.useMemo)(()=>{let N=ie(),Z=oe(),X=se=>{let Je=$e(se);return delete Je._k,(()=>{if(!g||!t||q().isPaused())return!1;if(_e&&!P(l))return l;let Ao=P(Ve)?Je.data:Ve;return i?P(Ao)||a:P(Ao)||a})()?{isValidating:!0,isLoading:!0,...Je}:Je},Q=X(N),et=N===Z?Q:X(Z),He=Q;return[()=>{let se=X(ie());return lt(se,He)?(He.data=se.data,He.isLoading=se.isLoading,He.isValidating=se.isValidating,He.error=se.error,He):(He=se,se)},()=>et]},[n,g]),Be=(0,ii.useSyncExternalStore)((0,pe.useCallback)(N=>Y(g,(Z,X)=>{lt(X,Z)||N()}),[n,g]),ke[0],ke[1]),sr=w[g]&&w[g].length>0,St=Be.data,pt=P(St)?Ve&&Cn(Ve)?ni(Ve):Ve:St,Yt=Be.error,$t=(0,pe.useRef)(pt),Zt=c?P(St)?P($t.current)?pt:$t.current:St:pt,ut=g&&P(pt),Ht=(0,pe.useRef)(null);!Lt&&(0,ii.useSyncExternalStore)(Yc,()=>(Ht.current=!1,Ht),()=>(Ht.current=!0,Ht));let ar=Ht.current;b&&ar&&!i&&ut&&console.warn(`Missing pre-initiated data for serialized key "${g}" during server-side rendering. Data fetching should be initiated on the server and provided to SWR via fallback data. You can set "strictServerPrefetchWarning: false" to disable this warning.`);let vt=!g||!t||q().isPaused()||sr&&!P(Yt)?!1:_e&&!P(l)?l:i?P(pt)?!1:a:P(pt)||a,Xt=_e&&vt,lr=P(Be.isValidating)?Xt:Be.isValidating,Ko=P(Be.isLoading)?Xt:Be.isLoading,Tt=(0,pe.useCallback)(async N=>{let Z=W.current;if(!g||!Z||T.current||q().isPaused())return!1;let X,Q,et=!0,He=N||{},se=!y[g]||!He.dedupe,Je=()=>In?!T.current&&g===G.current&&E.current:g===G.current,To={isValidating:!1,isLoading:!1},Ao=()=>{me(To)},Zi=()=>{let Ue=y[g];Ue&&Ue[1]===Q&&delete y[g]},Xi={isValidating:!0};P(ie().data)&&(Xi.isLoading=!0);try{if(se&&(me(Xi),o.loadingTimeout&&P(ie().data)&&setTimeout(()=>{et&&Je()&&q().onLoadingSlow(g,o)},o.loadingTimeout),y[g]=[Z(v),Do()]),[X,Q]=y[g],X=await X,se&&setTimeout(Zi,o.dedupingInterval),!y[g]||y[g][1]!==Q)return se&&Je()&&q().onDiscarded(g),!1;To.error=le;let Ue=h[g];if(!P(Ue)&&(Q<=Ue[0]||Q<=Ue[1]||Ue[1]===0))return Ao(),se&&Je()&&q().onDiscarded(g),!1;let mt=ie().data;To.data=r(mt,X)?mt:X,se&&Je()&&q().onSuccess(X,g,o)}catch(Ue){Zi();let mt=q(),{shouldRetryOnError:ur}=mt;mt.isPaused()||(To.error=Ue,se&&Je()&&(mt.onError(Ue,g,mt),(ur===!0||Ee(ur)&&ur(Ue))&&(!q().revalidateOnFocus||!q().revalidateOnReconnect||Pe())&&mt.onErrorRetry(Ue,g,mt,Om=>{let mr=w[g];mr&&mr[0]&&mr[0](Ft.ERROR_REVALIDATE_EVENT,Om)},{retryCount:(He.retryCount||0)+1,dedupe:!0})))}return et=!1,Ao(),!0},[g,n]),pr=(0,pe.useCallback)((...N)=>Fn(n,G.current,...N),[]);if(mo(()=>{W.current=t,ve.current=o,P(St)||($t.current=St)}),mo(()=>{if(!g)return;let N=Tt.bind(le,ri),Z=0;q().revalidateOnFocus&&(Z=Date.now()+q().focusThrottleInterval);let Q=Il(g,w,(et,He={})=>{if(et==Ft.FOCUS_EVENT){let se=Date.now();q().revalidateOnFocus&&se>Z&&Pe()&&(Z=se+q().focusThrottleInterval,N())}else if(et==Ft.RECONNECT_EVENT)q().revalidateOnReconnect&&Pe()&&N();else{if(et==Ft.MUTATE_EVENT)return Tt();if(et==Ft.ERROR_REVALIDATE_EVENT)return Tt(He)}});return T.current=!1,G.current=g,E.current=!0,me({_k:v}),vt&&(y[g]||(P(pt)||Lt?N():Xr(N))),()=>{T.current=!0,Q()}},[g]),mo(()=>{let N;function Z(){let Q=Ee(u)?u(ie().data):u;Q&&N!==-1&&(N=setTimeout(X,Q))}function X(){!ie().error&&(m||q().isVisible())&&(d||q().isOnline())?Tt(ri).then(Z):Z()}return Z(),()=>{N&&(clearTimeout(N),N=-1)}},[u,m,d,g]),(0,pe.useDebugValue)(Zt),i){if(!In&&Lt&&ut)throw new Error("Fallback data is required when using Suspense in SSR.");ut&&(W.current=t,ve.current=o,T.current=!1);let N=f[g],Z=!P(N)&&ut?pr(N):Ll;if(ni(Z),!P(Yt)&&ut)throw Yt;let X=ut?Tt(ri):Ll;!P(Zt)&&ut&&(X.status="fulfilled",X.value=!0),ni(X)}return{mutate:pr,get data(){return Me.data=!0,Zt},get error(){return Me.error=!0,Yt},get isValidating(){return Me.isValidating=!0,lr},get isLoading(){return Me.isLoading=!0,Ko}}},fb=po.defineProperty(ti,"defaultValue",{value:En}),rt=Ml($c)});function qe(){return Bn||(Bn=import(Zc+"molstar-chunk.js").catch(function(e){throw Bn=void 0,e})),Bn}var El,Zc,Bn,fo=S(()=>{"use strict";El=typeof document<"u"?document.currentScript?.src:void 0,Zc=El?El.replace(/\/[^/]*$/,"/"):""});var ip,Wn,xi=S(()=>{"use client";dt();ip=p(gt(),1),Wn=(0,ge.createSvgIcon)((0,ip.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 17h-2v-2h2zm2.07-7.75-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25"}),"Help")});var pp={};At(pp,{default:()=>lp});function sp({children:e}){return Ae.default.createElement(st.Typography,{style:{margin:4}},e)}function lp({handleClose:e}){return Ae.default.createElement(ap.Dialog,{open:!0,maxWidth:"lg",onClose:e,title:"Help"},Ae.default.createElement(st.DialogContent,null,Ae.default.createElement(sp,null,"The procedure for the protein lookup is as follows:",Ae.default.createElement("ul",null,Ae.default.createElement("li",null,"(Automatic lookup) Searches UniProt for the transcript ID or gene name to retrieve the UniProt ID, which is then used to lookup the structure in AlphaFoldDB"),Ae.default.createElement("li",null,"(Manual) Allows you to choose your own structure file from your local machine (e.g. a PDB file predicted by e.g. ColabFold) or supply a specific URL"),Ae.default.createElement("li",null,"The residues from the structure are downloaded, and then you can choose the transcript isoform from the selected gene that best represents the structure. Asterisks are displayed if there is an exact sequence match"),Ae.default.createElement("li",null,"The residues from the structure are finally aligned to the to the selected transcript's protein sequence representation, and this creates a mapping from the reference genome coordinates to positions in the 3-D structure"),Ae.default.createElement("li",null,"Finally the molstar panel is opened, and this contains many specialized features features, plus additional mouseover and selection features supplied by the plugin to connect mouse click actions and mouse hover with coordinates on the linear genome view"))),Ae.default.createElement(sp,null,"If you run into challenges with this workflow e.g. your transcripts are not being found in UniProt then you can use the Manual import form, or contact colin.diesh@gmail.com for troubleshooting")),Ae.default.createElement(st.Divider,null),Ae.default.createElement(st.DialogActions,null,Ae.default.createElement(st.Button,{onClick:e,color:"primary"},"Close")))}var Ae,ap,st,up=S(()=>{"use strict";Ae=p(x()),ap=p(Oe()),st=p(M())});var ki=V((V0,Sp)=>{Sp.exports=JBrowseExports["@jbrowse/core/pluggableElementTypes"]});var Tp=V((B0,vp)=>{vp.exports=JBrowseExports["@jbrowse/core/util/types/mst"]});var Go=V((H0,Ap)=>{Ap.exports=JBrowseExports["mobx-state-tree"]});async function Cp({plugin:e,colorScheme:t}){let{structures:o}=e.managers.structure.hierarchy.current;for(let n of o)await e.managers.structure.component.updateRepresentationsTheme(n.components,{color:t})}var xo,kp,Mi=S(()=>{"use strict";xo=[{value:"default",label:"Default (element/chain)"},{value:"plddt-confidence",label:"pLDDT confidence (AlphaFold)"},{value:"chain-id",label:"Chain"},{value:"secondary-structure",label:"Secondary structure"},{value:"hydrophobicity",label:"Hydrophobicity (Kyte-Doolittle)"},{value:"residue-name",label:"Residue type"},{value:"uncertainty",label:"B-factor / uncertainty"},{value:"molecule-type",label:"Molecule type"}],kp=xo.map(e=>e.value)});async function zo({structure:e,plugin:t,channel:o,spec:n}){let{lociHighlights:r,lociSelects:i}=t.managers.interactivity;if(o==="highlight"?r.clearHighlights():i.deselectAll(),Dd(n)){let{StructureSelection:s,Script:l}=await qe(),a=l.getStructureSelection(m=>m.struct.generator.atomGroups({"residue-test":qd(n)(m),"group-by":m.struct.atomProperty.macromolecular.residueKey()}),e),u=s.toLociWithSourceUnits(a);o==="highlight"?r.highlight({loci:u}):i.select({loci:u})}}var Fi,qd,Dd,Li=S(()=>{"use strict";fo();Fi=e=>e.struct.atomProperty.macromolecular.label_seq_id(),qd=e=>e.kind==="range"?t=>t.core.logic.and([t.core.rel.gre([Fi(t),e.start+1]),t.core.rel.lte([Fi(t),e.end])]):t=>t.core.logic.or(e.residues.map(o=>t.core.rel.eq([Fi(t),o+1]))),Dd=e=>e!==void 0&&(e.kind==="range"?e.end>e.start:e.residues.length>0)});var Lp,Ep,qp,Dp,ht=S(()=>{"use strict";Lp="rgba(255, 105, 180, 0.5)",Ep="2px solid #333",qp="1px solid black",Dp="#999"});function $n({model:e,structureSeqPos:t}){let{genomeToTranscriptSeqMapping:o,pairwiseAlignment:n,structureSeqToTranscriptSeqPosition:r}=e;if(!o||!n)return;let{p2g:i,strand:s}=o,l=r?.[t];if(l!==void 0)return Zo(i,l,s)}function qi({model:e,structureSeqPos:t,structureSeqEndPos:o}){let n,r;for(let i=t;i<o;i++){let s=$n({structureSeqPos:i,model:e});if(s){let[l,a]=s;(n===void 0||l<n)&&(n=l),(r===void 0||a>r)&&(r=a)}}if(n!==void 0&&r!==void 0)return[n,r]}async function Ud({model:e,structureSeqPos:t,structureSeqEndPos:o,zoomToBaseLevel:n}){let r=(0,zp.getSession)(e),{connectedView:i,genomeToTranscriptSeqMapping:s}=e;if(!s||!i)return;let{strand:l,refName:a}=s,u=i.assemblyNames[0];if(!u)return;let m=o!==void 0?qi({structureSeqPos:t,structureSeqEndPos:o,model:e}):$n({structureSeqPos:t,model:e});if(!m)return;let[d,c]=m;if(n)await i.navToLocString(`${a}:${d}-${c}${l===-1?"[rev]":""}`,void 0,.2);else{let{assemblyManager:b}=r,h=b.get(u)?.getCanonicalRefName(a)??a;i.centerAt(d,h)}}async function Wo({model:e,structureSeqPos:t,structureSeqEndPos:o}){e.setClickedStructureRange({start:t,end:o??t+1}),await Ud({model:e,structureSeqPos:t,structureSeqEndPos:o,zoomToBaseLevel:e.zoomToBaseLevel})}var zp,Di=S(()=>{"use strict";zp=p($());Xo()});function Wp(e){return Array.from(e,t=>Od[t])}function _p(e){return e<0?"#cccccc":e<=50?"#ff7d45":e<=70?"#ffdb13":e<=90?"#65cbf3":"#0053d6"}function Jp(e){let t=Math.max(0,Math.min(1,(e-jp)/(Gd-jp))),o=Math.round(51+179*t),n=Math.round(102+38*t),r=Math.round(204+-164*t);return`rgb(${o}, ${n}, ${r})`}function Ni(e,t){return t?e.flatMap((o,n)=>{let r=t[n];return o!==void 0&&r!==void 0?[{col:r,value:o}]:[]}):[]}var Od,jp,Gd,Vi=S(()=>{"use strict";Od={I:4.5,V:4.2,L:3.8,F:2.8,C:2.5,M:1.9,A:1.8,G:-.4,T:-.7,S:-.8,W:-.9,Y:-1.3,P:-1.6,H:-3.2,E:-3.5,Q:-3.5,D:-3.5,N:-3.5,K:-3.9,R:-4.5},jp=-4.5,Gd=4.5});var Ne,Se,Xp,Zd,Qp,eu=S(()=>{"use strict";Ne=p(x()),Se=p(M());Er();Xp=p(_()),Zd=(0,Xp.observer)(function({model:t}){let[o,n]=(0,Ne.useState)(""),[r,i]=(0,Ne.useState)(),{showManualAlignmentDialog:s,primaryStructure:l}=t,a=()=>{n(""),i(void 0),t.setShowManualAlignmentDialog(!1)},u=()=>{if(o.trim())try{let m=fn(o.trim());if(!l){i("No structure loaded to apply alignment to");return}l.setAlignment(m),a()}catch(m){i(`Failed to parse alignment: ${m}`)}};return s?Ne.default.createElement(Se.Dialog,{open:!0,onClose:a,maxWidth:"md",fullWidth:!0},Ne.default.createElement(Se.DialogTitle,null,"Import Manual Alignment"),Ne.default.createElement(Se.DialogContent,null,Ne.default.createElement(Se.Typography,{variant:"body2",color:"text.secondary",sx:{mb:2}},"Paste a pre-computed alignment in Clustal format. The first sequence should be the transcript and the second should be the structure."),Ne.default.createElement(Se.TextField,{multiline:!0,rows:12,fullWidth:!0,placeholder:`Example:
|
|
7
7
|
transcript MKAAYLSMFGKEDHKPFGDDEVELFRAVPGLKLKIAG
|
|
8
8
|
|||||||||||||||||||||||||||||||||||||
|
|
9
|
-
structure MKAAYLSMFGKEDHKPFGDDEVELFRAVPGLKLKIAG`,value:o,onChange:m=>{n(m.target.value),i(void 0)},slotProps:{htmlInput:{style:{fontFamily:"monospace",fontSize:12}}}}),r?
|
|
10
|
-
`)){if(r.startsWith("#")||!r.trim())continue;let i=r.split(" ");if(i.length<9)continue;let s=i[2],l=Number.parseInt(i[3]??"0",10),a=Number.parseInt(i[4]??"0",10),u=i[8]??"",m="",d;for(let c of u.split(";")){let[y,w]=c.split("=");y==="Note"?m=decodeURIComponent(w??""):y==="ID"&&(d=w)}if(s){let c=`${s}-${l}-${a}-${n.length}`;n.push({type:s,start:l,end:a,description:m,id:d,uniqueId:c})}}return n}function ji(e){let{data:t,error:o,isLoading:n}=rt(e?`https://rest.uniprot.org/uniprotkb/${e}.gff`:null,og);return{features:t,error:o,isLoading:n}}var tg,Wi=S(()=>{"use strict";yo();tg={Domain:"#1f77b4","DNA binding":"#ff7f0e",Region:"#2ca02c","Zinc finger":"#d62728","Coiled coil":"#9467bd",Motif:"#8c564b","Compositional bias":"#e377c2",Repeat:"#7f7f7f",Transmembrane:"#bcbd22",Intramembrane:"#17becf","Topological domain":"#aec7e8",Signal:"#ffbb78","Signal peptide":"#ffbb78",Propeptide:"#98df8a","Transit peptide":"#ff9896",Chain:"#c5b0d5","Disulfide bond":"#c49c94","Active site":"#f7b6d2","Binding site":"#c7c7c7",Site:"#dbdb8d","Modified residue":"#9edae5",Glycosylation:"#393b79",Lipidation:"#637939","Cross-link":"#8c6d31","Alternative sequence":"#e7969c","Natural variant":"#de9ed6",Mutagenesis:"#ad494a","Sequence conflict":"#b5cf6b",Helix:"#e7ba52","Beta strand":"#6b6ecf",Turn:"#d6616b","Initiator methionine":"#ce6dbd",Peptide:"#6baed6","Calcium binding":"#fd8d3c","Nucleotide binding":"#74c476"}});function ng(e,t){let o=t?.[e.start-1],n=t?.[e.end-1];return o!==void 0&&n!==void 0?{start:o,end:n}:void 0}function rg(e,t){let o=t?.[e.start-1]??e.start-1,n=t?.[e.end-1]??e.end-1;return{left:o*6,width:Math.max((n-o+1)*6,3)}}function ig({feature:e}){return Qe.default.createElement("div",null,Qe.default.createElement("div",null,Qe.default.createElement("strong",null,e.type)),Qe.default.createElement("div",null,"Position: ",e.start,"-",e.end),e.description?Qe.default.createElement("div",null,e.description):null)}var Qe,Uu,Gu,sg,Ou,zu=S(()=>{"use strict";Qe=p(x()),Uu=p(I()),Gu=p(_());gt();Ni();Wi();Bi();sg=(0,Gu.observer)(function({feature:t,model:o}){let[n,r]=(0,Qe.useState)(!1),{molstarPluginContext:i,selectedFeatureId:s,structurePositionToAlignmentMap:l}=o,a=s===t.uniqueId,u=()=>{r(!0);let h=ng(t,l);h&&o.setAlignmentHoverRange(h)},m=()=>{r(!1),o.setAlignmentHoverRange(void 0)},d=()=>{let h=o.molstarStructure,b=!a;h&&i&&(b?Up({structure:h,startResidue:t.start,endResidue:t.end,plugin:i}).catch(f=>{console.error(f),o.setError(f)}):i.managers.interactivity.lociSelects.deselectAll()),b?(o.setSelectedFeatureId(t.uniqueId),Wo({model:o,structureSeqPos:t.start-1,structureSeqEndPos:t.end}).catch(f=>{console.error(f),o.setError(f)})):(o.setSelectedFeatureId(void 0),o.setClickedStructureRange(void 0))},{left:c,width:y}=rg(t,l),w=Hu(t.type);return Qe.default.createElement(Uu.Tooltip,{title:Qe.default.createElement(ig,{feature:t}),followCursor:!0},Qe.default.createElement("div",{onClick:()=>{d()},onMouseEnter:()=>{u()},onMouseLeave:()=>{m()},style:{position:"absolute",left:c,top:0,width:y,height:o.trackHeight,backgroundColor:w,opacity:n||a?.9:.6,cursor:"pointer",borderRadius:2,border:a?Dp:n?Np:"none",boxSizing:"border-box"}}))}),Ou=sg});var Ko,ju,Wu,ag,_u,Ru=S(()=>{"use strict";Ko=p(x()),ju=p(I()),Wu=p(_());gt();ag=(0,Wu.observer)(function({type:t,labelWidth:o,model:n}){return Ko.default.createElement(ju.Tooltip,{title:t,placement:"left"},Ko.default.createElement("div",{style:{height:n.trackHeight+n.trackGap,width:o-4,fontSize:9,fontFamily:"monospace",textAlign:"right",paddingRight:4,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:2}},Ko.default.createElement("span",{onClick:r=>{r.stopPropagation(),n.hideFeatureType(t)},style:{cursor:"pointer",color:Vp,fontWeight:"bold",fontSize:8,lineHeight:1},title:`Hide ${t} track`},"x"),Ko.default.createElement("span",{style:{overflow:"hidden",textOverflow:"ellipsis"}},t)))}),_u=ag});var Ju,Ku,lg,Yu,$u=S(()=>{"use strict";Ju=p(x()),Ku=p(_());gt();lg=(0,Ku.observer)(function({model:t}){let{alignmentHoverPos:o}=t;return o===void 0?null:Ju.default.createElement("div",{style:{position:"absolute",left:o*6,top:0,bottom:0,width:6,backgroundColor:qp,pointerEvents:"none",zIndex:10}})}),Yu=lg});function Zu(e,t){return e.filter(o=>!t.has(o))}var ht,Qn,pg,Xu,Qu,em=S(()=>{"use strict";ht=p(x()),Qn=p(_());gt();zu();Ru();$u();pg=(0,Qn.observer)(function({features:t,model:o,sequenceLength:n}){return ht.default.createElement("div",{style:{position:"relative",height:o.trackHeight,width:n*6,marginBottom:o.trackGap}},t.map(r=>ht.default.createElement(Ou,{key:r.uniqueId,feature:r,model:o})),ht.default.createElement(Yu,{model:o}))}),Xu=(0,Qn.observer)(function({data:t,labelWidth:o,model:n}){let{hiddenFeatureTypes:r}=n,i=Zu(t.featureTypes,r);return ht.default.createElement(ht.default.Fragment,null,i.map(s=>ht.default.createElement(_u,{key:s,type:s,labelWidth:o,model:n})))}),Qu=(0,Qn.observer)(function({data:t,model:o}){let{hiddenFeatureTypes:n}=o,r=Zu(t.featureTypes,n);return ht.default.createElement("div",{onMouseMove:i=>{let s=i.currentTarget.getBoundingClientRect(),l=i.clientX-s.left,a=Math.floor(l/6);a>=0&&a<t.sequenceLength&&o.hoverAlignmentPosition(a)},onMouseLeave:()=>{o.setHoveredPosition(void 0)}},r.map(i=>ht.default.createElement(pg,{key:i,features:t.groupedFeatures[i],model:o,sequenceLength:t.sequenceLength})))})});var er,tm,om,ug,_i,nm=S(()=>{"use strict";er=p(x()),tm=p(I()),om=p(_());gt();ug=(0,om.observer)(function({cells:t,colorFor:o,formatValue:n,sequenceLength:r,model:i}){return er.default.createElement("div",{style:{position:"relative",height:i.trackHeight,width:r*6,marginBottom:i.trackGap},onMouseMove:s=>{let l=s.currentTarget.getBoundingClientRect(),a=Math.floor((s.clientX-l.left)/6);a>=0&&a<r&&i.hoverAlignmentPosition(a)},onMouseLeave:()=>{i.setHoveredPosition(void 0)}},t.map(s=>er.default.createElement(tm.Tooltip,{key:s.col,title:n(s.value),followCursor:!0},er.default.createElement("div",{style:{position:"absolute",left:s.col*6,top:0,width:6,height:i.trackHeight,backgroundColor:o(s.value)}}))))}),_i=ug});var We,Kt,mg,cg,dg,rm,im,gg,tr,sm=S(()=>{"use strict";We=p(x()),Kt=p(_());gt();mg=(0,Kt.observer)(function({str:t}){return t.split("").map((o,n)=>We.default.createElement("span",{key:n,style:{position:"absolute",left:n*6,width:6}},o===" "?"\xA0":o))}),cg=(0,Kt.observer)(function({model:t,height:o}){let{showHighlight:n,alignmentMatchSet:r}=t;return!n||!r?null:[...r].map(i=>We.default.createElement("span",{key:i,style:{position:"absolute",left:i*6,top:0,width:6,height:o,background:"#33ff19a0",pointerEvents:"none"}}))}),dg=(0,Kt.observer)(function({model:t,strLength:o,height:n}){let{alignmentHoverPos:r}=t;return r!==void 0&&r>=0&&r<o?We.default.createElement("span",{style:{position:"absolute",left:r*6,top:0,width:6,height:n,background:"#f698",pointerEvents:"none"}}):null}),rm=(0,Kt.observer)(function({range:t,strLength:o,background:n,border:r,height:i}){if(!t)return null;let{start:s,end:l}=t,a=Math.max(0,s),u=Math.min(o-1,l);if(a>u)return null;let m=(u-a+1)*6;return We.default.createElement("span",{style:{position:"absolute",left:a*6,top:0,width:m,height:i,background:n,border:r,boxSizing:"border-box",pointerEvents:"none"}})}),im=(0,Kt.observer)(function({model:t,strLength:o,height:n}){return We.default.createElement("div",{style:{position:"absolute",top:0,left:0,width:o*6,height:n,pointerEvents:"none"}},We.default.createElement(cg,{model:t,height:n}),We.default.createElement(rm,{range:t.clickAlignmentRange,strLength:o,background:"rgba(0, 120, 255, 0.3)",border:"1px solid rgba(0, 120, 255, 0.6)",height:n}),We.default.createElement(rm,{range:t.alignmentHoverRange,strLength:o,background:"rgba(255, 165, 0, 0.4)",height:n}),We.default.createElement(dg,{model:t,strLength:o,height:n}))}),gg=(0,Kt.observer)(function({model:t,str:o}){return We.default.createElement("span",{style:{position:"relative",display:"inline-block",width:o.length*6,height:"1em"},onMouseMove:n=>{let r=n.currentTarget.getBoundingClientRect(),i=n.clientX-r.left,s=Math.floor(i/6);s>=0&&s<o.length&&t.hoverAlignmentPosition(s)},onClick:n=>{let r=n.currentTarget.getBoundingClientRect(),i=n.clientX-r.left,s=Math.floor(i/6);s>=0&&s<o.length&&t.clickAlignmentPosition(s)}},We.default.createElement(mg,{str:o}))}),tr=gg});function fg(e){let t={};for(let o of e)t[o.type]??=[],t[o.type].push(o);return t}function Ri(e,t){let{features:o,isLoading:n,error:r}=ji(t),{pairwiseAlignment:i}=e;if(!t||n||r||!o||!i)return{data:void 0,isLoading:n,error:r};let s=i.alns[0].seq.length,l=fg(o);return{data:{featureTypes:Object.keys(l),groupedFeatures:l,sequenceLength:s},isLoading:!1,error:void 0}}var am=S(()=>{"use strict";Wi()});function pm({label:e,title:t,height:o}){return k.default.createElement(Yt.Tooltip,{title:t,placement:"left"},k.default.createElement("div",{style:{height:o,fontSize:9,fontFamily:"monospace",textAlign:"right",paddingRight:4,display:"flex",alignItems:"center",justifyContent:"flex-end",overflow:"hidden",whiteSpace:"nowrap"}},e))}var k,Yt,um,mm,hg,cm,dm=S(()=>{"use strict";k=p(x()),Yt=p(I()),um=p(to()),mm=p(_());gt();Bu();em();nm();sm();am();Ui();hg=(0,mm.observer)(function({model:t}){let{pairwiseAlignment:o,showHighlight:n,showProteinTracks:r,uniprotId:i,confidenceCells:s,hydrophobicityCells:l}=t,a=(0,k.useRef)(null),{data:u,isLoading:m,error:d}=Ri(t,i);if((0,k.useEffect)(()=>(0,um.autorun)(()=>{let h=a.current;t.autoScrollAlignment&&!t.isMouseInAlignment&&t.alignmentHoverPos!==void 0&&h&&h.scrollTo({left:t.alignmentHoverPos*6-h.clientWidth/2,behavior:"smooth"})}),[t]),!o)return k.default.createElement("div",null,"No pairwiseAlignment");let c=o.alns[0].seq,y=o.alns[1].seq,w=o.consensus;return k.default.createElement("div",null,k.default.createElement(zi,{model:t}),k.default.createElement(Yt.Typography,null,"Alignment of the protein structure file's sequence with the selected transcript's sequence."," ",n?"Green is the aligned portion":null),k.default.createElement("div",{style:{display:"flex",fontSize:9,fontFamily:"monospace",cursor:"pointer",margin:8,paddingBottom:8},onMouseEnter:()=>{t.setIsMouseInAlignment(!0)},onMouseLeave:()=>{t.setIsMouseInAlignment(!1),t.setHoveredPosition(void 0)}},k.default.createElement("div",{style:{flexShrink:0,width:50,textAlign:"right",paddingRight:4}},k.default.createElement("div",{style:{height:14}},k.default.createElement(Yt.Tooltip,{title:"This is the sequence of the protein from the reference genome transcript"},k.default.createElement("span",null,"GENOME"))),k.default.createElement("div",{style:{height:14}},"\xA0"),k.default.createElement("div",{style:{height:14}},k.default.createElement(Yt.Tooltip,{title:"This is the sequence of the protein from the structure file"},k.default.createElement("span",null,"STRUCT"))),r?m?k.default.createElement("div",{style:{height:14,fontSize:8,color:"#666"}},"Loading..."):d?k.default.createElement(Yt.Tooltip,{title:d instanceof Error?d.message:"Error loading features"},k.default.createElement("div",{style:{height:14,fontSize:8,color:"red"}},"Error")):u?k.default.createElement(Xu,{data:u,labelWidth:50,model:t}):null:null,r&&s.length>0?k.default.createElement(pm,{label:"pLDDT",title:"AlphaFold per-residue confidence (pLDDT)",height:t.trackHeight+t.trackGap}):null,r&&l.length>0?k.default.createElement(pm,{label:"hydro",title:"Kyte-Doolittle hydrophobicity (orange hydrophobic, blue hydrophilic)",height:t.trackHeight+t.trackGap}):null),k.default.createElement("div",{ref:a,style:{overflow:"auto",whiteSpace:"nowrap",flex:1,paddingBottom:10,backgroundColor:"white"}},k.default.createElement("div",{style:{position:"relative"}},k.default.createElement(im,{model:t,strLength:c.length,height:42}),k.default.createElement("div",{style:{height:14}},k.default.createElement(tr,{model:t,str:c})),k.default.createElement("div",{style:{height:14}},k.default.createElement(tr,{model:t,str:w})),k.default.createElement("div",{style:{height:14}},k.default.createElement(tr,{model:t,str:y}))),r&&u?k.default.createElement(Qu,{data:u,model:t}):null,r&&s.length>0?k.default.createElement(_i,{cells:s,colorFor:Kp,formatValue:h=>`pLDDT ${h.toFixed(0)}`,sequenceLength:c.length,model:t}):null,r&&l.length>0?k.default.createElement(_i,{cells:l,colorFor:Yp,formatValue:h=>`Kyte-Doolittle ${h.toFixed(1)}`,sequenceLength:c.length,model:t}):null)))}),cm=hg});function yg({checked:e,label:t,onToggle:o}){return G.default.createElement(Ji.default,{onClick:()=>{o()},dense:!0},G.default.createElement(bm.default,null,G.default.createElement(fm.default,{checked:e,size:"small",edge:"start",disableRipple:!0})),G.default.createElement(ym.default,null,t))}function wg(e){return[{label:"Show alignment",checked:e.showAlignment,onToggle:()=>{e.setShowAlignment(!e.showAlignment)}},{label:"Show features",checked:e.showProteinTracks,onToggle:()=>{e.setShowProteinTracks(!e.showProteinTracks)}},{label:"Auto-scroll features",checked:e.autoScrollAlignment,onToggle:()=>{e.setAutoScrollAlignment(!e.autoScrollAlignment)}},{label:"Compact tracks",checked:e.compactTracks,onToggle:()=>{e.setCompactTracks(!e.compactTracks)}}]}var G,gm,fm,hm,bm,ym,wm,Ji,xm,Sm,or,bg,xg,Sg,vm,Tm=S(()=>{"use strict";G=p(x()),gm=p(Oe());su();fm=p(lu()),hm=p(uu()),bm=p(cu()),ym=p(gu()),wm=p(hu()),Ji=p(yu()),xm=p(xu()),Sm=p(vu()),or=p(_());ku();Fu();dm();Ci();bg=(0,or.observer)(function({model:t}){return G.default.createElement(xm.default,{select:!0,size:"small",label:"Color",value:t.colorScheme,onChange:o=>{let n=To.find(r=>r.value===o.target.value);n&&t.setColorScheme(n.value)},slotProps:{select:{native:!1}},sx:{minWidth:180}},To.map(o=>G.default.createElement(Ji.default,{key:o.value,value:o.value},o.label)))});xg=(0,or.observer)(function({model:t}){let[o,n]=(0,G.useState)(null);return G.default.createElement(G.default.Fragment,null,G.default.createElement(Sm.default,{title:"Display settings"},G.default.createElement(hm.default,{size:"small",onClick:r=>{n(r.currentTarget)}},G.default.createElement(iu,{fontSize:"small"}))),G.default.createElement(wm.default,{anchorEl:o,open:!!o,onClose:()=>{n(null)}},wg(t).map(r=>G.default.createElement(yg,{key:r.label,checked:r.checked,label:r.label,onToggle:r.onToggle}))))}),Sg=(0,or.observer)(function({model:t}){let{structures:o,showAlignment:n}=t;return G.default.createElement("div",null,G.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},G.default.createElement(Iu,{model:t}),G.default.createElement("div",{style:{display:"flex",gap:"8px",alignItems:"center",flexShrink:0}},G.default.createElement(bg,{model:t}),G.default.createElement(xg,{model:t}))),n?o.filter(r=>r.pairwiseAlignment||r.alignmentPending).map((r,i)=>G.default.createElement("div",{key:i},r.pairwiseAlignment?G.default.createElement(cm,{model:r}):G.default.createElement(gm.LoadingEllipses,{message:"Loading pairwise alignment"}))):null,G.default.createElement(Au,{model:t}))}),vm=Sg});var Pm,Am=S(()=>{"use strict";Pm=`
|
|
9
|
+
structure MKAAYLSMFGKEDHKPFGDDEVELFRAVPGLKLKIAG`,value:o,onChange:m=>{n(m.target.value),i(void 0)},slotProps:{htmlInput:{style:{fontFamily:"monospace",fontSize:12}}}}),r?Ne.default.createElement(Se.Typography,{color:"error",variant:"body2",sx:{mt:1}},r):null),Ne.default.createElement(Se.DialogActions,null,Ne.default.createElement(Se.Button,{onClick:a},"Cancel"),Ne.default.createElement(Se.Button,{onClick:u,variant:"contained",color:"primary",disabled:!o.trim()},"Apply Alignment"))):null}),Qp=Zd});var tu,ou,nu=S(()=>{"use client";dt();tu=p(gt(),1),ou=(0,ge.createSvgIcon)((0,tu.jsx)("path",{d:"M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z"}),"Tune")});var iu=V((Uw,ru)=>{ru.exports=JBrowseExports["@mui/material/Checkbox"]});var au=V((Ow,su)=>{su.exports=JBrowseExports["@mui/material/IconButton"]});var pu=V((Gw,lu)=>{lu.exports=JBrowseExports["@mui/material/ListItemIcon"]});var mu=V((zw,uu)=>{uu.exports=JBrowseExports["@mui/material/ListItemText"]});var du=V((jw,cu)=>{cu.exports=JBrowseExports["@mui/material/Menu"]});var fu=V((Ww,gu)=>{gu.exports=JBrowseExports["@mui/material/MenuItem"]});var bu=V((_w,hu)=>{hu.exports=JBrowseExports["@mui/material/TextField"]});var wu=V((Jw,yu)=>{yu.exports=JBrowseExports["@mui/material/Tooltip"]});var F,xu,L,Su,Xd,vu,Tu=S(()=>{"use strict";F=p(x()),xu=p(Oe()),L=p(M()),Su=p(_());Re();Xd=(0,Su.observer)(function({model:t}){let[o,n]=(0,F.useState)(),[r,i]=(0,F.useState)(""),[s,l]=(0,F.useState)(""),[a,u]=(0,F.useState)("pdb"),[m,d]=(0,F.useState)(""),[c,b]=(0,F.useState)(),{showAddStructureDialog:w}=t,h=()=>{n(void 0),i(""),l(""),d(""),b(void 0),t.setShowAddStructureDialog(!1)},y=async()=>{try{let g,v;a==="pdb"&&r?g=Lo(r):a==="uniprot"&&s?g=io(s.toUpperCase()):a==="url"&&m?g=m:a==="file"&&o&&(v=await o.text()),(g!==void 0||v!==void 0)&&(await t.addStructureAndSuperpose({url:g,data:v}),h())}catch(g){console.error(g),b(g)}};if(!w)return null;let f=a==="url"&&m!==""||a==="file"&&o!==void 0||a==="pdb"&&r!==""||a==="uniprot"&&s!=="";return F.default.createElement(L.Dialog,{open:!0,onClose:h,maxWidth:"sm",fullWidth:!0},F.default.createElement(L.DialogTitle,null,"Add Structure"),F.default.createElement(L.DialogContent,null,c?F.default.createElement(xu.ErrorMessage,{error:c}):null,F.default.createElement(L.Typography,{variant:"body2",color:"text.secondary",sx:{mb:2}},"Add another structure to superpose on the existing structure(s)."),F.default.createElement(L.FormControl,{component:"fieldset",sx:{mb:2}},F.default.createElement(L.RadioGroup,{value:a,onChange:g=>{u(g.target.value)}},F.default.createElement(L.FormControlLabel,{value:"pdb",control:F.default.createElement(L.Radio,null),label:"PDB ID"}),F.default.createElement(L.FormControlLabel,{value:"uniprot",control:F.default.createElement(L.Radio,null),label:"UniProt ID (AlphaFold)"}),F.default.createElement(L.FormControlLabel,{value:"url",control:F.default.createElement(L.Radio,null),label:"URL"}),F.default.createElement(L.FormControlLabel,{value:"file",control:F.default.createElement(L.Radio,null),label:"File"}))),a==="pdb"?F.default.createElement(L.TextField,{fullWidth:!0,value:r,onChange:g=>{i(g.target.value.toUpperCase())},label:"PDB ID (e.g. 1CRN)",placeholder:"Enter PDB ID",sx:{mb:2}}):null,a==="uniprot"?F.default.createElement(L.TextField,{fullWidth:!0,value:s,onChange:g=>{l(g.target.value.toUpperCase())},label:"UniProt ID (e.g. P04637)",placeholder:"Enter UniProt ID",helperText:"Will fetch the AlphaFold v6 predicted structure",sx:{mb:2}}):null,a==="url"?F.default.createElement(L.TextField,{fullWidth:!0,label:"Structure URL",value:m,onChange:g=>{d(g.target.value)},placeholder:"https://files.rcsb.org/download/1CRN.cif",sx:{mb:2}}):null,a==="file"?F.default.createElement("div",{style:{marginBottom:16}},F.default.createElement(L.Button,{variant:"outlined",component:"label"},o?o.name:"Choose File",F.default.createElement("input",{type:"file",hidden:!0,accept:".pdb,.cif,.mmcif,.ent",onChange:({target:g})=>{let v=g.files?.[0];v&&n(v)}})),o?F.default.createElement(L.Typography,{variant:"body2",sx:{mt:1}},"Selected: ",o.name):null):null,F.default.createElement(L.Typography,{variant:"body2",color:"text.secondary",sx:{mt:1}},"Tip: Structures will be automatically superposed using TM-align. For manual control, use the Mol* controls (\u{1F527} wrench icon).")),F.default.createElement(L.DialogActions,null,F.default.createElement(L.Button,{onClick:h},"Cancel"),F.default.createElement(L.Button,{onClick:()=>{y()},variant:"contained",color:"primary",disabled:!f},"Add Structure")))}),vu=Xd});var Au,Pu,Qd,ku,Cu=S(()=>{"use strict";Au=p(x()),Pu=p(_()),Qd=(0,Pu.observer)(function({model:t}){let{structures:o}=t,n=o.map(r=>r.hoverString).filter(Boolean).join(" ");return Au.default.createElement("div",{style:{flex:1,minWidth:0,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",fontSize:12},title:n},n?`Hover: ${n}`:"\xA0")}),ku=Qd});var Fu={};At(Fu,{default:()=>Iu});function Ui({children:e}){return bt.default.createElement(Vt.Typography,{style:{margin:4,marginBottom:12}},e)}function Iu({handleClose:e}){return bt.default.createElement(Mu.Dialog,{open:!0,maxWidth:"lg",onClose:e,title:"Protein alignment"},bt.default.createElement(Vt.DialogContent,null,bt.default.createElement(Ui,null,"This panel shows the computed pairwise alignment of the reference genome sequence to the structure sequence. The structure file (PDB file, mmCIF file, etc) has a stored representation of the e.g. amino acid sequence but the sequence in the structure file can differ from the sequence from the gene on the genome browser"),bt.default.createElement(Ui,null,"In order to resolve this, we align the two sequences together (using EMBOSS needle) to get pairwise alignment of the genome's representation of the protein and the structure file's representation of the protein."),bt.default.createElement(Ui,null,"If you need a 100% fidelity protein, you can do a folding with e.g. AlphaFold to make sure the structure you are using matches exactly the sequence of the transcript")),bt.default.createElement(Vt.DialogActions,null,bt.default.createElement(Vt.Button,{onClick:()=>{e()},variant:"contained",color:"primary"},"Close")))}var bt,Mu,Vt,Lu=S(()=>{"use strict";bt=p(x()),Mu=p(Oe()),Vt=p(M())});function Oi({model:e}){return Ro.default.createElement(qu.IconButton,{style:{float:"right"},onClick:()=>{(0,Eu.getSession)(e).queueDialog(t=>[eg,{handleClose:t}])}},Ro.default.createElement(Wn,null))}var Ro,Eu,qu,eg,Du=S(()=>{"use strict";Ro=p(x()),Eu=p($());xi();qu=p(M()),eg=(0,Ro.lazy)(()=>Promise.resolve().then(()=>(Lu(),Fu)))});function Nu(e){return tg[e]??"#999999"}async function og(e){let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status} fetching ${e}`);let o=await t.text(),n=[];for(let r of o.split(`
|
|
10
|
+
`)){if(r.startsWith("#")||!r.trim())continue;let i=r.split(" ");if(i.length<9)continue;let s=i[2],l=Number.parseInt(i[3]??"0",10),a=Number.parseInt(i[4]??"0",10),u=i[8]??"",m="",d;for(let c of u.split(";")){let[b,w]=c.split("=");b==="Note"?m=decodeURIComponent(w??""):b==="ID"&&(d=w)}if(s){let c=`${s}-${l}-${a}-${n.length}`;n.push({type:s,start:l,end:a,description:m,id:d,uniqueId:c})}}return n}function Gi(e){let{data:t,error:o,isLoading:n}=rt(e?`https://rest.uniprot.org/uniprotkb/${e}.gff`:null,og);return{features:t,error:o,isLoading:n}}var tg,zi=S(()=>{"use strict";go();tg={Domain:"#1f77b4","DNA binding":"#ff7f0e",Region:"#2ca02c","Zinc finger":"#d62728","Coiled coil":"#9467bd",Motif:"#8c564b","Compositional bias":"#e377c2",Repeat:"#7f7f7f",Transmembrane:"#bcbd22",Intramembrane:"#17becf","Topological domain":"#aec7e8",Signal:"#ffbb78","Signal peptide":"#ffbb78",Propeptide:"#98df8a","Transit peptide":"#ff9896",Chain:"#c5b0d5","Disulfide bond":"#c49c94","Active site":"#f7b6d2","Binding site":"#c7c7c7",Site:"#dbdb8d","Modified residue":"#9edae5",Glycosylation:"#393b79",Lipidation:"#637939","Cross-link":"#8c6d31","Alternative sequence":"#e7969c","Natural variant":"#de9ed6",Mutagenesis:"#ad494a","Sequence conflict":"#b5cf6b",Helix:"#e7ba52","Beta strand":"#6b6ecf",Turn:"#d6616b","Initiator methionine":"#ce6dbd",Peptide:"#6baed6","Calcium binding":"#fd8d3c","Nucleotide binding":"#74c476"}});function ng(e,t){let o=t?.[e.start-1],n=t?.[e.end-1];return o===void 0||n===void 0?void 0:{range:{start:o,end:n},left:o*6,width:Math.max((n-o+1)*6,3)}}function rg({feature:e}){return Qe.default.createElement("div",null,Qe.default.createElement("div",null,Qe.default.createElement("strong",null,e.type)),Qe.default.createElement("div",null,"Position: ",e.start,"-",e.end),e.description?Qe.default.createElement("div",null,e.description):null)}var Qe,Vu,Bu,ig,Hu,Uu=S(()=>{"use strict";Qe=p(x()),Vu=p(M()),Bu=p(_());Li();ht();zi();Di();ig=(0,Bu.observer)(function({feature:t,model:o}){let[n,r]=(0,Qe.useState)(!1),{molstarPluginContext:i,selectedFeatureId:s,structurePositionToAlignmentMap:l}=o,a=s===t.uniqueId,u=ng(t,l),m=()=>{r(!0),u&&o.setAlignmentHoverRange(u.range)},d=()=>{r(!1),o.setAlignmentHoverRange(void 0)},c=()=>{let y=o.molstarStructure,f=!a;y&&i&&zo({structure:y,plugin:i,channel:"select",spec:f?{kind:"range",start:t.start-1,end:t.end}:void 0}).catch(g=>{console.error(g),o.setError(g)}),f?(o.setSelectedFeatureId(t.uniqueId),Wo({model:o,structureSeqPos:t.start-1,structureSeqEndPos:t.end}).catch(g=>{console.error(g),o.setError(g)})):(o.setSelectedFeatureId(void 0),o.setClickedStructureRange(void 0))};if(!u)return null;let{left:b,width:w}=u,h=Nu(t.type);return Qe.default.createElement(Vu.Tooltip,{title:Qe.default.createElement(rg,{feature:t}),followCursor:!0},Qe.default.createElement("div",{"data-testid":`protein-feature-${t.type}`,"data-feature-id":t.uniqueId,"data-feature-start":t.start,"data-feature-end":t.end,onClick:()=>{c()},onMouseEnter:()=>{m()},onMouseLeave:()=>{d()},style:{position:"absolute",left:b,top:0,width:w,height:o.trackHeight,backgroundColor:h,opacity:n||a?.9:.6,cursor:"pointer",borderRadius:2,border:a?Ep:n?qp:"none",boxSizing:"border-box"}}))}),Hu=ig});var Ou,Gu,zu=S(()=>{"use client";dt();Ou=p(gt(),1),Gu=(0,ge.createSvgIcon)((0,Ou.jsx)("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close")});var vo,Xn,ju,sg,Wu,_u=S(()=>{"use strict";vo=p(x());zu();Xn=p(M()),ju=p(_());ht();sg=(0,ju.observer)(function({type:t,labelWidth:o,model:n}){return vo.default.createElement(Xn.Tooltip,{title:t,placement:"left"},vo.default.createElement("div",{style:{height:n.trackHeight+n.trackGap,width:o-4,fontSize:9,fontFamily:"monospace",textAlign:"right",paddingRight:4,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",display:"flex",alignItems:"center",justifyContent:"flex-end",gap:2}},vo.default.createElement(Xn.IconButton,{onClick:r=>{r.stopPropagation(),n.hideFeatureType(t)},title:`Hide ${t} track`,sx:{p:0,color:Dp}},vo.default.createElement(Gu,{sx:{fontSize:n.trackHeight}})),vo.default.createElement("span",{style:{overflow:"hidden",textOverflow:"ellipsis"}},t)))}),Wu=sg});var Ju,Ru,ag,Ku,Yu=S(()=>{"use strict";Ju=p(x()),Ru=p(_());ht();ag=(0,Ru.observer)(function({model:t}){let{alignmentHoverPos:o}=t;return o===void 0?null:Ju.default.createElement("div",{style:{position:"absolute",left:o*6,top:0,bottom:0,width:6,backgroundColor:Lp,pointerEvents:"none",zIndex:10}})}),Ku=ag});var yt,Qn,lg,$u,Zu,Xu=S(()=>{"use strict";yt=p(x()),Qn=p(_());ht();Uu();_u();Yu();lg=(0,Qn.observer)(function({features:t,model:o,sequenceLength:n}){return yt.default.createElement("div",{style:{position:"relative",height:o.trackHeight,width:n*6,marginBottom:o.trackGap}},t.map(r=>yt.default.createElement(Hu,{key:r.uniqueId,feature:r,model:o})))}),$u=(0,Qn.observer)(function({data:t,labelWidth:o,model:n}){return yt.default.createElement(yt.default.Fragment,null,t.visibleTypes.map(r=>yt.default.createElement(Wu,{key:r,type:r,labelWidth:o,model:n})))}),Zu=(0,Qn.observer)(function({data:t,model:o}){return yt.default.createElement("div",{style:{position:"relative"},onMouseMove:n=>{let r=n.currentTarget.getBoundingClientRect(),i=Math.floor((n.clientX-r.left)/6);i>=0&&i<t.sequenceLength&&o.hoverAlignmentPosition(i)},onMouseLeave:()=>{o.setHoveredPosition(void 0)}},t.visibleTypes.map(n=>yt.default.createElement(lg,{key:n,features:t.groupedFeatures[n],model:o,sequenceLength:t.sequenceLength})),yt.default.createElement(Ku,{model:o}))})});var Bt,Qu,em,pg,ji,tm=S(()=>{"use strict";Bt=p(x()),Qu=p(M()),em=p(_());ht();pg=(0,em.observer)(function({cells:t,colorFor:o,formatValue:n,sequenceLength:r,model:i}){let[s,l]=(0,Bt.useState)(void 0),a=(0,Bt.useMemo)(()=>{let m=new Map;for(let d of t)m.set(d.col,d.value);return m},[t]),u=s===void 0?void 0:a.get(s);return Bt.default.createElement(Qu.Tooltip,{title:u===void 0?"":n(u),followCursor:!0},Bt.default.createElement("div",{style:{position:"relative",height:i.trackHeight,width:r*6,marginBottom:i.trackGap},onMouseMove:m=>{let d=m.currentTarget.getBoundingClientRect(),c=Math.floor((m.clientX-d.left)/6);l(c),c>=0&&c<r&&i.hoverAlignmentPosition(c)},onMouseLeave:()=>{l(void 0),i.setHoveredPosition(void 0)}},t.map(m=>Bt.default.createElement("div",{key:m.col,style:{position:"absolute",left:m.col*6,top:0,width:6,height:i.trackHeight,backgroundColor:o(m.value)}}))))}),ji=pg});var We,Jt,ug,mg,cg,om,nm,dg,er,rm=S(()=>{"use strict";We=p(x()),Jt=p(_());ht();ug=(0,Jt.observer)(function({str:t}){return t.split("").map((o,n)=>We.default.createElement("span",{key:n,style:{position:"absolute",left:n*6,width:6}},o===" "?"\xA0":o))}),mg=(0,Jt.observer)(function({model:t,height:o}){let{showHighlight:n,alignmentMatchSet:r}=t;return!n||!r?null:[...r].map(i=>We.default.createElement("span",{key:i,style:{position:"absolute",left:i*6,top:0,width:6,height:o,background:"#33ff19a0",pointerEvents:"none"}}))}),cg=(0,Jt.observer)(function({model:t,strLength:o,height:n}){let{alignmentHoverPos:r}=t;return r!==void 0&&r>=0&&r<o?We.default.createElement("span",{style:{position:"absolute",left:r*6,top:0,width:6,height:n,background:"#f698",pointerEvents:"none"}}):null}),om=(0,Jt.observer)(function({range:t,strLength:o,background:n,border:r,height:i}){if(!t)return null;let{start:s,end:l}=t,a=Math.max(0,s),u=Math.min(o-1,l);if(a>u)return null;let m=(u-a+1)*6;return We.default.createElement("span",{style:{position:"absolute",left:a*6,top:0,width:m,height:i,background:n,border:r,boxSizing:"border-box",pointerEvents:"none"}})}),nm=(0,Jt.observer)(function({model:t,strLength:o,height:n}){return We.default.createElement("div",{style:{position:"absolute",top:0,left:0,width:o*6,height:n,pointerEvents:"none"}},We.default.createElement(mg,{model:t,height:n}),We.default.createElement(om,{range:t.clickAlignmentRange,strLength:o,background:"rgba(0, 120, 255, 0.3)",border:"1px solid rgba(0, 120, 255, 0.6)",height:n}),We.default.createElement(om,{range:t.alignmentHoverRange,strLength:o,background:"rgba(255, 165, 0, 0.4)",height:n}),We.default.createElement(cg,{model:t,strLength:o,height:n}))}),dg=(0,Jt.observer)(function({model:t,str:o}){return We.default.createElement("span",{style:{position:"relative",display:"inline-block",width:o.length*6,height:"1em"},onMouseMove:n=>{let r=n.currentTarget.getBoundingClientRect(),i=n.clientX-r.left,s=Math.floor(i/6);s>=0&&s<o.length&&t.hoverAlignmentPosition(s)},onClick:n=>{let r=n.currentTarget.getBoundingClientRect(),i=n.clientX-r.left,s=Math.floor(i/6);s>=0&&s<o.length&&t.clickAlignmentPosition(s)}},We.default.createElement(ug,{str:o}))}),er=dg});function gg(e){let t={};for(let o of e)t[o.type]??=[],t[o.type].push(o);return t}function Wi(e,t){let{features:o,isLoading:n,error:r}=Gi(t),{pairwiseAlignment:i,hiddenFeatureTypes:s}=e;if(!t||n||r||!o||!i)return{data:void 0,isLoading:n,error:r};let l=i.alns[0].seq.length,a=gg(o),u=Object.keys(a),m=u.filter(d=>!s.has(d));return{data:{featureTypes:u,visibleTypes:m,groupedFeatures:a,sequenceLength:l},isLoading:!1,error:void 0}}var im=S(()=>{"use strict";zi()});function am({label:e,title:t,height:o}){return k.default.createElement(Rt.Tooltip,{title:t,placement:"left"},k.default.createElement("div",{style:{height:o,fontSize:9,fontFamily:"monospace",textAlign:"right",paddingRight:4,display:"flex",alignItems:"center",justifyContent:"flex-end",overflow:"hidden",whiteSpace:"nowrap"}},e))}var k,Rt,lm,pm,fg,um,mm=S(()=>{"use strict";k=p(x()),Rt=p(M()),lm=p(Qt()),pm=p(_());ht();Du();Xu();tm();rm();im();Vi();fg=(0,pm.observer)(function({model:t}){let{pairwiseAlignment:o,showHighlight:n,showProteinTracks:r,uniprotId:i,confidenceCells:s,hydrophobicityCells:l}=t,a=(0,k.useRef)(null),{data:u,isLoading:m,error:d}=Wi(t,i);if((0,k.useEffect)(()=>(0,lm.autorun)(()=>{let h=a.current;t.autoScrollAlignment&&!t.isMouseInAlignment&&t.alignmentHoverPos!==void 0&&h&&h.scrollTo({left:t.alignmentHoverPos*6-h.clientWidth/2,behavior:"smooth"})}),[t]),!o)return k.default.createElement("div",null,"No pairwiseAlignment");let c=o.alns[0].seq,b=o.alns[1].seq,w=o.consensus;return k.default.createElement("div",null,k.default.createElement(Oi,{model:t}),k.default.createElement(Rt.Typography,null,"Alignment of the protein structure file's sequence with the selected transcript's sequence."," ",n?"Green is the aligned portion":null),k.default.createElement("div",{style:{display:"flex",fontSize:9,fontFamily:"monospace",cursor:"pointer",margin:8,paddingBottom:8},onMouseEnter:()=>{t.setIsMouseInAlignment(!0)},onMouseLeave:()=>{t.setIsMouseInAlignment(!1),t.setHoveredPosition(void 0)}},k.default.createElement("div",{style:{flexShrink:0,width:50,textAlign:"right",paddingRight:4}},k.default.createElement("div",{style:{height:14}},k.default.createElement(Rt.Tooltip,{title:"This is the sequence of the protein from the reference genome transcript"},k.default.createElement("span",null,"GENOME"))),k.default.createElement("div",{style:{height:14}},"\xA0"),k.default.createElement("div",{style:{height:14}},k.default.createElement(Rt.Tooltip,{title:"This is the sequence of the protein from the structure file"},k.default.createElement("span",null,"STRUCT"))),r?m?k.default.createElement("div",{style:{height:14,fontSize:8,color:"#666"}},"Loading..."):d?k.default.createElement(Rt.Tooltip,{title:d instanceof Error?d.message:"Error loading features"},k.default.createElement("div",{style:{height:14,fontSize:8,color:"red"}},"Error")):u?k.default.createElement($u,{data:u,labelWidth:50,model:t}):null:null,r&&s.length>0?k.default.createElement(am,{label:"pLDDT",title:"AlphaFold per-residue confidence (pLDDT)",height:t.trackHeight+t.trackGap}):null,r&&l.length>0?k.default.createElement(am,{label:"hydro",title:"Kyte-Doolittle hydrophobicity (orange hydrophobic, blue hydrophilic)",height:t.trackHeight+t.trackGap}):null),k.default.createElement("div",{ref:a,style:{overflow:"auto",whiteSpace:"nowrap",flex:1,paddingBottom:10,backgroundColor:"white"}},k.default.createElement("div",{style:{position:"relative"}},k.default.createElement(nm,{model:t,strLength:c.length,height:42}),k.default.createElement("div",{style:{height:14}},k.default.createElement(er,{model:t,str:c})),k.default.createElement("div",{style:{height:14}},k.default.createElement(er,{model:t,str:w})),k.default.createElement("div",{style:{height:14}},k.default.createElement(er,{model:t,str:b}))),r&&u?k.default.createElement(Zu,{data:u,model:t}):null,r&&s.length>0?k.default.createElement(ji,{cells:s,colorFor:_p,formatValue:h=>`pLDDT ${h.toFixed(0)}`,sequenceLength:c.length,model:t}):null,r&&l.length>0?k.default.createElement(ji,{cells:l,colorFor:Jp,formatValue:h=>`Kyte-Doolittle ${h.toFixed(1)}`,sequenceLength:c.length,model:t}):null)))}),um=fg});function bg({checked:e,label:t,onToggle:o}){return U.default.createElement(tr.default,{onClick:()=>{o()},dense:!0},U.default.createElement(fm.default,null,U.default.createElement(dm.default,{checked:e,size:"small",edge:"start",disableRipple:!0})),U.default.createElement(_i.default,null,t))}function yg(e){return[{label:"Show alignment",checked:e.showAlignment,onToggle:()=>{e.setShowAlignment(!e.showAlignment)}},{label:"Show features",checked:e.showProteinTracks,onToggle:()=>{e.setShowProteinTracks(!e.showProteinTracks)}},{label:"Auto-scroll features",checked:e.autoScrollAlignment,onToggle:()=>{e.setAutoScrollAlignment(!e.autoScrollAlignment)}},{label:"Compact tracks",checked:e.compactTracks,onToggle:()=>{e.setCompactTracks(!e.compactTracks)}}]}var U,cm,dm,gm,fm,_i,hm,tr,bm,ym,or,hg,wg,xg,wm,xm=S(()=>{"use strict";U=p(x()),cm=p(Oe());nu();dm=p(iu()),gm=p(au()),fm=p(pu()),_i=p(mu()),hm=p(du()),tr=p(fu()),bm=p(bu()),ym=p(wu()),or=p(_());Tu();Cu();mm();Mi();hg=(0,or.observer)(function({model:t}){return U.default.createElement(bm.default,{select:!0,size:"small",label:"Color",value:t.colorScheme,onChange:o=>{let n=xo.find(r=>r.value===o.target.value);n&&t.setColorScheme(n.value)},slotProps:{select:{native:!1}},sx:{minWidth:180}},xo.map(o=>U.default.createElement(tr.default,{key:o.value,value:o.value},o.label)))});wg=(0,or.observer)(function({model:t}){let[o,n]=(0,U.useState)(null),r=t.structures.some(i=>i.hiddenFeatureTypes.size>0);return U.default.createElement(U.default.Fragment,null,U.default.createElement(ym.default,{title:"Display settings"},U.default.createElement(gm.default,{size:"small",onClick:i=>{n(i.currentTarget)}},U.default.createElement(ou,{fontSize:"small"}))),U.default.createElement(hm.default,{anchorEl:o,open:!!o,onClose:()=>{n(null)}},yg(t).map(i=>U.default.createElement(bg,{key:i.label,checked:i.checked,label:i.label,onToggle:i.onToggle})),r?U.default.createElement(tr.default,{dense:!0,onClick:()=>{for(let i of t.structures)i.showAllFeatureTypes()}},U.default.createElement(_i.default,{inset:!0},"Restore hidden feature tracks")):null))}),xg=(0,or.observer)(function({model:t}){let{structures:o,showAlignment:n}=t;return U.default.createElement("div",null,U.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},U.default.createElement(ku,{model:t}),U.default.createElement("div",{style:{display:"flex",gap:"8px",alignItems:"center",flexShrink:0}},U.default.createElement(hg,{model:t}),U.default.createElement(wg,{model:t}))),n?o.filter(r=>r.pairwiseAlignment||r.alignmentPending).map((r,i)=>U.default.createElement("div",{key:i},r.pairwiseAlignment?U.default.createElement(um,{model:r}):U.default.createElement(cm.LoadingEllipses,{message:"Loading pairwise alignment"}))):null,U.default.createElement(vu,{model:t}))}),wm=xg});var Sm,vm=S(()=>{"use strict";Sm=`
|
|
11
11
|
.msp-plugin{font-family:Helvetica Neue,Segoe UI,Helvetica,Source Sans Pro,Arial,sans-serif;font-size:14px;line-height:1.42857143;position:absolute;inset:0}.msp-plugin *{box-sizing:border-box}.msp-plugin [hidden],.msp-plugin template{display:none}.msp-plugin a{background-color:transparent}.msp-plugin a:active,.msp-plugin a:hover{outline:0}.msp-plugin abbr[title]{border-bottom:1px dotted}.msp-plugin b,.msp-plugin strong{font-weight:700}.msp-plugin small{font-size:80%}.msp-plugin img{border:0}.msp-plugin svg:not(:root){overflow:hidden}.msp-plugin button,.msp-plugin input,.msp-plugin optgroup,.msp-plugin select,.msp-plugin textarea{color:inherit;font:inherit;margin:0}.msp-plugin button{overflow:visible}.msp-plugin button,.msp-plugin select{text-transform:none}.msp-plugin button,.msp-plugin html input[type=button],.msp-plugin input[type=reset],.msp-plugin input[type=submit]{-webkit-appearance:button;cursor:pointer}.msp-plugin button[disabled],.msp-plugin html input[disabled]{cursor:default}.msp-plugin button::-moz-focus-inner,.msp-plugin input::-moz-focus-inner{border:0;padding:0}.msp-plugin input{line-height:normal}.msp-plugin input[type=checkbox],.msp-plugin input[type=radio]{box-sizing:border-box;padding:0}.msp-plugin input[type=number]::-webkit-inner-spin-button,.msp-plugin input[type=number]::-webkit-outer-spin-button{height:auto}.msp-plugin textarea{overflow:auto}.msp-plugin .msp-layout-expanded,.msp-plugin .msp-layout-standard{inset:0}.msp-plugin .msp-layout-standard{border:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-region{overflow:hidden}.msp-plugin .msp-layout-static,.msp-plugin .msp-layout-scrollable{position:absolute}.msp-plugin .msp-scrollable{overflow-y:auto}.msp-plugin .msp-scrollable-container{position:absolute;inset:0;overflow-y:auto}.msp-plugin .msp-layout-static{overflow:hidden}.msp-plugin .msp-layout-top .msp-layout-static,.msp-plugin .msp-layout-main .msp-layout-static,.msp-plugin .msp-layout-bottom .msp-layout-static,.msp-plugin .msp-layout-right .msp-layout-static{inset:0}.msp-plugin .msp-layout-right .msp-layout-scrollable{inset:43px 0 0}.msp-plugin .msp-layout-left .msp-layout-static{inset:0}.msp-plugin .msp-layout-standard-outside{position:absolute}.msp-plugin .msp-layout-standard-outside .msp-layout-main{position:absolute;inset:0}.msp-plugin .msp-layout-standard-outside .msp-layout-top{position:absolute;right:0;height:97px;top:-97px;width:50%;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-outside .msp-layout-bottom{position:absolute;left:0;right:0;height:97px;top:-97px;width:50%;border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-outside .msp-layout-right{position:absolute;width:50%;right:0;bottom:-295px;height:295px;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-outside .msp-layout-left{position:absolute;width:50%;left:0;bottom:-295px;height:295px;border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-outside .msp-layout-hide-right .msp-layout-right{display:none}.msp-plugin .msp-layout-standard-outside .msp-layout-hide-right .msp-layout-left{width:100%}.msp-plugin .msp-layout-standard-outside .msp-layout-hide-left .msp-layout-left{display:none}.msp-plugin .msp-layout-standard-outside .msp-layout-hide-left .msp-layout-right{width:100%;border-left:none}.msp-plugin .msp-layout-standard-outside .msp-layout-collapse-left .msp-layout-left{width:32px}.msp-plugin .msp-layout-standard-outside .msp-layout-collapse-left .msp-layout-right{left:32px;width:auto}.msp-plugin .msp-layout-standard-outside .msp-layout-hide-top .msp-layout-top{display:none}.msp-plugin .msp-layout-standard-outside .msp-layout-hide-top .msp-layout-bottom{width:100%;border-left:none}.msp-plugin .msp-layout-standard-outside .msp-layout-hide-bottom .msp-layout-bottom{display:none}.msp-plugin .msp-layout-standard-outside .msp-layout-hide-bottom .msp-layout-top{width:100%;border-left:none}.msp-plugin .msp-layout-standard-landscape{position:absolute}.msp-plugin .msp-layout-standard-landscape .msp-layout-main{position:absolute;inset:100px 300px 70px 330px}.msp-plugin .msp-layout-standard-landscape .msp-layout-top{position:absolute;left:330px;right:300px;height:100px;top:0;border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-landscape .msp-layout-bottom{position:absolute;left:330px;right:300px;height:70px;bottom:0;border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-landscape .msp-layout-right{position:absolute;width:300px;right:0;bottom:0;top:0;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-landscape .msp-layout-left{position:absolute;width:330px;left:0;bottom:0;top:0;border-right:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-right .msp-layout-right{display:none}.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-right .msp-layout-main,.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-right .msp-layout-top,.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-right .msp-layout-bottom{right:0}.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-left .msp-layout-left{display:none}.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-left .msp-layout-main,.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-left .msp-layout-top,.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-left .msp-layout-bottom{left:0}.msp-plugin .msp-layout-standard-landscape .msp-layout-collapse-left .msp-layout-left{width:32px}.msp-plugin .msp-layout-standard-landscape .msp-layout-collapse-left .msp-layout-main,.msp-plugin .msp-layout-standard-landscape .msp-layout-collapse-left .msp-layout-top,.msp-plugin .msp-layout-standard-landscape .msp-layout-collapse-left .msp-layout-bottom{left:32px}.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-bottom .msp-layout-bottom{display:none}.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-bottom .msp-layout-main{bottom:0}.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-top .msp-layout-top{display:none}.msp-plugin .msp-layout-standard-landscape .msp-layout-hide-top .msp-layout-main{top:0}.msp-plugin .msp-layout-standard-portrait{position:absolute}.msp-plugin .msp-layout-standard-portrait .msp-layout-main{position:absolute;inset:97px 0 361px}.msp-plugin .msp-layout-standard-portrait .msp-layout-top{position:absolute;right:0;height:97px;top:0;width:50%;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-portrait .msp-layout-bottom{position:absolute;left:0;right:0;height:97px;width:50%;border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-portrait .msp-layout-right{position:absolute;width:50%;right:0;bottom:0;height:361px;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-portrait .msp-layout-left{position:absolute;width:50%;left:0;bottom:0;height:361px;border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-right .msp-layout-right{display:none}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-right .msp-layout-left{width:100%}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-left .msp-layout-left{display:none}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-left .msp-layout-right{width:100%;border-left:none}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-right.msp-layout-hide-left .msp-layout-main{bottom:0}.msp-plugin .msp-layout-standard-portrait .msp-layout-collapse-left .msp-layout-left{width:32px}.msp-plugin .msp-layout-standard-portrait .msp-layout-collapse-left .msp-layout-right{left:32px;width:auto}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-top .msp-layout-top{display:none}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-top .msp-layout-bottom{width:100%;border-left:none}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-bottom .msp-layout-bottom{display:none}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-bottom .msp-layout-top{width:100%;border-left:none}.msp-plugin .msp-layout-standard-portrait .msp-layout-hide-top.msp-layout-hide-bottom .msp-layout-main{top:0}.msp-plugin .msp-layout-standard-reactive{position:absolute}@media(orientation:landscape),(min-width:1000px){.msp-plugin .msp-layout-standard-reactive .msp-layout-main{position:absolute;inset:100px 300px 70px 330px}.msp-plugin .msp-layout-standard-reactive .msp-layout-top{position:absolute;left:330px;right:300px;height:100px;top:0;border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-reactive .msp-layout-bottom{position:absolute;left:330px;right:300px;height:70px;bottom:0;border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-reactive .msp-layout-right{position:absolute;width:300px;right:0;bottom:0;top:0;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-reactive .msp-layout-left{position:absolute;width:330px;left:0;bottom:0;top:0;border-right:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-right .msp-layout-right{display:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-right .msp-layout-main,.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-right .msp-layout-top,.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-right .msp-layout-bottom{right:0}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-left .msp-layout-left{display:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-left .msp-layout-main,.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-left .msp-layout-top,.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-left .msp-layout-bottom{left:0}.msp-plugin .msp-layout-standard-reactive .msp-layout-collapse-left .msp-layout-left{width:32px}.msp-plugin .msp-layout-standard-reactive .msp-layout-collapse-left .msp-layout-main,.msp-plugin .msp-layout-standard-reactive .msp-layout-collapse-left .msp-layout-top,.msp-plugin .msp-layout-standard-reactive .msp-layout-collapse-left .msp-layout-bottom{left:32px}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-bottom .msp-layout-bottom{display:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-bottom .msp-layout-main{bottom:0}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-top .msp-layout-top{display:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-top .msp-layout-main{top:0}}@media(orientation:portrait)and (max-width:1000px){.msp-plugin .msp-layout-standard-reactive .msp-layout-main{position:absolute;inset:97px 0 361px}.msp-plugin .msp-layout-standard-reactive .msp-layout-top{position:absolute;right:0;height:97px;top:0;width:50%;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-reactive .msp-layout-bottom{position:absolute;left:0;right:0;height:97px;width:50%;border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-reactive .msp-layout-right{position:absolute;width:50%;right:0;bottom:0;height:361px;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-reactive .msp-layout-left{position:absolute;width:50%;left:0;bottom:0;height:361px;border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-right .msp-layout-right{display:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-right .msp-layout-left{width:100%}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-left .msp-layout-left{display:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-left .msp-layout-right{width:100%;border-left:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-right.msp-layout-hide-left .msp-layout-main{bottom:0}.msp-plugin .msp-layout-standard-reactive .msp-layout-collapse-left .msp-layout-left{width:32px}.msp-plugin .msp-layout-standard-reactive .msp-layout-collapse-left .msp-layout-right{left:32px;width:auto}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-top .msp-layout-top{display:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-top .msp-layout-bottom{width:100%;border-left:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-bottom .msp-layout-bottom{display:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-bottom .msp-layout-top{width:100%;border-left:none}.msp-plugin .msp-layout-standard-reactive .msp-layout-hide-top.msp-layout-hide-bottom .msp-layout-main{top:0}}.msp-plugin .msp-layout-expanded{position:fixed}@media(orientation:landscape){.msp-plugin .msp-layout-expanded .msp-layout-main{position:absolute;inset:100px 300px 70px 330px}.msp-plugin .msp-layout-expanded .msp-layout-top{position:absolute;left:330px;right:300px;height:100px;top:0;border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-expanded .msp-layout-bottom{position:absolute;left:330px;right:300px;height:70px;bottom:0;border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-expanded .msp-layout-right{position:absolute;width:300px;right:0;bottom:0;top:0;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-expanded .msp-layout-left{position:absolute;width:330px;left:0;bottom:0;top:0;border-right:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-expanded .msp-layout-hide-right .msp-layout-right{display:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-right .msp-layout-main,.msp-plugin .msp-layout-expanded .msp-layout-hide-right .msp-layout-top,.msp-plugin .msp-layout-expanded .msp-layout-hide-right .msp-layout-bottom{right:0}.msp-plugin .msp-layout-expanded .msp-layout-hide-left .msp-layout-left{display:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-left .msp-layout-main,.msp-plugin .msp-layout-expanded .msp-layout-hide-left .msp-layout-top,.msp-plugin .msp-layout-expanded .msp-layout-hide-left .msp-layout-bottom{left:0}.msp-plugin .msp-layout-expanded .msp-layout-collapse-left .msp-layout-left{width:32px}.msp-plugin .msp-layout-expanded .msp-layout-collapse-left .msp-layout-main,.msp-plugin .msp-layout-expanded .msp-layout-collapse-left .msp-layout-top,.msp-plugin .msp-layout-expanded .msp-layout-collapse-left .msp-layout-bottom{left:32px}.msp-plugin .msp-layout-expanded .msp-layout-hide-bottom .msp-layout-bottom{display:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-bottom .msp-layout-main{bottom:0}.msp-plugin .msp-layout-expanded .msp-layout-hide-top .msp-layout-top{display:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-top .msp-layout-main{top:0}}@media(orientation:portrait){.msp-plugin .msp-layout-expanded .msp-layout-main{position:absolute;inset:97px 0 361px}.msp-plugin .msp-layout-expanded .msp-layout-top{position:absolute;right:0;height:97px;top:0;width:50%;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-expanded .msp-layout-bottom{position:absolute;left:0;right:0;height:97px;width:50%;border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-expanded .msp-layout-right{position:absolute;width:50%;right:0;bottom:0;height:361px;border-left:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-expanded .msp-layout-left{position:absolute;width:50%;left:0;bottom:0;height:361px;border-top:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-layout-expanded .msp-layout-hide-right .msp-layout-right{display:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-right .msp-layout-left{width:100%}.msp-plugin .msp-layout-expanded .msp-layout-hide-left .msp-layout-left{display:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-left .msp-layout-right{width:100%;border-left:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-right.msp-layout-hide-left .msp-layout-main{bottom:0}.msp-plugin .msp-layout-expanded .msp-layout-collapse-left .msp-layout-left{width:32px}.msp-plugin .msp-layout-expanded .msp-layout-collapse-left .msp-layout-right{left:32px;width:auto}.msp-plugin .msp-layout-expanded .msp-layout-hide-top .msp-layout-top{display:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-top .msp-layout-bottom{width:100%;border-left:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-bottom .msp-layout-bottom{display:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-bottom .msp-layout-top{width:100%;border-left:none}.msp-plugin .msp-layout-expanded .msp-layout-hide-top.msp-layout-hide-bottom .msp-layout-main{top:0}}.msp-plugin ::-webkit-scrollbar{width:10px;height:10px}.msp-plugin ::-webkit-scrollbar-track{border-radius:0;background-color:#e9e6e0}.msp-plugin ::-webkit-scrollbar-thumb{border-radius:10px;background-color:#beb7a4;border:solid 1px transparent;background-clip:content-box}.msp-plugin .msp-form-control,.msp-plugin .msp-control-row select,.msp-plugin .msp-control-row button,.msp-plugin .msp-control-row input[type=text],.msp-plugin .msp-btn{display:block;width:100%;background:#f3f2ee;border:none;padding:0 10px;line-height:30px;height:32px;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-box-shadow:none;box-shadow:none;background-image:none}.msp-plugin .msp-form-control::-moz-placeholder,.msp-plugin .msp-control-row select::-moz-placeholder,.msp-plugin .msp-control-row button::-moz-placeholder,.msp-plugin .msp-control-row input[type=text]::-moz-placeholder,.msp-plugin .msp-btn::-moz-placeholder{color:#9c835f;opacity:1}.msp-plugin .msp-form-control:-ms-input-placeholder,.msp-plugin .msp-control-row select:-ms-input-placeholder,.msp-plugin .msp-control-row button:-ms-input-placeholder,.msp-plugin .msp-control-row input[type=text]:-ms-input-placeholder,.msp-plugin .msp-btn:-ms-input-placeholder{color:#9c835f}.msp-plugin .msp-form-control::-webkit-input-placeholder,.msp-plugin .msp-control-row select::-webkit-input-placeholder,.msp-plugin .msp-control-row button::-webkit-input-placeholder,.msp-plugin .msp-control-row input[type=text]::-webkit-input-placeholder,.msp-plugin .msp-btn::-webkit-input-placeholder{color:#9c835f}.msp-plugin .msp-form-control:hover,.msp-plugin .msp-control-row select:hover,.msp-plugin .msp-control-row button:hover,.msp-plugin .msp-control-row input[type=text]:hover,.msp-plugin .msp-btn:hover{color:#ae5d04;background-color:#e9e6e0;border:none;outline-offset:-1px!important;outline:1px solid rgb(200.993902439,194.6402439024,178.756097561)!important}.msp-plugin .msp-form-control:active,.msp-plugin .msp-control-row select:active,.msp-plugin .msp-control-row button:active,.msp-plugin .msp-control-row input[type=text]:active,.msp-plugin .msp-btn:active,.msp-plugin .msp-form-control:focus,.msp-plugin .msp-control-row select:focus,.msp-plugin .msp-control-row button:focus,.msp-plugin .msp-control-row input[type=text]:focus,.msp-plugin .msp-btn:focus{color:#332b1f;background-color:#f3f2ee;border:none;outline-offset:0;outline:none}.msp-plugin .msp-form-control[disabled],.msp-plugin .msp-control-row select[disabled],.msp-plugin .msp-control-row button[disabled],.msp-plugin .msp-control-row input[disabled][type=text],.msp-plugin [disabled].msp-btn,.msp-plugin .msp-form-control[readonly],.msp-plugin .msp-control-row select[readonly],.msp-plugin .msp-control-row button[readonly],.msp-plugin .msp-control-row input[readonly][type=text],.msp-plugin [readonly].msp-btn,fieldset[disabled] .msp-plugin .msp-form-control,fieldset[disabled] .msp-plugin .msp-control-row select,fieldset[disabled] .msp-plugin .msp-control-row button,fieldset[disabled] .msp-plugin .msp-control-row input[type=text],fieldset[disabled] .msp-plugin .msp-btn{background:#eeece7;opacity:.35}.msp-plugin .msp-btn,.msp-plugin .msp-control-row button{display:inline-block;margin-bottom:0;text-align:center;touch-action:manipulation;cursor:pointer;background-image:none;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:0 10px;line-height:32px;border:none;-moz-box-sizing:border-box;box-sizing:border-box}.msp-plugin .msp-btn[disabled],.msp-plugin .msp-control-row button[disabled]{background:#eeece7;opacity:.35}.msp-plugin .msp-btn-block,.msp-plugin .msp-control-row button{display:block;width:100%}.msp-plugin .msp-btn,.msp-plugin .msp-control-row button,.msp-plugin .msp-btn:active,.msp-plugin .msp-btn-link:focus,.msp-plugin .msp-btn:hover{outline:none}.msp-plugin .msp-material-icon svg{display:inline-flex;vertical-align:middle;font-size:1.2em;margin-bottom:3px;fill:currentColor;width:1em;height:1em;flex-shrink:0;user-select:none}.msp-plugin .msp-btn-block>.msp-material-icon,.msp-plugin .msp-control-row button>.msp-material-icon{margin-left:0;margin-right:.4em}.msp-plugin .msp-btn-childless>.msp-material-icon{margin-left:0;margin-right:0}.msp-plugin .msp-btn-icon{border:none;height:32px;width:32px;line-height:32px;padding:0;text-align:center}.msp-plugin .msp-btn-icon:hover{color:#ae5d04;background-color:#e9e6e0;border:none;outline-offset:-1px!important;outline:1px solid rgb(200.993902439,194.6402439024,178.756097561)!important}.msp-plugin .msp-btn-icon[disabled],.msp-plugin .msp-btn-icon[disabled]:hover,.msp-plugin .msp-btn-icon[disabled]:active{color:#9c835f}.msp-plugin .msp-btn-icon-small{border:none;height:32px;width:20px;line-height:32px;padding:0;text-align:center}.msp-plugin .msp-btn-icon-small:hover{color:#ae5d04;background-color:#e9e6e0;border:none;outline-offset:-1px!important;outline:1px solid rgb(200.993902439,194.6402439024,178.756097561)!important}.msp-plugin .msp-btn-icon-small[disabled],.msp-plugin .msp-btn-icon-small[disabled]:hover,.msp-plugin .msp-btn-icon-small[disabled]:active{color:#9c835f}.msp-plugin .msp-btn-link{font-weight:400;border-radius:0}.msp-plugin .msp-btn-link,.msp-plugin .msp-btn-link:active,.msp-plugin .msp-btn-link.active,.msp-plugin .msp-btn-link[disabled],fieldset[disabled] .msp-plugin .msp-btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.msp-plugin .msp-btn-link,.msp-plugin .msp-btn-link:hover,.msp-plugin .msp-btn-link:focus,.msp-plugin .msp-btn-link:active{border-color:transparent}.msp-plugin .msp-btn-link:hover,.msp-plugin .msp-btn-link:focus{text-decoration:none;background-color:transparent}.msp-plugin .msp-btn-link[disabled]:hover,.msp-plugin .msp-btn-link[disabled]:focus,fieldset[disabled] .msp-plugin .msp-btn-link:hover,fieldset[disabled] .msp-plugin .msp-btn-link:focus{text-decoration:none}.msp-plugin .msp-btn-link .msp-icon{font-size:100%}.msp-plugin .msp-btn-link,.msp-plugin .msp-btn-link:active,.msp-plugin .msp-btn-link:focus{color:#332b1f;text-decoration:none}.msp-plugin .msp-btn-link:hover{color:#ae5d04;text-decoration:none}.msp-plugin .msp-btn-link-toggle-on{color:#332b1f}.msp-plugin .msp-btn-link-toggle-off,.msp-plugin .msp-btn-link-toggle-off:active,.msp-plugin .msp-btn-link-toggle-off:focus{color:#9c835f!important}.msp-plugin .msp-btn-link-toggle-on:hover{color:#ae5d04!important}.msp-plugin .msp-btn-link-toggle-off:hover{color:#dc9c56!important}.msp-plugin .msp-btn-action,.msp-plugin .msp-btn-action:active,.msp-plugin .msp-btn-action:focus{color:#332b1f;background:#f3f2ee}.msp-plugin .msp-btn-action:hover{color:#ae5d04;background:#f9f8f6}.msp-plugin .msp-btn-action[disabled],.msp-plugin .msp-btn-action[disabled]:hover,.msp-plugin .msp-btn-action[disabled]:active,.msp-plugin .msp-btn-action[disabled]:focus{color:#362e21}.msp-plugin .msp-btn-commit-on,.msp-plugin .msp-btn-commit-on:active,.msp-plugin .msp-btn-commit-on:focus{color:#974102;background:#f2f1ed}.msp-plugin .msp-btn-commit-on:hover{color:#ae5d04;background:#f8f7f4}.msp-plugin .msp-btn-commit-on[disabled],.msp-plugin .msp-btn-commit-on[disabled]:hover,.msp-plugin .msp-btn-commit-on[disabled]:active,.msp-plugin .msp-btn-commit-on[disabled]:focus{color:#9c4302}.msp-plugin .msp-btn-commit-off,.msp-plugin .msp-btn-commit-off:active,.msp-plugin .msp-btn-commit-off:focus{color:#332b1f;background:#f6f5f3}.msp-plugin .msp-btn-commit-off:hover{color:#ae5d04;background:#fcfbfa}.msp-plugin .msp-btn-commit-off[disabled],.msp-plugin .msp-btn-commit-off[disabled]:hover,.msp-plugin .msp-btn-commit-off[disabled]:active,.msp-plugin .msp-btn-commit-off[disabled]:focus{color:#362e21}.msp-plugin .msp-btn-remove:hover{color:#f2f4f7}.msp-plugin .msp-btn-commit-on:hover{color:#fc6c03}.msp-plugin .msp-select-toggle:after{content:"";position:absolute;right:.75rem;top:50%;transform:translateY(-50%);width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:7px solid #ae5d04;opacity:0;pointer-events:none}.msp-plugin .msp-select-toggle:hover:after{opacity:1}.msp-plugin .msp-btn-action{height:32px;line-height:32px}.msp-plugin input[type=file]{display:block}.msp-plugin input[type=range]{display:block;width:100%}.msp-plugin select[multiple],.msp-plugin select[size],.msp-plugin textarea.msp-form-control,.msp-plugin textarea.msp-btn{height:auto}.msp-plugin .msp-control-top-offset{margin-top:1px}.msp-plugin .msp-btn-commit{text-align:right;padding:0 10px 0 0;line-height:32px;border:none;overflow:hidden;font-weight:700}.msp-plugin .msp-btn-commit .msp-icon{display:block-inline;line-height:32px;width:32px;text-align:center}.msp-plugin select.msp-form-control,.msp-plugin .msp-control-row select,.msp-plugin select.msp-btn{background:none;background-color:#f3f2ee;background-size:8px 12px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:right 10px center;padding-right:24px}.msp-plugin select.msp-form-control:-moz-focusring,.msp-plugin .msp-control-row select:-moz-focusring,.msp-plugin select.msp-btn:-moz-focusring{color:transparent;text-shadow:0 0 0 #332b1f}.msp-plugin .msp-default-bg{background:#eeece7}.msp-plugin .msp-transparent-bg{background:transparent}.msp-plugin .msp-no-hover-outline:hover{color:#ae5d04;background-color:inherit;border:none;outline-offset:0!important;outline:none!important}.msp-plugin .msp-icon-inline{margin-right:8px}.msp-plugin .msp-control-row{position:relative;height:32px;background:#eeece7;margin-top:1px}.msp-plugin .msp-control-row>span.msp-control-row-label,.msp-plugin .msp-control-row>button.msp-control-button-label{line-height:32px;display:block;width:120px;text-align:right;padding:0 10px;color:#63533c;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default}.msp-plugin .msp-control-row>button.msp-control-button-label{background:#eeece7;cursor:pointer}.msp-plugin .msp-control-row .msp-control-current{background:#eeece7}.msp-plugin .msp-control-row>div.msp-control-row-ctrl{position:absolute;inset:0 0 0 120px}.msp-plugin .msp-control-row>div.msp-control-row-text{position:absolute;inset:0 0 0 120px;display:flex;align-items:center;padding:0 10px}.msp-plugin .msp-control-row>div{background:#f3f2ee}.msp-plugin .msp-control-row>.msp-flex-row,.msp-plugin .msp-control-row>.msp-state-image-row{background:#eeece7}.msp-plugin .msp-control-label-short>span{width:80px!important}.msp-plugin .msp-control-label-short>div:nth-child(2){left:80px!important}.msp-plugin .msp-control-col-2{float:left;width:50%}.msp-plugin .msp-control-twoline{height:64px!important}.msp-plugin .msp-control-group{position:relative}.msp-plugin .msp-toggle-button .msp-icon{display:inline-block;margin-right:6px}.msp-plugin .msp-toggle-button>div>button:hover{border-color:#e9e6e0!important;border:none;outline-offset:-1px!important;outline:1px solid rgb(200.993902439,194.6402439024,178.756097561)!important}.msp-plugin .msp-slider>div:first-child{position:absolute;inset:0 62px 0 18px;display:flex}.msp-plugin .msp-slider>div:last-child{position:absolute;height:32px;line-height:32px;text-align:center;right:0;width:50px;top:0;bottom:0}.msp-plugin .msp-slider-no-input>div:first-child{right:18px}.msp-plugin .msp-slider-no-input>div:last-child{visibility:hidden;width:0}.msp-plugin .msp-slider input[type=text]{padding-right:6px;padding-left:4px;font-size:80%;text-align:right}.msp-plugin .msp-slider2>div:first-child{position:absolute;height:32px;line-height:32px;text-align:center;left:0;width:25px;top:0;bottom:0;font-size:80%}.msp-plugin .msp-slider2>div:nth-child(2){position:absolute;inset:0 37px 0 35px;display:flex}.msp-plugin .msp-slider2>div:last-child{position:absolute;height:32px;line-height:32px;text-align:center;right:0;width:25px;top:0;bottom:0;font-size:80%}.msp-plugin .msp-slider2 input[type=text]{padding-right:4px;padding-left:4px;font-size:80%;text-align:center}.msp-plugin .msp-toggle-color-picker button{border:10px solid rgb(243.2865853659,241.9085365854,238.4634146341)!important;margin:0;text-align:center;padding-right:10px;padding-left:10px}.msp-plugin .msp-toggle-color-picker button:hover{border-color:#e9e6e0!important;border:none;outline-offset:-1px!important;outline:1px solid rgb(200.993902439,194.6402439024,178.756097561)!important}.msp-plugin .msp-toggle-color-picker .msp-color-picker{position:absolute;z-index:100000;background:#eeece7;border-top:1px solid #eeece7;padding-bottom:5px;width:100%}.msp-plugin .msp-toggle-color-picker-above .msp-color-picker{top:-85px;height:85px}.msp-plugin .msp-toggle-color-picker-below .msp-color-picker{top:32px;height:80px}.msp-plugin .msp-control-offset{padding-left:10px}.msp-plugin .msp-accent-offset{padding-left:1px;margin-left:8px;border-left:2px solid rgb(232.5914634146,139.3719512195,56.9085365854)}.msp-plugin .msp-control-group-wrapper{margin-bottom:0;margin-top:1px}.msp-plugin .msp-control-group-header{background:#eeece7}.msp-plugin .msp-control-group-header>button,.msp-plugin .msp-control-group-header div{padding-left:4px;text-align:left;height:24px!important;line-height:24px!important;font-size:85%!important;background:#eeece7!important;color:#63533c}.msp-plugin .msp-control-group-header .msp-icon{height:24px!important;line-height:24px!important}.msp-plugin .msp-control-group-header>span{padding-left:5px;line-height:21.3333333333px;font-size:70%;background:#eeece7;color:#63533c}.msp-plugin .msp-control-current{background:#eeece7}.msp-plugin .msp-control-group-footer{background:#e3e0d8;height:5px;font-size:1px;margin-top:1px}.msp-plugin .msp-control-group-expander{display:block;position:absolute;line-height:32px;padding:0;left:0;top:0;width:120px;text-align:left;background:transparent}.msp-plugin .msp-control-group-expander .msp-icon{line-height:29px;width:31px;text-align:center;font-size:100%}.msp-plugin .msp-plugin-layout_controls{position:absolute;left:10px;top:10px}.msp-plugin .msp-plugin-layout_controls>button:first-child{margin-right:6px}.msp-plugin .msp-empty-control{display:none}.msp-plugin .msp-control .msp-btn-block,.msp-plugin .msp-control .msp-control-row button,.msp-plugin .msp-control-row .msp-control button{margin-bottom:0;margin-top:0}.msp-plugin .msp-row-text{height:32px;position:relative;background:#eeece7;margin-top:1px}.msp-plugin .msp-row-text>div{line-height:32px;text-align:center;color:#63533c}.msp-plugin .msp-help span{display:none}.msp-plugin .msp-help:hover span{display:inline-block;background:linear-gradient(#eeece7,#eeece7cc)}.msp-plugin .msp-help-text{position:relative;background:#eeece7;margin-top:1px}.msp-plugin .msp-help-text>div{padding:5px 10px;text-align:left;color:#63533c}.msp-plugin .msp-help-text>p{padding:5px 10px;text-align:left;color:#63533c}.msp-plugin .msp-help-description{font-style:italic}.msp-plugin .msp-help-legend{padding-top:10px}.msp-plugin .msp-scale-legend>div{width:100%;height:30px}.msp-plugin .msp-scale-legend>div>span{padding:5px;color:#fff;font-weight:700;background-color:#0003}.msp-plugin .msp-table-legend>div{margin-right:5px;display:inline-flex}.msp-plugin .msp-table-legend>div .msp-table-legend-color{width:30px;height:20px}.msp-plugin .msp-table-legend>div .msp-table-legend-text{margin:0 5px}.msp-plugin .msp-image-preview{position:relative;background:#eeece7;margin-top:1px;padding:10px}.msp-plugin .msp-image-preview canvas{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.msp-plugin .msp-image-preview>span{margin-top:6px;display:block;text-align:center;font-size:80%;line-height:15px}.msp-plugin .msp-copy-image-wrapper{position:relative}.msp-plugin .msp-copy-image-wrapper div{font-weight:700;padding:3px;margin:1px 0;width:100%;background:#f3f2ee;text-align:center}.msp-plugin .msp-copy-image-wrapper img{margin-top:1px}.msp-plugin .msp-control-text-area-wrapper,.msp-plugin .msp-text-area-wrapper{position:relative}.msp-plugin .msp-control-text-area-wrapper textarea,.msp-plugin .msp-text-area-wrapper textarea{border:none;width:100%;height:100%;background:#f3f2ee;padding:5px 10px;resize:none;font-size:12px;line-height:16px}.msp-plugin .msp-control-text-area-wrapper{height:64px!important}.msp-plugin .msp-text-area-wrapper{height:96px!important}.msp-plugin .msp-help-row{position:relative;height:32px;background:#eeece7;margin-top:1px;display:table;width:100%}.msp-plugin .msp-help-row>span{width:120px;text-align:right;padding:3px 10px;color:#63533c;display:table-cell;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default}.msp-plugin .msp-help-row>div{background:#f3f2ee;position:relative;padding:3px 10px;display:table-cell}.msp-plugin .msp-canvas{width:100%;height:100%;background-color:#f3f2ee}.msp-plugin .msp-canvas text{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.msp-plugin .msp-canvas circle{stroke:#000;stroke-width:10;stroke-opacity:.3}.msp-plugin .msp-canvas circle:hover{fill:#ae5d04;stroke:#000;stroke-width:10px}.msp-plugin .msp-canvas .info{fill:#fff;stroke:#000;stroke-width:3}.msp-plugin .msp-canvas .show{visibility:visible}.msp-plugin .msp-canvas .hide{visibility:hidden}.msp-plugin .msp-canvas .delete-button rect{fill:#ed4337;stroke:#000}.msp-plugin .msp-canvas .delete-button text{stroke:#fff;fill:#fff}.msp-plugin .msp-canvas .delete-button:hover{stroke:#000;stroke-width:3;fill:#ff6961}.msp-plugin .msp-canvas .infoCircle:hover{fill:#4c66b2}.msp-plugin .msp-canvas:focus{outline:none}.msp-plugin .msp-log-wrap{position:absolute;inset:0;overflow:hidden}.msp-plugin .msp-log{position:absolute;inset:0 -20px 0 0;overflow-y:scroll;overflow-x:hidden;font-size:90%;background:#e0ddd4}.msp-plugin .msp-log{font-size:90%}.msp-plugin .msp-log ul{padding:0;margin:0}.msp-plugin .msp-log{color:#433829}.msp-plugin .msp-log li{clear:both;margin:0;background:#eeece7;position:relative}.msp-plugin .msp-log li:not(:last-child){border-bottom:1px solid rgb(206.2804878049,200.5487804878,186.2195121951)}.msp-plugin .msp-log .msp-log-entry{margin-left:110px;background:#ebe8e3;padding:3px 25px 3px 10px}.msp-plugin .msp-log .msp-log-timestamp{padding:3px 10px;float:left;text-align:right;width:110px;color:#726046;font-size:100%}.msp-plugin .msp-log .msp-log-timestamp small{font-size:100%}.msp-plugin .msp-log .label{margin-top:-3px;font-size:7pt}.msp-plugin .msp-log-entry-badge{position:absolute;left:0;top:0;bottom:0;width:6px}.msp-plugin .msp-log-entry-message{background:#0cca5d}.msp-plugin .msp-log-entry-info{background:#5e3673}.msp-plugin .msp-log-entry-error{background:#fd354b}.msp-plugin .msp-log-entry-warning{background:#fcc937}.msp-plugin .msp-slider-base{position:relative;height:14px;padding:5px 0;width:100%;border-radius:6px;align-self:center;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.msp-plugin .msp-slider-base *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.msp-plugin .msp-slider-base-rail{position:absolute;width:100%;background-color:#e0ddd4;height:4px;border-radius:2px}.msp-plugin .msp-slider-base-track{position:absolute;left:0;height:4px;border-radius:6px;background-color:tint(#332b1f,60%)}.msp-plugin .msp-slider-base-handle{position:absolute;margin-left:-11px;margin-top:-9px;width:22px;height:22px;cursor:pointer;border-radius:50%;background-color:#332b1f;border:4px solid rgb(224.2548780488,220.637804878,211.5951219512)}.msp-plugin .msp-slider-base-handle:hover{background-color:#ae5d04}.msp-plugin .msp-slider-base-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}.msp-plugin .msp-slider-base-mark-text{position:absolute;display:inline-block;vertical-align:middle;text-align:center;cursor:pointer;color:#999}.msp-plugin .msp-slider-base-mark-text-active{color:#666}.msp-plugin .msp-slider-base-step{position:absolute;width:100%;height:4px;background:transparent}.msp-plugin .msp-slider-base-dot{position:absolute;bottom:-2px;margin-left:-4px;width:8px;height:8px;border:2px solid #e9e9e9;background-color:#fff;cursor:pointer;border-radius:50%;vertical-align:middle}.msp-plugin .msp-slider-base-dot:first-child{margin-left:-4px}.msp-plugin .msp-slider-base-dot:last-child{margin-left:-4px}.msp-plugin .msp-slider-base-dot-active{border-color:tint(#332b1f,50%)}.msp-plugin .msp-slider-base-disabled{background:#eeece7;opacity:.35}.msp-plugin .msp-slider-base-disabled .msp-slider-base-handle,.msp-plugin .msp-slider-base-disabled .msp-slider-base-dot{cursor:not-allowed}.msp-plugin .msp-slider-base-disabled .msp-slider-base-mark-text,.msp-plugin .msp-slider-base-disabled .msp-slider-base-dot{cursor:not-allowed!important}.msp-plugin .msp-markdown table{border:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);border-collapse:collapse}.msp-plugin .msp-markdown th{text-align:left}.msp-plugin .msp-markdown th,.msp-plugin .msp-markdown td{border:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);padding:4px 8px}.msp-plugin .msp-markdown img{max-width:100%;height:auto}.msp-plugin .msp-description{padding:10px;font-size:85%;background:#eeece7;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;font-weight:light;cursor:default}.msp-plugin .msp-description:not(:first-child){border-top:1px solid rgb(224.2548780488,220.637804878,211.5951219512)}.msp-plugin .msp-color-picker input{color:#000!important}.msp-plugin .msp-no-webgl{position:absolute;width:100%;height:100%;left:0;top:0;display:table;text-align:center;background:#eeece7}.msp-plugin .msp-no-webgl>div b{font-size:120%}.msp-plugin .msp-no-webgl>div{display:table-cell;vertical-align:middle;text-align:center;width:100%;height:100%}.msp-plugin .msp-loader-msp-btn-file{position:relative;overflow:hidden}.msp-plugin .msp-loader-msp-btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;filter:alpha(opacity=0);opacity:0;outline:none;background:#fff;cursor:inherit;display:block}.msp-plugin .msp-controls-section{margin-bottom:10px}.msp-plugin .msp-combined-color-button{border:4px solid rgb(243.2865853659,241.9085365854,238.4634146341)!important;margin:0;text-align:center;padding-right:10px;padding-left:10px}.msp-plugin .msp-combined-color-button:hover{border-color:#e9e6e0!important;border:none;outline-offset:-1px!important;outline:1px solid rgb(200.993902439,194.6402439024,178.756097561)!important}.msp-plugin .msp-combined-color-swatch{width:100%;display:grid;grid-gap:1px;grid-template-columns:repeat(6,auto)}.msp-plugin .msp-combined-color-swatch .msp-btn:hover,.msp-plugin .msp-combined-color-swatch .msp-control-row button:hover,.msp-plugin .msp-control-row .msp-combined-color-swatch button:hover{outline-offset:-1px!important;outline:1px solid rgb(200.993902439,194.6402439024,178.756097561)!important}.msp-plugin .msp-action-select{position:relative}.msp-plugin .msp-action-select select{padding-left:42px}.msp-plugin .msp-action-select option:first-child{color:#63533c}.msp-plugin .msp-action-select>.msp-icon{display:block;top:0;left:10px;position:absolute;line-height:32px}.msp-plugin .msp-simple-help-section{height:28px;line-height:28px;margin-top:5px;margin-bottom:5px;padding:0 10px;font-weight:500;background:#eeece7;color:#332b1f}.msp-plugin .msp-left-panel-controls-buttons{position:absolute;width:32px;top:0;bottom:0;padding-top:10px;background:#eeece7}.msp-plugin .msp-left-panel-controls-buttons-bottom{position:absolute;bottom:0}.msp-plugin .msp-left-panel-controls-button-data-dirty{position:absolute;width:6px;height:6px;background:#e98b39;border-radius:3px;right:6px;bottom:6px}.msp-plugin .msp-left-panel-controls .msp-scrollable-container{left:33px}.msp-plugin .msp-mapped-parameter-group{position:relative}.msp-plugin .msp-mapped-parameter-group>.msp-control-row:first-child>div:nth-child(2){right:33px}.msp-plugin .msp-mapped-parameter-group>button:first-child{right:33px}.msp-plugin .msp-mapped-parameter-group>.msp-btn-icon{position:absolute;right:0;width:32px;top:0;padding:0}.msp-plugin .msp-shape-filled{fill:#332b1f;stroke:#332b1f}.msp-plugin .msp-shape-empty{fill:none;stroke:#332b1f}.msp-plugin .msp-no-overflow{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.msp-plugin .msp-25-lower-contrast-text{color:#826e4f}.msp-plugin .msp-expandable-group-color-stripe{position:absolute;left:0;top:30px;width:120px;height:2px}.msp-plugin .msp-section-header{height:32px;line-height:32px;margin-top:10px;margin-bottom:10px;text-align:right;padding:0 10px;font-weight:700;background:#eeece7;overflow:hidden;cursor:default}.msp-plugin .msp-section-header>.msp-icon{display:block;float:left}.msp-plugin .msp-section-header>small{font-weight:400}.msp-plugin .msp-current-header{height:32px;line-height:32px;margin-bottom:10px;text-align:center;font-weight:700;background:#eeece7}.msp-plugin .msp-flex-row,.msp-plugin .msp-state-image-row{margin-top:1px;background:#eeece7;display:flex;flex-direction:row;width:inherit;height:32px}.msp-plugin .msp-flex-row>.msp-flex-item,.msp-plugin .msp-state-image-row>.msp-flex-item{margin:0 1px 0 0;flex:1 1 auto;overflow:hidden}.msp-plugin .msp-flex-row>.msp-flex-item:last-child,.msp-plugin .msp-state-image-row>.msp-flex-item:last-child{margin-right:0}.msp-plugin .msp-flex-row>select,.msp-plugin .msp-state-image-row>select,.msp-plugin .msp-flex-row>button,.msp-plugin .msp-state-image-row>button{margin:0 1px 0 0;flex:1 1 auto;height:32px;overflow:hidden}.msp-plugin .msp-flex-row .msp-btn-icon,.msp-plugin .msp-state-image-row .msp-btn-icon,.msp-plugin .msp-flex-row .msp-btn-icon-small,.msp-plugin .msp-state-image-row .msp-btn-icon-small{flex:0 0 32px;max-width:32px}.msp-plugin .msp-flex-row>select,.msp-plugin .msp-state-image-row>select{background:none}.msp-plugin .msp-flex-row>select>option[value=_],.msp-plugin .msp-state-image-row>select>option[value=_]{display:none}.msp-plugin .msp-flex-row>select:last-child,.msp-plugin .msp-state-image-row>select:last-child,.msp-plugin .msp-flex-row>button:last-child,.msp-plugin .msp-state-image-row>button:last-child{margin-right:0}.msp-plugin .msp-flex-row>button.msp-control-button-label,.msp-plugin .msp-state-image-row>button.msp-control-button-label{background:#eeece7}.msp-plugin .msp-state-list{list-style:none}.msp-plugin .msp-state-list>li{position:relative;overflow:hidden}.msp-plugin .msp-state-list>li>button:first-child{text-align:left;border-left:10px solid rgb(212.6243902439,207.6390243902,195.1756097561)!important}.msp-plugin .msp-state-list>li>div{position:absolute;right:0;top:0}.msp-plugin .msp-state-image-row{height:96px;margin-top:0}.msp-plugin .msp-state-image-row>button{height:96px;padding:0}.msp-plugin .msp-state-image-row>button>img{min-height:96px;width:inherit;transform:translateY(-50%);top:50%;position:relative}.msp-plugin .msp-tree-row{position:relative;margin-top:0;margin-bottom:1px;background:transparent}.msp-plugin .msp-tree-row-current .msp-btn-tree-label>span{font-weight:700}.msp-plugin .msp-tree-row-current .msp-btn-tree-label{border-radius:0!important}.msp-plugin .msp-tree-row .msp-btn-tree-label{text-align:left;border-radius:0 0 0 8px;border-left-width:4px;border-left-style:solid}.msp-plugin .msp-tree-row .msp-btn-tree-label>small{color:#726046}.msp-plugin .msp-tree-updates-wrapper .msp-control-group-header:last-child{margin-bottom:1px}.msp-plugin .msp-viewport-top-left-controls{position:absolute;left:10px;top:10px}.msp-plugin .msp-viewport-top-left-controls .msp-traj-controls{line-height:32px;float:left;margin-right:10px;background-color:#f3f2ee}.msp-plugin .msp-viewport-top-left-controls .msp-traj-controls>span{color:#332b1f;margin-left:10px;margin-right:10px;font-size:85%;display:inline-block}.msp-plugin .msp-viewport-top-left-controls .msp-state-snapshot-viewport-controls{line-height:32px;float:left;margin-right:10px}.msp-plugin .msp-viewport-top-left-controls .msp-state-snapshot-viewport-controls>button{background-color:#f3f2ee}.msp-plugin .msp-viewport-top-left-controls .msp-state-snapshot-viewport-controls>select{display:inline-block;width:200px;margin-right:10px}.msp-plugin .msp-viewport-top-left-controls .msp-state-snapshot-animation-slider{position:relative;display:inline-block;width:120px;line-height:32px}.msp-plugin .msp-viewport-top-left-controls .msp-state-snapshot-animation-button{margin-left:10px}.msp-plugin .msp-viewport-top-left-controls .msp-animation-viewport-controls{line-height:32px;float:left;margin-right:10px;position:relative}.msp-plugin .msp-viewport-top-left-controls .msp-animation-viewport-controls>div:first-child{position:relative;display:inline-block}.msp-plugin .msp-viewport-top-left-controls .msp-animation-viewport-controls>div:first-child>button{position:relative}.msp-plugin .msp-viewport-top-left-controls .msp-animation-viewport-controls .msp-animation-viewport-controls-select{width:290px;position:absolute;left:0;margin-top:10px;background:#e0ddd4;z-index:10001}.msp-plugin .msp-viewport-top-left-controls .msp-animation-viewport-controls .msp-animation-viewport-controls-select .msp-control-row:first-child{margin-top:0}.msp-plugin .msp-selection-viewport-controls{position:relative;margin:10px auto 0;width:430px}.msp-plugin .msp-selection-viewport-controls-actions{position:absolute;width:100%;top:32px;background:#e0ddd4}.msp-plugin .msp-selection-viewport-controls>.msp-flex-row .msp-btn,.msp-plugin .msp-selection-viewport-controls>.msp-state-image-row .msp-btn,.msp-plugin .msp-selection-viewport-controls>.msp-flex-row .msp-control-row button,.msp-plugin .msp-control-row .msp-selection-viewport-controls>.msp-flex-row button,.msp-plugin .msp-selection-viewport-controls>.msp-state-image-row .msp-control-row button,.msp-plugin .msp-control-row .msp-selection-viewport-controls>.msp-state-image-row button{padding:0 5px}.msp-plugin .msp-selection-viewport-controls select.msp-form-control,.msp-plugin .msp-selection-viewport-controls select.msp-btn,.msp-plugin .msp-selection-viewport-controls .msp-control-row select,.msp-plugin .msp-control-row .msp-selection-viewport-controls select{padding:0 5px;text-align:center;background:#f3f2ee;flex:0 0 80px;text-overflow:ellipsis}.msp-plugin .msp-param-object-list-item{margin-top:1px;position:relative}.msp-plugin .msp-param-object-list-item>button{text-align:left}.msp-plugin .msp-param-object-list-item>button>span{font-weight:700}.msp-plugin .msp-param-object-list-item>div{position:absolute;right:0;top:0}.msp-plugin .msp-state-actions .msp-transform-wrapper:last-child{margin-bottom:10px}.msp-plugin .msp-button-row{display:flex;flex-direction:row;height:32px;width:inherit}.msp-plugin .msp-button-row>button{margin:0 1px 0 0;flex:1 1 auto;height:32px;text-align-last:center;background:none;padding:0 10px;overflow:hidden}.msp-plugin .msp-action-menu-options-no-header,.msp-plugin .msp-action-menu-options .msp-control-group-children{max-height:300px;overflow:hidden;overflow-y:auto}.msp-plugin .msp-action-menu-options .msp-control-row,.msp-plugin .msp-action-menu-options button,.msp-plugin .msp-action-menu-options .msp-icon,.msp-plugin .msp-action-menu-options .msp-flex-row,.msp-plugin .msp-action-menu-options .msp-state-image-row{height:24px;line-height:24px}.msp-plugin .msp-action-menu-options button{text-align:left}.msp-plugin .msp-action-menu-options .msp-action-menu-button{margin-top:1px;display:flex}.msp-plugin .msp-action-menu-options .msp-action-menu-button .msp-icon{margin-right:6px}.msp-plugin .msp-representation-entry{position:relative}.msp-plugin .msp-representation-entry>.msp-control-group-header>.msp-btn,.msp-plugin .msp-control-row .msp-representation-entry>.msp-control-group-header>button{font-weight:700}.msp-plugin .msp-representation-entry>.msp-control-group-header>.msp-icon,.msp-plugin .msp-representation-entry>.msp-control-group-header>.msp-btn-link{line-height:24px;height:24px}.msp-plugin .msp-control-group-presets-wrapper{position:absolute;right:0;top:0}.msp-plugin .msp-control-group-presets-wrapper .msp-control-group-header{background:transparent}.msp-plugin .msp-control-group-presets-wrapper button{background:transparent!important}.msp-plugin .msp-parameter-matrix input{flex:1 1 auto;min-width:0}.msp-plugin .msp-btn-apply-simple{text-align:left}.msp-plugin .msp-btn-apply-simple .msp-icon{margin-right:10px}.msp-plugin .msp-type-class-Root{border-left-color:#eeece7}.msp-plugin .msp-type-class-Group{border-left-color:#e98b39}.msp-plugin .msp-type-class-Data{border-left-color:#bfc8c9}.msp-plugin .msp-type-class-Object{border-left-color:#54d98c}.msp-plugin .msp-type-class-Representation3D{border-left-color:#4aa3df}.msp-plugin .msp-type-class-Behavior{border-left-color:#b07cc6}.msp-plugin .msp-accent-color-cyan{color:#bfc8c9}.msp-plugin .msp-accent-bg-cyan{background:#bfc8c9}.msp-plugin .msp-transform-header-brand-cyan{border-bottom:1px solid rgb(190.5846153846,200.3076923077,200.9153846154)}.msp-plugin .msp-transform-header-brand-cyan:active,.msp-plugin .msp-transform-header-brand-cyan:focus{border-bottom:1px solid rgb(190.5846153846,200.3076923077,200.9153846154)}.msp-plugin .msp-accent-color-red{color:#ef8b80}.msp-plugin .msp-accent-bg-red{background:#ef8b80}.msp-plugin .msp-transform-header-brand-red{border-bottom:1px solid rgb(239.3835616438,138.5273972603,128.1164383562)}.msp-plugin .msp-transform-header-brand-red:active,.msp-plugin .msp-transform-header-brand-red:focus{border-bottom:1px solid rgb(239.3835616438,138.5273972603,128.1164383562)}.msp-plugin .msp-accent-color-gray{color:#46637f}.msp-plugin .msp-accent-bg-gray{background:#46637f}.msp-plugin .msp-transform-header-brand-gray{border-bottom:1px solid rgb(70.1643835616,98.5,126.8356164384)}.msp-plugin .msp-transform-header-brand-gray:active,.msp-plugin .msp-transform-header-brand-gray:focus{border-bottom:1px solid rgb(70.1643835616,98.5,126.8356164384)}.msp-plugin .msp-accent-color-green{color:#54d98c}.msp-plugin .msp-accent-bg-green{background:#54d98c}.msp-plugin .msp-transform-header-brand-green{border-bottom:1px solid rgb(84.456,216.544,140.468)}.msp-plugin .msp-transform-header-brand-green:active,.msp-plugin .msp-transform-header-brand-green:focus{border-bottom:1px solid rgb(84.456,216.544,140.468)}.msp-plugin .msp-accent-color-purple{color:#b07cc6}.msp-plugin .msp-accent-bg-purple{background:#b07cc6}.msp-plugin .msp-transform-header-brand-purple{border-bottom:1px solid rgb(176.3389121339,124.4225941423,197.5774058577)}.msp-plugin .msp-transform-header-brand-purple:active,.msp-plugin .msp-transform-header-brand-purple:focus{border-bottom:1px solid rgb(176.3389121339,124.4225941423,197.5774058577)}.msp-plugin .msp-accent-color-blue{color:#4aa3df}.msp-plugin .msp-accent-bg-blue{background:#4aa3df}.msp-plugin .msp-transform-header-brand-blue{border-bottom:1px solid rgb(73.6589958159,162.989539749,222.8410041841)}.msp-plugin .msp-transform-header-brand-blue:active,.msp-plugin .msp-transform-header-brand-blue:focus{border-bottom:1px solid rgb(73.6589958159,162.989539749,222.8410041841)}.msp-plugin .msp-accent-color-orange{color:#e98b39}.msp-plugin .msp-accent-bg-orange{background:#e98b39}.msp-plugin .msp-transform-header-brand-orange{border-bottom:1px solid rgb(232.5914634146,139.3719512195,56.9085365854)}.msp-plugin .msp-transform-header-brand-orange:active,.msp-plugin .msp-transform-header-brand-orange:focus{border-bottom:1px solid rgb(232.5914634146,139.3719512195,56.9085365854)}.msp-plugin .msp-volume-channel-inline-controls>:first-child{position:absolute;left:0;top:0;height:32px;right:32px}.msp-plugin .msp-volume-channel-inline-controls .msp-slider>div:first-child{right:42px}.msp-plugin .msp-volume-channel-inline-controls .msp-slider>div:last-child{width:30px}.msp-plugin .msp-volume-channel-inline-controls>button{position:absolute;right:0;width:32px;top:0;padding:0}.msp-plugin .msp-volume-channel-inline-controls>button .msp-material-icon{margin-right:0}.msp-plugin .msp-list-unstyled{padding-left:0;list-style:none}.msp-plugin .msp-drag-drop-overlay{border:12px dashed #332b1f;background:#0000005c;display:flex;align-items:center;justify-content:center;position:absolute;inset:0;font-size:48px;font-weight:700}.msp-plugin .msp-task-state{line-height:32px}.msp-plugin .msp-task-state>span{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default}.msp-plugin .msp-overlay-tasks{position:absolute;display:flex;inset:0;height:100%;width:100%;z-index:1000;justify-content:center;align-items:center;background:#00000040}.msp-plugin .msp-overlay-tasks .msp-task-state>div{height:32px;margin-top:1px;position:relative;width:100%;background:#eeece7}.msp-plugin .msp-overlay-tasks .msp-task-state>div>div{height:32px;line-height:32px;display:inline-block;padding:0 10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;white-space:nowrap;background:#eeece7;position:absolute}.msp-plugin .msp-overlay-tasks .msp-task-state>div>button{display:inline-block;margin-top:-3px}.msp-plugin .msp-background-tasks{position:absolute;left:0;bottom:0;z-index:1000}.msp-plugin .msp-background-tasks .msp-task-state>div{height:32px;margin-top:1px;position:relative;width:100%;background:#eeece7}.msp-plugin .msp-background-tasks .msp-task-state>div>div{height:32px;line-height:32px;display:inline-block;padding:0 10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;white-space:nowrap;background:#eeece7;position:absolute}.msp-plugin .msp-background-tasks .msp-task-state>div>button{display:inline-block;margin-top:-3px}.msp-plugin .msp-viewport{position:absolute;inset:0;background:#eeece7}.msp-plugin .msp-viewport .msp-btn-link{background:#0003}.msp-plugin .msp-viewport-expanded{position:fixed;z-index:1000}.msp-plugin .msp-viewport-controls{position:absolute;right:10px;top:10px;width:32px}.msp-plugin .msp-viewport-controls-buttons{text-align:right;position:relative}.msp-plugin .msp-viewport-controls-buttons>div{position:relative;margin-bottom:4px}.msp-plugin .msp-viewport-controls-buttons button{padding:0;text-align:center;width:32px;position:relative}.msp-plugin .msp-viewport-controls-buttons .msp-btn-link-toggle-off{color:#9c835f}.msp-plugin .msp-viewport-controls-buttons .msp-btn-link:hover{color:#ae5d04}.msp-plugin .msp-semi-transparent-background{background:#eeece7;opacity:.5;position:absolute;top:0;left:0;width:100%;height:100%}.msp-plugin .msp-hover-box-wrapper{position:relative}.msp-plugin .msp-hover-box-wrapper .msp-hover-box-body{visibility:hidden;position:absolute;right:36px;top:0;width:100px;background-color:#eeece7}.msp-plugin .msp-hover-box-wrapper .msp-hover-box-spacer{visibility:hidden;position:absolute;right:32px;top:0;width:4px;height:32px}.msp-plugin .msp-hover-box-wrapper:hover .msp-hover-box-body,.msp-plugin .msp-hover-box-wrapper:hover .msp-hover-box-spacer{visibility:visible}.msp-plugin .msp-viewport-controls-panel{width:290px;top:0;right:36px;position:absolute;background:#e0ddd4}.msp-plugin .msp-viewport-controls-panel .msp-control-group-wrapper:first-child{padding-top:0}.msp-plugin .msp-viewport-controls-panel .msp-viewport-controls-panel-controls{overflow-y:auto;max-height:400px}.msp-plugin .msp-highlight-toast-wrapper{position:absolute;right:10px;bottom:10px;max-width:95%;z-index:10000;pointer-events:none}.msp-plugin .msp-highlight-toast-wrapper .msp-toast-container{pointer-events:initial}.msp-plugin .msp-highlight-info{color:#ae5d04;padding:3px 10px;background:#eeece7;opacity:90%;max-width:400px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default}.msp-plugin .msp-highlight-markdown-row{padding-left:10px}.msp-plugin .msp-highlight-simple-row{text-align:right}.msp-plugin .msp-highlight-info-hr{margin-inline:0px;margin-block:3px;border:none;height:1px;background-color:#ae5d04}.msp-plugin .msp-highlight-info-additional{font-size:85%;display:inline-block;color:#fa911e}.msp-plugin .msp-snapshot-description-wrapper{background:#eeece780;position:absolute;left:0;top:42px;padding:6.6px 10px;max-height:224px;overflow:hidden;overflow-y:auto;width:max-content;max-width:400px}.msp-plugin .msp-snapshot-description-wrapper a{text-decoration:underline;cursor:pointer;color:#332b1f}.msp-plugin .msp-snapshot-description-wrapper ul,.msp-plugin .msp-snapshot-description-wrapper ol{padding-left:14px}.msp-plugin .msp-sequence{position:absolute;inset:0;background:#eeece7}.msp-plugin .msp-sequence-select{position:relative;height:24px;width:100%;margin-bottom:1px;background:#e0ddd4;text-align:left}.msp-plugin .msp-sequence-select>span{display:inline-block;line-height:24px;padding:0 10px;font-size:85%;font-weight:700;cursor:default}.msp-plugin .msp-sequence-select>select{display:inline-block;max-width:120px;width:auto;text-overflow:ellipsis;font-size:85%;height:24px;line-height:24px;background-size:6px 8px;background-color:#e0ddd4}.msp-plugin .msp-sequence-wrapper{word-break:break-word;padding:10px 10px 3px;user-select:none}.msp-plugin .msp-sequence-wrapper-non-empty{font-size:85%;line-height:180%;font-family:Courier New,monospace;background:#f3f2ee;width:100%;overflow-y:auto;overflow-x:hidden;position:absolute;inset:25px 0 0}.msp-plugin .msp-sequence-chain-label{margin-left:10px;margin-top:10px;user-select:none;color:#ae5d04;font-size:90%;line-height:90%;padding-left:.2em}.msp-plugin .msp-sequence-wrapper span{cursor:pointer}.msp-plugin .msp-sequence-wrapper .msp-sequence-residue-long{margin:0 .2em}.msp-plugin .msp-sequence-wrapper .msp-sequence-residue-long-begin{margin:0 .2em 0 0}.msp-plugin .msp-sequence-wrapper .msp-sequence-residue-focused{font-weight:700;text-decoration:underline}.msp-plugin .msp-sequence-wrapper .msp-sequence-label{color:#ae5d04;font-size:90%;line-height:90%;padding-bottom:1em;padding-left:.2em}.msp-plugin .msp-sequence-wrapper .msp-sequence-number{color:#ae5d04;word-break:keep-all;cursor:default;position:relative;top:-1.1em;left:3.1em;padding:0;margin-left:-3em;font-size:80%;pointer-events:none}.msp-plugin .msp-sequence-wrapper .msp-sequence-number-long{left:3.3em}.msp-plugin .msp-sequence-wrapper .msp-sequence-number-long-negative{left:2.7em}.msp-plugin .msp-sequence-wrapper .msp-sequence-number-negative{left:2.5em}.msp-plugin .msp-sequence-wrapper .msp-sequence-present{color:#332b1f}.msp-plugin .msp-sequence-wrapper .msp-sequence-missing{color:#b4a184;cursor:default}.msp-plugin .msp-transformer .msp-entity-badge{position:absolute;top:0;right:0;height:32px;line-height:32px;width:32px}.msp-plugin .msp-layout-right,.msp-plugin .msp-layout-left{background:#e0ddd4}.msp-plugin .msp-transformer-wrapper{position:relative}.msp-plugin .msp-transformer-wrapper .msp-entity-badge{left:0;top:0}.msp-plugin .msp-transformer-wrapper:first-child .msp-panel-description-content{top:33px}.msp-plugin .msp-transformer-wrapper:not(:first-child) .msp-panel-description-content{bottom:33px}.msp-plugin .msp-transform-wrapper{margin-bottom:10px}.msp-plugin .msp-transform-wrapper-collapsed,.msp-plugin .msp-transform-update-wrapper,.msp-plugin .msp-transform-update-wrapper-collapsed{margin-bottom:1px}.msp-plugin .msp-transform-update-wrapper>.msp-transform-header>button,.msp-plugin .msp-transform-update-wrapper-collapsed>.msp-transform-header>button{text-align:left;padding-left:32px;line-height:24px;background:#e9e6e0}.msp-plugin .msp-transform-wrapper>.msp-transform-header>button{text-align:left;background:#eeece7;font-weight:700;padding-right:5px}.msp-plugin .msp-transform-header{position:relative}.msp-plugin .msp-transform-header>button>small{font-weight:400;float:right}.msp-plugin .msp-transform-header>button>span:first-child{margin-right:10px}.msp-plugin .msp-transform-header>button:hover{color:#63533c}.msp-plugin .msp-transform-header-brand{margin-bottom:-1px}.msp-plugin .msp-transform-header-brand svg{fill:#332b1f;stroke:#332b1f}.msp-plugin .msp-transform-default-params{background:#eeece7;position:absolute;left:0;top:0;width:32px;padding:0}.msp-plugin .msp-transform-default-params:hover{background:#fff}.msp-plugin .msp-transform-apply-wrap{position:relative;margin-top:1px;width:100%;height:32px}.msp-plugin .msp-transform-refresh{width:87px;margin-left:33px;background:#eeece7;text-align:right}.msp-plugin .msp-transform-apply{display:block;position:absolute;left:120px;right:0;top:0}.msp-plugin .msp-transform-apply-wider{margin-left:33px}.msp-plugin .msp-data-beh{margin:10px 0!important}.msp-plugin .msp-toast-container{position:relative;z-index:1001}.msp-plugin .msp-toast-container .msp-toast-entry{color:#332b1f;background:#e0ddd4;position:relative;float:right;min-height:32px;margin-top:10px;border:1px solid rgb(206.2804878049,200.5487804878,186.2195121951);display:table}.msp-plugin .msp-toast-container .msp-toast-entry .msp-toast-title{height:100%;line-height:32px;padding:0 10px;background:#eeece7;font-weight:700;display:table-cell;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;font-weight:light;cursor:pointer}.msp-plugin .msp-toast-container .msp-toast-entry .msp-toast-message{padding:3px 42px 3px 10px;display:table-cell}.msp-plugin .msp-toast-container .msp-toast-entry .msp-toast-message a{text-decoration:none;color:#974102;font-weight:700}.msp-plugin .msp-toast-container .msp-toast-entry .msp-toast-message a:hover{text-decoration:underline;color:#fc6c03}.msp-plugin .msp-toast-container .msp-toast-entry .msp-toast-message a:active,.msp-plugin .msp-toast-container .msp-toast-entry .msp-toast-message a:focus{color:#974102;outline-offset:0;outline:none}.msp-plugin .msp-toast-container .msp-toast-entry .msp-toast-hide{position:absolute;width:42px;right:0;top:0;bottom:0}.msp-plugin .msp-toast-container .msp-toast-entry .msp-toast-hide .msp-btn-icon{background:transparent;position:absolute;inset:1px 0 0;width:100%;text-align:right;padding-right:5px}.msp-plugin .msp-logo{display:block;position:absolute;bottom:10px;right:10px;height:32px;width:100px;background-repeat:no-repeat;background-position:bottom right;background-size:auto;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAgCAYAAABn7+QVAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACHDwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKL2lDQ1BJQ0MgUHJvZmlsZQAASMedlndUVNcWh8+9d3qhzTACUobeu8AA0nuTXkVhmBlgKAMOMzSxIaICEUVEmiJIUMSA0VAkVkSxEBRUsAckCCgxGEVULG9G1ouurLz38vL746xv7bP3ufvsvc9aFwCSpy+XlwZLAZDKE/CDPJzpEZFRdOwAgAEeYIApAExWRrpfsHsIEMnLzYWeIXICXwQB8HpYvAJw09AzgE4H/5+kWel8geiYABGbszkZLBEXiDglS5Auts+KmBqXLGYYJWa+KEERy4k5YZENPvsssqOY2ak8tojFOaezU9li7hXxtkwhR8SIr4gLM7mcLBHfErFGijCVK+I34thUDjMDABRJbBdwWIkiNhExiR8S5CLi5QDgSAlfcdxXLOBkC8SXcklLz+FzExIFdB2WLt3U2ppB9+RkpXAEAsMAJiuZyWfTXdJS05m8HAAW7/xZMuLa0kVFtjS1trQ0NDMy/apQ/3Xzb0rc20V6Gfi5ZxCt/4vtr/zSGgBgzIlqs/OLLa4KgM4tAMjd+2LTOACApKhvHde/ug9NPC+JAkG6jbFxVlaWEZfDMhIX9A/9T4e/oa++ZyQ+7o/y0F058UxhioAurhsrLSVNyKdnpDNZHLrhn4f4Hwf+dR4GQZx4Dp/DE0WEiaaMy0sQtZvH5gq4aTw6l/efmvgPw/6kxbkWidL4EVBjjIDUdSpAfu0HKAoRINH7xV3/o2+++DAgfnnhKpOLc//vN/1nwaXiJYOb8DnOJSiEzhLyMxf3xM8SoAEBSAIqkAfKQB3oAENgBqyALXAEbsAb+IMQEAlWAxZIBKmAD7JAHtgECkEx2An2gGpQBxpBM2gFx0EnOAXOg0vgGrgBboP7YBRMgGdgFrwGCxAEYSEyRIHkIRVIE9KHzCAGZA+5Qb5QEBQJxUIJEA8SQnnQZqgYKoOqoXqoGfoeOgmdh65Ag9BdaAyahn6H3sEITIKpsBKsBRvDDNgJ9oFD4FVwArwGzoUL4B1wJdwAH4U74PPwNfg2PAo/g+cQgBARGqKKGCIMxAXxR6KQeISPrEeKkAqkAWlFupE+5CYyiswgb1EYFAVFRxmibFGeqFAUC7UGtR5VgqpGHUZ1oHpRN1FjqFnURzQZrYjWR9ugvdAR6AR0FroQXYFuQrejL6JvoyfQrzEYDA2jjbHCeGIiMUmYtZgSzD5MG+YcZhAzjpnDYrHyWH2sHdYfy8QKsIXYKuxR7FnsEHYC+wZHxKngzHDuuCgcD5ePq8AdwZ3BDeEmcQt4Kbwm3gbvj2fjc/Cl+EZ8N/46fgK/QJAmaBPsCCGEJMImQiWhlXCR8IDwkkgkqhGtiYFELnEjsZJ4jHiZOEZ8S5Ih6ZFcSNEkIWkH6RDpHOku6SWZTNYiO5KjyALyDnIz+QL5EfmNBEXCSMJLgi2xQaJGokNiSOK5JF5SU9JJcrVkrmSF5AnJ65IzUngpLSkXKabUeqkaqZNSI1Jz0hRpU2l/6VTpEukj0lekp2SwMloybjJsmQKZgzIXZMYpCEWd4kJhUTZTGikXKRNUDFWb6kVNohZTv6MOUGdlZWSXyYbJZsvWyJ6WHaUhNC2aFy2FVko7ThumvVuitMRpCWfJ9iWtS4aWzMstlXOU48gVybXJ3ZZ7J0+Xd5NPlt8l3yn/UAGloKcQqJClsF/hosLMUupS26WspUVLjy+9pwgr6ikGKa5VPKjYrzinpKzkoZSuVKV0QWlGmabsqJykXK58RnlahaJir8JVKVc5q/KULkt3oqfQK+m99FlVRVVPVaFqveqA6oKatlqoWr5am9pDdYI6Qz1evVy9R31WQ0XDTyNPo0XjniZek6GZqLlXs09zXktbK1xrq1an1pS2nLaXdq52i/YDHbKOg84anQadW7oYXYZusu4+3Rt6sJ6FXqJejd51fVjfUp+rv09/0ABtYG3AM2gwGDEkGToZZhq2GI4Z0Yx8jfKNOo2eG2sYRxnvMu4z/mhiYZJi0mhy31TG1Ns037Tb9HczPTOWWY3ZLXOyubv5BvMu8xfL9Jdxlu1fdseCYuFnsdWix+KDpZUl37LVctpKwyrWqtZqhEFlBDBKGJet0dbO1husT1m/tbG0Edgct/nN1tA22faI7dRy7eWc5Y3Lx+3U7Jh29Xaj9nT7WPsD9qMOqg5MhwaHx47qjmzHJsdJJ12nJKejTs+dTZz5zu3O8y42Lutczrkirh6uRa4DbjJuoW7Vbo/c1dwT3FvcZz0sPNZ6nPNEe/p47vIc8VLyYnk1e816W3mv8+71IfkE+1T7PPbV8+X7dvvBft5+u/0erNBcwVvR6Q/8vfx3+z8M0A5YE/BjICYwILAm8EmQaVBeUF8wJTgm+Ejw6xDnkNKQ+6E6ocLQnjDJsOiw5rD5cNfwsvDRCOOIdRHXIhUiuZFdUdiosKimqLmVbiv3rJyItogujB5epb0qe9WV1QqrU1afjpGMYcaciEXHhsceiX3P9Gc2MOfivOJq42ZZLqy9rGdsR3Y5e5pjxynjTMbbxZfFTyXYJexOmE50SKxInOG6cKu5L5I8k+qS5pP9kw8lf0oJT2lLxaXGpp7kyfCSeb1pymnZaYPp+umF6aNrbNbsWTPL9+E3ZUAZqzK6BFTRz1S/UEe4RTiWaZ9Zk/kmKyzrRLZ0Ni+7P0cvZ3vOZK577rdrUWtZa3vyVPM25Y2tc1pXvx5aH7e+Z4P6hoINExs9Nh7eRNiUvOmnfJP8svxXm8M3dxcoFWwsGN/isaWlUKKQXziy1XZr3TbUNu62ge3m26u2fyxiF10tNimuKH5fwiq5+o3pN5XffNoRv2Og1LJ0/07MTt7O4V0Ouw6XSZfllo3v9tvdUU4vLyp/tSdmz5WKZRV1ewl7hXtHK30ru6o0qnZWva9OrL5d41zTVqtYu712fh9739B+x/2tdUp1xXXvDnAP3Kn3qO9o0GqoOIg5mHnwSWNYY9+3jG+bmxSaips+HOIdGj0cdLi32aq5+YjikdIWuEXYMn00+uiN71y/62o1bK1vo7UVHwPHhMeefh/7/fBxn+M9JxgnWn/Q/KG2ndJe1AF15HTMdiZ2jnZFdg2e9D7Z023b3f6j0Y+HTqmeqjkte7r0DOFMwZlPZ3PPzp1LPzdzPuH8eE9Mz/0LERdu9Qb2Dlz0uXj5kvulC31OfWcv210+dcXmysmrjKud1yyvdfRb9Lf/ZPFT+4DlQMd1q+tdN6xvdA8uHzwz5DB0/qbrzUu3vG5du73i9uBw6PCdkeiR0TvsO1N3U+6+uJd5b+H+xgfoB0UPpR5WPFJ81PCz7s9to5ajp8dcx/ofBz++P84af/ZLxi/vJwqekJ9UTKpMNk+ZTZ2adp++8XTl04ln6c8WZgp/lf619rnO8x9+c/ytfzZiduIF/8Wn30teyr889GrZq565gLlHr1NfL8wXvZF/c/gt423fu/B3kwtZ77HvKz/ofuj+6PPxwafUT5/+BQOY8/xvJtwPAAAACXBIWXMAAC4iAAAuIgGq4t2SAAANMElEQVRoQ92aB1xURx7H/69sY5eOFBELCipESsSC0RCMJRZMrICHGiMmGjWaqDk7YEsuGok5TS6xi56KGtsFG6jBiAYLKhqVc8GGBZG+fd97N+/twNJWFksS7/v5DG/nN/OG/fze/838Z4CA/wMCE9d9W8oQ3mUMBSojBTqWAuBQAweHIC56lanXHw8xJixM6qhQNcX1KuQykluyKzMPVxvF5XUh3hIpgFSiQz8AJBItSKU6sCsX55P9byLxxRKwYl3W5O6dg5o62IMRmcpyBBz87wNYcyH3R4iL+gh3+8MhHaTqYJKUKO2dPYTigIqza1MlLZLnzh3arQ/uZzVn14YOIGRyJWXrqgR5U6VI1kRJS92VBEEry+wrAnC3F04XL3cY4OMF7/p6weC2zSDQzQG3/IlM7dspdPmU0VxtLqYf5haM6HYOBYLVUwcXByQy92JxXioexUzFhT5cySn3TrjrC4WP3EsPHuPfZGJVZg4HCdt/wF0aT8LWUHT/jTpl4fZU3KNBSHytQ0D33uDR0qfjoqg3hmOpQU65d4u2cW4X6NCyJ1ZeIeKSFRC3p1q4kzYdmzr6Zk98p6rsj+rhi0KoFe5gIm53M/ypDhbNJQgC3kbTFUGSi+LiwmgsWyQ5zk9McESCZ8gEVHvF1kneWJI5CJT2SHWDbUQ0vNbEvqr4OClwCyZ+RzSQ+psomqOwUgOL5vL4BIdCi/aBvtJb3AdYsoirs0usnWfH1vbNOmPlFWHmWlve2DFB3t0nhvh0qm2wRRZuG+ksFyUlDe4qcbYRJ0H8v6NxSxVPNZcnPPJDIAlY8PWnXWVYqsPhZb3lDAfzW3T50xbmZ+MfyFhbRcr7yNj1EZ1gdb+O8DFvMKk7it4+ywYjY11k0s1po8KpmA4tITUmnHaWS5HBKJKr0aC5zXw6QJvgNzyhXDIZS3UgCN3UJq3fdLd188PKs3H8+Bjpvn2x/jv2TwnbsOezt3/YPavTss3TXXHzi4U3Vic/+H5gq+7rkLEkmgb5yWwVb3CnNiFAcD+aOtaGaMobmzrqLaoyIwlC11RkNB/JvPGCiGjQXJ43h8QCSRGzEqeG1Xmah77u48QCPdM7NBYrjSPveJg069i7H2UcjUpndWSZrZ3bFRfHlic8nL1TnezcM2Vyh0dLtsbnzdu8JHHW5qVt8G3Pj9qOT4RYluOE/UYllQZPCvFxMik1cbGRSKsbWwlKUPhxhDGxZJ25Ls28oX2X3k60HmZiqQqDTj+rqX8fB7lTC6xYT2569zA9Jb5m7xz8r3aB03uE9fpOFP7WYujZ/TPo22MSDOs1FT4ePBfG9ZvQsod/12kUJf190prli4YnJ6Mt2HOSMKICGLL/5su3Tn6wPxMYZE4lvMH/RAZP6NjaJGBsJSJIi3mrTg6d9bAYem05YSxS6WJgQdR2LFtnLk9oxFigRaKpq2aEuWMJDizu6UlQosltuo3FivU8zgyOkEhkRzz941u2CogDxyYhgMzDrWb4rMXN0Q36vN4TZr43XuTt0WyeoiR/MwqV509JqgzOSx+77zcw8nGM4UMx2r+5qYJpqpByHVztcc3E+QdFXJWx8dE78MgCDaZYldi5eIB/jwj577/+NB9VJ/GajmHj2nYZKpPZNW5aVJ9v2ULDwlaXdsvFYlvzpo1l9PD4yXUoKStAY3MgFjuAexNvcFA4C+32NgqY3HcofHFg18ioH1adRSHyjdBgCQJaQ/y2SFyzAIMKuSkp+1YAepIOGwZ1Bgo9UGu4gCK2z9ZfoEit3yMI1X8XxZwh+B2al2/7jOnfbsKqGaNeB7RYgmsAmvJi2LHkbwaC0baXyElKKpVe7f/JVlpsY4978Abp0PxsvqcSVVZfMGoud3Z44+HZ8vOeG2m3GWOkntNwK8CTgky4eiWJK9fqflUZJRe0jFirZmgvDSPu29or2PmdzhEgpkVC3/ziIpiRvL1ETUua74+NLed3aEnRg4IC3F2Edp6DNx/AmqxcXLMeFK0w3M8L1yxToTfCtCNZUKTRY8VMZv4TyC/VxFiM3OM7N0BudiaMW/g9VgBkto7QIWyYKDstaSEYGdo3dEQNY/n5/EbKJHBq2QPcOozBWk24K00UGgM3QuI2GisA5cVXIOdyYqHeKBo0cEDSaSwLLNu8TJ5968o6LQORI3oMETRPRycI9GrhkHH7Di/UjQpEvzYeQnlZKMQ0rB1Y/25+xO4M2Fl61/KcazTo4W5ONuRcOIUVEx3CI0Fqax8lljsO9w2tuTMuyksHVcHvwKHX2xIcU9aFsgmQEbR5MX50aztQYJzWu19NY3lmjp6pekIrxmbfvv6woLQQqwCBzZujn0SYqfbX5KkLGprVL51IXgMcW5VdgFgqh4DwkaR/WAxBi837Co5j4Hbmj3wucglL9cJy4ENKzRkVf5+q9Bqnpol9WKpDYuR0DfoKabcL8rGCotfBEQ0GLy41ewk81VyWIfYV3lNmXj2NNizVaNvtPfBBc2B1Hl07BKqi2xkkyf0HSxYg0D7eFn9G5rJ69EAYfXj4zgos1QtaYoq16G2qRCYWA0dw5oFqcb9cAyfvPG50ufq4FI/wdPg5t777+VKoNh1ZPzVbIAiWIwl69qm9G9Lad+kJFF5QKFosXCthjXrI/W0jsCw5G62+Tz0D5p8mU3sxrp7FWwClZKYcHWMawvKqvuf6PZh86HwBusW6VY0g/FzlEru0mHAsPB05mnN3X7sHKzNz+K91Df2o+VQIorDBVGz2lpPHvhobdvRy+v7ewT2HYrUmdy/tBU3po5Ren55MP7e+a6MP2F8aHLHXqr9ExO8Y46oQr08bFS6cflkD/1gT+wYLH1aeydGCSD8Q5ox5Ymo1YdUmgqTI2ZkpWziDToMVM0adCpRntrAERc/B0qvFImSsrWAsWdvYx/j1rkRtYNBGo+bbk9gnGKZ19Q0GgzgVlm4yJeQYq8ydsfb4eW158a6LaTuxYkaZuQN0mrLtb39y/KkL2V+Shdved7URrz9Wj7Fn7xfBuAOZuGbiTqkKRu09Y8HgtkFg5A3+qcpgq8zloUT0vItpyUZthXlq0amKQfnbTgNw5AIsvTos3o2SYGL10vAA0r8eY/mdV4nWgBUz26/eqWMwz7JeQeDrbIcM1idgyXpzp6xOyzHoVBuyUrdiBeD6ySQw6DVr+n9+XImlBmE5ggHOiGs8wleg0G7e8urEQwBNEuavywjpYY2BGse8oQ9QHjgM7bK0/ApfiWDslhOGEq1+NZZqwnH526/cOVbdYP7K13OelKcBY/O5ICKsNpeHFJMJ1zL2aVQlBaAqfgDKswdUKIFYhJutAqVqDznDI1xDdbRVFkkc6YzDQ9piqX448HNSmE+jitVq/mkU4OqzERd9sEJnGNJ/W7pgcGalsTp9FDLRdF5QGwJ0wNpEoAhOi0GGao0M8Fe+DkzpIEgYpMY9G2fuxMRj+axBvyrryEbITtsIjNGwcuDnvzzEzVahJ+gsVnURfTK/Vg6uYUDSNH8gVG/0Ltqy6E2FVNajjYf5WFNZ8AhQcvb88zxvsIEZzBvcV4hYYyQsiP4Jt9YPbyAycgcytM2qn4G/moz9qMpYnkaZK0CIv8y9cKQk72JqkYqAZVi1GmlAxXVGX3DdWHYGKwDurSLBxrb1yLRDo/ftTxkflpQyxW5lyhTJ97vm+azYNneWiCJ+HtxtICnCeTZ/wH0m9yaQHHNAEJ6X+ZGHeINLtLpIiIusP2JrwxspJyLyyzVL+WttY3kabe74xCNFBMd+xXDcl2MTfinBcqPggP5Kfe+bqimTomTwWkg8tPaNjLC3bX5CxtKljjqxViGzyfFrFfTFB/3GK3w9zTvd49eyobCsNGPvlCl1ziKeGWQwxI2sYWx2QamwsFWWcQfO4hbM9EgNLIiaK1zrofGRy8PQ34o1mmf+Hyz5/nub9Kprh4qVS4WzBR6SFEOLVv3hze7zYOiAFTDqveUQ03829O0yDJrYm8+Lr9+/AztOn1SxHPNy/xoqklxEi9qAo7kPq0rGvcIBaOIah3s0yDOZO/rro6rIxDP1Pi1rIBKABb3tiIqCw0fzL38GmvKbuMUyOoMODmf9Ct8d3l3CsfpByR9Pu4KbXg5zhjxBUZlSp8yPPoF7NIhwWG5jb5/h16kbltBrShLw+K4SCvOVCYt2no7HslWg7e9iW5fWcxVNvIGmGVMRGYEoO4zmykLhsBx3heTk4VSgW+lENSObQ8n9POSOHUEi90L97dHOlQKtXg9FFSVwu+A+XLmbx5Tp2F1qhvr7d7Ezb+MhBPjD8tdbNA+SSGSgYwmUGpFwo7AczuYX/an/iEdM6B3qKqbZAbguIKJQEZEosYSLi3efzsKyVZxd3/V1Cc0FisQMGsMAUqkBXfXoqgXChjlgF/LAfCiLOXfuQ5G2tDRcY5CGaRhxO41R4qJlRJSaEZVrjOLbapY6Z9BASkJswn18Sw2CVqx/t5ghncoZElQsBTqm8u+X3A0UaRm48gcD8D/XZskfp8IFSwAAAABJRU5ErkJggg==)}.msp-plugin .msp-plugin-content{color:#332b1f}.msp-plugin .msp-plugin-init-error{white-space:pre;margin:10px}.msp-plugin .msp-svg-text{fill:#332b1f}.msp-plugin{background:#eeece7}
|
|
12
12
|
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
|
|
13
13
|
/*# sourceMappingURL=molstar.css.map */
|
|
14
|
-
`});function Ki({showControls:e,model:t}){let o=(0,yt.useRef)(null),n=(0,yt.useRef)(null),[r,i]=(0,yt.useState)(),[s,l]=(0,yt.useState)(!0);return(0,yt.useEffect)(()=>{let a={cancelled:!1};return(async()=>{try{if(!o.current)return;let{GeometryExport:u,MAQualityAssessment:m,PluginConfig:d,PluginSpec:c,DefaultPluginUISpec:y,createPluginUI:w,renderReact18:h}=await ge(),b=document.createElement("div");o.current.append(b),a.host=b;let f=y(),g=await w({target:b,render:h,spec:{...y(),behaviors:[...f.behaviors,c.Behavior(u),c.Behavior(m)],layout:{initial:{controlsDisplay:"reactive",showControls:e}},config:[[d.Viewport.ShowExpand,!1]]}});await g.initialized,a.cancelled?(g.dispose(),b.remove()):(a.plugin=g,n.current=g,t?.setMolstarPluginContext(g))}catch(u){console.error(u),i(u)}finally{l(!1)}})(),()=>{a.cancelled=!0,n.current=null,t&&(0,km.isAlive)(t)&&t.setMolstarPluginContext(void 0),a.plugin?.dispose(),a.host?.remove()}},[]),(0,yt.useEffect)(()=>{let a={cancelled:!1};return(async()=>{let u=n.current;if(u){let{PluginCommands:m}=await ge();a.cancelled||await m.Layout.Update(u,{state:{showControls:e}})}})(),()=>{a.cancelled=!0}},[e]),{parentRef:o,error:r,loading:s}}var yt,km,Cm=S(()=>{"use strict";yt=p(x()),km=p(zo());Ht()});var Im={};vt(Im,{default:()=>Pg});var at,$t,Yi,Mm,vg,Tg,Pg,Fm=S(()=>{"use strict";at=p(x()),$t=p(Oe()),Yi=p(_());nu();Tm();Am();Cm();Mm=document.createElement("style");Mm.append(Pm);document.head.append(Mm);vg=(0,Yi.observer)(function({model:t}){let{showControls:o}=t,{parentRef:n,error:r,loading:i}=Ki({showControls:o,model:t});return r?at.default.createElement($t.ErrorMessage,{error:r}):at.default.createElement(Tg,{model:t,parentRef:n,loading:i})}),Tg=(0,Yi.observer)(function({model:t,parentRef:o,loading:n}){let{width:r,height:i,error:s,structures:l}=t,a=!n&&l.every(u=>!u.alignmentPending);return at.default.createElement("div",{style:{background:"#ccc"},"data-testid":a?"protein-view-ready":"protein-view-loading"},s?at.default.createElement($t.ErrorMessage,{error:s}):null,n?at.default.createElement($t.LoadingEllipses,{message:"Loading protein viewer"}):at.default.createElement(vm,{model:t}),at.default.createElement("div",{ref:o,style:{position:"relative",width:r,height:i}}),at.default.createElement($t.ResizeHandle,{style:{height:4,background:"grey"},onDrag:u=>t.setHeight(t.height+u)}),at.default.createElement(ou,{model:t}))}),Pg=vg});var Hm={};vt(Hm,{default:()=>nr});var Nm,rr,Vm,Bm,nr,Um=S(()=>{"use strict";Nm=p(an()),rr=p(te()),Vm=p(ln()),Bm=p(pn()),nr=class extends Nm.BaseFeatureDataAdapter{static capabilities=["getFeatures","getRefNames"];feats;async loadDataP(){let{features:t}=JSON.parse(await(0,Vm.openLocation)(this.getConf("location")).readFile("utf8")),o=this.getConf("scoreField");return t.map(({begin:n,end:r,...i},s)=>({...i,uniqueId:`feat-${s}`,start:+n,end:+r+1,score:o==="population_frequency"?i.populationFrequencies?.[0]?.frequency:o==="variant_impact_score"?i.predictions?.[0]?.score:void 0,description:i.descriptions?.map(l=>l.value).join(","),name:[i.mutatedType?`${i.wildType}->${i.mutatedType}`:`${i.wildType}->del`]}))}async loadData(t={}){return this.feats??=this.loadDataP().catch(o=>{throw this.feats=void 0,o}),this.feats}async getRefNames(t={}){return[]}getFeatures(t,o={}){return(0,Bm.ObservableCreate)(async n=>{let{start:r,end:i,refName:s}=t,l=await this.loadData();for(let a of l)(0,rr.doesIntersect2)(a.start,a.end,r,i)&&n.next(new rr.SimpleFeature({...a,refName:s}));n.complete()})}freeResources(){}}});var Cg={};vt(Cg,{default:()=>ir});var zm=p(ns());var Qs=p(x());var ct=p(x()),Zs=p(_());var fs=p(x()),hs=p(te()),bs=p(_());var us=p(x()),ms=p(te()),cs=p(_());var ls=p(tt()),ps=(0,ls.makeStyles)()({highlight:{height:"100%",background:"rgba(255,255,0,0.2)",border:"1px solid rgba(50,50,0,0.2)",position:"absolute",zIndex:99,textAlign:"center",pointerEvents:"none",overflow:"hidden"},thinborder:{border:"1px solid black"}});function Zo(e){return e.views.find(o=>o.type==="ProteinView")}var $m=(0,cs.observer)(function({assemblyName:t,start:o,end:n,refName:r,model:i}){let{cx:s,classes:l}=ps(),{assemblyManager:a}=(0,ms.getSession)(i),{offsetPx:u}=i,d=a.get(t)?.getCanonicalRefName(r)??r,c=i.bpToPx({refName:d,coord:o}),y=i.bpToPx({refName:d,coord:n});if(c&&y){let w=Math.max(Math.abs(y.offsetPx-c.offsetPx),3),h=Math.min(c.offsetPx,y.offsetPx)-u;return us.default.createElement("div",{className:s(l.highlight,w<=3?l.thinborder:void 0),style:{left:h,width:w}})}else return null}),Tt=$m;Ut();var Xm=(0,bs.observer)(function({model:t}){let o=(0,hs.getSession)(t),{views:n,hovered:r}=o;if(Pt(r)&&n.some(i=>i.type==="ProteinView")){let{assemblyNames:i}=t,{coord:s,refName:l}=r.hoverPosition;return fs.default.createElement(Tt,{model:t,start:s-1,end:s,refName:l,assemblyName:i[0]})}return null}),ys=Xm;var ks=p(x()),on=p(te()),Cs=p(_());tn();Ut();ko();var Qm=(0,Cs.observer)(function({model:t}){let o=(0,on.getSession)(t),{hovered:n}=o,{assemblyNames:r,id:i}=t;if(!r[0])return null;let l=Gt.get(i);if(!l||!Pt(n))return null;let{coord:a}=n.hoverPosition,u=new on.SimpleFeature(l.feature),m=oo(u),{g2p:d}=m,c=d[a-1];return c===void 0?null:ks.default.createElement(Tt,{model:t,start:c,end:c+1,refName:l.uniprotId,assemblyName:l.uniprotId})}),Ms=Qm;var Is=p(x()),Fs=p(te()),Ls=p(_());tn();Ut();var ec=(0,Ls.observer)(function({model:t}){let o=(0,Fs.getSession)(t),{hovered:n}=o,{assemblyNames:r,id:i}=t;if(!Pt(n))return null;let{coord:s,refName:l}=n.hoverPosition;if(Gt.getByUniprotId(l,o)?.connectedViewId!==i)return null;let u=r[0];if(!u)return null;let m=Gt.getGenomeHighlightForProteinPosition(l,s-1,o);return m?Is.default.createElement(Tt,{model:t,start:m.start,end:m.end,refName:m.refName,assemblyName:u}):null}),Es=ec;var fr=p(x()),hr=p(_());var nn=p(x()),qs=p(te()),Ds=p(_());var tc=(0,Ds.observer)(function({model:t,field:o}){let n=(0,qs.getSession)(t),{assemblyManager:r}=n,{assemblyNames:i}=t,s=Zo(n),l=i[0];return(l?r.get(l):void 0)&&l?nn.default.createElement(nn.default.Fragment,null,s?.structures.flatMap((u,m)=>u[o].map((d,c)=>nn.default.createElement(Tt,{key:`${d.refName}-${d.start}-${d.end}-${m}-${c}`,start:d.start,end:d.end,refName:d.refName,assemblyName:l,model:t})))):null}),gr=tc;var Ns=(0,hr.observer)(function({model:t}){return fr.default.createElement(gr,{model:t,field:"clickGenomeHighlights"})}),Vs=(0,hr.observer)(function({model:t}){return fr.default.createElement(gr,{model:t,field:"hoverGenomeHighlights"})});var Js=p(x()),Ks=p(te()),ro=p(to()),Ys=p(_());function oc(e){return e.replace(/[-.]/g,"")}function Bs(e,t){return e&&t?[...e].find(([,o])=>oc(o)===t)?.[0]:void 0}ce();var sc=(0,Ys.observer)(function({model:t}){let o=(0,Ks.getSession)(t),{views:n}=o,r=Zo(o),i=r?.connectedMsaViewId,s=i?n.find(l=>l.id===i):void 0;return(0,Js.useEffect)(()=>{if(!r||!s)return;let l=[],a;if(l.push((0,ro.autorun)(()=>{let u=r.primaryStructure?.structureSequences?.[0];a=Bs(s.rowMap,u===void 0?void 0:oe(u))})),s.setMousePos){let{setMousePos:u}=s;l.push((0,ro.autorun)(()=>{let m=r.primaryStructure;if(m){let d=m.structureSeqHoverPos,c=d!==void 0&&a!==void 0&&s.seqPosToVisibleCol?s.seqPosToVisibleCol(a,d):d;u(c)}}))}return l.push((0,ro.autorun)(()=>{let u=s.mouseCol,m=r.primaryStructure;if(m&&!(0,ro.untracked)(()=>!!m.alignmentHoverRange)){let c=u!==void 0&&a!==void 0&&s.visibleColToSeqPos?s.visibleColToSeqPos(a,u):u;m.setHoveredPosition(c===void 0?void 0:{structureSeqPos:c})}})),()=>{l.forEach(u=>{u()})}},[r,s]),null}),$s=sc;var ac=(0,Zs.observer)(function({model:t}){return ct.default.createElement(ct.default.Fragment,null,ct.default.createElement(Ns,{model:t}),ct.default.createElement(Vs,{model:t}),ct.default.createElement(Es,{model:t}),ct.default.createElement(Ms,{model:t}),ct.default.createElement(ys,{model:t}),ct.default.createElement($s,{model:t}))}),Xs=ac;function yr(e){e.addToExtensionPoint("LinearGenomeView-TracksContainerComponent",(t,{model:o})=>[...t,Qs.default.createElement(Xs,{key:"highlight_protein_viewer_protein3d",model:o})])}var ca=p(sn());var oa=p(io());var lc=(0,oa.ConfigurationSchema)("AlphaFoldConfidenceAdapter",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz",locationType:"UriLocation"}}},{explicitlyTyped:!0}),na=lc;function wr(e){e.addAdapterType(()=>new ca.default({name:"AlphaFoldConfidenceAdapter",displayName:"AlphaFoldConfidence adapter",configSchema:na,getAdapterClass:()=>Promise.resolve().then(()=>(ma(),ua)).then(t=>t.default)}))}var Sa=p(sn());var da=p(io());var pc=(0,da.ConfigurationSchema)("AlphaMissensePathogenicityAdapter",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz",locationType:"UriLocation"}}},{explicitlyTyped:!0}),ga=pc;function xr(e){e.addAdapterType(()=>new Sa.default({name:"AlphaMissensePathogenicityAdapter",displayName:"AlphaMissensePathogenicity adapter",configSchema:ga,getAdapterClass:()=>Promise.resolve().then(()=>(xa(),wa)).then(t=>t.default)}))}var Jn=p(te());Ct();var Aa=p(Mt(),1),ka=(0,ke.createSvgIcon)((0,Aa.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z"}),"Add");var he=p(x()),bp=p(Oe()),Rn=p(te()),vo=p(I());var J=p(x()),zn=p(Oe()),Dt=p(I()),_l=p(_()),Rl=p(tt());var Le=p(x()),Io=p(I());var so=p(x()),qa=p(I());var zt=p(x()),Fa=p(te()),La=p(I()),Ea=p(tt());var Sr=p(x()),dn=p(I()),Ia=p(tt()),uc=(0,Ia.makeStyles)()({block:{display:"block"}});function vr({checked:e,disabled:t,label:o,onChange:n}){let{classes:r}=uc();return Sr.default.createElement(dn.FormControlLabel,{disabled:t,className:r.block,control:Sr.default.createElement(dn.Checkbox,{checked:e,onChange:n}),label:o})}ce();var mc=(0,Ea.makeStyles)()({textAreaFont:{fontFamily:"Courier New",whiteSpace:"pre"}});function Tr({structureName:e,structureSequence:t,isoformSequences:o}){let{classes:n}=mc(),[r,i]=(0,zt.useState)(!1),s=Object.fromEntries(Object.entries(o).map(([m,d])=>[m,{...d,seq:oe(d.seq)}])),l=Object.entries(s).find(([m,d])=>t===d.seq),a=`${e} (structure residues)`,u=(0,Fa.max)([a.length,...Object.entries(s).map(([m,d])=>Ae(d.feature).length)]);return zt.default.createElement(zt.default.Fragment,null,zt.default.createElement(vr,{onChange:m=>{i(m.target.checked)},label:"Show in FASTA format?",checked:r}),zt.default.createElement(La.TextField,{variant:"outlined",multiline:!0,minRows:5,maxRows:10,fullWidth:!0,value:r?[`>${a}
|
|
15
|
-
${t}`,...Object.values(s).map(({feature:m,seq:d})=>`>${
|
|
14
|
+
`});function Ji({showControls:e,model:t}){let o=(0,xt.useRef)(null),n=(0,xt.useRef)(null),[r,i]=(0,xt.useState)(),[s,l]=(0,xt.useState)(!0);return(0,xt.useEffect)(()=>{let a={cancelled:!1};return(async()=>{try{if(!o.current)return;let{GeometryExport:u,MAQualityAssessment:m,PluginConfig:d,PluginSpec:c,DefaultPluginUISpec:b,createPluginUI:w,renderReact18:h}=await qe(),y=document.createElement("div");o.current.append(y),a.host=y;let f=b(),g=await w({target:y,render:h,spec:{...b(),behaviors:[...f.behaviors,c.Behavior(u),c.Behavior(m)],layout:{initial:{controlsDisplay:"reactive",showControls:e}},config:[[d.Viewport.ShowExpand,!1]]}});await g.initialized,a.cancelled?(g.dispose(),y.remove()):(a.plugin=g,n.current=g,t?.setMolstarPluginContext(g))}catch(u){console.error(u),i(u)}finally{l(!1)}})(),()=>{a.cancelled=!0,n.current=null,t&&(0,Tm.isAlive)(t)&&t.setMolstarPluginContext(void 0),a.plugin?.dispose(),a.host?.remove()}},[]),(0,xt.useEffect)(()=>{let a={cancelled:!1};return(async()=>{let u=n.current;if(u){let{PluginCommands:m}=await qe();a.cancelled||await m.Layout.Update(u,{state:{showControls:e}})}})(),()=>{a.cancelled=!0}},[e]),{parentRef:o,error:r,loading:s}}var xt,Tm,Am=S(()=>{"use strict";xt=p(x()),Tm=p(Go());fo()});var km={};At(km,{default:()=>Tg});var at,Kt,Ri,Pm,Sg,vg,Tg,Cm=S(()=>{"use strict";at=p(x()),Kt=p(Oe()),Ri=p(_());eu();xm();vm();Am();Pm=document.createElement("style");Pm.append(Sm);document.head.append(Pm);Sg=(0,Ri.observer)(function({model:t}){let{showControls:o}=t,{parentRef:n,error:r,loading:i}=Ji({showControls:o,model:t});return r?at.default.createElement(Kt.ErrorMessage,{error:r}):at.default.createElement(vg,{model:t,parentRef:n,loading:i})}),vg=(0,Ri.observer)(function({model:t,parentRef:o,loading:n}){let{width:r,height:i,error:s,structures:l}=t,a=!n&&l.every(u=>!u.alignmentPending);return at.default.createElement("div",{style:{background:"#ccc"},"data-testid":a?"protein-view-ready":"protein-view-loading"},s?at.default.createElement(Kt.ErrorMessage,{error:s}):null,n?at.default.createElement(Kt.LoadingEllipses,{message:"Loading protein viewer"}):at.default.createElement(wm,{model:t}),at.default.createElement("div",{ref:o,style:{position:"relative",width:r,height:i}}),at.default.createElement(Kt.ResizeHandle,{style:{height:4,background:"grey"},onDrag:u=>t.setHeight(t.height+u)}),at.default.createElement(Qp,{model:t}))}),Tg=Sg});var Nm={};At(Nm,{default:()=>nr});var Em,rr,qm,Dm,nr,Vm=S(()=>{"use strict";Em=p(sn()),rr=p($()),qm=p(an()),Dm=p(ln()),nr=class extends Em.BaseFeatureDataAdapter{static capabilities=["getFeatures","getRefNames"];feats;async loadDataP(){let{features:t}=JSON.parse(await(0,qm.openLocation)(this.getConf("location")).readFile("utf8")),o=this.getConf("scoreField");return t.map(({begin:n,end:r,...i},s)=>({...i,uniqueId:`feat-${s}`,start:+n,end:+r+1,score:o==="population_frequency"?i.populationFrequencies?.[0]?.frequency:o==="variant_impact_score"?i.predictions?.[0]?.score:void 0,description:i.descriptions?.map(l=>l.value).join(","),name:[i.mutatedType?`${i.wildType}->${i.mutatedType}`:`${i.wildType}->del`]}))}async loadData(t={}){return this.feats??=this.loadDataP().catch(o=>{throw this.feats=void 0,o}),this.feats}async getRefNames(t={}){return[]}getFeatures(t,o={}){return(0,Dm.ObservableCreate)(async n=>{let{start:r,end:i,refName:s}=t,l=await this.loadData();for(let a of l)(0,rr.doesIntersect2)(a.start,a.end,r,i)&&n.next(new rr.SimpleFeature({...a,refName:s}));n.complete()})}freeResources(){}}});var kg={};At(kg,{default:()=>ir});var Um=p(ts());var Ys=p(x());var ct=p(x()),Rs=p(_());var ms=p(x()),cs=p($()),ds=p(_());var ls=p(x()),ps=p($()),us=p(_());var ss=p(tt()),as=(0,ss.makeStyles)()({highlight:{height:"100%",background:"rgba(255,255,0,0.2)",border:"1px solid rgba(50,50,0,0.2)",position:"absolute",zIndex:99,textAlign:"center",pointerEvents:"none",overflow:"hidden"},thinborder:{border:"1px solid black"}});function $o(e){return e.views.find(o=>o.type==="ProteinView")}var Rm=(0,us.observer)(function({assemblyName:t,start:o,end:n,refName:r,model:i}){let{cx:s,classes:l}=as(),{assemblyManager:a}=(0,ps.getSession)(i),{offsetPx:u}=i,d=a.get(t)?.getCanonicalRefName(r)??r,c=i.bpToPx({refName:d,coord:o}),b=i.bpToPx({refName:d,coord:n});if(c&&b){let w=Math.max(Math.abs(b.offsetPx-c.offsetPx),3),h=Math.min(c.offsetPx,b.offsetPx)-u;return ls.default.createElement("div",{className:s(l.highlight,w<=3?l.thinborder:void 0),style:{left:h,width:w}})}else return null}),Pt=Rm;function kt(e){return!!e&&typeof e=="object"&&"hoverPosition"in e&&!!e.hoverPosition&&typeof e.hoverPosition=="object"&&"coord"in e.hoverPosition&&"refName"in e.hoverPosition}function cr(e){return Object.fromEntries(Object.entries(e).map(([t,o])=>[o,+t]))}var Km=(0,ds.observer)(function({model:t}){let o=(0,cs.getSession)(t),{views:n,hovered:r}=o;if(kt(r)&&n.some(i=>i.type==="ProteinView")){let{assemblyNames:i}=t,{coord:s,refName:l}=r.hoverPosition;return ms.default.createElement(Pt,{model:t,start:s-1,end:s,refName:l,assemblyName:i[0]})}return null}),gs=Km;var vs=p(x()),en=p($()),Ts=p(_());Qo();Po();var Ym=(0,Ts.observer)(function({model:t}){let o=(0,en.getSession)(t),{hovered:n}=o,{assemblyNames:r,id:i}=t;if(!r[0])return null;let l=Ut.get(i);if(!l||!kt(n))return null;let{coord:a}=n.hoverPosition,u=new en.SimpleFeature(l.feature),m=eo(u),{g2p:d}=m,c=d[a-1];return c===void 0?null:vs.default.createElement(Pt,{model:t,start:c,end:c+1,refName:l.uniprotId,assemblyName:l.uniprotId})}),As=Ym;var Ps=p(x()),ks=p($()),Cs=p(_());Qo();var $m=(0,Cs.observer)(function({model:t}){let o=(0,ks.getSession)(t),{hovered:n}=o,{assemblyNames:r,id:i}=t;if(!kt(n))return null;let{coord:s,refName:l}=n.hoverPosition;if(Ut.getByUniprotId(l,o)?.connectedViewId!==i)return null;let u=r[0];if(!u)return null;let m=Ut.getGenomeHighlightForProteinPosition(l,s-1,o);return m?Ps.default.createElement(Pt,{model:t,start:m.start,end:m.end,refName:m.refName,assemblyName:u}):null}),Ms=$m;var fr=p(x()),hr=p(_());var tn=p(x()),Is=p($()),Fs=p(_());var Zm=(0,Fs.observer)(function({model:t,field:o}){let n=(0,Is.getSession)(t),{assemblyManager:r}=n,{assemblyNames:i}=t,s=$o(n),l=i[0];return(l?r.get(l):void 0)&&l?tn.default.createElement(tn.default.Fragment,null,s?.structures.flatMap((u,m)=>u[o].map((d,c)=>tn.default.createElement(Pt,{key:`${d.refName}-${d.start}-${d.end}-${m}-${c}`,start:d.start,end:d.end,refName:d.refName,assemblyName:l,model:t})))):null}),gr=Zm;var Ls=(0,hr.observer)(function({model:t}){return fr.default.createElement(gr,{model:t,field:"clickGenomeHighlights"})}),Es=(0,hr.observer)(function({model:t}){return fr.default.createElement(gr,{model:t,field:"hoverGenomeHighlights"})});var js=p(x()),Ws=p($()),to=p(Qt()),_s=p(_());function Xm(e){return e.replace(/[-.]/g,"")}function qs(e,t){return e&&t?[...e].find(([,o])=>Xm(o)===t)?.[0]:void 0}ce();var oc=(0,_s.observer)(function({model:t}){let o=(0,Ws.getSession)(t),{views:n}=o,r=$o(o),i=r?.connectedMsaViewId,s=i?n.find(l=>l.id===i):void 0;return(0,js.useEffect)(()=>{if(!r||!s)return;let l=[],a;if(l.push((0,to.autorun)(()=>{let u=r.primaryStructure?.structureSequences?.[0];a=qs(s.rowMap,u===void 0?void 0:ee(u))})),s.setMousePos){let{setMousePos:u}=s;l.push((0,to.autorun)(()=>{let m=r.primaryStructure;if(m){let d=m.structureSeqHoverPos,c=d!==void 0&&a!==void 0&&s.seqPosToVisibleCol?s.seqPosToVisibleCol(a,d):d;u(c)}}))}return l.push((0,to.autorun)(()=>{let u=s.mouseCol,m=r.primaryStructure;if(m&&!(0,to.untracked)(()=>!!m.alignmentHoverRange)){let c=u!==void 0&&a!==void 0&&s.visibleColToSeqPos?s.visibleColToSeqPos(a,u):u;m.setHoveredPosition(c===void 0?void 0:{structureSeqPos:c})}})),()=>{l.forEach(u=>{u()})}},[r,s]),null}),Js=oc;var nc=(0,Rs.observer)(function({model:t}){return ct.default.createElement(ct.default.Fragment,null,ct.default.createElement(Ls,{model:t}),ct.default.createElement(Es,{model:t}),ct.default.createElement(Ms,{model:t}),ct.default.createElement(As,{model:t}),ct.default.createElement(gs,{model:t}),ct.default.createElement(Js,{model:t}))}),Ks=nc;function yr(e){e.addToExtensionPoint("LinearGenomeView-TracksContainerComponent",(t,{model:o})=>[...t,Ys.default.createElement(Ks,{key:"highlight_protein_viewer_protein3d",model:o})])}var la=p(rn());var Xs=p(oo());var rc=(0,Xs.ConfigurationSchema)("AlphaFoldConfidenceAdapter",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz",locationType:"UriLocation"}}},{explicitlyTyped:!0}),Qs=rc;function wr(e){e.addAdapterType(()=>new la.default({name:"AlphaFoldConfidenceAdapter",displayName:"AlphaFoldConfidence adapter",configSchema:Qs,getAdapterClass:()=>Promise.resolve().then(()=>(aa(),sa)).then(t=>t.default)}))}var ba=p(rn());var pa=p(oo());var ic=(0,pa.ConfigurationSchema)("AlphaMissensePathogenicityAdapter",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz",locationType:"UriLocation"}}},{explicitlyTyped:!0}),ua=ic;function xr(e){e.addAdapterType(()=>new ba.default({name:"AlphaMissensePathogenicityAdapter",displayName:"AlphaMissensePathogenicity adapter",configSchema:ua,getAdapterClass:()=>Promise.resolve().then(()=>(ha(),fa)).then(t=>t.default)}))}var Rn=p($());dt();var Sa=p(gt(),1),va=(0,ge.createSvgIcon)((0,Sa.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z"}),"Add");var he=p(x()),bp=p(Oe()),Jn=p($()),wo=p(M());var R=p(x()),zn=p(Oe()),Dt=p(M()),Wl=p(_()),_l=p(tt());var Fe=p(x()),Mo=p(M());var no=p(x()),Ia=p(M());var Gt=p(x()),ka=p($()),Ca=p(M()),Ma=p(tt());var Sr=p(x()),cn=p(M()),Pa=p(tt()),sc=(0,Pa.makeStyles)()({block:{display:"block"}});function vr({checked:e,disabled:t,label:o,onChange:n}){let{classes:r}=sc();return Sr.default.createElement(cn.FormControlLabel,{disabled:t,className:r.block,control:Sr.default.createElement(cn.Checkbox,{checked:e,onChange:n}),label:o})}ce();var ac=(0,Ma.makeStyles)()({textAreaFont:{fontFamily:"Courier New",whiteSpace:"pre"}});function Tr({structureName:e,structureSequence:t,isoformSequences:o}){let{classes:n}=ac(),[r,i]=(0,Gt.useState)(!1),s=Object.fromEntries(Object.entries(o).map(([m,d])=>[m,{...d,seq:ee(d.seq)}])),l=Object.entries(s).find(([m,d])=>t===d.seq),a=`${e} (structure residues)`,u=(0,ka.max)([a.length,...Object.entries(s).map(([m,d])=>Ie(d.feature).length)]);return Gt.default.createElement(Gt.default.Fragment,null,Gt.default.createElement(vr,{onChange:m=>{i(m.target.checked)},label:"Show in FASTA format?",checked:r}),Gt.default.createElement(Ca.TextField,{variant:"outlined",multiline:!0,minRows:5,maxRows:10,fullWidth:!0,value:r?[`>${a}
|
|
15
|
+
${t}`,...Object.values(s).map(({feature:m,seq:d})=>`>${Ie(m)}
|
|
16
16
|
${d}`)].join(`
|
|
17
|
-
`):[`${a.padEnd(u)}${l?"*":" "} ${t}`,l?`${
|
|
18
|
-
`),slotProps:{input:{readOnly:!0,classes:{input:n.textAreaFont}}}}))}function
|
|
17
|
+
`):[`${a.padEnd(u)}${l?"*":" "} ${t}`,l?`${Ie(l[1].feature).padEnd(u)}* ${l[1].seq}`:void 0,...Object.entries(s).filter(([m])=>m!==l?.[0]).map(([m,d])=>`${Ie(d.feature).padEnd(u)} ${d.seq}`)].filter(m=>!!m).join(`
|
|
18
|
+
`),slotProps:{input:{readOnly:!0,classes:{input:n.textAreaFont}}}}))}function Co({structureSequence:e,structureName:t,isoformSequences:o}){let[n,r]=(0,no.useState)(!1);return no.default.createElement("div",{style:{margin:10}},no.default.createElement(Ia.Button,{variant:"contained",color:"primary",onClick:()=>{r(!n)}},n?"Hide all isoform protein sequences":"Show all isoform protein sequences"),n?no.default.createElement(Tr,{structureSequence:e,structureName:t,isoformSequences:o}):null)}var Ar=p(x());dt();var Fa=p(gt(),1),La=(0,ge.createSvgIcon)((0,Fa.jsx)("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3z"}),"OpenInNew");var Ea=p(M());function Te(e){let{children:t,...o}=e;return Ar.default.createElement(Ea.Link,{...o,target:"_blank",rel:"noreferrer"},t," ",Ar.default.createElement(La,{fontSize:"small"}))}ce();function lc({uniprotId:e}){return Fe.default.createElement(Mo.Typography,null,"No structure found for this UniProtID in AlphaFoldDB"," ",Fe.default.createElement(Te,{href:`https://alphafold.ebi.ac.uk/search/text/${e}`},"(search for results)"))}function Pr({uniprotId:e,selectedTranscript:t,structureSequence:o,isoformSequences:n,url:r}){return e?Fe.default.createElement(Fe.default.Fragment,null,Fe.default.createElement("div",null,Fe.default.createElement(Mo.Typography,null,"UniProt link:"," ",Fe.default.createElement(Te,{href:`https://www.uniprot.org/uniprotkb/${e}/entry`},e)),Fe.default.createElement(Mo.Typography,null,"AlphaFoldDB link: ",Fe.default.createElement(Te,{href:r},r))),o?Fe.default.createElement(Co,{structureSequence:o,structureName:e,isoformSequences:n}):Fe.default.createElement(lc,{uniprotId:e})):Fe.default.createElement(Mo.Typography,null,"Searching"," ",t?Ie(t):"transcript"," ","for UniProt ID")}var It=p(x()),nt=p(M());ce();function pc(e){let t=nn(e);return t==="refseq"?e.startsWith("NM_")||e.startsWith("XM_")?`${e} (RefSeq mRNA)`:e.startsWith("NR_")||e.startsWith("XR_")?`${e} (RefSeq ncRNA)`:e.startsWith("NP_")||e.startsWith("XP_")?`${e} (RefSeq protein)`:`${e} (RefSeq)`:t==="ensembl"?e.includes("G")?`${e} (Ensembl gene)`:e.includes("T")?`${e} (Ensembl transcript)`:e.includes("P")?`${e} (Ensembl protein)`:`${e} (Ensembl)`:t==="hgnc"?`${e} (HGNC)`:t==="ccds"?`${e} (CCDS)`:e}function kr({recognizedIds:e,geneName:t,selectedId:o,onSelectedIdChange:n}){let[r,i]=(0,It.useState)(!1),s=[{value:"auto",label:"Auto (try all)"},...e.map(l=>({value:l,label:pc(l)}))];return t&&s.push({value:`gene:${t}`,label:`${t} (gene name)`}),e.length===0&&!t?null:r?It.default.createElement(nt.FormControl,{size:"small"},It.default.createElement(nt.InputLabel,null,"Query UniProt by"),It.default.createElement(nt.Select,{value:o,label:"Query UniProt by",onChange:l=>{n(l.target.value)}},s.map(l=>It.default.createElement(nt.MenuItem,{key:l.value,value:l.value},l.label)))):It.default.createElement(nt.Button,{size:"small",variant:"text",onClick:()=>{i(!0)}},"Choose identifier to query...")}var ae=p(x()),rl=p(Oe()),il=p($());dt();var qa=p(gt(),1),Da=(0,ge.createSvgIcon)((0,qa.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");dt();var Na=p(gt(),1),ro=(0,ge.createSvgIcon)((0,Na.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6"}),"Settings");var ze=p(M());var ft=p(x()),Le=p(M());function Cr({open:e,onClose:t,options:o}){return ft.default.createElement(Le.Dialog,{open:e,onClose:t},ft.default.createElement(Le.DialogTitle,null,"Launch options"),ft.default.createElement(Le.DialogContent,null,ft.default.createElement(Le.MenuList,null,o.map(n=>ft.default.createElement(Le.MenuItem,{key:n.key,onClick:n.onClick},ft.default.createElement("div",null,ft.default.createElement(Le.Typography,{variant:"body1"},n.title),ft.default.createElement(Le.Typography,{variant:"body2",color:"text.secondary"},n.description)))))))}var Ge=p(x()),de=p(M());gn();function Ir({open:e,onClose:t}){let[o,n]=(0,Ge.useState)(()=>Mr());return Ge.default.createElement(de.Dialog,{open:e,onClose:()=>{t()}},Ge.default.createElement(de.DialogTitle,null,"Launch settings"),Ge.default.createElement(de.DialogContent,null,Ge.default.createElement(de.FormGroup,null,Ge.default.createElement(de.FormControlLabel,{control:Ge.default.createElement(de.Checkbox,{checked:o}),label:"Open protein view side-by-side with the genome view",onChange:(r,i)=>{n(i),Ba(i)}})),Ge.default.createElement(de.Typography,{variant:"body2",color:"text.secondary"},"When enabled, launching a protein view places it to the right of the connected genome view in a split layout instead of stacking it below.")),Ge.default.createElement(de.DialogActions,null,Ge.default.createElement(de.Button,{variant:"contained",onClick:()=>{t()}},"Close")))}var Nr=p(x()),Wa=p(M());var C=p(x());var A=p(M());Er();var qr={NEEDLEMAN_WUNSCH:"needleman_wunsch",SMITH_WATERMAN:"smith_waterman"},Io="smith_waterman",fc=["needleman_wunsch","smith_waterman"];function za(e){return fc.find(t=>t===e)??Io}var ja={needleman_wunsch:"Needleman-Wunsch",smith_waterman:"Smith-Waterman"};function Dr({value:e,onChange:t,onManualAlignment:o}){let[n,r]=(0,C.useState)(!1),[i,s]=(0,C.useState)(0),[l,a]=(0,C.useState)(e),[u,m]=(0,C.useState)(""),[d,c]=(0,C.useState)(),b=()=>{a(e),m(""),c(void 0),s(0),r(!0)},w=()=>{if(i===0)t(l);else if(i===1&&u.trim()&&o)try{let y=fn(u.trim());o(y)}catch(y){c(`Failed to parse alignment: ${y}`);return}r(!1)},h=()=>{a(e),m(""),c(void 0),r(!1)};return C.default.createElement(C.default.Fragment,null,C.default.createElement(A.IconButton,{onClick:b,size:"small",title:"Alignment settings"},C.default.createElement(ro,null)),C.default.createElement(A.Dialog,{open:n,onClose:h,maxWidth:"sm",fullWidth:!0},C.default.createElement(A.DialogTitle,null,"Alignment Settings"),C.default.createElement(A.DialogContent,null,C.default.createElement(A.Tabs,{value:i,onChange:(y,f)=>{s(f)},sx:{mb:2}},C.default.createElement(A.Tab,{label:"Automatic"}),C.default.createElement(A.Tab,{label:"Manual",disabled:!o})),i===0?C.default.createElement(C.default.Fragment,null,C.default.createElement(A.Typography,{variant:"body2",color:"text.secondary",sx:{mb:2}},"Choose the algorithm for aligning transcript sequences to protein structures."),C.default.createElement(A.FormControl,{component:"fieldset"},C.default.createElement(A.FormLabel,{component:"legend"},"Algorithm"),C.default.createElement(A.RadioGroup,{value:l,onChange:y=>{a(y.target.value)}},C.default.createElement(A.FormControlLabel,{value:qr.SMITH_WATERMAN,control:C.default.createElement(A.Radio,null),label:"Smith-Waterman (local alignment)"}),C.default.createElement(A.Typography,{variant:"caption",color:"text.secondary",sx:{ml:4,mt:-1,mb:1}},"Finds best matching region. Recommended for most use cases."),C.default.createElement(A.FormControlLabel,{value:qr.NEEDLEMAN_WUNSCH,control:C.default.createElement(A.Radio,null),label:"Needleman-Wunsch (global alignment)"}),C.default.createElement(A.Typography,{variant:"caption",color:"text.secondary",sx:{ml:4,mt:-1,mb:1}},"End-to-end alignment. Use when sequences should align completely.")))):C.default.createElement(C.default.Fragment,null,C.default.createElement(A.Typography,{variant:"body2",color:"text.secondary",sx:{mb:2}},"Paste a pre-computed alignment in Clustal format. The first sequence should be the transcript and the second should be the structure."),C.default.createElement(A.TextField,{multiline:!0,rows:10,fullWidth:!0,placeholder:`Example:
|
|
19
19
|
a MKAAYLSMFGKEDHKPFGD
|
|
20
20
|
|||||||||||||||||||
|
|
21
|
-
b MKAAYLSMFGKEDHKPFGD`,value:u,onChange:b=>{m(b.target.value),c(void 0)},sx:{fontFamily:"monospace",fontSize:12}}),d?C.default.createElement(P.Typography,{color:"error",variant:"body2",sx:{mt:1}},d):null)),C.default.createElement(P.DialogActions,null,C.default.createElement(P.Button,{onClick:h},"Cancel"),C.default.createElement(P.Button,{onClick:w,variant:"contained",color:"primary",disabled:i===1&&!u.trim()},i===0?"Save":"Apply Alignment"))))}function Lo({alignmentAlgorithm:e,onAlignmentAlgorithmChange:t}){return Dr.default.createElement(Ka.Typography,{variant:"body2",sx:{mr:2,display:"flex",alignItems:"center"}},"Transcript and structure sequences differ, will run"," ",Ja[e]??e," ","alignment",Dr.default.createElement(qr,{value:e,onChange:t}))}async function bn(e,t,o){try{await e(),t?.()}catch(n){console.error(n),o?.(n)}}function Ya({uniprotId:e,userSelectedProteinSequence:t,selectedTranscript:o,isLoading:n,error:r}){return n||r?[]:[!e&&"No UniProt ID found",!t&&"Could not compute protein sequence (feature may be missing CDS subfeatures)",!o&&"No transcript selected"].filter(i=>typeof i=="string")}Je();function Br({handleClose:e,uniprotId:t,userSelectedProteinSequence:o,selectedTranscript:n,url:r,confidenceUrl:i,feature:s,view:l,session:a,alignmentAlgorithm:u,onAlignmentAlgorithmChange:m,sequencesMatch:d,isLoading:c,error:y}){let[w,h]=(0,re.useState)(!1),[b,f]=(0,re.useState)(!1),[g,v]=(0,re.useState)(),D=!c&&!!t&&!!o&&!!n,T=Ya({uniprotId:t,userSelectedProteinSequence:o,selectedTranscript:n,isLoading:c,error:y}),O=()=>{h(!1)},z={session:a,view:l,feature:s,selectedTranscript:n,uniprotId:t},ve={...z,url:r,userProvidedTranscriptSequence:o?.seq,alignmentAlgorithm:u},M=Pe=>()=>{O(),bn(Pe,e,v)},Te=M(()=>{jt(ve)}),se=M(async()=>{await xn({...z,confidenceUrl:i})}),me=M(()=>{qo(z)}),Y=M(()=>{sl(ve)}),$=[{key:"3d",title:"Launch 3D protein structure view",description:"View protein structure with genome-to-structure coordinate mapping",onClick:Te},{key:"1d",title:"Launch 1D protein annotation view",description:"View protein features and annotations as a linear track",onClick:se},...Sn()?[{key:"msa",title:"Launch MSA view",description:"View AlphaFold a3m multiple sequence alignment",onClick:me},{key:"3d-msa",title:"Launch 3D structure + MSA view",description:"Launch both views with AlphaFold a3m MSA",onClick:Y}]:[]];return re.default.createElement(re.default.Fragment,null,g?re.default.createElement(al.ErrorMessage,{error:g}):null,d===!1?re.default.createElement(Lo,{alignmentAlgorithm:u,onAlignmentAlgorithmChange:m}):null,re.default.createElement(je.Tooltip,{title:"Launch settings"},re.default.createElement(je.IconButton,{size:"small","aria-label":"Launch settings",onClick:()=>{f(!0)}},re.default.createElement(ao,{fontSize:"small"}))),re.default.createElement(je.Button,{variant:"contained",color:"secondary",size:"small",onClick:()=>{e()}},"Cancel"),!D&&T.length>0?re.default.createElement(je.Typography,{variant:"body2",color:"error",sx:{mr:2}},T.join(". ")):null,re.default.createElement(je.ButtonGroup,{variant:"contained",color:"primary",size:"small"},re.default.createElement(je.Button,{disabled:!D,onClick:Te},"Launch"),re.default.createElement(je.Button,{disabled:!D,onClick:()=>{h(!0)},"aria-label":"More launch options"},re.default.createElement(Ha,null))),re.default.createElement(Cr,{open:w,onClose:O,options:$}),re.default.createElement(Mr,{open:b,onClose:()=>{f(!1)}}))}var uo=p(x()),Hr=p(I());function Ur({isLoading:e,uniprotId:t,url:o,hasProteinSequence:n,sequenceSearchType:r}){return e?null:!t&&n?uo.default.createElement(Hr.Typography,{color:"warning.main"},"No AlphaFold structure found for this sequence (searched by"," ",r==="md5"?"MD5 checksum":"full sequence",")"):t?uo.default.createElement(Hr.Typography,{color:"success.main"},"Found AlphaFold structure: ",t,o?uo.default.createElement(uo.default.Fragment,null," ","-"," ",uo.default.createElement("a",{href:o,target:"_blank",rel:"noreferrer"},o)):null):null}var Do=p(x()),mo=p(I());ce();function Wt({val:e,setVal:t,isoforms:o,isoformSequences:n,structureSequence:r,feature:i,disabled:s}){let l=no(i),a=[],u=[],m=[];for(let c of o){let y=n[c.id()];y?r&&oe(y.seq)===r?a.push(c):u.push(c):m.push(c)}let d=(c,y)=>n[y.id()].seq.length-n[c.id()].seq.length;return Do.default.createElement(mo.TextField,{value:e??"",onChange:c=>{t(c.target.value)},label:"Choose transcript isoform",select:!0,disabled:s},a.toSorted(d).map(c=>Do.default.createElement(mo.MenuItem,{value:c.id(),key:c.id()},l," - ",Ae(c)," (",n[c.id()].seq.length,"aa) (matches structure residues)")),u.toSorted(d).map(c=>Do.default.createElement(mo.MenuItem,{value:c.id(),key:c.id()},l," - ",Ae(c)," (",n[c.id()].seq.length,"aa)")),m.map(c=>Do.default.createElement(mo.MenuItem,{value:c.id(),key:c.id(),disabled:!0},l," - ",Ae(c)," (no data)")))}var U=p(x()),j=p(I());function Gr({lookupMode:e,onLookupModeChange:t,manualUniprotId:o,onManualUniprotIdChange:n,featureUniprotId:r,hasProteinSequence:i,sequenceSearchType:s,onSequenceSearchTypeChange:l,endContent:a}){return U.default.createElement(U.default.Fragment,null,U.default.createElement("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap"}},U.default.createElement(j.FormControl,{component:"fieldset"},U.default.createElement(j.RadioGroup,{row:!0,value:e,onChange:u=>{t(u.target.value)}},r&&U.default.createElement(j.FormControlLabel,{value:"feature",control:U.default.createElement(j.Radio,null),label:`From feature (${r})`}),U.default.createElement(j.FormControlLabel,{value:"auto",control:U.default.createElement(j.Radio,null),label:"Auto-detect using UniProt ID mapping API"}),U.default.createElement(j.FormControlLabel,{value:"manual",control:U.default.createElement(j.Radio,null),label:"Enter manually"}),i&&U.default.createElement(j.FormControlLabel,{value:"sequence",control:U.default.createElement(j.Radio,null),label:"Search sequence against AlphaFoldDB API"}))),a),e==="manual"&&U.default.createElement("div",null,U.default.createElement(j.TextField,{label:"UniProt ID",variant:"outlined",placeholder:"e.g. P68871",size:"small",value:o,onChange:u=>{n(u.target.value)}})),e==="sequence"&&s&&l&&U.default.createElement("div",null,U.default.createElement(j.FormControl,{component:"fieldset"},U.default.createElement(j.RadioGroup,{row:!0,value:s,onChange:u=>{l(u.target.value)}},U.default.createElement(j.FormControlLabel,{value:"md5",control:U.default.createElement(j.Radio,null),label:"Exact match"}),U.default.createElement(j.FormControlLabel,{value:"sequence",control:U.default.createElement(j.Radio,null),label:"Fuzzy match"}))),U.default.createElement(j.Typography,{variant:"body2",color:"text.secondary"},"May not find the canonical UniProt entry.")),e==="manual"&&!o&&U.default.createElement(j.Typography,{variant:"body2",color:"text.secondary"},"Search"," ",U.default.createElement(Ce,{href:"https://www.uniprot.org/"},"UniProt")," or ",U.default.createElement(Ce,{href:"https://alphafold.ebi.ac.uk/"},"AlphaFoldDB")))}var R=p(x()),q=p(I()),ll=p(tt());var kc=(0,ll.makeStyles)()({tableContainer:{maxHeight:200},headerCell:{fontWeight:"bold",backgroundColor:"#f5f5f5"},selectedRow:{backgroundColor:"#e3f2fd"},clickableRow:{cursor:"pointer","&:hover":{backgroundColor:"#f5f5f5"}},reviewedChip:{backgroundColor:"#4caf50",color:"white",fontSize:"0.7rem",height:20},unreviewedChip:{backgroundColor:"#ff9800",color:"white",fontSize:"0.7rem",height:20}});function Or({entries:e,selectedAccession:t,onSelect:o}){let{classes:n,cx:r}=kc();return e.length===0?null:R.default.createElement("div",null,R.default.createElement(q.Typography,{variant:"body2",sx:{mb:1}},"Found ",e.length," UniProt entries. Select one:"),R.default.createElement(q.TableContainer,{component:q.Paper,className:n.tableContainer},R.default.createElement(q.Table,{size:"small",stickyHeader:!0},R.default.createElement(q.TableHead,null,R.default.createElement(q.TableRow,null,R.default.createElement(q.TableCell,{className:n.headerCell,padding:"checkbox"}),R.default.createElement(q.TableCell,{className:n.headerCell},"Accession"),R.default.createElement(q.TableCell,{className:n.headerCell},"Gene"),R.default.createElement(q.TableCell,{className:n.headerCell},"Organism"),R.default.createElement(q.TableCell,{className:n.headerCell},"Protein"),R.default.createElement(q.TableCell,{className:n.headerCell},"Status"))),R.default.createElement(q.TableBody,null,e.map(i=>R.default.createElement(q.TableRow,{key:i.accession,onClick:()=>{o(i.accession)},className:r(n.clickableRow,t===i.accession&&n.selectedRow)},R.default.createElement(q.TableCell,{padding:"checkbox"},R.default.createElement(q.Radio,{checked:t===i.accession,size:"small"})),R.default.createElement(q.TableCell,null,R.default.createElement(Ce,{href:`https://www.uniprot.org/uniprotkb/${i.accession}`},i.accession)),R.default.createElement(q.TableCell,null,i.geneName??"-"),R.default.createElement(q.TableCell,null,i.organismName??"-"),R.default.createElement(q.TableCell,null,i.proteinName?i.proteinName.length>40?`${i.proteinName.slice(0,40)}...`:i.proteinName:"-"),R.default.createElement(q.TableCell,null,R.default.createElement(q.Chip,{label:i.isReviewed?"Reviewed":"Unreviewed",size:"small",className:i.isReviewed?n.reviewedChip:n.unreviewedChip}))))))))}var So=p(x());yo();var Et={revalidateOnFocus:!1,revalidateOnReconnect:!1,revalidateIfStale:!1};async function Dn({plugin:e,trajectory:t,options:o}){let n=await e.builders.structure.createModel(t);return await e.builders.structure.hierarchy.applyPreset(t,"all-models",{useDefaultIfSingleModel:!0,representationPresetParams:o?.representationParams}),{model:n}}async function Nn({data:e,format:t="pdb",options:o,plugin:n}){let r=await n.builders.data.rawData({data:e,label:o?.dataLabel}),i=await n.builders.structure.parseTrajectory(r,t);return Dn({plugin:n,trajectory:i,options:o})}async function Vn({url:e,format:t="mmcif",isBinary:o,options:n,plugin:r}){let i=await r.builders.data.download({url:e,isBinary:o},{state:{isGhost:!0}}),s=await r.builders.structure.parseTrajectory(i,t);return Dn({plugin:r,trajectory:s,options:n})}function Bn(e){return e.obj?.data.sequence.sequences.map(t=>Array.from(t.sequence.label.toArray()).join(""))}Ht();async function Dl(e){let{createPluginUI:t,renderReact18:o}=await ge(),n=document.createElement("div"),r=await t({target:n,render:o});try{return await e(r)}finally{r.unmount(),n.remove()}}function ed(e){let t=e.lastIndexOf("."),o=t>=0?e.slice(t+1).toLowerCase():"";return o==="cif"||o==="mmcif"||o==="bcif"?"mmcif":"pdb"}async function td({file:e,url:t}){return Dl(async o=>{let{model:n}=e?await Nn({data:await e.text(),plugin:o,format:ed(e.name)}):await Vn({url:t,plugin:o});return Bn(n)})}function Bo({file:e,url:t}){let o=e?["structure-file",e.name,e.size,e.lastModified]:t?["structure-url",t]:null,{data:n,error:r,isLoading:i,isValidating:s}=rt(o,async()=>{let l=await td({file:e,url:t});if(!l)throw new Error("no sequences detected in file");return l},{...Et,keepPreviousData:!0});return{error:r,isLoading:i,isValidating:s,sequences:n}}Je();function ii({uniprotId:e}){let t=e?po(e):void 0,o=e?nl(e):void 0,{sequences:n,isLoading:r,isValidating:i,error:s}=Bo({url:t});return{isLoading:r,isValidating:i,error:s,url:t,confidenceUrl:o,structureSequence:n?.[0]}}var Hl=p(x());yo();async function od(e,t){let o=await fetch(e,t);if(!o.ok)throw new Error(`HTTP ${o.status} fetching ${e} ${await o.text()}`);return o}async function wo(e,t){return(await od(e,t)).json()}function Nl(e){return e.reason instanceof Error?e.reason:new Error("Aborted",{cause:e.reason})}function Vl(e,t){return new Promise((o,n)=>{if(t?.aborted)n(Nl(t));else{let r=setTimeout(o,e);t?.addEventListener("abort",()=>{clearTimeout(r),n(Nl(t))},{once:!0})}})}function qt(e,t){let o=(e&65535)+(t&65535);return(e>>16)+(t>>16)+(o>>16)<<16|o&65535}function nd(e,t){return e<<t|e>>>32-t}function Hn(e,t,o,n,r,i){return qt(nd(qt(qt(t,e),qt(n,i)),r),o)}function be(e,t,o,n,r,i,s){return Hn(t&o|~t&n,e,t,r,i,s)}function ye(e,t,o,n,r,i,s){return Hn(t&n|o&~n,e,t,r,i,s)}function we(e,t,o,n,r,i,s){return Hn(t^o^n,e,t,r,i,s)}function xe(e,t,o,n,r,i,s){return Hn(o^(t|~n),e,t,r,i,s)}function rd(e,t){e[t>>5]|=128<<t%32,e[(t+64>>>9<<4)+14]=t;let o=1732584193,n=-271733879,r=-1732584194,i=271733878;for(let s=0;s<e.length;s+=16){let l=o,a=n,u=r,m=i;o=be(o,n,r,i,e[s]??0,7,-680876936),i=be(i,o,n,r,e[s+1]??0,12,-389564586),r=be(r,i,o,n,e[s+2]??0,17,606105819),n=be(n,r,i,o,e[s+3]??0,22,-1044525330),o=be(o,n,r,i,e[s+4]??0,7,-176418897),i=be(i,o,n,r,e[s+5]??0,12,1200080426),r=be(r,i,o,n,e[s+6]??0,17,-1473231341),n=be(n,r,i,o,e[s+7]??0,22,-45705983),o=be(o,n,r,i,e[s+8]??0,7,1770035416),i=be(i,o,n,r,e[s+9]??0,12,-1958414417),r=be(r,i,o,n,e[s+10]??0,17,-42063),n=be(n,r,i,o,e[s+11]??0,22,-1990404162),o=be(o,n,r,i,e[s+12]??0,7,1804603682),i=be(i,o,n,r,e[s+13]??0,12,-40341101),r=be(r,i,o,n,e[s+14]??0,17,-1502002290),n=be(n,r,i,o,e[s+15]??0,22,1236535329),o=ye(o,n,r,i,e[s+1]??0,5,-165796510),i=ye(i,o,n,r,e[s+6]??0,9,-1069501632),r=ye(r,i,o,n,e[s+11]??0,14,643717713),n=ye(n,r,i,o,e[s]??0,20,-373897302),o=ye(o,n,r,i,e[s+5]??0,5,-701558691),i=ye(i,o,n,r,e[s+10]??0,9,38016083),r=ye(r,i,o,n,e[s+15]??0,14,-660478335),n=ye(n,r,i,o,e[s+4]??0,20,-405537848),o=ye(o,n,r,i,e[s+9]??0,5,568446438),i=ye(i,o,n,r,e[s+14]??0,9,-1019803690),r=ye(r,i,o,n,e[s+3]??0,14,-187363961),n=ye(n,r,i,o,e[s+8]??0,20,1163531501),o=ye(o,n,r,i,e[s+13]??0,5,-1444681467),i=ye(i,o,n,r,e[s+2]??0,9,-51403784),r=ye(r,i,o,n,e[s+7]??0,14,1735328473),n=ye(n,r,i,o,e[s+12]??0,20,-1926607734),o=we(o,n,r,i,e[s+5]??0,4,-378558),i=we(i,o,n,r,e[s+8]??0,11,-2022574463),r=we(r,i,o,n,e[s+11]??0,16,1839030562),n=we(n,r,i,o,e[s+14]??0,23,-35309556),o=we(o,n,r,i,e[s+1]??0,4,-1530992060),i=we(i,o,n,r,e[s+4]??0,11,1272893353),r=we(r,i,o,n,e[s+7]??0,16,-155497632),n=we(n,r,i,o,e[s+10]??0,23,-1094730640),o=we(o,n,r,i,e[s+13]??0,4,681279174),i=we(i,o,n,r,e[s]??0,11,-358537222),r=we(r,i,o,n,e[s+3]??0,16,-722521979),n=we(n,r,i,o,e[s+6]??0,23,76029189),o=we(o,n,r,i,e[s+9]??0,4,-640364487),i=we(i,o,n,r,e[s+12]??0,11,-421815835),r=we(r,i,o,n,e[s+15]??0,16,530742520),n=we(n,r,i,o,e[s+2]??0,23,-995338651),o=xe(o,n,r,i,e[s]??0,6,-198630844),i=xe(i,o,n,r,e[s+7]??0,10,1126891415),r=xe(r,i,o,n,e[s+14]??0,15,-1416354905),n=xe(n,r,i,o,e[s+5]??0,21,-57434055),o=xe(o,n,r,i,e[s+12]??0,6,1700485571),i=xe(i,o,n,r,e[s+3]??0,10,-1894986606),r=xe(r,i,o,n,e[s+10]??0,15,-1051523),n=xe(n,r,i,o,e[s+1]??0,21,-2054922799),o=xe(o,n,r,i,e[s+8]??0,6,1873313359),i=xe(i,o,n,r,e[s+15]??0,10,-30611744),r=xe(r,i,o,n,e[s+6]??0,15,-1560198380),n=xe(n,r,i,o,e[s+13]??0,21,1309151649),o=xe(o,n,r,i,e[s+4]??0,6,-145523070),i=xe(i,o,n,r,e[s+11]??0,10,-1120210379),r=xe(r,i,o,n,e[s+2]??0,15,718787259),n=xe(n,r,i,o,e[s+9]??0,21,-343485551),o=qt(o,l),n=qt(n,a),r=qt(r,u),i=qt(i,m)}return[o,n,r,i]}function id(e){let t="0123456789abcdef",o="";for(let n=0;n<e.length*4;n++)o+=t.charAt(e[n>>2]>>n%4*8+4&15)+t.charAt(e[n>>2]>>n%4*8&15);return o}function sd(e){let t=[];for(let n=0;n<e.length*8;n+=8)t[n>>5]=(t[n>>5]??0)|(e.charCodeAt(n/8)&255)<<n%32;return t}function Bl(e){return id(rd(sd(e),e.length*8))}ce();function si({sequence:e,searchType:t,enabled:o=!0}){let n=(0,Hl.useMemo)(()=>{if(!e)return;let a=oe(e.toUpperCase());return t==="md5"?Bl(a):a},[e,t]),{data:r,error:i,isLoading:s,isValidating:l}=rt(o&&n?`https://alphafold.ebi.ac.uk/api/sequence/summary?id=${encodeURIComponent(n)}&type=${t}`:null,wo,{...Et,keepPreviousData:!0});return{isLoading:s,isValidating:l,result:r,uniprotId:r?.uniprotAccession,cifUrl:r?.cifUrl,plddtDocUrl:r?.plddtDocUrl,structureSequence:r?.sequence,error:i}}var Un=p(x());function ai(e,t=300){let[o,n]=(0,Un.useState)(e);return(0,Un.useEffect)(()=>{let r=setTimeout(()=>{n(e)},t);return()=>{clearTimeout(r)}},[e,t]),o}var Ol=p(te());yo();var Gl=p(io()),xo=p(te());function ad(e,t){return e.map(o=>t.slice(o.start,o.end)).join("")}function ld({cds:e,sequence:t,codonTable:o}){let n=ad(e,t),r="";for(let i=0;i<n.length;i+=3)r+=o[n.slice(i,i+3)]??"&";return r}function pd(e,t){return e.map(o=>({...o,start:t-o.end,end:t-o.start})).toSorted((o,n)=>o.start-n.start)}function Ul(e){return`${e.start}-${e.end}`}function ud(e){return e.filter((t,o,n)=>!o||Ul(t)!==Ul(n[o-1]))}function md({feature:e,seq:t}){let o=e.get("start"),n=e.get("strand"),r=e.get("subfeatures")??[],i=ud(r.toSorted((s,l)=>s.get("start")-l.get("start")).map(s=>({start:s.get("start")-o,end:s.get("end")-o,type:s.get("type")})).filter(s=>s.type==="CDS"));return ld({cds:n===-1?pd(i,t.length):i,sequence:n===-1?(0,xo.revcom)(t):t,codonTable:(0,xo.generateCodonTable)(xo.defaultCodonTable)})}async function Gn({feature:e,session:t,assemblyName:o}){let n=e.get("start"),r=e.get("end"),i=e.get("refName"),{assemblyManager:s,rpcManager:l}=t,a=o?await s.waitForAssembly(o):void 0;if(!a)throw new Error("assembly not found");let u="getSequence",m=await l.call(u,"CoreGetFeatures",{adapterConfig:(0,Gl.getConf)(a,["sequence","adapter"]),sessionId:u,regions:[{start:n,end:r,refName:a.getCanonicalRefName(i),assemblyName:o}]}),[d]=m,c=d?.get("seq");return c?md({seq:c,feature:e}):void 0}ce();function li({feature:e,view:t}){let{data:o,error:n,isLoading:r}=rt(["isoform-sequences",e.id(),t?.assemblyNames?.[0]],async()=>{let i=Ot(e),s=[],a=(await Promise.all(i.map(async u=>{try{let m=await Gn({session:(0,Ol.getSession)(t),assemblyName:t?.assemblyNames?.[0],feature:u});return m?[u.id(),{feature:u,seq:m}]:void 0}catch(m){console.error("[useIsoformProteinSequences] error for",u.id(),m),s.push(m);return}}))).filter(u=>u!==void 0);if(a.length===0&&s.length===i.length&&s.length>0)throw s[0];return Object.fromEntries(a)},{...Et,keepPreviousData:!0});return{isLoading:r,isoformSequences:o,error:n}}var Ho=p(x());ce();function pi({options:e,isoformSequences:t,structureSequence:o,resetKey:n}){let[r,i]=(0,Ho.useState)(),[s,l]=(0,Ho.useState)(n);n!==s&&(l(n),i(void 0));let a=(0,Ho.useMemo)(()=>t!==void 0?Rs({options:e,isoformSequences:t,structureSequence:o})?.id():void 0,[e,o,t]);return{userSelection:r??a,setUserSelection:i}}ce();function _t({feature:e,view:t,structureSequence:o,resetKey:n}){let r=Ot(e),{isoformSequences:i,isLoading:s,error:l}=li({feature:e,view:t}),{userSelection:a,setUserSelection:u}=pi({options:r,isoformSequences:i,structureSequence:o,resetKey:n}),m=r.find(c=>Hs(c)===a),d=a?i?.[a]:void 0;return{transcripts:r,isoformSequences:i,isLoading:s,error:l,selectedTranscriptId:a,setSelectedTranscriptId:u,selectedTranscript:m,selectedIsoform:d}}yo();ce();var cd="accession,id,gene_names,organism_name,protein_name,reviewed";function dd(e){return{accession:e.primaryAccession,id:e.uniProtkbId,geneName:e.genes?.[0]?.geneName?.value,organismName:e.organism?.commonName??e.organism?.scientificName,proteinName:e.proteinDescription?.recommendedName?.fullName?.value,isReviewed:e.entryType==="UniProtKB reviewed (Swiss-Prot)"}}function gd(e){switch(rn(e)){case"ensembl":return`xref:ensembl-${e}`;case"refseq":return`xref:refseq-${e}`;case"ccds":return`xref:ccds-${e}`;case"hgnc":return`xref:hgnc-${e.replace("HGNC:","")}`;default:return}}async function jl(e,t=10){let o=`https://rest.uniprot.org/uniprotkb/search?query=${encodeURIComponent(e)}&fields=${cd}&size=${t}`;return(await wo(o)).results.map(dd)}async function fd(e){let t=gd(e);if(!t)return{entries:[],error:void 0};try{return{entries:await jl(t),error:void 0}}catch(o){return console.error(`xref search failed for ${e}:`,o),{entries:[],error:o}}}function zl(e){let t=new Set,o=[];for(let n of e)t.has(n.accession)||(t.add(n.accession),o.push(n));return o}async function Wl({recognizedIds:e=[],geneId:t,geneName:o,organismId:n=9606}){let r=new Set(e),i=t?Co(t):void 0;i&&At(i)&&r.add(i);let s=await Promise.all([...r].map(fd)),l=zl(s.flatMap(m=>m.entries)),a=s.filter(m=>m.error!==void 0),u;if(!l.some(m=>m.isReviewed)&&o)try{let m=`gene:${o}+AND+organism_id:${n}+AND+reviewed:true`,d=await jl(m,5);l=zl([...l,...d])}catch(m){console.error(`gene name search failed for ${o}:`,m),u=m}if(l.length===0){let m=r.size+(o?1:0),d=a.length+(u?1:0);if(m>0&&m===d)throw u??a[0]?.error}return l.toSorted((m,d)=>Number(d.isReviewed)-Number(m.isReviewed))}ce();function ui({recognizedIds:e=[],geneId:t,geneName:o,selectedQueryId:n="auto",enabled:r=!0}){let i=[],s;n==="auto"?(i=e,s=o):n.startsWith("gene:")?s=n.replace("gene:",""):At(n)&&(i=[n]);let l=i.some(d=>At(d))||!!s,{data:a,error:u,isLoading:m}=rt(r&&l?["uniprotSearch",n,i.join(","),s]:null,async()=>Wl({recognizedIds:i,geneId:t,geneName:s}),{...Et,keepPreviousData:!0});return{entries:a??[],isLoading:m,error:u,hasValidId:l}}function On({selectedQueryId:e,recognizedIds:t,geneName:o,joinWord:n="and"}){return e==="auto"?[t.length>0?`database ID${t.length>1?"s":""} "${t.join('", "')}"`:void 0,o?`gene name "${o}"`:void 0].filter(Boolean).join(` ${n} `):e.startsWith("gene:")?`gene name "${e.replace("gene:","")}"`:`database ID "${e}"`}ce();function mi({feature:e,view:t}){let[o,n]=(0,So.useState)("auto"),[r,i]=(0,So.useState)(""),s=_s(e),[l,a]=(0,So.useState)("auto"),[u,m]=(0,So.useState)("md5"),[d,c]=(0,So.useState)(),y=s.uniprotId,w=o==="auto"&&y?"feature":o,h=w==="sequence",b=w==="auto",{entries:f,isLoading:g,error:v}=ui({recognizedIds:s.recognizedIds,geneId:s.geneId,geneName:s.geneName,selectedQueryId:l,enabled:b}),D=ai(r,400),T=f[0]?.accession,O=w==="feature"?y:b?d??T:w==="manual"?D:void 0,{isLoading:z,isValidating:ve,error:M,url:Te,confidenceUrl:se,structureSequence:me}=ii({uniprotId:h?void 0:O}),{transcripts:Y,isoformSequences:$,isLoading:Pe,error:Be,selectedTranscriptId:lt,setSelectedTranscriptId:_e,selectedTranscript:Ie,selectedIsoform:He}=_t({feature:e,view:t,structureSequence:me,resetKey:O}),{uniprotId:sr,cifUrl:wt,plddtDocUrl:pt,structureSequence:Zt,isLoading:Xt,isValidating:Qt,error:ut}=si({sequence:He?.seq,searchType:u,enabled:h}),Bt=h?wt:Te,ar=h?pt:se,xt=h?Zt:me,eo=h?sr:O,lr=h?Qt:ve,Yo=[g&&"Looking up UniProt ID",Pe&&"Loading protein sequences from transcript isoforms",!h&&z&&"Fetching AlphaFold structure URL",h&&Xt&&"Searching AlphaFoldDB by sequence"].filter(N=>!!N),St=Yo.length>0,Xi=St?void 0:Be??v??M??ut;return{lookupMode:w,setLookupMode:n,manualUniprotId:r,setManualUniprotId:i,selectedQueryId:l,setSelectedQueryId:a,sequenceSearchType:u,setSequenceSearchType:m,selectedUniprotId:d,setSelectedUniprotId:c,userSelection:lt,setUserSelection:_e,transcriptOptions:Y,selectedTranscript:Ie,isoformSequences:$,userSelectedProteinSequence:He,uniprotEntries:f,recognizedIds:s.recognizedIds,geneName:s.geneName,featureUniprotId:y,uniprotId:eo,url:Bt,confidenceUrl:ar,structureSequence:xt,error:Xi,loadingStatuses:Yo,isSequenceSearchLoading:Xt,showIdentifierSelector:b&&(s.recognizedIds.length>0||!!s.geneName),showStructureSelectors:!!$&&!!Ie&&(h||!!(xt&&eo)),sequencesMatch:!lr&&He?.seq&&xt?oe(He.seq)===xt:void 0,searchDescription:On({selectedQueryId:l,recognizedIds:s.recognizedIds,geneName:s.geneName}),searchDescriptionOr:On({selectedQueryId:l,recognizedIds:s.recognizedIds,geneName:s.geneName,joinWord:"or"}),selectedTableAccession:d??T,showUniprotResults:!!$&&b&&(f.length>0||g),showNoResults:!!$&&b&&!g&&f.length===0,showSequenceSearchStatus:h,showAlphaFoldDBSearchStatus:!!xt&&!!eo&&!h,isLoading:St}}var hd=(0,Rl.makeStyles)()({dialogContent:{width:"80em","& > *":{marginBottom:20},"& > *:last-child":{marginBottom:0}},selectorsRow:{display:"flex",flexDirection:"row",gap:20,alignItems:"flex-start"}}),bd=(0,_l.observer)(function({feature:t,session:o,view:n,handleClose:r,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}){let{classes:l}=hd(),a=mi({feature:t,view:n});return J.default.createElement(J.default.Fragment,null,J.default.createElement(Dt.DialogContent,{className:l.dialogContent},a.error?J.default.createElement(zn.ErrorMessage,{error:a.error}):null,J.default.createElement(Gr,{lookupMode:a.lookupMode,onLookupModeChange:a.setLookupMode,manualUniprotId:a.manualUniprotId,onManualUniprotIdChange:a.setManualUniprotId,featureUniprotId:a.featureUniprotId,hasProteinSequence:!!a.userSelectedProteinSequence?.seq,sequenceSearchType:a.sequenceSearchType,onSequenceSearchTypeChange:a.setSequenceSearchType,endContent:a.showIdentifierSelector?J.default.createElement(kr,{recognizedIds:a.recognizedIds,geneName:a.geneName,selectedId:a.selectedQueryId,onSelectedIdChange:a.setSelectedQueryId}):null}),a.loadingStatuses.map(u=>J.default.createElement(zn.LoadingEllipses,{key:u,variant:"subtitle2",message:u})),a.showUniprotResults&&J.default.createElement(J.default.Fragment,null,J.default.createElement(Dt.Typography,{variant:"body2",color:"textSecondary"},"Searched UniProt by ",a.searchDescription),J.default.createElement(Or,{entries:a.uniprotEntries,selectedAccession:a.selectedTableAccession,onSelect:a.setSelectedUniprotId}),J.default.createElement(Dt.Typography,{variant:"body2",color:"textSecondary"},"If you don't see the entry you're looking for, try a different identifier above or search"," ",J.default.createElement(Ce,{href:"https://www.uniprot.org/"},"UniProt")," ",'directly and use "Enter manually".')),a.showNoResults&&J.default.createElement(Dt.Typography,{variant:"body2",color:"textSecondary"},"No UniProt entries found for ",a.searchDescriptionOr,". Try a different identifier above, or search"," ",J.default.createElement(Ce,{href:"https://www.uniprot.org/"},"UniProt")," ",'directly and use "Enter manually" above, or use "Search sequence against AlphaFoldDB API" if available.'),a.showStructureSelectors&&J.default.createElement(J.default.Fragment,null,J.default.createElement("div",{className:l.selectorsRow},J.default.createElement(Wt,{val:a.userSelection,setVal:a.setUserSelection,structureSequence:a.structureSequence,feature:t,isoforms:a.transcriptOptions,isoformSequences:a.isoformSequences})),a.showSequenceSearchStatus&&J.default.createElement(Ur,{isLoading:a.isSequenceSearchLoading,uniprotId:a.uniprotId,url:a.url,hasProteinSequence:!!a.userSelectedProteinSequence,sequenceSearchType:a.sequenceSearchType}),a.showAlphaFoldDBSearchStatus&&J.default.createElement(Ar,{uniprotId:a.uniprotId,selectedTranscript:a.selectedTranscript,structureSequence:a.structureSequence,isoformSequences:a.isoformSequences,url:a.url}))),J.default.createElement(Dt.DialogActions,null,J.default.createElement(Br,{handleClose:r,uniprotId:a.uniprotId,userSelectedProteinSequence:a.userSelectedProteinSequence,selectedTranscript:a.selectedTranscript,url:a.url,confidenceUrl:a.confidenceUrl,feature:t,view:n,session:o,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s,sequencesMatch:a.sequencesMatch,isLoading:a.isLoading,error:a.error})))}),Jl=bd;var K=p(x()),Uo=p(Oe()),Fe=p(I()),op=p(_()),np=p(tt());var it=p(x()),Ze=p(I()),Zl=p(tt());var ci=[{id:"pdb100",label:"PDB (100% redundancy)"},{id:"afdb-swissprot",label:"AlphaFold DB (Swiss-Prot)"},{id:"afdb50",label:"AlphaFold DB (50% redundancy)"},{id:"afdb-proteome",label:"AlphaFold DB (Proteomes)"},{id:"cath50",label:"CATH (50% redundancy)"},{id:"mgnify_esm30",label:"MGnify ESM30"},{id:"bfmd",label:"BFMD"},{id:"gmgcl_id",label:"GMGCL"}],jn=["pdb100","afdb-swissprot"];async function Kl({aaSequence:e,signal:t}){let o=e.split(`
|
|
22
|
-
`).filter(s=>!s.startsWith(">")).join("").replace(/\s/g,"").replace(/\*/g,"").toUpperCase().replace(/[^ACDEFGHIKLMNPQRSTVWY]/g,""),n=await fetch(`https://3di.foldseek.com/predict/${encodeURIComponent(o)}`,{signal:t});if(!n.ok)throw new Error(`3Di prediction failed: ${n.status} ${await n.text()}`);let i=(await n.text()).replace(/^["'/\s]+/,"").replace(/["'/\s]+$/,"").trim();return{aaSequence:o,di3Sequence:i}}async function
|
|
21
|
+
b MKAAYLSMFGKEDHKPFGD`,value:u,onChange:y=>{m(y.target.value),c(void 0)},sx:{fontFamily:"monospace",fontSize:12}}),d?C.default.createElement(A.Typography,{color:"error",variant:"body2",sx:{mt:1}},d):null)),C.default.createElement(A.DialogActions,null,C.default.createElement(A.Button,{onClick:h},"Cancel"),C.default.createElement(A.Button,{onClick:w,variant:"contained",color:"primary",disabled:i===1&&!u.trim()},i===0?"Save":"Apply Alignment"))))}function Fo({alignmentAlgorithm:e,onAlignmentAlgorithmChange:t}){return Nr.default.createElement(Wa.Typography,{variant:"body2",sx:{mr:2,display:"flex",alignItems:"center"}},"Transcript and structure sequences differ, will run"," ",ja[e]??e," ","alignment",Nr.default.createElement(Dr,{value:e,onChange:t}))}var Ra=p(x());async function _a(e,t,o){try{await e(),t?.()}catch(n){console.error(n),o?.(n)}}function Ja({uniprotId:e,userSelectedProteinSequence:t,selectedTranscript:o,isLoading:n,error:r}){return n||r?[]:[!e&&"No UniProt ID found",!t&&"Could not compute protein sequence (feature may be missing CDS subfeatures)",!o&&"No transcript selected"].filter(i=>typeof i=="string")}function hn(e,t){let[o,n]=(0,Ra.useState)();return{runLaunch:i=>()=>{t?.(),_a(i,e,n)},launchError:o}}Re();function Hr({handleClose:e,uniprotId:t,userSelectedProteinSequence:o,selectedTranscript:n,url:r,confidenceUrl:i,feature:s,view:l,session:a,alignmentAlgorithm:u,onAlignmentAlgorithmChange:m,sequencesMatch:d,isLoading:c,error:b}){let[w,h]=(0,ae.useState)(!1),[y,f]=(0,ae.useState)(!1),g=!c&&!!t&&!!o&&!!n,v=Ja({uniprotId:t,userSelectedProteinSequence:o,selectedTranscript:n,isLoading:c,error:b}),E=()=>{h(!1)},{runLaunch:T,launchError:G}=hn(e,E),W={session:a,view:l,feature:s,selectedTranscript:n,uniprotId:t},ve={...W,url:r,userProvidedTranscriptSequence:o?.seq,alignmentAlgorithm:u},q=T(()=>{zt(ve)}),Pe=T(()=>{Eo(W)}),ie=T(()=>{nl(ve)}),me=(0,il.isSessionWithAddTracks)(a)?a:void 0,Y=[{key:"3d",title:"Launch 3D protein structure view",description:"View protein structure with genome-to-structure coordinate mapping",onClick:q},...me&&t?[{key:"1d",title:"Launch 1D protein annotation view",description:"View protein features and annotations as a linear track",onClick:T(()=>wn({session:me,view:l,feature:s,selectedTranscript:n,uniprotId:t,confidenceUrl:i}))}]:[],...xn()?[{key:"msa",title:"Launch MSA view",description:"View AlphaFold a3m multiple sequence alignment",onClick:Pe},{key:"3d-msa",title:"Launch 3D structure + MSA view",description:"Launch both views with AlphaFold a3m MSA",onClick:ie}]:[]];return ae.default.createElement(ae.default.Fragment,null,G?ae.default.createElement(rl.ErrorMessage,{error:G}):null,d===!1?ae.default.createElement(Fo,{alignmentAlgorithm:u,onAlignmentAlgorithmChange:m}):null,ae.default.createElement(ze.Tooltip,{title:"Launch settings"},ae.default.createElement(ze.IconButton,{size:"small","aria-label":"Launch settings",onClick:()=>{f(!0)}},ae.default.createElement(ro,{fontSize:"small"}))),ae.default.createElement(ze.Button,{variant:"contained",color:"secondary",size:"small",onClick:()=>{e()}},"Cancel"),!g&&v.length>0?ae.default.createElement(ze.Typography,{variant:"body2",color:"error",sx:{mr:2}},v.join(". ")):null,ae.default.createElement(ze.ButtonGroup,{variant:"contained",color:"primary",size:"small"},ae.default.createElement(ze.Button,{disabled:!g,onClick:q},"Launch"),ae.default.createElement(ze.Button,{disabled:!g,onClick:()=>{h(!0)},"aria-label":"More launch options"},ae.default.createElement(Da,null))),ae.default.createElement(Cr,{open:w,onClose:E,options:Y}),ae.default.createElement(Ir,{open:y,onClose:()=>{f(!1)}}))}var so=p(x()),Ur=p(M());function Or({isLoading:e,uniprotId:t,url:o,hasProteinSequence:n,sequenceSearchType:r}){return e?null:!t&&n?so.default.createElement(Ur.Typography,{color:"warning.main"},"No AlphaFold structure found for this sequence (searched by"," ",r==="md5"?"MD5 checksum":"full sequence",")"):t?so.default.createElement(Ur.Typography,{color:"success.main"},"Found AlphaFold structure: ",t,o?so.default.createElement(so.default.Fragment,null," ","-"," ",so.default.createElement("a",{href:o,target:"_blank",rel:"noreferrer"},o)):null):null}var qo=p(x()),ao=p(M());ce();function jt({val:e,setVal:t,isoforms:o,isoformSequences:n,structureSequence:r,feature:i,disabled:s}){let l=on(i),a=[],u=[],m=[];for(let c of o){let b=n[c.id()];b?r&&ee(b.seq)===r?a.push(c):u.push(c):m.push(c)}let d=(c,b)=>n[b.id()].seq.length-n[c.id()].seq.length;return qo.default.createElement(ao.TextField,{value:e??"",onChange:c=>{t(c.target.value)},label:"Choose transcript isoform",select:!0,disabled:s},a.toSorted(d).map(c=>qo.default.createElement(ao.MenuItem,{value:c.id(),key:c.id()},l," - ",Ie(c)," (",n[c.id()].seq.length,"aa) (matches structure residues)")),u.toSorted(d).map(c=>qo.default.createElement(ao.MenuItem,{value:c.id(),key:c.id()},l," - ",Ie(c)," (",n[c.id()].seq.length,"aa)")),m.map(c=>qo.default.createElement(ao.MenuItem,{value:c.id(),key:c.id(),disabled:!0},l," - ",Ie(c)," (no data)")))}var O=p(x()),z=p(M());function Gr({lookupMode:e,onLookupModeChange:t,manualUniprotId:o,onManualUniprotIdChange:n,featureUniprotId:r,hasProteinSequence:i,sequenceSearchType:s,onSequenceSearchTypeChange:l,endContent:a}){return O.default.createElement(O.default.Fragment,null,O.default.createElement("div",{style:{display:"flex",alignItems:"center",flexWrap:"wrap"}},O.default.createElement(z.FormControl,{component:"fieldset"},O.default.createElement(z.RadioGroup,{row:!0,value:e,onChange:u=>{t(u.target.value)}},r&&O.default.createElement(z.FormControlLabel,{value:"feature",control:O.default.createElement(z.Radio,null),label:`From feature (${r})`}),O.default.createElement(z.FormControlLabel,{value:"auto",control:O.default.createElement(z.Radio,null),label:"Auto-detect using UniProt ID mapping API"}),O.default.createElement(z.FormControlLabel,{value:"manual",control:O.default.createElement(z.Radio,null),label:"Enter manually"}),i&&O.default.createElement(z.FormControlLabel,{value:"sequence",control:O.default.createElement(z.Radio,null),label:"Search sequence against AlphaFoldDB API"}))),a),e==="manual"&&O.default.createElement("div",null,O.default.createElement(z.TextField,{label:"UniProt ID",variant:"outlined",placeholder:"e.g. P68871",size:"small",value:o,onChange:u=>{n(u.target.value)}})),e==="sequence"&&s&&l&&O.default.createElement("div",null,O.default.createElement(z.FormControl,{component:"fieldset"},O.default.createElement(z.RadioGroup,{row:!0,value:s,onChange:u=>{l(u.target.value)}},O.default.createElement(z.FormControlLabel,{value:"md5",control:O.default.createElement(z.Radio,null),label:"Exact match"}),O.default.createElement(z.FormControlLabel,{value:"sequence",control:O.default.createElement(z.Radio,null),label:"Fuzzy match"}))),O.default.createElement(z.Typography,{variant:"body2",color:"text.secondary"},"May not find the canonical UniProt entry.")),e==="manual"&&!o&&O.default.createElement(z.Typography,{variant:"body2",color:"text.secondary"},"Search"," ",O.default.createElement(Te,{href:"https://www.uniprot.org/"},"UniProt")," or ",O.default.createElement(Te,{href:"https://alphafold.ebi.ac.uk/"},"AlphaFoldDB")))}var J=p(x()),D=p(M()),sl=p(tt());var Tc=(0,sl.makeStyles)()({tableContainer:{maxHeight:200},headerCell:{fontWeight:"bold",backgroundColor:"#f5f5f5"},selectedRow:{backgroundColor:"#e3f2fd"},clickableRow:{cursor:"pointer","&:hover":{backgroundColor:"#f5f5f5"}},reviewedChip:{backgroundColor:"#4caf50",color:"white",fontSize:"0.7rem",height:20},unreviewedChip:{backgroundColor:"#ff9800",color:"white",fontSize:"0.7rem",height:20}});function zr({entries:e,selectedAccession:t,onSelect:o}){let{classes:n,cx:r}=Tc();return e.length===0?null:J.default.createElement("div",null,J.default.createElement(D.Typography,{variant:"body2",sx:{mb:1}},"Found ",e.length," UniProt entries. Select one:"),J.default.createElement(D.TableContainer,{component:D.Paper,className:n.tableContainer},J.default.createElement(D.Table,{size:"small",stickyHeader:!0},J.default.createElement(D.TableHead,null,J.default.createElement(D.TableRow,null,J.default.createElement(D.TableCell,{className:n.headerCell,padding:"checkbox"}),J.default.createElement(D.TableCell,{className:n.headerCell},"Accession"),J.default.createElement(D.TableCell,{className:n.headerCell},"Gene"),J.default.createElement(D.TableCell,{className:n.headerCell},"Organism"),J.default.createElement(D.TableCell,{className:n.headerCell},"Protein"),J.default.createElement(D.TableCell,{className:n.headerCell},"Status"))),J.default.createElement(D.TableBody,null,e.map(i=>J.default.createElement(D.TableRow,{key:i.accession,onClick:()=>{o(i.accession)},className:r(n.clickableRow,t===i.accession&&n.selectedRow)},J.default.createElement(D.TableCell,{padding:"checkbox"},J.default.createElement(D.Radio,{checked:t===i.accession,size:"small"})),J.default.createElement(D.TableCell,null,J.default.createElement(Te,{href:`https://www.uniprot.org/uniprotkb/${i.accession}`},i.accession)),J.default.createElement(D.TableCell,null,i.geneName??"-"),J.default.createElement(D.TableCell,null,i.organismName??"-"),J.default.createElement(D.TableCell,null,i.proteinName?i.proteinName.length>40?`${i.proteinName.slice(0,40)}...`:i.proteinName:"-"),J.default.createElement(D.TableCell,null,J.default.createElement(D.Chip,{label:i.isReviewed?"Reviewed":"Unreviewed",size:"small",className:i.isReviewed?n.reviewedChip:n.unreviewedChip}))))))))}var yo=p(x());go();var Et={revalidateOnFocus:!1,revalidateOnReconnect:!1,revalidateIfStale:!1};async function qn({plugin:e,trajectory:t,options:o}){let n=await e.builders.structure.createModel(t);return await e.builders.structure.hierarchy.applyPreset(t,"all-models",{useDefaultIfSingleModel:!0,representationPresetParams:o?.representationParams}),{model:n}}async function Dn({data:e,format:t="pdb",options:o,plugin:n}){let r=await n.builders.data.rawData({data:e,label:o?.dataLabel}),i=await n.builders.structure.parseTrajectory(r,t);return qn({plugin:n,trajectory:i,options:o})}async function Nn({url:e,format:t="mmcif",isBinary:o,options:n,plugin:r}){let i=await r.builders.data.download({url:e,isBinary:o},{state:{isGhost:!0}}),s=await r.builders.structure.parseTrajectory(i,t);return qn({plugin:r,trajectory:s,options:n})}function Vn(e){return e.obj?.data.sequence.sequences.map(t=>Array.from(t.sequence.label.toArray()).join(""))}fo();async function ql(e){let{createPluginUI:t,renderReact18:o}=await qe(),n=document.createElement("div"),r=await t({target:n,render:o});try{return await e(r)}finally{r.unmount(),n.remove()}}function Xc(e){let t=e.lastIndexOf("."),o=t>=0?e.slice(t+1).toLowerCase():"";return o==="cif"||o==="mmcif"||o==="bcif"?"mmcif":"pdb"}async function Qc({file:e,url:t}){return ql(async o=>{let{model:n}=e?await Dn({data:await e.text(),plugin:o,format:Xc(e.name)}):await Nn({url:t,plugin:o});return Vn(n)})}function Vo({file:e,url:t}){let o=e?["structure-file",e.name,e.size,e.lastModified]:t?["structure-url",t]:null,{data:n,error:r,isLoading:i,isValidating:s}=rt(o,async()=>{let l=await Qc({file:e,url:t});if(!l)throw new Error("no sequences detected in file");return l},{...Et,keepPreviousData:!0});return{error:r,isLoading:i,isValidating:s,sequences:n}}Re();function si({uniprotId:e}){let t=e?io(e):void 0,o=e?el(e):void 0,{sequences:n,isLoading:r,isValidating:i,error:s}=Vo({url:t});return{isLoading:r,isValidating:i,error:s,url:t,confidenceUrl:o,structureSequence:n?.[0]}}var Bl=p(x());go();async function ed(e,t){let o=await fetch(e,t);if(!o.ok)throw new Error(`HTTP ${o.status} fetching ${e} ${await o.text()}`);return o}async function ho(e,t){return(await ed(e,t)).json()}function Dl(e){return e.reason instanceof Error?e.reason:new Error("Aborted",{cause:e.reason})}function Nl(e,t){return new Promise((o,n)=>{if(t?.aborted)n(Dl(t));else{let r=setTimeout(o,e);t?.addEventListener("abort",()=>{clearTimeout(r),n(Dl(t))},{once:!0})}})}function qt(e,t){let o=(e&65535)+(t&65535);return(e>>16)+(t>>16)+(o>>16)<<16|o&65535}function td(e,t){return e<<t|e>>>32-t}function Hn(e,t,o,n,r,i){return qt(td(qt(qt(t,e),qt(n,i)),r),o)}function be(e,t,o,n,r,i,s){return Hn(t&o|~t&n,e,t,r,i,s)}function ye(e,t,o,n,r,i,s){return Hn(t&n|o&~n,e,t,r,i,s)}function we(e,t,o,n,r,i,s){return Hn(t^o^n,e,t,r,i,s)}function xe(e,t,o,n,r,i,s){return Hn(o^(t|~n),e,t,r,i,s)}function od(e,t){e[t>>5]|=128<<t%32,e[(t+64>>>9<<4)+14]=t;let o=1732584193,n=-271733879,r=-1732584194,i=271733878;for(let s=0;s<e.length;s+=16){let l=o,a=n,u=r,m=i;o=be(o,n,r,i,e[s]??0,7,-680876936),i=be(i,o,n,r,e[s+1]??0,12,-389564586),r=be(r,i,o,n,e[s+2]??0,17,606105819),n=be(n,r,i,o,e[s+3]??0,22,-1044525330),o=be(o,n,r,i,e[s+4]??0,7,-176418897),i=be(i,o,n,r,e[s+5]??0,12,1200080426),r=be(r,i,o,n,e[s+6]??0,17,-1473231341),n=be(n,r,i,o,e[s+7]??0,22,-45705983),o=be(o,n,r,i,e[s+8]??0,7,1770035416),i=be(i,o,n,r,e[s+9]??0,12,-1958414417),r=be(r,i,o,n,e[s+10]??0,17,-42063),n=be(n,r,i,o,e[s+11]??0,22,-1990404162),o=be(o,n,r,i,e[s+12]??0,7,1804603682),i=be(i,o,n,r,e[s+13]??0,12,-40341101),r=be(r,i,o,n,e[s+14]??0,17,-1502002290),n=be(n,r,i,o,e[s+15]??0,22,1236535329),o=ye(o,n,r,i,e[s+1]??0,5,-165796510),i=ye(i,o,n,r,e[s+6]??0,9,-1069501632),r=ye(r,i,o,n,e[s+11]??0,14,643717713),n=ye(n,r,i,o,e[s]??0,20,-373897302),o=ye(o,n,r,i,e[s+5]??0,5,-701558691),i=ye(i,o,n,r,e[s+10]??0,9,38016083),r=ye(r,i,o,n,e[s+15]??0,14,-660478335),n=ye(n,r,i,o,e[s+4]??0,20,-405537848),o=ye(o,n,r,i,e[s+9]??0,5,568446438),i=ye(i,o,n,r,e[s+14]??0,9,-1019803690),r=ye(r,i,o,n,e[s+3]??0,14,-187363961),n=ye(n,r,i,o,e[s+8]??0,20,1163531501),o=ye(o,n,r,i,e[s+13]??0,5,-1444681467),i=ye(i,o,n,r,e[s+2]??0,9,-51403784),r=ye(r,i,o,n,e[s+7]??0,14,1735328473),n=ye(n,r,i,o,e[s+12]??0,20,-1926607734),o=we(o,n,r,i,e[s+5]??0,4,-378558),i=we(i,o,n,r,e[s+8]??0,11,-2022574463),r=we(r,i,o,n,e[s+11]??0,16,1839030562),n=we(n,r,i,o,e[s+14]??0,23,-35309556),o=we(o,n,r,i,e[s+1]??0,4,-1530992060),i=we(i,o,n,r,e[s+4]??0,11,1272893353),r=we(r,i,o,n,e[s+7]??0,16,-155497632),n=we(n,r,i,o,e[s+10]??0,23,-1094730640),o=we(o,n,r,i,e[s+13]??0,4,681279174),i=we(i,o,n,r,e[s]??0,11,-358537222),r=we(r,i,o,n,e[s+3]??0,16,-722521979),n=we(n,r,i,o,e[s+6]??0,23,76029189),o=we(o,n,r,i,e[s+9]??0,4,-640364487),i=we(i,o,n,r,e[s+12]??0,11,-421815835),r=we(r,i,o,n,e[s+15]??0,16,530742520),n=we(n,r,i,o,e[s+2]??0,23,-995338651),o=xe(o,n,r,i,e[s]??0,6,-198630844),i=xe(i,o,n,r,e[s+7]??0,10,1126891415),r=xe(r,i,o,n,e[s+14]??0,15,-1416354905),n=xe(n,r,i,o,e[s+5]??0,21,-57434055),o=xe(o,n,r,i,e[s+12]??0,6,1700485571),i=xe(i,o,n,r,e[s+3]??0,10,-1894986606),r=xe(r,i,o,n,e[s+10]??0,15,-1051523),n=xe(n,r,i,o,e[s+1]??0,21,-2054922799),o=xe(o,n,r,i,e[s+8]??0,6,1873313359),i=xe(i,o,n,r,e[s+15]??0,10,-30611744),r=xe(r,i,o,n,e[s+6]??0,15,-1560198380),n=xe(n,r,i,o,e[s+13]??0,21,1309151649),o=xe(o,n,r,i,e[s+4]??0,6,-145523070),i=xe(i,o,n,r,e[s+11]??0,10,-1120210379),r=xe(r,i,o,n,e[s+2]??0,15,718787259),n=xe(n,r,i,o,e[s+9]??0,21,-343485551),o=qt(o,l),n=qt(n,a),r=qt(r,u),i=qt(i,m)}return[o,n,r,i]}function nd(e){let t="0123456789abcdef",o="";for(let n=0;n<e.length*4;n++)o+=t.charAt(e[n>>2]>>n%4*8+4&15)+t.charAt(e[n>>2]>>n%4*8&15);return o}function rd(e){let t=[];for(let n=0;n<e.length*8;n+=8)t[n>>5]=(t[n>>5]??0)|(e.charCodeAt(n/8)&255)<<n%32;return t}function Vl(e){return nd(od(rd(e),e.length*8))}ce();function ai({sequence:e,searchType:t,enabled:o=!0}){let n=(0,Bl.useMemo)(()=>{if(!e)return;let a=ee(e.toUpperCase());return t==="md5"?Vl(a):a},[e,t]),{data:r,error:i,isLoading:s,isValidating:l}=rt(o&&n?`https://alphafold.ebi.ac.uk/api/sequence/summary?id=${encodeURIComponent(n)}&type=${t}`:null,ho,{...Et,keepPreviousData:!0});return{isLoading:s,isValidating:l,result:r,uniprotId:r?.uniprotAccession,cifUrl:r?.cifUrl,plddtDocUrl:r?.plddtDocUrl,structureSequence:r?.sequence,error:i}}var Un=p(x());function li(e,t=300){let[o,n]=(0,Un.useState)(e);return(0,Un.useEffect)(()=>{let r=setTimeout(()=>{n(e)},t);return()=>{clearTimeout(r)}},[e,t]),o}var Ol=p($());go();var Ul=p(oo()),bo=p($());function id(e,t){return e.map(o=>t.slice(o.start,o.end)).join("")}function sd({cds:e,sequence:t,codonTable:o}){let n=id(e,t),r="";for(let i=0;i<n.length;i+=3)r+=o[n.slice(i,i+3)]??"&";return r}function ad(e,t){return e.map(o=>({...o,start:t-o.end,end:t-o.start})).toSorted((o,n)=>o.start-n.start)}function Hl(e){return`${e.start}-${e.end}`}function ld(e){return e.filter((t,o,n)=>!o||Hl(t)!==Hl(n[o-1]))}function pd({feature:e,seq:t}){let o=e.get("start"),n=e.get("strand"),r=e.get("subfeatures")??[],i=ld(r.toSorted((s,l)=>s.get("start")-l.get("start")).map(s=>({start:s.get("start")-o,end:s.get("end")-o,type:s.get("type")})).filter(s=>s.type==="CDS"));return sd({cds:n===-1?ad(i,t.length):i,sequence:n===-1?(0,bo.revcom)(t):t,codonTable:(0,bo.generateCodonTable)(bo.defaultCodonTable)})}async function On({feature:e,session:t,assemblyName:o}){let n=e.get("start"),r=e.get("end"),i=e.get("refName"),{assemblyManager:s,rpcManager:l}=t,a=o?await s.waitForAssembly(o):void 0;if(!a)throw new Error("assembly not found");let u="getSequence",m=await l.call(u,"CoreGetFeatures",{adapterConfig:(0,Ul.getConf)(a,["sequence","adapter"]),sessionId:u,regions:[{start:n,end:r,refName:a.getCanonicalRefName(i),assemblyName:o}]}),[d]=m,c=d?.get("seq");return c?pd({seq:c,feature:e}):void 0}ce();function pi({feature:e,view:t}){let{data:o,error:n,isLoading:r}=rt(["isoform-sequences",e.id(),t?.assemblyNames?.[0]],async()=>{let i=Ot(e),s=[],a=(await Promise.all(i.map(async u=>{try{let m=await On({session:(0,Ol.getSession)(t),assemblyName:t?.assemblyNames?.[0],feature:u});return m?[u.id(),{feature:u,seq:m}]:void 0}catch(m){console.error("[useIsoformProteinSequences] error for",u.id(),m),s.push(m);return}}))).filter(u=>u!==void 0);if(a.length===0&&s.length===i.length&&s.length>0)throw s[0];return Object.fromEntries(a)},{...Et,keepPreviousData:!0});return{isLoading:r,isoformSequences:o,error:n}}var Bo=p(x());ce();function ui({options:e,isoformSequences:t,structureSequence:o,resetKey:n}){let[r,i]=(0,Bo.useState)(),[s,l]=(0,Bo.useState)(n);n!==s&&(l(n),i(void 0));let a=(0,Bo.useMemo)(()=>t!==void 0?zs({options:e,isoformSequences:t,structureSequence:o})?.id():void 0,[e,o,t]);return{userSelection:r??a,setUserSelection:i}}ce();function Wt({feature:e,view:t,structureSequence:o,resetKey:n}){let r=Ot(e),{isoformSequences:i,isLoading:s,error:l}=pi({feature:e,view:t}),{userSelection:a,setUserSelection:u}=ui({options:r,isoformSequences:i,structureSequence:o,resetKey:n}),m=r.find(c=>Ds(c)===a),d=a?i?.[a]:void 0;return{transcripts:r,isoformSequences:i,isLoading:s,error:l,selectedTranscriptId:a,setSelectedTranscriptId:u,selectedTranscript:m,selectedIsoform:d}}go();ce();var ud="accession,id,gene_names,organism_name,protein_name,reviewed";function md(e){return{accession:e.primaryAccession,id:e.uniProtkbId,geneName:e.genes?.[0]?.geneName?.value,organismName:e.organism?.commonName??e.organism?.scientificName,proteinName:e.proteinDescription?.recommendedName?.fullName?.value,isReviewed:e.entryType==="UniProtKB reviewed (Swiss-Prot)"}}function cd(e){switch(nn(e)){case"ensembl":return`xref:ensembl-${e}`;case"refseq":return`xref:refseq-${e}`;case"ccds":return`xref:ccds-${e}`;case"hgnc":return`xref:hgnc-${e.replace("HGNC:","")}`;default:return}}async function zl(e,t=10){let o=`https://rest.uniprot.org/uniprotkb/search?query=${encodeURIComponent(e)}&fields=${ud}&size=${t}`;return(await ho(o)).results.map(md)}async function dd(e){let t=cd(e);if(!t)return{entries:[],error:void 0};try{return{entries:await zl(t),error:void 0}}catch(o){return console.error(`xref search failed for ${e}:`,o),{entries:[],error:o}}}function Gl(e){let t=new Set,o=[];for(let n of e)t.has(n.accession)||(t.add(n.accession),o.push(n));return o}async function jl({recognizedIds:e=[],geneId:t,geneName:o,organismId:n=9606}){let r=new Set(e),i=t?ko(t):void 0;i&&Ct(i)&&r.add(i);let s=await Promise.all([...r].map(dd)),l=Gl(s.flatMap(m=>m.entries)),a=s.filter(m=>m.error!==void 0),u;if(!l.some(m=>m.isReviewed)&&o)try{let m=`gene:${o}+AND+organism_id:${n}+AND+reviewed:true`,d=await zl(m,5);l=Gl([...l,...d])}catch(m){console.error(`gene name search failed for ${o}:`,m),u=m}if(l.length===0){let m=r.size+(o?1:0),d=a.length+(u?1:0);if(m>0&&m===d)throw u??a[0]?.error}return l.toSorted((m,d)=>Number(d.isReviewed)-Number(m.isReviewed))}ce();function mi({recognizedIds:e=[],geneId:t,geneName:o,selectedQueryId:n="auto",enabled:r=!0}){let i=[],s;n==="auto"?(i=e,s=o):n.startsWith("gene:")?s=n.replace("gene:",""):Ct(n)&&(i=[n]);let l=i.some(d=>Ct(d))||!!s,{data:a,error:u,isLoading:m}=rt(r&&l?["uniprotSearch",n,i.join(","),s]:null,async()=>jl({recognizedIds:i,geneId:t,geneName:s}),{...Et,keepPreviousData:!0});return{entries:a??[],isLoading:m,error:u,hasValidId:l}}function Gn({selectedQueryId:e,recognizedIds:t,geneName:o,joinWord:n="and"}){return e==="auto"?[t.length>0?`database ID${t.length>1?"s":""} "${t.join('", "')}"`:void 0,o?`gene name "${o}"`:void 0].filter(Boolean).join(` ${n} `):e.startsWith("gene:")?`gene name "${e.replace("gene:","")}"`:`database ID "${e}"`}ce();function ci({feature:e,view:t}){let[o,n]=(0,yo.useState)("auto"),[r,i]=(0,yo.useState)(""),s=Gs(e),[l,a]=(0,yo.useState)("auto"),[u,m]=(0,yo.useState)("md5"),[d,c]=(0,yo.useState)(),b=s.uniprotId,w=o==="auto"&&b?"feature":o,h=w==="sequence",y=w==="auto",{entries:f,isLoading:g,error:v}=mi({recognizedIds:s.recognizedIds,geneId:s.geneId,geneName:s.geneName,selectedQueryId:l,enabled:y}),E=li(r,400),T=f[0]?.accession,G=w==="feature"?b:y?d??T:w==="manual"?E:void 0,{isLoading:W,isValidating:ve,error:q,url:Pe,confidenceUrl:ie,structureSequence:me}=si({uniprotId:h?void 0:G}),{transcripts:Y,isoformSequences:oe,isLoading:Me,error:Ve,selectedTranscriptId:lt,setSelectedTranscriptId:_e,selectedTranscript:ke,selectedIsoform:Be}=Wt({feature:e,view:t,structureSequence:me,resetKey:G}),{uniprotId:sr,cifUrl:St,plddtDocUrl:pt,structureSequence:Yt,isLoading:$t,isValidating:Zt,error:ut}=ai({sequence:Be?.seq,searchType:u,enabled:h}),Ht=h?St:Pe,ar=h?pt:ie,vt=h?Yt:me,Xt=h?sr:G,lr=h?Zt:ve,Ko=[g&&"Looking up UniProt ID",Me&&"Loading protein sequences from transcript isoforms",!h&&W&&"Fetching AlphaFold structure URL",h&&$t&&"Searching AlphaFoldDB by sequence"].filter(N=>!!N),Tt=Ko.length>0,$i=Tt?void 0:Ve??v??q??ut;return{lookupMode:w,setLookupMode:n,manualUniprotId:r,setManualUniprotId:i,selectedQueryId:l,setSelectedQueryId:a,sequenceSearchType:u,setSequenceSearchType:m,selectedUniprotId:d,setSelectedUniprotId:c,userSelection:lt,setUserSelection:_e,transcriptOptions:Y,selectedTranscript:ke,isoformSequences:oe,userSelectedProteinSequence:Be,uniprotEntries:f,recognizedIds:s.recognizedIds,geneName:s.geneName,featureUniprotId:b,uniprotId:Xt,url:Ht,confidenceUrl:ar,structureSequence:vt,error:$i,loadingStatuses:Ko,isSequenceSearchLoading:$t,showIdentifierSelector:y&&(s.recognizedIds.length>0||!!s.geneName),showStructureSelectors:!!oe&&!!ke&&(h||!!(vt&&Xt)),sequencesMatch:!lr&&Be?.seq&&vt?ee(Be.seq)===vt:void 0,searchDescription:Gn({selectedQueryId:l,recognizedIds:s.recognizedIds,geneName:s.geneName}),searchDescriptionOr:Gn({selectedQueryId:l,recognizedIds:s.recognizedIds,geneName:s.geneName,joinWord:"or"}),selectedTableAccession:d??T,showUniprotResults:!!oe&&y&&(f.length>0||g),showNoResults:!!oe&&y&&!g&&f.length===0,showSequenceSearchStatus:h,showAlphaFoldDBSearchStatus:!!vt&&!!Xt&&!h,isLoading:Tt}}var gd=(0,_l.makeStyles)()({dialogContent:{width:"80em","& > *":{marginBottom:20},"& > *:last-child":{marginBottom:0}},selectorsRow:{display:"flex",flexDirection:"row",gap:20,alignItems:"flex-start"}}),fd=(0,Wl.observer)(function({feature:t,session:o,view:n,handleClose:r,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}){let{classes:l}=gd(),a=ci({feature:t,view:n});return R.default.createElement(R.default.Fragment,null,R.default.createElement(Dt.DialogContent,{className:l.dialogContent},a.error?R.default.createElement(zn.ErrorMessage,{error:a.error}):null,R.default.createElement(Gr,{lookupMode:a.lookupMode,onLookupModeChange:a.setLookupMode,manualUniprotId:a.manualUniprotId,onManualUniprotIdChange:a.setManualUniprotId,featureUniprotId:a.featureUniprotId,hasProteinSequence:!!a.userSelectedProteinSequence?.seq,sequenceSearchType:a.sequenceSearchType,onSequenceSearchTypeChange:a.setSequenceSearchType,endContent:a.showIdentifierSelector?R.default.createElement(kr,{recognizedIds:a.recognizedIds,geneName:a.geneName,selectedId:a.selectedQueryId,onSelectedIdChange:a.setSelectedQueryId}):null}),a.loadingStatuses.map(u=>R.default.createElement(zn.LoadingEllipses,{key:u,variant:"subtitle2",message:u})),a.showUniprotResults&&R.default.createElement(R.default.Fragment,null,R.default.createElement(Dt.Typography,{variant:"body2",color:"textSecondary"},"Searched UniProt by ",a.searchDescription),R.default.createElement(zr,{entries:a.uniprotEntries,selectedAccession:a.selectedTableAccession,onSelect:a.setSelectedUniprotId}),R.default.createElement(Dt.Typography,{variant:"body2",color:"textSecondary"},"If you don't see the entry you're looking for, try a different identifier above or search"," ",R.default.createElement(Te,{href:"https://www.uniprot.org/"},"UniProt")," ",'directly and use "Enter manually".')),a.showNoResults&&R.default.createElement(Dt.Typography,{variant:"body2",color:"textSecondary"},"No UniProt entries found for ",a.searchDescriptionOr,". Try a different identifier above, or search"," ",R.default.createElement(Te,{href:"https://www.uniprot.org/"},"UniProt")," ",'directly and use "Enter manually" above, or use "Search sequence against AlphaFoldDB API" if available.'),a.showStructureSelectors&&R.default.createElement(R.default.Fragment,null,R.default.createElement("div",{className:l.selectorsRow},R.default.createElement(jt,{val:a.userSelection,setVal:a.setUserSelection,structureSequence:a.structureSequence,feature:t,isoforms:a.transcriptOptions,isoformSequences:a.isoformSequences})),a.showSequenceSearchStatus&&R.default.createElement(Or,{isLoading:a.isSequenceSearchLoading,uniprotId:a.uniprotId,url:a.url,hasProteinSequence:!!a.userSelectedProteinSequence,sequenceSearchType:a.sequenceSearchType}),a.showAlphaFoldDBSearchStatus&&R.default.createElement(Pr,{uniprotId:a.uniprotId,selectedTranscript:a.selectedTranscript,structureSequence:a.structureSequence,isoformSequences:a.isoformSequences,url:a.url}))),R.default.createElement(Dt.DialogActions,null,R.default.createElement(Hr,{handleClose:r,uniprotId:a.uniprotId,userSelectedProteinSequence:a.userSelectedProteinSequence,selectedTranscript:a.selectedTranscript,url:a.url,confidenceUrl:a.confidenceUrl,feature:t,view:n,session:o,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s,sequencesMatch:a.sequencesMatch,isLoading:a.isLoading,error:a.error})))}),Jl=fd;var K=p(x()),Ho=p(Oe()),Ce=p(M()),op=p(_()),np=p(tt());var it=p(x()),Ze=p(M()),$l=p(tt());var di=[{id:"pdb100",label:"PDB (100% redundancy)"},{id:"afdb-swissprot",label:"AlphaFold DB (Swiss-Prot)"},{id:"afdb50",label:"AlphaFold DB (50% redundancy)"},{id:"afdb-proteome",label:"AlphaFold DB (Proteomes)"},{id:"cath50",label:"CATH (50% redundancy)"},{id:"mgnify_esm30",label:"MGnify ESM30"},{id:"bfmd",label:"BFMD"},{id:"gmgcl_id",label:"GMGCL"}],jn=["pdb100","afdb-swissprot"];async function Rl({aaSequence:e,signal:t}){let o=e.split(`
|
|
22
|
+
`).filter(s=>!s.startsWith(">")).join("").replace(/\s/g,"").replace(/\*/g,"").toUpperCase().replace(/[^ACDEFGHIKLMNPQRSTVWY]/g,""),n=await fetch(`https://3di.foldseek.com/predict/${encodeURIComponent(o)}`,{signal:t});if(!n.ok)throw new Error(`3Di prediction failed: ${n.status} ${await n.text()}`);let i=(await n.text()).replace(/^["'/\s]+/,"").replace(/["'/\s]+$/,"").trim();return{aaSequence:o,di3Sequence:i}}async function Kl({aaSequence:e,di3Sequence:t,databases:o,signal:n}){let r=`>query
|
|
23
23
|
${e}
|
|
24
24
|
>3DI
|
|
25
25
|
${t}
|
|
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
|
|
27
|
-
`)}function fi(e,t){return!e||!t?!1:e.split(",").length>=3&&t.length>0}Je();function hi({hit:e,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}){let[l,a]=(0,De.useState)(null),[u,m]=(0,De.useState)(),d=!!l,c=wn(e.target),y=T=>{a(T.currentTarget)},w=()=>{a(null)},h={session:t,view:o,feature:n,selectedTranscript:r,uniprotId:c},b=T=>()=>{w(),bn(T,s,m)},f=b(()=>{let T=!e.structureUrl&&fi(e.tCa,e.tSeq)?Ql(e.tCa,e.tSeq,"A",e.target):void 0;jt({...h,url:e.structureUrl,data:T,userProvidedTranscriptSequence:i})}),g=b(async()=>{await xn({...h,confidenceUrl:il(e.target)})}),v=b(()=>{qo(h)});return e.structureUrl??fi(e.tCa,e.tSeq)?De.default.createElement(De.default.Fragment,null,u?De.default.createElement(ep.ErrorMessage,{error:u}):null,De.default.createElement(Nt.Button,{size:"small",variant:"outlined",onClick:y},"Load"),De.default.createElement(Nt.Menu,{anchorEl:l,open:d,onClose:w},De.default.createElement(Nt.MenuItem,{onClick:f},"Launch 3D protein view"),c?De.default.createElement(Nt.MenuItem,{onClick:g},"Launch 1D protein annotation view"):null,c&&Sn()?De.default.createElement(Nt.MenuItem,{onClick:v},"Launch MSA view (AlphaFoldDB a3m)"):null)):De.default.createElement("span",null,"-")}Je();var Td=(0,tp.makeStyles)()({root:{display:"flex",flexDirection:"column",gap:16},tableContainer:{maxHeight:400},headerCell:{fontWeight:"bold",backgroundColor:"#f5f5f5"},noResults:{padding:16,textAlign:"center"}});function Pd(e){let t=e.results.flatMap(o=>(o.alignments??[]).flat().map(n=>({...n,db:o.db,structureUrl:rl(n.target,o.db)})));return t.sort((o,n)=>(o.eval??1/0)-(n.eval??1/0)),t.slice(0,100)}function bi({results:e,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}){let{classes:l}=Td(),a=Pd(e);return a.length===0?B.default.createElement(F.Paper,{className:l.noResults},B.default.createElement(F.Typography,null,"No similar structures found")):B.default.createElement("div",{className:l.root},B.default.createElement(F.Typography,{variant:"subtitle2"},"Found ",a.length," similar structures"),B.default.createElement(F.TableContainer,{component:F.Paper,className:l.tableContainer},B.default.createElement(F.Table,{size:"small",stickyHeader:!0},B.default.createElement(F.TableHead,null,B.default.createElement(F.TableRow,null,B.default.createElement(F.TableCell,{className:l.headerCell},"Database"),B.default.createElement(F.TableCell,{className:l.headerCell},"Target"),B.default.createElement(F.TableCell,{className:l.headerCell},"Organism"),B.default.createElement(F.TableCell,{className:l.headerCell},"Prob"),B.default.createElement(F.TableCell,{className:l.headerCell},"Seq. Id."),B.default.createElement(F.TableCell,{className:l.headerCell},"Coverage"),B.default.createElement(F.TableCell,{className:l.headerCell},"E-value"),B.default.createElement(F.TableCell,{className:l.headerCell},"Actions"))),B.default.createElement(F.TableBody,null,a.map((u,m)=>B.default.createElement(F.TableRow,{key:`${u.db}-${u.target}-${m}`},B.default.createElement(F.TableCell,null,u.db),B.default.createElement(F.TableCell,null,u.target),B.default.createElement(F.TableCell,null,u.taxName??"-"),B.default.createElement(F.TableCell,null,u.prob!=null?`${(u.prob*100).toFixed(1)}%`:"-"),B.default.createElement(F.TableCell,null,u.seqId!=null?`${u.seqId.toFixed(1)}%`:"-"),B.default.createElement(F.TableCell,null,u.alnLength!=null&&u.qLen!=null?`${(u.alnLength/u.qLen*100).toFixed(1)}%`:"-"),B.default.createElement(F.TableCell,null,u.eval!=null?u.eval.toExponential(2):"-"),B.default.createElement(F.TableCell,null,B.default.createElement(hi,{hit:u,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}))))))))}var Xe=p(x());function yi(){let[e,t]=(0,Xe.useState)(),[o,n]=(0,Xe.useState)(),[r,i]=(0,Xe.useState)(!1),[s,l]=(0,Xe.useState)(!1),[a,u]=(0,Xe.useState)(),[m,d]=(0,Xe.useState)(""),c=(0,Xe.useRef)(null);(0,Xe.useEffect)(()=>()=>{c.current?.abort()},[]);let y=()=>{c.current?.abort();let f=new AbortController;return c.current=f,f.signal},w=async f=>{let g=y();l(!0),u(void 0),d("Predicting 3Di structure...");try{let v=await Kl({aaSequence:f,signal:g});return n(v),v}catch(v){g.aborted||(console.error(v),u(v));return}finally{g.aborted||(l(!1),d(""))}},h=async(f,g,v=jn)=>{let D=y();i(!0),u(void 0),d("Submitting search...");try{let T=await Yl({aaSequence:f,di3Sequence:g,databases:v,signal:D}),O=await $l({ticketId:T.id,onStatusChange:d,signal:D});return t(O),O}catch(T){D.aborted||(console.error(T),u(T));return}finally{D.aborted||(i(!1),d(""))}},b=()=>{c.current?.abort(),t(void 0),n(void 0),u(void 0),d("")};return{results:e,cleanedAaSequence:o?.aaSequence,di3Sequence:o?.di3Sequence,isLoading:r,isPredicting:s,error:a,statusMessage:m,predictStructure:w,search:h,reset:b}}ce();var Ad=(0,np.makeStyles)()({dialogContent:{width:"80em",display:"flex",flexDirection:"column",gap:20},sequenceInput:{fontFamily:"monospace"},di3Section:{display:"flex",flexDirection:"column",gap:8}}),kd=(0,op.observer)(function({feature:t,session:o,view:n,handleClose:r}){let{classes:i}=Ad(),[s,l]=(0,K.useState)(),[a,u]=(0,K.useState)(jn),{results:m,cleanedAaSequence:d,di3Sequence:c,isLoading:y,isPredicting:w,error:h,statusMessage:b,predictStructure:f,search:g,reset:v}=yi(),{transcripts:D,isoformSequences:T,isLoading:O,error:z,selectedTranscriptId:ve,setSelectedTranscriptId:M,selectedTranscript:Te,selectedIsoform:se}=_t({feature:t,view:n}),me=se?oe(se.seq):"",Y=s??me,$=Ie=>{M(Ie),l(void 0)},Pe=Y.trim().length>0&&!w&&!y,Be=!!d&&!!c&&a.length>0&&!y,lt=h??z,_e=y||w;return K.default.createElement(K.default.Fragment,null,K.default.createElement(Fe.DialogContent,{className:i.dialogContent},lt&&!O?K.default.createElement(Uo.ErrorMessage,{error:lt}):null,O?K.default.createElement(Uo.LoadingEllipses,{variant:"subtitle2",message:"Loading transcript sequences"}):null,T?K.default.createElement(K.default.Fragment,null,K.default.createElement(Wt,{val:ve,setVal:$,isoforms:D,isoformSequences:T,feature:t,disabled:_e}),K.default.createElement(Fe.TextField,{label:"Protein sequence (amino acids)",multiline:!0,rows:4,value:Y,onChange:Ie=>{l(Ie.target.value)},placeholder:"MKTVRQERLKSIVRILERSKEPVSGAQLAEEL...",disabled:_e,InputProps:{className:i.sequenceInput}})):null,c?K.default.createElement("div",{className:i.di3Section},K.default.createElement(Fe.Typography,{variant:"subtitle2"},"3Di structural alphabet (used for searching):"),K.default.createElement(Fe.TextField,{multiline:!0,rows:4,value:c,InputProps:{className:i.sequenceInput,readOnly:!0}})):null,K.default.createElement(di,{selected:a,onChange:u,disabled:_e}),b?K.default.createElement(Uo.LoadingEllipses,{variant:"subtitle2",message:b}):null,m?K.default.createElement(bi,{results:m,session:o,view:n,feature:t,selectedTranscript:Te,userProvidedTranscriptSequence:Y,onClose:r}):null),K.default.createElement(Fe.DialogActions,null,K.default.createElement(Fe.Button,{variant:"contained",color:"secondary",onClick:()=>{r()}},"Cancel"),m?K.default.createElement(Fe.Button,{variant:"outlined",onClick:()=>{v()}},"New search"):null,c?K.default.createElement(Fe.Button,{variant:"contained",color:"primary",disabled:!Be,onClick:()=>{g(d,c,a)}},y?"Searching...":"Search Foldseek"):K.default.createElement(Fe.Button,{variant:"contained",color:"primary",disabled:!Pe,onClick:()=>{f(Y.trim())}},w?"Predicting...":"Predict 3Di structure")))}),rp=kd;var Ne=p(x());wi();var mp=p(I()),Cd=(0,Ne.lazy)(()=>Promise.resolve().then(()=>(up(),pp)));function Go(){let[e,t]=(0,Ne.useState)(!1);return Ne.default.createElement(Ne.default.Fragment,null,Ne.default.createElement(mp.IconButton,{onClick:()=>{t(!0)}},Ne.default.createElement(Wn,null)),e?Ne.default.createElement(Ne.Suspense,{fallback:null},Ne.default.createElement(Cd,{handleClose:()=>{t(!1)}})):null)}var xi=p(x());function Oo({children:e,value:t,index:o,...n}){return xi.default.createElement("div",{role:"tabpanel",hidden:t!==o,...n},t===o&&xi.default.createElement("div",null,e))}var W=p(x()),_n=p(Oe()),Rt=p(I()),cp=p(_()),dp=p(tt());var ie=p(x()),ne=p(I());Je();function Si({choice:e,setChoice:t,structureURL:o,setStructureURL:n,setFile:r,pdbId:i,setPdbId:s}){return ie.default.createElement("div",{style:{display:"flex",margin:30}},ie.default.createElement(ne.Typography,null,"Open your structure file ",ie.default.createElement(Go,null)),ie.default.createElement(ne.FormControl,{component:"fieldset"},ie.default.createElement(ne.RadioGroup,{value:e,onChange:l=>{t(l.target.value)}},ie.default.createElement(ne.FormControlLabel,{value:"url",control:ie.default.createElement(ne.Radio,null),label:"URL"}),ie.default.createElement(ne.FormControlLabel,{value:"file",control:ie.default.createElement(ne.Radio,null),label:"File"}),ie.default.createElement(ne.FormControlLabel,{value:"pdb",control:ie.default.createElement(ne.Radio,null),label:"PDB ID"}))),e==="url"?ie.default.createElement("div",null,ie.default.createElement(ne.Typography,null,"Open a PDB/mmCIF/etc. file from remote URL"),ie.default.createElement(ne.TextField,{label:"URL",value:o,onChange:l=>{n(l.target.value)}})):null,e==="file"?ie.default.createElement("div",{style:{paddingTop:20}},ie.default.createElement(ne.Typography,null,"Open a PDB/mmCIF/etc. file from your local drive"),ie.default.createElement(ne.Button,{variant:"outlined",component:"label"},"Choose File",ie.default.createElement("input",{type:"file",hidden:!0,onChange:({target:l})=>{let a=l.files?.[0];a&&r(a)}}))):null,e==="pdb"?ie.default.createElement(ne.TextField,{value:i,onChange:l=>{let a=l.target.value;s(a),n(Eo(a))},label:"PDB ID"}):null)}Je();ce();var Md=(0,dp.makeStyles)()(e=>({dialogContent:{marginTop:e.spacing(6),width:"80em"},textAreaFont:{fontFamily:"Courier New"}}));function Id(){return W.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,"," ",W.default.createElement(Ce,{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 Fd=(0,cp.observer)(function({feature:t,session:o,view:n,handleClose:r,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}){let{classes:l}=Md(),[a,u]=(0,W.useState)(),[m,d]=(0,W.useState)(""),[c,y]=(0,W.useState)("file"),[w,h]=(0,W.useState)(),[b,f]=(0,W.useState)(""),g=c==="file"?a:void 0,v=c==="file"?"":b,{sequences:D,error:T}=Bo({file:g,url:v}),O=g?.name??v.slice(v.lastIndexOf("/")+1),z=D?.[0],{transcripts:ve,isoformSequences:M,selectedTranscriptId:Te,setSelectedTranscriptId:se,selectedTranscript:me,selectedIsoform:Y,error:$}=_t({feature:t,view:n,structureSequence:z}),Pe=$??w??T,Be=!!(v||g)&&!!Y&&!!me,lt=!!Y?.seq&&!!z&&oe(Y.seq)!==z,_e=async()=>{if(!(!Y||!me))try{let Ie=g?await g.text():void 0;jt({session:o,view:n,feature:t,selectedTranscript:me,url:v||void 0,data:Ie,userProvidedTranscriptSequence:Y.seq,alignmentAlgorithm:i,displayName:`Protein view ${no(t)} - ${Ae(me)}`}),r()}catch(Ie){console.error(Ie),h(Ie)}};return W.default.createElement(W.default.Fragment,null,W.default.createElement(Rt.DialogContent,{className:l.dialogContent},Pe?W.default.createElement(_n.ErrorMessage,{error:Pe}):null,W.default.createElement(Id,null),W.default.createElement(Si,{choice:c,setChoice:y,structureURL:b,setStructureURL:f,setFile:u,pdbId:m,setPdbId:d}),W.default.createElement("div",{style:{margin:20}},M?z?W.default.createElement(W.default.Fragment,null,W.default.createElement(Wt,{val:Te,setVal:se,structureSequence:z,isoforms:ve,feature:t,isoformSequences:M}),W.default.createElement(Mo,{structureSequence:z,structureName:O,isoformSequences:M})):null:W.default.createElement(_n.LoadingEllipses,{title:"Loading protein sequences",variant:"h6"}))),W.default.createElement(Rt.DialogActions,null,lt?W.default.createElement(Lo,{alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}):null,W.default.createElement(Rt.Button,{variant:"contained",color:"secondary",onClick:()=>{r()}},"Cancel"),W.default.createElement(Rt.Button,{variant:"contained",color:"primary",disabled:!Be,onClick:()=>{_e()}},"Launch 3-D protein structure view")))}),gp=Fd;var fp=p(x());function hp(e,t){let[o,n]=(0,fp.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 vi({handleClose:e,feature:t,model:o}){let[n,r]=(0,he.useState)(0),[i,s]=hp("jbrowse-protein3d-alignment-algorithm",Fo),l=(0,Rn.getSession)(o),a=(0,Rn.getContainingView)(o);return he.default.createElement(bp.Dialog,{maxWidth:"xl",title:"Launch protein view",titleNode:he.default.createElement(he.default.Fragment,null,"Launch protein view ",he.default.createElement(Go,null)),open:!0,onClose:e},he.default.createElement(vo.Tabs,{value:n,onChange:(u,m)=>{r(m)}},he.default.createElement(vo.Tab,{value:0,label:"AlphaFoldDB search"}),he.default.createElement(vo.Tab,{value:1,label:"Foldseek search"}),he.default.createElement(vo.Tab,{value:2,label:"Open file manually"})),he.default.createElement(Oo,{value:n,index:0},he.default.createElement(Jl,{session:l,view:a,feature:t,handleClose:e,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s})),he.default.createElement(Oo,{value:n,index:1},he.default.createElement(rp,{session:l,view:a,feature:t,handleClose:e})),he.default.createElement(Oo,{value:n,index:2},he.default.createElement(gp,{session:l,view:a,feature:t,handleClose:e,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s})))}function Ld(e){return e.name==="LinearBasicDisplay"}function Ed(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:ka,onClick:()=>{let i=(0,Jn.getContainingTrack)(t);(0,Jn.getSession)(i).queueDialog(l=>[vi,{model:i,handleClose:l,feature:n}])}}]:[]]}}})}function Ti(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(Ld(t)&&(t.stateModel=Ed(t.stateModel)),t))}var yp=p(io()),wp=p(te());Je();ce();function qd(e){if(typeof e=="string")return e;let{trackId:t}=e;return typeof t=="string"?t:void 0}function Dd(e,t){let o=Co(t);return[e.get("name"),e.get("id"),e.id()].some(n=>typeof n=="string"&&(n===t||Co(n)===o))}async function xp({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,wp.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 u={assemblyName:r,refName:l.getCanonicalRefName(a.refName)??a.refName,start:a.start,end:a.end},m=s.map(qd).filter(f=>f!==void 0),d=e.getTracksById(),c="getFeatures",y=[];for(let f of m){let g=d[f];if(!g)continue;let v=await e.rpcManager.call(c,"CoreGetFeatures",{adapterConfig:(0,yp.readConfObject)(g,"adapter"),sessionId:c,regions:[u]});for(let D of v)y.push(...Ot(D))}let w=y.find(f=>Dd(f,o));if(!w)throw new Error(`transcript "${o}" not found at ${i} in tracks [${m.join(", ")}]`);if(!(w.get("subfeatures")??[]).some(f=>f.get("type")==="CDS"))throw new Error(`transcript "${o}" has no CDS subfeatures`);let b=await Gn({session:e,assemblyName:r,feature:w});if(!b)throw new Error(`could not translate a protein sequence for "${o}"`);return{url:po(t),feature:w.toJSON(),userProvidedTranscriptSequence:b}}fn();function Pi(e){e.addToExtensionPoint("LaunchView-ProteinView",async({session:t,url:o,uniprotId:n,transcriptId:r,userProvidedTranscriptSequence:i,feature:s,connectedViewId:l,connectedView:a,alignmentAlgorithm:u,displayName:m,height:d,showControls:c,showHighlight:y,zoomToBaseLevel:w,sideBySide:h})=>{let b;if(!o&&n)try{b=await xp({session:t,uniprotId:n,transcriptId:r,connectedView:a})}catch(T){console.error(T),t.notify(`Could not launch protein view: ${T}`,"error");return}let f=o??b?.url;if(!f)throw new Error("No url or uniprotId provided when launching protein view");let g=!l&&!!a,v=l??(a?t.addView("LinearGenomeView",{type:"LinearGenomeView",init:a}).id:void 0),D=t.addView("ProteinView",{type:"ProteinView",alignmentAlgorithm:u,displayName:m,height:d,showControls:c,showHighlight:y,zoomToBaseLevel:w,structures:[{url:f,userProvidedTranscriptSequence:b?.userProvidedTranscriptSequence??i??"",feature:b?.feature??s,connectedViewId:v}]});g&&(h??lo())&&gn(t,D.id)})}var Lm=p(x()),Em=p(Ai());var Xp=p(Ai()),Qp=p(Tp()),ue=p(zo());Ct();var Ap=p(Mt(),1),ki=(0,ke.createSvgIcon)((0,Ap.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 Ro=p(to());Ci();function Mp(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 Ip(e){return!!e&&e.length>1&&e.every(t=>t>=0&&t<=100)&&new Set(e).size>1}async function Kn({structure:e,plugin:t}){let{model:o}=e.data?await Nn({data:e.data,plugin:t}):e.url?await Vn({url:e.url,plugin:t}):{model:void 0},n=o?Bn(o):void 0,r=o?Mp(o,n?.[0]?.length):void 0;return{sequences:n,confidence:r}}var Mi=p(zo());function Fp(e){let t=new Set;function o(n,r){t.add(n),Kn({structure:n,plugin:r}).then(i=>{let s=(0,Mi.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,Mi.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 _o=p(te()),Z=p(zo()),Jt=p(to());Ei();gt();ko();Ut();var Bp=e=>e;var qi=e=>e;function Hp(e){let{structureSeqToTranscriptSeqPosition:t,transcriptSeqToStructureSeqPosition:o}=Ss(e),n=Ts(e),r=Ps(e),i=cr(n),s=cr(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}}}Ni();var Yn=["A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V","B","Z","X","*"],Nd=[[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]],Gp={};for(let e=0;e<Yn.length;e++){let t={};for(let o=0;o<Yn.length;o++)t[Yn[o]]=Nd[e][o];Gp[Yn[e]]=t}function jo(e,t){return Gp[e.toUpperCase()]?.[t.toUpperCase()]??-4}var Op=-10,zp=-.5;function Vd(e,t,o=Op,n=zp){let r=e.length,i=t.length,s=[],l=[],a=[];for(let b=0;b<=r;b++){s[b]=[],l[b]=[],a[b]=[];for(let f=0;f<=i;f++)s[b][f]=-1/0,l[b][f]=-1/0,a[b][f]=-1/0}s[0][0]=0;for(let b=1;b<=r;b++)l[b][0]=o+(b-1)*n;for(let b=1;b<=i;b++)a[0][b]=o+(b-1)*n;for(let b=1;b<=r;b++)for(let f=1;f<=i;f++){let g=jo(e[b-1],t[f-1]);s[b][f]=Math.max(s[b-1][f-1],l[b-1][f-1],a[b-1][f-1])+g,l[b][f]=Math.max(s[b-1][f]+o,l[b-1][f]+n),a[b][f]=Math.max(s[b][f-1]+o,a[b][f-1]+n)}let u="",m="",d=r,c=i,y=[s[r][i],l[r][i],a[r][i]],w=Math.max(...y),h=w===s[r][i]?"M":w===l[r][i]?"Ix":"Iy";for(;d>0||c>0;)if(h==="M"&&d>0&&c>0){u=e[d-1]+u,m=t[c-1]+m;let b=jo(e[d-1],t[c-1]),f=s[d-1][c-1],g=l[d-1][c-1];s[d][c]===f+b?h="M":s[d][c]===g+b?h="Ix":h="Iy",d--,c--}else if(h==="Ix"&&d>0)u=e[d-1]+u,m="-"+m,h=l[d][c]===s[d-1][c]+o?"M":"Ix",d--;else if(c>0)u="-"+u,m=t[c-1]+m,h=a[d][c]===s[d][c-1]+o?"M":"Iy",c--;else break;return{alignedSeq1:u,alignedSeq2:m,score:w}}function Bd(e,t,o=Op,n=zp){let r=e.length,i=t.length,s=[],l=[],a=[],u=0,m=0,d=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 v=jo(e[f-1],t[g-1]);s[f][g]=Math.max(0,s[f-1][g-1]+v,l[f-1][g-1]+v,a[f-1][g-1]+v),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>u&&(u=D,m=f,d=g)}let c="",y="",w=m,h=d,b=s[w][h]>=l[w][h]&&s[w][h]>=a[w][h]?"M":l[w][h]>=a[w][h]?"Ix":"Iy";for(let f=e.length;f>m;f--)c=e[f-1]+c,y="-"+y;for(let f=t.length;f>d;f--)c="-"+c,y=t[f-1]+y;for(;w>0&&h>0;)if(b==="M"){if(s[w][h]===0)break;c=e[w-1]+c,y=t[h-1]+y;let f=jo(e[w-1],t[h-1]),g=s[w-1][h-1],v=l[w-1][h-1];s[w][h]===g+f?b="M":s[w][h]===v+f?b="Ix":b="Iy",w--,h--}else b==="Ix"?(c=e[w-1]+c,y="-"+y,l[w][h]===s[w-1][h]+o&&(b="M"),w--):(c="-"+c,y=t[h-1]+y,a[w][h]===s[w][h-1]+o&&(b="M"),h--);for(;w>0;)c=e[w-1]+c,y="-"+y,w--;for(;h>0;)c="-"+c,y=t[h-1]+y,h--;return{alignedSeq1:c,alignedSeq2:y,score:u}}function Hd(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!=="-"&&jo(r,i)>0?o.push(":"):o.push(" ")}return o.join("")}function jp(e,t,o){let{alignedSeq1:n,alignedSeq2:r}=o==="smith_waterman"?Bd(e,t):Vd(e,t);return{consensus:Hd(n,r),alns:[{id:"a",seq:n},{id:"b",seq:r}]}}var Wp=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]));Bi();Ui();Ht();function zd(e,t){return{structureSeqPos:e.StructureProperties.residue.auth_seq_id(t)-1,code:e.StructureProperties.atom.label_comp_id(t),chain:e.StructureProperties.chain.auth_asym_id(t)}}async function Zn({plugin:e,kind:t,onUpdate:o}){let n=await ge(),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?zd(n,s):void 0)}else o(void 0)});return()=>{r.unsubscribe()}}Ut();Je();ce();ko();var Jd=Z.types.model({url:Z.types.maybe(Z.types.string),data:Z.types.maybe(Z.types.string),connectedViewId:Z.types.maybe(Z.types.string),pairwiseAlignment:Z.types.frozen(),feature:Z.types.frozen(),userProvidedTranscriptSequence:Z.types.string}).volatile(()=>({clickedStructureRange:void 0,hoverPosition:void 0,structureSequences:void 0,structureConfidence:void 0,isMouseInAlignment:!1,loadedToMolstar:!1,alignmentHoverRange:void 0,selectedFeatureId:void 0,hiddenFeatureTypes:new Set})).actions(e=>({setStructureData(t){e.structureSequences=t.sequences,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},setLoadedToMolstar(t){e.loadedToMolstar=t}})).views(e=>({get connectedView(){let{views:t}=(0,_o.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},setIsMouseInAlignment(t){e.isMouseInAlignment=t}})).views(e=>({get uniprotId(){let{url:t}=e;if(t)return wn(t)},get coordinateMapper(){return e.pairwiseAlignment?Hp(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 Ip(t)?Hi(t,this.structurePositionToAlignmentMap):[]},get hydrophobicityCells(){let t=e.structureSequences?.[0];return t?Hi(Jp(oe(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?oo(new _o.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(Bp(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 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?Vi({model:r,structureSeqPos:t.start,structureSeqEndPos:t.end}):$n({model:r,structureSeqPos:t.start});if(!i)return[];let[s,l]=i;return[{assemblyName:o,refName:n.refName,start:s,end:l}]},get hoverGenomeHighlights(){if(e.hoverPosition?.source==="genome")return[];let t=this.hoverStructureRange;if(t)return this.structureRangeToGenomeHighlight(t);let o=this.structureSeqHoverPos;return o===void 0?[]:this.structureRangeToGenomeHighlight({start:o,end:o+1})},get clickGenomeHighlights(){return this.structureRangeToGenomeHighlight(e.clickedStructureRange)},get hoverStructureLetter(){let t=e.hoverPosition?.code;if(t)return Wp[t]?.singleLetterCode;let o=this.structureSeqHoverPos;if(o!==void 0&&e.structureSequences?.[0])return e.structureSequences[0][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&&!!e.structureSequences?.[0]},get exactMatch(){let t=oe(e.userProvidedTranscriptSequence),o=e.structureSequences?.[0]?oe(e.structureSequences[0]):void 0;return t===o},get parentView(){return(0,Z.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 Ra(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(qi(t));e.setHoveredPosition(o!==void 0?{structureSeqPos:o}:void 0)}},clickAlignmentPosition(t){let o=e.coordinateMapper?.alignmentToStructure(qi(t));e.setSelectedFeatureId(void 0),o!==void 0?Wo({model:e,structureSeqPos:o}).catch(n=>{console.error(n),e.parentView.setError(n)}):e.setClickedStructureRange(void 0)}})).actions(e=>({afterAttach(){(0,Z.addDisposer)(e,(0,Jt.autorun)(async()=>{try{let{userProvidedTranscriptSequence:t,structureSequences:o,exactMatch:n,alignmentAlgorithm:r}=e,i=t,s=o?.[0];if(e.pairwiseAlignment||!i||!s)return;let l=oe(i),a=oe(s);if(n)e.setAlignment({consensus:"|".repeat(l.length),alns:[{id:"seq1",seq:l},{id:"seq2",seq:a}]});else{let u=jp(l,a,r);e.setAlignment(u),e.parentView.setShowAlignment(!0)}}catch(t){console.error(t),e.parentView.setError(t)}})),(0,Z.addDisposer)(e,(0,Jt.autorun)(()=>{let{hovered:t}=(0,_o.getSession)(e),{transcriptSeqToStructureSeqPosition:o,genomeToTranscriptSeqMapping:n,connectedView:r}=e;if(r?.initialized&&n&&Pt(t)){let{hoverPosition:i}=t,s=n.g2p[i.coord-1],l=s===void 0?void 0:o?.[s];e.setGenomeHoveredPosition(l)}else e.hoverPosition?.source==="genome"&&e.setGenomeHoveredPosition(void 0)})),(0,Z.addDisposer)(e,(0,Jt.autorun)(async()=>{let{molstarPluginContext:t}=e;if(t){let o=await Zn({plugin:t,kind:"click",onUpdate:n=>{n&&(e.setHoveredPosition(n),e.setSelectedFeatureId(void 0),Wo({model:e,structureSeqPos:n.structureSeqPos}).catch(r=>{console.error(r),e.parentView.setError(r)}))}});(0,Z.addDisposer)(e,o)}})),(0,Z.addDisposer)(e,(0,Jt.autorun)(async()=>{let{molstarPluginContext:t}=e;if(t){let o=await Zn({plugin:t,kind:"hover",onUpdate:n=>{e.setHoveredPosition(n)}});(0,Z.addDisposer)(e,o)}})),(0,Z.addDisposer)(e,(0,Jt.autorun)(async()=>{let{showHighlight:t,structureSeqToTranscriptSeqPosition:o,molstarPluginContext:n,molstarStructure:r}=e;if(r&&n&&o)if(t){let i=Object.keys(o).map(s=>+s+1);await Lp({structure:r,residues:i,plugin:n,mode:"select"})}else n.managers.interactivity.lociSelects.deselectAll()})),(0,Z.addDisposer)(e,(0,Jt.autorun)(async()=>{let{molstarStructure:t,molstarPluginContext:o,hoverStructureRange:n,structureSeqHoverPos:r}=e;t&&o&&(n?await Di({structure:t,plugin:o,startResidue:n.start+1,endResidue:n.end}):r!==void 0?await Ep({structure:t,plugin:o,selectedResidue:r,mode:"highlight"}):o.managers.interactivity.lociHighlights.clearHighlights())}))}})),Xn=Jd;Ht();var Kd="SuperpositionTransform";async function Gi(e){let{QueryContext:t,StructureElement:o,StructureSelection:n,StructureSelectionQueries:r,PluginCommands:i,PluginStateObject:s,tmAlign:l}=await ge(),a=e.managers.structure.hierarchy.current.structures;if(a.length<2)return;let{query:u}=r.trace,d=a.map(w=>{let h=w.cell.obj?.data;if(!h)return;let b=e.helpers.substructureParent.get(h);if(!b)return;let f=e.state.data.selectQ(v=>v.byValue(b).rootOfType(s.Molecule.Structure))[0]?.obj?.data;if(!f)return;let g=n.toLociWithSourceUnits(u(new t(h)));return o.Loci.remap(g,f)}).filter(w=>w!==void 0);if(d.length<2)return;let y=e.managers.structure.hierarchy.findStructure(d[0]?.structure)?.transform?.cell.obj?.data.coordinateSystem;for(let w=1;w<d.length;w++){let h=l(d[0],d[w]),{bTransform:b,tmScoreA:f,tmScoreB:g,rmsd:v,alignedLength:D}=h;await Yd(e,a[w].cell,b,y),e.log.info(`TM-align: TM-score=${f.toFixed(4)}/${g.toFixed(4)}, RMSD=${v.toFixed(2)} \xC5, aligned ${D} residues.`)}await new Promise(w=>requestAnimationFrame(w)),await i.Camera.Reset(e)}async function Yd(e,t,o,n){let{Mat4:r,StateObjectRef:i,StateTransforms:s}=await ge(),l=i.resolveAndCheck(e.state.data,t);if(!l)return;let a=e.state.data.selectQ(c=>c.byRef(l.transform.ref).subtree().withTransformer(s.Model.TransformStructureConformation))[0],m={transform:{name:"matrix",params:{data:n&&!r.isIdentity(n.matrix)?r.mul(r(),n.matrix,o):o,transpose:!1}}},d=a?e.state.data.build().to(a).update(m):e.state.data.build().to(t).insert(s.Model.TransformStructureConformation,m,{tags:Kd});await e.runTask(e.state.data.updateTree(d))}var $p="proteinView-settings",Zp=["showAlignment","showProteinTracks","showHighlight","zoomToBaseLevel","autoScrollAlignment","compactTracks"];function $d(){return ue.types.compose("ProteinView",Xp.BaseViewModel,ue.types.model({id:Qp.ElementId,type:ue.types.literal("ProteinView"),structures:ue.types.array(Xn),showControls:!1,height:ue.types.optional(ue.types.number,650),showHighlight:!1,zoomToBaseLevel:!0,autoScrollAlignment:!1,colorScheme:ue.types.optional(ue.types.enumeration("ColorScheme",kp),"default"),showAlignment:!0,showProteinTracks:!0,compactTracks:!0,alignmentAlgorithm:ue.types.optional(ue.types.string,Fo),connectedMsaViewId:ue.types.maybe(ue.types.string),init:ue.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(Xn.create({url:t.url,data:t.data,userProvidedTranscriptSequence:""}))}})).actions(e=>({async addStructureAndSuperpose(t){let{molstarPluginContext:o}=e;if(!o)return;let n=Xn.create({url:t.url,data:t.data,userProvidedTranscriptSequence:""});n.setLoadedToMolstar(!0),e.structures.push(n);try{n.setStructureData(await Kn({structure:t,plugin:o})),e.structures.length>1&&await Gi(o)}catch(r){e.setError(r),console.error(r)}}})).actions(e=>({afterAttach(){try{let t=localStorage.getItem($p);if(t){let o=JSON.parse(t);for(let n of Zp)o[n]!==void 0&&(e[n]=o[n])}}catch(t){console.error("Failed to restore protein view settings",t)}(0,ue.addDisposer)(e,(0,Ro.autorun)(()=>{try{let t={};for(let o of Zp)t[o]=e[o];localStorage.setItem($p,JSON.stringify(t))}catch(t){console.error("Failed to save protein view settings",t)}})),(0,ue.addDisposer)(e,(0,Ro.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,ue.addDisposer)(e,(0,Ro.autorun)(()=>{let{molstarPluginContext:t,colorScheme:o}=e,n=e.structures.filter(r=>r.structureSequences!==void 0).length;t&&n>0&&Cp({plugin:t,colorScheme:o}).catch(r=>{console.error(r),e.setError(r)})})),(0,ue.addDisposer)(e,(0,Ro.autorun)(Fp(e)))}})).views(e=>({get primaryStructure(){return e.structures[0]},menuItems(){return[{label:"Pairwise alignment",icon:ki,type:"checkbox",checked:e.showAlignment,onClick:()=>{e.setShowAlignment(!e.showAlignment)}},{label:"Protein feature tracks",icon:ki,type:"checkbox",checked:e.showProteinTracks,onClick:()=>{e.setShowProteinTracks(!e.showProteinTracks)}},{label:"Color scheme...",subMenu:To.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:ao,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&&Gi(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 protein feature view on hover",type:"checkbox",checked:e.autoScrollAlignment,onClick:()=>{e.setAutoScrollAlignment(!e.autoScrollAlignment)}}]}]}}))}var eu=$d;var Ag=(0,Lm.lazy)(()=>Promise.resolve().then(()=>(Fm(),Im)));function $i(e){e.addViewType(()=>new Em.ViewType({name:"ProteinView",displayName:"Protein view",stateModel:eu(),ReactComponent:Ag}))}var Gm=p(sn());var qm=p(io());var kg=(0,qm.ConfigurationSchema)("UniProtVariationAdapter",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz",locationType:"UriLocation"}},scoreField:{type:"string",defaultValue:""}},{explicitlyTyped:!0}),Dm=kg;function Zi(e){e.addAdapterType(()=>new Gm.default({name:"UniProtVariationAdapter",displayName:"UniProtVariation adapter",configSchema:Dm,getAdapterClass:()=>Promise.resolve().then(()=>(Um(),Hm)).then(t=>t.default)}))}var Om="0.4.13";var ir=class extends zm.default{name="ProteinViewer";version=Om;install(t){$i(t),Ti(t),Pi(t),yr(t),wr(t),xr(t),Zi(t)}configure(t){}};return Ym(Cg);})();
|
|
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 hd({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 bd({ticketId:e,signal:t}){return ho(`https://search.foldseek.com/api/result/${e}/0`,{signal:t})}async function Yl({ticketId:e,onStatusChange:t,signal:o}){let r=0;for(;r<180;){if(o?.aborted)throw o.reason;let i=await hd({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 bd({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 Nl(1e3,o),r++}throw new Error("Foldseek search timed out")}var yd=(0,$l.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 gi({selected:e,onChange:t,disabled:o}){let{classes:n}=yd();return it.default.createElement("div",{className:n.root},it.default.createElement("div",{className:n.header},it.default.createElement(Ze.Typography,{variant:"subtitle2"},"Databases to search:"),it.default.createElement("div",{className:n.buttons},it.default.createElement(Ze.Button,{size:"small",onClick:()=>{t(di.map(r=>r.id))},disabled:o},"Select all"),it.default.createElement(Ze.Button,{size:"small",onClick:()=>{t([])},disabled:o},"Clear"))),it.default.createElement(Ze.FormGroup,{className:n.checkboxGroup},di.map(r=>it.default.createElement(Ze.FormControlLabel,{key:r.id,control:it.default.createElement(Ze.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 B=p(x()),I=p(M()),tp=p(tt());var je=p(x()),Ql=p(Oe()),ep=p($()),Nt=p(M());var wd={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 Zl(e,t){return e.padStart(t," ")}function xd(e,t){return e.padEnd(t," ")}function fi(e){return e.toFixed(3).padStart(8," ")}function Xl(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 u=r[a],m=r[a+1],d=r[a+2],c=t[l-1]??"X",b=wd[c]??"UNK";if(u===void 0||m===void 0||d===void 0)break;let w="ATOM "+Zl(String(s),5)+" CA "+xd(b,3)+" "+o+Zl(String(l),4)+" "+fi(u)+fi(m)+fi(d)+" 1.00 0.00 C";i.push(w),s++,l++}return i.push("END"),i.join(`
|
|
27
|
+
`)}function hi(e,t){return!e||!t?!1:e.split(",").length>=3&&t.length>0}Re();function bi({hit:e,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}){let[l,a]=(0,je.useState)(null),u=!!l,m=yn(e.target),d=E=>{a(E.currentTarget)},c=()=>{a(null)},{runLaunch:b,launchError:w}=hn(s,c),h={session:t,view:o,feature:n,selectedTranscript:r,uniprotId:m},y=b(()=>{let E=!e.structureUrl&&hi(e.tCa,e.tSeq)?Xl(e.tCa,e.tSeq,"A",e.target):void 0;zt({...h,url:e.structureUrl,data:E,userProvidedTranscriptSequence:i})}),f=b(()=>{Eo(h)});if(!(!!e.structureUrl||hi(e.tCa,e.tSeq)))return je.default.createElement("span",null,"-");let v=(0,ep.isSessionWithAddTracks)(t)?t:void 0;return je.default.createElement(je.default.Fragment,null,w?je.default.createElement(Ql.ErrorMessage,{error:w}):null,je.default.createElement(Nt.Button,{size:"small",variant:"outlined",onClick:d},"Load"),je.default.createElement(Nt.Menu,{anchorEl:l,open:u,onClose:c},je.default.createElement(Nt.MenuItem,{onClick:y},"Launch 3D protein view"),v&&m?je.default.createElement(Nt.MenuItem,{onClick:b(()=>wn({session:v,view:o,feature:n,selectedTranscript:r,uniprotId:m,confidenceUrl:ol(e.target)}))},"Launch 1D protein annotation view"):null,m&&xn()?je.default.createElement(Nt.MenuItem,{onClick:f},"Launch MSA view (AlphaFoldDB a3m)"):null))}Re();var Sd=(0,tp.makeStyles)()({root:{display:"flex",flexDirection:"column",gap:16},tableContainer:{maxHeight:400},headerCell:{fontWeight:"bold",backgroundColor:"#f5f5f5"},noResults:{padding:16,textAlign:"center"}});function vd(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.slice(0,100)}function yi({results:e,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}){let{classes:l}=Sd(),a=vd(e);return a.length===0?B.default.createElement(I.Paper,{className:l.noResults},B.default.createElement(I.Typography,null,"No similar structures found")):B.default.createElement("div",{className:l.root},B.default.createElement(I.Typography,{variant:"subtitle2"},"Found ",a.length," similar structures"),B.default.createElement(I.TableContainer,{component:I.Paper,className:l.tableContainer},B.default.createElement(I.Table,{size:"small",stickyHeader:!0},B.default.createElement(I.TableHead,null,B.default.createElement(I.TableRow,null,B.default.createElement(I.TableCell,{className:l.headerCell},"Database"),B.default.createElement(I.TableCell,{className:l.headerCell},"Target"),B.default.createElement(I.TableCell,{className:l.headerCell},"Organism"),B.default.createElement(I.TableCell,{className:l.headerCell},"Prob"),B.default.createElement(I.TableCell,{className:l.headerCell},"Seq. Id."),B.default.createElement(I.TableCell,{className:l.headerCell},"Coverage"),B.default.createElement(I.TableCell,{className:l.headerCell},"E-value"),B.default.createElement(I.TableCell,{className:l.headerCell},"Actions"))),B.default.createElement(I.TableBody,null,a.map((u,m)=>B.default.createElement(I.TableRow,{key:`${u.db}-${u.target}-${m}`},B.default.createElement(I.TableCell,null,u.db),B.default.createElement(I.TableCell,null,u.target),B.default.createElement(I.TableCell,null,u.taxName??"-"),B.default.createElement(I.TableCell,null,u.prob!=null?`${(u.prob*100).toFixed(1)}%`:"-"),B.default.createElement(I.TableCell,null,u.seqId!=null?`${u.seqId.toFixed(1)}%`:"-"),B.default.createElement(I.TableCell,null,u.alnLength!=null&&u.qLen!=null?`${(u.alnLength/u.qLen*100).toFixed(1)}%`:"-"),B.default.createElement(I.TableCell,null,u.eval!=null?u.eval.toExponential(2):"-"),B.default.createElement(I.TableCell,null,B.default.createElement(bi,{hit:u,session:t,view:o,feature:n,selectedTranscript:r,userProvidedTranscriptSequence:i,onClose:s}))))))))}var Xe=p(x());function wi(){let[e,t]=(0,Xe.useState)(),[o,n]=(0,Xe.useState)(),[r,i]=(0,Xe.useState)(!1),[s,l]=(0,Xe.useState)(!1),[a,u]=(0,Xe.useState)(),[m,d]=(0,Xe.useState)(""),c=(0,Xe.useRef)(null);(0,Xe.useEffect)(()=>()=>{c.current?.abort()},[]);let b=()=>{c.current?.abort();let f=new AbortController;return c.current=f,f.signal},w=async f=>{let g=b();l(!0),u(void 0),d("Predicting 3Di structure...");try{let v=await Rl({aaSequence:f,signal:g});return n(v),v}catch(v){g.aborted||(console.error(v),u(v));return}finally{g.aborted||(l(!1),d(""))}},h=async(f,g,v=jn)=>{let E=b();i(!0),u(void 0),d("Submitting search...");try{let T=await Kl({aaSequence:f,di3Sequence:g,databases:v,signal:E}),G=await Yl({ticketId:T.id,onStatusChange:d,signal:E});return t(G),G}catch(T){E.aborted||(console.error(T),u(T));return}finally{E.aborted||(i(!1),d(""))}},y=()=>{c.current?.abort(),t(void 0),n(void 0),u(void 0),d("")};return{results:e,cleanedAaSequence:o?.aaSequence,di3Sequence:o?.di3Sequence,isLoading:r,isPredicting:s,error:a,statusMessage:m,predictStructure:w,search:h,reset:y}}ce();var Td=(0,np.makeStyles)()({dialogContent:{width:"80em",display:"flex",flexDirection:"column",gap:20},sequenceInput:{fontFamily:"monospace"},di3Section:{display:"flex",flexDirection:"column",gap:8}}),Ad=(0,op.observer)(function({feature:t,session:o,view:n,handleClose:r}){let{classes:i}=Td(),[s,l]=(0,K.useState)(),[a,u]=(0,K.useState)(jn),{results:m,cleanedAaSequence:d,di3Sequence:c,isLoading:b,isPredicting:w,error:h,statusMessage:y,predictStructure:f,search:g,reset:v}=wi(),{transcripts:E,isoformSequences:T,isLoading:G,error:W,selectedTranscriptId:ve,setSelectedTranscriptId:q,selectedTranscript:Pe,selectedIsoform:ie}=Wt({feature:t,view:n}),me=ie?ee(ie.seq):"",Y=s??me,oe=ke=>{q(ke),l(void 0)},Me=Y.trim().length>0&&!w&&!b,Ve=!!d&&!!c&&a.length>0&&!b,lt=h??W,_e=b||w;return K.default.createElement(K.default.Fragment,null,K.default.createElement(Ce.DialogContent,{className:i.dialogContent},lt&&!G?K.default.createElement(Ho.ErrorMessage,{error:lt}):null,G?K.default.createElement(Ho.LoadingEllipses,{variant:"subtitle2",message:"Loading transcript sequences"}):null,T?K.default.createElement(K.default.Fragment,null,K.default.createElement(jt,{val:ve,setVal:oe,isoforms:E,isoformSequences:T,feature:t,disabled:_e}),K.default.createElement(Ce.TextField,{label:"Protein sequence (amino acids)",multiline:!0,rows:4,value:Y,onChange:ke=>{l(ke.target.value)},placeholder:"MKTVRQERLKSIVRILERSKEPVSGAQLAEEL...",disabled:_e,InputProps:{className:i.sequenceInput}})):null,c?K.default.createElement("div",{className:i.di3Section},K.default.createElement(Ce.Typography,{variant:"subtitle2"},"3Di structural alphabet (used for searching):"),K.default.createElement(Ce.TextField,{multiline:!0,rows:4,value:c,InputProps:{className:i.sequenceInput,readOnly:!0}})):null,K.default.createElement(gi,{selected:a,onChange:u,disabled:_e}),y?K.default.createElement(Ho.LoadingEllipses,{variant:"subtitle2",message:y}):null,m?K.default.createElement(yi,{results:m,session:o,view:n,feature:t,selectedTranscript:Pe,userProvidedTranscriptSequence:Y,onClose:r}):null),K.default.createElement(Ce.DialogActions,null,K.default.createElement(Ce.Button,{variant:"contained",color:"secondary",onClick:()=>{r()}},"Cancel"),m?K.default.createElement(Ce.Button,{variant:"outlined",onClick:()=>{v()}},"New search"):null,c?K.default.createElement(Ce.Button,{variant:"contained",color:"primary",disabled:!Ve,onClick:()=>{g(d,c,a)}},b?"Searching...":"Search Foldseek"):K.default.createElement(Ce.Button,{variant:"contained",color:"primary",disabled:!Me,onClick:()=>{f(Y.trim())}},w?"Predicting...":"Predict 3Di structure")))}),rp=Ad;var De=p(x());xi();var mp=p(M()),Pd=(0,De.lazy)(()=>Promise.resolve().then(()=>(up(),pp)));function Uo(){let[e,t]=(0,De.useState)(!1);return De.default.createElement(De.default.Fragment,null,De.default.createElement(mp.IconButton,{onClick:()=>{t(!0)}},De.default.createElement(Wn,null)),e?De.default.createElement(De.Suspense,{fallback:null},De.default.createElement(Pd,{handleClose:()=>{t(!1)}})):null)}var Si=p(x());function Oo({children:e,value:t,index:o,...n}){return Si.default.createElement("div",{role:"tabpanel",hidden:t!==o,...n},t===o&&Si.default.createElement("div",null,e))}var j=p(x()),_n=p(Oe()),_t=p(M()),cp=p(_()),dp=p(tt());var ne=p(x()),te=p(M());Re();function vi({choice:e,setChoice:t,structureURL:o,setStructureURL:n,setFile:r,pdbId:i,setPdbId:s}){return ne.default.createElement("div",{style:{display:"flex",margin:30}},ne.default.createElement(te.Typography,null,"Open your structure file ",ne.default.createElement(Uo,null)),ne.default.createElement(te.FormControl,{component:"fieldset"},ne.default.createElement(te.RadioGroup,{value:e,onChange:l=>{t(l.target.value)}},ne.default.createElement(te.FormControlLabel,{value:"url",control:ne.default.createElement(te.Radio,null),label:"URL"}),ne.default.createElement(te.FormControlLabel,{value:"file",control:ne.default.createElement(te.Radio,null),label:"File"}),ne.default.createElement(te.FormControlLabel,{value:"pdb",control:ne.default.createElement(te.Radio,null),label:"PDB ID"}))),e==="url"?ne.default.createElement("div",null,ne.default.createElement(te.Typography,null,"Open a PDB/mmCIF/etc. file from remote URL"),ne.default.createElement(te.TextField,{label:"URL",value:o,onChange:l=>{n(l.target.value)}})):null,e==="file"?ne.default.createElement("div",{style:{paddingTop:20}},ne.default.createElement(te.Typography,null,"Open a PDB/mmCIF/etc. file from your local drive"),ne.default.createElement(te.Button,{variant:"outlined",component:"label"},"Choose File",ne.default.createElement("input",{type:"file",hidden:!0,onChange:({target:l})=>{let a=l.files?.[0];a&&r(a)}}))):null,e==="pdb"?ne.default.createElement(te.TextField,{value:i,onChange:l=>{let a=l.target.value;s(a),n(Lo(a))},label:"PDB ID"}):null)}Re();ce();var kd=(0,dp.makeStyles)()(e=>({dialogContent:{marginTop:e.spacing(6),width:"80em"},textAreaFont:{fontFamily:"Courier New"}}));function Cd(){return j.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,"," ",j.default.createElement(Te,{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 Md=(0,cp.observer)(function({feature:t,session:o,view:n,handleClose:r,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}){let{classes:l}=kd(),[a,u]=(0,j.useState)(),[m,d]=(0,j.useState)(""),[c,b]=(0,j.useState)("file"),[w,h]=(0,j.useState)(),[y,f]=(0,j.useState)(""),g=c==="file"?a:void 0,v=c==="file"?"":y,{sequences:E,error:T}=Vo({file:g,url:v}),G=g?.name??v.slice(v.lastIndexOf("/")+1),W=E?.[0],{transcripts:ve,isoformSequences:q,selectedTranscriptId:Pe,setSelectedTranscriptId:ie,selectedTranscript:me,selectedIsoform:Y,error:oe}=Wt({feature:t,view:n,structureSequence:W}),Me=oe??w??T,Ve=!!(v||g)&&!!Y&&!!me,lt=!!Y?.seq&&!!W&&ee(Y.seq)!==W,_e=async()=>{if(!(!Y||!me))try{let ke=g?await g.text():void 0;zt({session:o,view:n,feature:t,selectedTranscript:me,url:v||void 0,data:ke,userProvidedTranscriptSequence:Y.seq,alignmentAlgorithm:i}),r()}catch(ke){console.error(ke),h(ke)}};return j.default.createElement(j.default.Fragment,null,j.default.createElement(_t.DialogContent,{className:l.dialogContent},Me?j.default.createElement(_n.ErrorMessage,{error:Me}):null,j.default.createElement(Cd,null),j.default.createElement(vi,{choice:c,setChoice:b,structureURL:y,setStructureURL:f,setFile:u,pdbId:m,setPdbId:d}),j.default.createElement("div",{style:{margin:20}},q?W?j.default.createElement(j.default.Fragment,null,j.default.createElement(jt,{val:Pe,setVal:ie,structureSequence:W,isoforms:ve,feature:t,isoformSequences:q}),j.default.createElement(Co,{structureSequence:W,structureName:G,isoformSequences:q})):null:j.default.createElement(_n.LoadingEllipses,{title:"Loading protein sequences",variant:"h6"}))),j.default.createElement(_t.DialogActions,null,lt?j.default.createElement(Fo,{alignmentAlgorithm:i,onAlignmentAlgorithmChange:s}):null,j.default.createElement(_t.Button,{variant:"contained",color:"secondary",onClick:()=>{r()}},"Cancel"),j.default.createElement(_t.Button,{variant:"contained",color:"primary",disabled:!Ve,onClick:()=>{_e()}},"Launch 3-D protein structure view")))}),gp=Md;var fp=p(x());function hp(e,t){let[o,n]=(0,fp.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 Ti({handleClose:e,feature:t,model:o}){let[n,r]=(0,he.useState)(0),[i,s]=hp("jbrowse-protein3d-alignment-algorithm",Io),l=(0,Jn.getSession)(o),a=(0,Jn.getContainingView)(o);return he.default.createElement(bp.Dialog,{maxWidth:"xl",title:"Launch protein view",titleNode:he.default.createElement(he.default.Fragment,null,"Launch protein view ",he.default.createElement(Uo,null)),open:!0,onClose:e},he.default.createElement(wo.Tabs,{value:n,onChange:(u,m)=>{r(m)}},he.default.createElement(wo.Tab,{value:0,label:"AlphaFoldDB search"}),he.default.createElement(wo.Tab,{value:1,label:"Foldseek search"}),he.default.createElement(wo.Tab,{value:2,label:"Open file manually"})),he.default.createElement(Oo,{value:n,index:0},he.default.createElement(Jl,{session:l,view:a,feature:t,handleClose:e,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s})),he.default.createElement(Oo,{value:n,index:1},he.default.createElement(rp,{session:l,view:a,feature:t,handleClose:e})),he.default.createElement(Oo,{value:n,index:2},he.default.createElement(gp,{session:l,view:a,feature:t,handleClose:e,alignmentAlgorithm:i,onAlignmentAlgorithmChange:s})))}function Id(e){return e.name==="LinearBasicDisplay"}function Fd(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:va,onClick:()=>{let i=(0,Rn.getContainingTrack)(t);(0,Rn.getSession)(i).queueDialog(l=>[Ti,{model:i,handleClose:l,feature:n}])}}]:[]]}}})}function Ai(e){e.addToExtensionPoint("Core-extendPluggableElement",t=>(Id(t)&&(t.stateModel=Fd(t.stateModel)),t))}var yp=p(oo()),wp=p($());Re();ce();function Ld(e){if(typeof e=="string")return e;let{trackId:t}=e;return typeof t=="string"?t:void 0}function Ed(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 xp({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,wp.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 u={assemblyName:r,refName:l.getCanonicalRefName(a.refName)??a.refName,start:a.start,end:a.end},m=s.map(Ld).filter(f=>f!==void 0),d=e.getTracksById(),c="getFeatures",b=[];for(let f of m){let g=d[f];if(!g)continue;let v=await e.rpcManager.call(c,"CoreGetFeatures",{adapterConfig:(0,yp.readConfObject)(g,"adapter"),sessionId:c,regions:[u]});for(let E of v)b.push(...Ot(E))}let w=b.find(f=>Ed(f,o));if(!w)throw new Error(`transcript "${o}" not found at ${i} in tracks [${m.join(", ")}]`);if(!(w.get("subfeatures")??[]).some(f=>f.get("type")==="CDS"))throw new Error(`transcript "${o}" has no CDS subfeatures`);let y=await On({session:e,assemblyName:r,feature:w});if(!y)throw new Error(`could not translate a protein sequence for "${o}"`);return{url:io(t),feature:w.toJSON(),userProvidedTranscriptSequence:y}}gn();function Pi(e){e.addToExtensionPoint("LaunchView-ProteinView",async({session:t,url:o,uniprotId:n,transcriptId:r,userProvidedTranscriptSequence:i,feature:s,connectedViewId:l,connectedView:a,alignmentAlgorithm:u,displayName:m,height:d,showControls:c,showHighlight:b,zoomToBaseLevel:w,sideBySide:h})=>{let y;if(!o&&n)try{y=await xp({session:t,uniprotId:n,transcriptId:r,connectedView:a})}catch(T){console.error(T),t.notify(`Could not launch protein view: ${T}`,"error");return}let f=o??y?.url;if(!f){let T="No url or uniprotId provided when launching protein view";console.error(T),t.notify(`Could not launch protein view: ${T}`,"error");return}let g=!l&&!!a,v=l??(a?t.addView("LinearGenomeView",{type:"LinearGenomeView",init:a}).id:void 0),E=t.addView("ProteinView",{type:"ProteinView",alignmentAlgorithm:u,displayName:m,height:d,showControls:c,showHighlight:b,zoomToBaseLevel:w,structures:[{url:f,userProvidedTranscriptSequence:y?.userProvidedTranscriptSequence??i??"",feature:y?.feature??s,connectedViewId:v}]});g&&dn(t,E.id,h)})}var Mm=p(x()),Im=p(ki());var Yp=p(ki()),$p=p(Tp()),ue=p(Go());dt();var Pp=p(gt(),1),Ci=(0,ge.createSvgIcon)((0,Pp.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 Jo=p(Qt());Mi();function Mp(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 Ip(e){return!!e&&e.length>1&&e.every(t=>t>=0&&t<=100)&&new Set(e).size>1}async function Kn({structure:e,plugin:t}){let{model:o}=e.data?await Dn({data:e.data,plugin:t}):e.url?await Nn({url:e.url,plugin:t}):{model:void 0},n=o?Vn(o):void 0,r=o?Mp(o,n?.[0]?.length):void 0;return{sequences:n,confidence:r}}var Ii=p(Go());function Fp(e){let t=new Set;function o(n,r){t.add(n),Kn({structure:n,plugin:r}).then(i=>{let s=(0,Ii.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,Ii.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 _o=p($()),re=p(Go()),So=p(Qt());Li();ht();Po();var Np=e=>e;var Ei=e=>e;function Vp(e){let{structureSeqToTranscriptSeqPosition:t,transcriptSeqToStructureSeqPosition:o}=bs(e),n=ws(e),r=xs(e),i=cr(n),s=cr(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 Yn=["A","R","N","D","C","Q","E","G","H","I","L","K","M","F","P","S","T","W","Y","V","B","Z","X","*"],Nd=[[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]],Bp={};for(let e=0;e<Yn.length;e++){let t={};for(let o=0;o<Yn.length;o++)t[Yn[o]]=Nd[e][o];Bp[Yn[e]]=t}function jo(e,t){return Bp[e.toUpperCase()]?.[t.toUpperCase()]??-4}var Hp=-10,Up=-.5;function Vd(e,t,o=Hp,n=Up){let r=e.length,i=t.length,s=[],l=[],a=[];for(let y=0;y<=r;y++){s[y]=[],l[y]=[],a[y]=[];for(let f=0;f<=i;f++)s[y][f]=-1/0,l[y][f]=-1/0,a[y][f]=-1/0}s[0][0]=0;for(let y=1;y<=r;y++)l[y][0]=o+(y-1)*n;for(let y=1;y<=i;y++)a[0][y]=o+(y-1)*n;for(let y=1;y<=r;y++)for(let f=1;f<=i;f++){let g=jo(e[y-1],t[f-1]);s[y][f]=Math.max(s[y-1][f-1],l[y-1][f-1],a[y-1][f-1])+g,l[y][f]=Math.max(s[y-1][f]+o,l[y-1][f]+n),a[y][f]=Math.max(s[y][f-1]+o,a[y][f-1]+n)}let u="",m="",d=r,c=i,b=[s[r][i],l[r][i],a[r][i]],w=Math.max(...b),h=w===s[r][i]?"M":w===l[r][i]?"Ix":"Iy";for(;d>0||c>0;)if(h==="M"&&d>0&&c>0){u=e[d-1]+u,m=t[c-1]+m;let y=jo(e[d-1],t[c-1]),f=s[d-1][c-1],g=l[d-1][c-1];s[d][c]===f+y?h="M":s[d][c]===g+y?h="Ix":h="Iy",d--,c--}else if(h==="Ix"&&d>0)u=e[d-1]+u,m="-"+m,h=l[d][c]===s[d-1][c]+o?"M":"Ix",d--;else if(c>0)u="-"+u,m=t[c-1]+m,h=a[d][c]===s[d][c-1]+o?"M":"Iy",c--;else break;return{alignedSeq1:u,alignedSeq2:m,score:w}}function Bd(e,t,o=Hp,n=Up){let r=e.length,i=t.length,s=[],l=[],a=[],u=0,m=0,d=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 v=jo(e[f-1],t[g-1]);s[f][g]=Math.max(0,s[f-1][g-1]+v,l[f-1][g-1]+v,a[f-1][g-1]+v),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 E=Math.max(s[f][g],l[f][g],a[f][g]);E>u&&(u=E,m=f,d=g)}let c="",b="",w=m,h=d,y=s[w][h]>=l[w][h]&&s[w][h]>=a[w][h]?"M":l[w][h]>=a[w][h]?"Ix":"Iy";for(let f=e.length;f>m;f--)c=e[f-1]+c,b="-"+b;for(let f=t.length;f>d;f--)c="-"+c,b=t[f-1]+b;for(;w>0&&h>0;)if(y==="M"){if(s[w][h]===0)break;c=e[w-1]+c,b=t[h-1]+b;let f=jo(e[w-1],t[h-1]),g=s[w-1][h-1],v=l[w-1][h-1];s[w][h]===g+f?y="M":s[w][h]===v+f?y="Ix":y="Iy",w--,h--}else y==="Ix"?(c=e[w-1]+c,b="-"+b,l[w][h]===s[w-1][h]+o&&(y="M"),w--):(c="-"+c,b=t[h-1]+b,a[w][h]===s[w][h-1]+o&&(y="M"),h--);for(;w>0;)c=e[w-1]+c,b="-"+b,w--;for(;h>0;)c="-"+c,b=t[h-1]+b,h--;return{alignedSeq1:c,alignedSeq2:b,score:u}}function Hd(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!=="-"&&jo(r,i)>0?o.push(":"):o.push(" ")}return o.join("")}function Op(e,t,o){let{alignedSeq1:n,alignedSeq2:r}=o==="smith_waterman"?Bd(e,t):Vd(e,t);return{consensus:Hd(n,r),alns:[{id:"a",seq:n},{id:"b",seq:r}]}}var Gp=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]));Di();Vi();fo();function zd(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)}}async function Bi({plugin:e,kind:t,onUpdate:o}){let n=await qe(),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?zd(n,s):void 0)}else o(void 0)});return()=>{r.unsubscribe()}}Re();ce();Po();var Rd=re.types.model({url:re.types.maybe(re.types.string),data:re.types.maybe(re.types.string),connectedViewId:re.types.maybe(re.types.string),pairwiseAlignment:re.types.frozen(),feature:re.types.frozen(),userProvidedTranscriptSequence:re.types.string}).volatile(()=>({clickedStructureRange:void 0,hoverPosition:void 0,structureSequences:void 0,structureConfidence:void 0,isMouseInAlignment:!1,loadedToMolstar:!1,alignmentHoverRange:void 0,selectedFeatureId:void 0,hiddenFeatureTypes:new Set})).actions(e=>({setStructureData(t){e.structureSequences=t.sequences,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},setLoadedToMolstar(t){e.loadedToMolstar=t}})).views(e=>({get connectedView(){let{views:t}=(0,_o.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},setIsMouseInAlignment(t){e.isMouseInAlignment=t}})).views(e=>({get uniprotId(){let{url:t}=e;if(t)return yn(t)},get coordinateMapper(){return e.pairwiseAlignment?Vp(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 Ip(t)?Ni(t,this.structurePositionToAlignmentMap):[]},get hydrophobicityCells(){let t=e.structureSequences?.[0];return t?Ni(Wp(ee(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?eo(new _o.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(Np(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?qi({model:r,structureSeqPos:t.start,structureSeqEndPos:t.end}):$n({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 Gp[t]?.singleLetterCode;let o=this.structureSeqHoverPos;if(o!==void 0&&e.structureSequences?.[0])return e.structureSequences[0][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&&!!e.structureSequences?.[0]},get exactMatch(){let t=ee(e.userProvidedTranscriptSequence),o=e.structureSequences?.[0]?ee(e.structureSequences[0]):void 0;return t===o},get parentView(){return(0,re.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 za(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?Wo({model:e,structureSeqPos:o}).catch(n=>{console.error(n),e.parentView.setError(n)}):e.setClickedStructureRange(void 0)}})).actions(e=>({afterAttach(){let t=(o,n)=>{(0,re.addDisposer)(e,(0,So.autorun)(async()=>{let{molstarPluginContext:r}=e;r&&(0,re.addDisposer)(e,await Bi({plugin:r,kind:o,onUpdate:n}))}))};(0,re.addDisposer)(e,(0,So.autorun)(async()=>{try{let{userProvidedTranscriptSequence:o,structureSequences:n,exactMatch:r,alignmentAlgorithm:i}=e,s=o,l=n?.[0];if(e.pairwiseAlignment||!s||!l)return;let a=ee(s),u=ee(l);if(r)e.setAlignment({consensus:"|".repeat(a.length),alns:[{id:"seq1",seq:a},{id:"seq2",seq:u}]});else{let m=Op(a,u,i);e.setAlignment(m),e.parentView.setShowAlignment(!0)}}catch(o){console.error(o),e.parentView.setError(o)}})),(0,re.addDisposer)(e,(0,So.autorun)(()=>{let{hovered:o}=(0,_o.getSession)(e),{transcriptSeqToStructureSeqPosition:n,genomeToTranscriptSeqMapping:r,connectedView:i}=e;if(i?.initialized&&r&&kt(o)){let{hoverPosition:s}=o,l=r.g2p[s.coord-1],a=l===void 0?void 0:n?.[l];e.setGenomeHoveredPosition(a)}else e.hoverPosition?.source==="genome"&&e.setGenomeHoveredPosition(void 0)})),t("click",o=>{o&&(e.setHoveredPosition(o),e.setSelectedFeatureId(void 0),Wo({model:e,structureSeqPos:o.structureSeqPos}).catch(n=>{console.error(n),e.parentView.setError(n)}))}),t("hover",o=>{e.setHoveredPosition(o)}),(0,re.addDisposer)(e,(0,So.autorun)(async()=>{let{showHighlight:o,structureSeqToTranscriptSeqPosition:n,molstarPluginContext:r,molstarStructure:i}=e;i&&r&&n&&await zo({structure:i,plugin:r,channel:"select",spec:o?{kind:"list",residues:Object.keys(n).map(s=>+s)}:void 0})})),(0,re.addDisposer)(e,(0,So.autorun)(async()=>{let{molstarStructure:o,molstarPluginContext:n,hoverHighlightRange:r}=e;o&&n&&await zo({structure:o,plugin:n,channel:"highlight",spec:r?{kind:"range",...r}:void 0})}))}})),Zn=Rd;fo();var Kd="SuperpositionTransform";async function Hi(e){let{QueryContext:t,StructureElement:o,StructureSelection:n,StructureSelectionQueries:r,PluginCommands:i,PluginStateObject:s,tmAlign:l}=await qe(),a=e.managers.structure.hierarchy.current.structures;if(a.length<2)return;let{query:u}=r.trace,d=a.map(w=>{let h=w.cell.obj?.data;if(!h)return;let y=e.helpers.substructureParent.get(h);if(!y)return;let f=e.state.data.selectQ(v=>v.byValue(y).rootOfType(s.Molecule.Structure))[0]?.obj?.data;if(!f)return;let g=n.toLociWithSourceUnits(u(new t(h)));return o.Loci.remap(g,f)}).filter(w=>w!==void 0);if(d.length<2)return;let b=e.managers.structure.hierarchy.findStructure(d[0]?.structure)?.transform?.cell.obj?.data.coordinateSystem;for(let w=1;w<d.length;w++){let h=l(d[0],d[w]),{bTransform:y,tmScoreA:f,tmScoreB:g,rmsd:v,alignedLength:E}=h;await Yd(e,a[w].cell,y,b),e.log.info(`TM-align: TM-score=${f.toFixed(4)}/${g.toFixed(4)}, RMSD=${v.toFixed(2)} \xC5, aligned ${E} residues.`)}await new Promise(w=>requestAnimationFrame(w)),await i.Camera.Reset(e)}async function Yd(e,t,o,n){let{Mat4:r,StateObjectRef:i,StateTransforms:s}=await qe(),l=i.resolveAndCheck(e.state.data,t);if(!l)return;let a=e.state.data.selectQ(c=>c.byRef(l.transform.ref).subtree().withTransformer(s.Model.TransformStructureConformation))[0],m={transform:{name:"matrix",params:{data:n&&!r.isIdentity(n.matrix)?r.mul(r(),n.matrix,o):o,transpose:!1}}},d=a?e.state.data.build().to(a).update(m):e.state.data.build().to(t).insert(s.Model.TransformStructureConformation,m,{tags:Kd});await e.runTask(e.state.data.updateTree(d))}var Rp="proteinView-settings",Kp=["showAlignment","showProteinTracks","showHighlight","zoomToBaseLevel","autoScrollAlignment","compactTracks"];function $d(){return ue.types.compose("ProteinView",Yp.BaseViewModel,ue.types.model({id:$p.ElementId,type:ue.types.literal("ProteinView"),structures:ue.types.array(Zn),showControls:!1,height:ue.types.optional(ue.types.number,650),showHighlight:!1,zoomToBaseLevel:!0,autoScrollAlignment:!1,colorScheme:ue.types.optional(ue.types.enumeration("ColorScheme",kp),"default"),showAlignment:!0,showProteinTracks:!0,compactTracks:!0,alignmentAlgorithm:ue.types.optional(ue.types.string,Io),connectedMsaViewId:ue.types.maybe(ue.types.string),init:ue.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(Zn.create({url:t.url,data:t.data,userProvidedTranscriptSequence:""}))}})).actions(e=>({async addStructureAndSuperpose(t){let{molstarPluginContext:o}=e;if(!o)return;let n=Zn.create({url:t.url,data:t.data,userProvidedTranscriptSequence:""});n.setLoadedToMolstar(!0),e.structures.push(n);try{n.setStructureData(await Kn({structure:t,plugin:o})),e.structures.length>1&&await Hi(o)}catch(r){e.setError(r),console.error(r)}}})).actions(e=>({afterAttach(){try{let t=localStorage.getItem(Rp);if(t){let o=JSON.parse(t);for(let n of Kp)o[n]!==void 0&&(e[n]=o[n])}}catch(t){console.error("Failed to restore protein view settings",t)}(0,ue.addDisposer)(e,(0,Jo.autorun)(()=>{try{let t={};for(let o of Kp)t[o]=e[o];localStorage.setItem(Rp,JSON.stringify(t))}catch(t){console.error("Failed to save protein view settings",t)}})),(0,ue.addDisposer)(e,(0,Jo.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,ue.addDisposer)(e,(0,Jo.autorun)(()=>{let{molstarPluginContext:t,colorScheme:o}=e,n=e.structures.filter(r=>r.structureSequences!==void 0).length;t&&n>0&&Cp({plugin:t,colorScheme:o}).catch(r=>{console.error(r),e.setError(r)})})),(0,ue.addDisposer)(e,(0,Jo.autorun)(Fp(e)))}})).views(e=>({get primaryStructure(){return e.structures[0]},menuItems(){return[{label:"Pairwise alignment",icon:Ci,type:"checkbox",checked:e.showAlignment,onClick:()=>{e.setShowAlignment(!e.showAlignment)}},{label:"Protein feature tracks",icon:Ci,type:"checkbox",checked:e.showProteinTracks,onClick:()=>{e.setShowProteinTracks(!e.showProteinTracks)}},{label:"Color scheme...",subMenu:xo.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:ro,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&&Hi(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 protein feature view on hover",type:"checkbox",checked:e.autoScrollAlignment,onClick:()=>{e.setAutoScrollAlignment(!e.autoScrollAlignment)}}]}]}}))}var Zp=$d;var Ag=(0,Mm.lazy)(()=>Promise.resolve().then(()=>(Cm(),km)));function Ki(e){e.addViewType(()=>new Im.ViewType({name:"ProteinView",displayName:"Protein view",stateModel:Zp(),ReactComponent:Ag}))}var Bm=p(rn());var Fm=p(oo());var Pg=(0,Fm.ConfigurationSchema)("UniProtVariationAdapter",{location:{type:"fileLocation",defaultValue:{uri:"/path/to/my.bed.gz",locationType:"UriLocation"}},scoreField:{type:"string",defaultValue:""}},{explicitlyTyped:!0}),Lm=Pg;function Yi(e){e.addAdapterType(()=>new Bm.default({name:"UniProtVariationAdapter",displayName:"UniProtVariation adapter",configSchema:Lm,getAdapterClass:()=>Promise.resolve().then(()=>(Vm(),Nm)).then(t=>t.default)}))}var Hm="0.5.0";var ir=class extends Um.default{name="ProteinViewer";version=Hm;install(t){Ki(t),Ai(t),Pi(t),yr(t),wr(t),xr(t),Yi(t)}configure(t){}};return Jm(kg);})();
|
|
28
28
|
/*! Bundled license information:
|
|
29
29
|
|
|
30
30
|
use-sync-external-store/cjs/use-sync-external-store-shim.production.js:
|