UNPKG

pdbe-molstar

Version:
9 lines (8 loc) 5.78 MB
/** * pdbe-molstar * @version 3.6.0 * @link https://github.com/PDBeurope/pdbe-molstar * @license Apache 2.0 */ /*! For license information please see pdbe-molstar-plugin.js.LICENSE.txt */ (()=>{var __webpack_modules__={10073:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.applyAFTransparency=function(e,t,r){return n.__awaiter(this,arguments,void 0,(function*(e,t,r,i=70){return e.dataTransaction((a=>n.__awaiter(this,void 0,void 0,(function*(){const n=function(e,t){const r=s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.rel.lte([A.QualityAssessment.symbols.pLDDT.symbol(),e])})])])]),n=(0,c.compile)(r)(new o.QueryContext(t));return o.StructureSelection.toLociWithSourceUnits(n)}(i,t.cell.obj.data);yield d(e,t.components,r,n)}))),{canUndo:"Apply Transparency"})}))},t.setStructureTransparency=d,t.clearStructureTransparency=function(e,t,r){return n.__awaiter(this,void 0,void 0,(function*(){yield B(e,t,((e,t,A)=>n.__awaiter(this,void 0,void 0,(function*(){r&&r.length>0&&!r.includes(t.params.values.type.name)||A&&e.delete(A.transform.ref)}))))}))};const n=r(31635),A=r(38685),i=r(51139),o=r(28243),a=r(18842),s=r(13636),c=r(1366),l=r(66139),u=r(75216),g="transparency-controls";function d(e,t,r,A,s){return n.__awaiter(this,void 0,void 0,(function*(){yield B(e,t,((e,t,c)=>n.__awaiter(this,void 0,void 0,(function*(){if(s&&s.length>0&&!s.includes(t.params.values.type.name))return;const n=t.obj.data.sourceData;if(i.Loci.isEmpty(A)||(0,i.isEmptyLoci)(A))return;const l={bundle:o.StructureElement.Bundle.fromLoci(A),value:r};if(c){const t=h([...c.params.values.layers,l],n);e.to(c).update(u.Transparency.toBundle(t))}else{const r=h([l],n);e.to(t.transform.ref).apply(a.StateTransforms.Representation.TransparencyStructureRepresentation3DFromBundle,u.Transparency.toBundle(r),{tags:g})}}))))}))}function B(e,t,r){return n.__awaiter(this,void 0,void 0,(function*(){const n=e.state.data,A=n.build();for(const e of t)for(const t of e.representations){const e=n.select(l.StateSelection.Generators.ofTransformer(a.StateTransforms.Representation.TransparencyStructureRepresentation3DFromBundle,t.cell.transform.ref).withTag(g));yield r(A,t.cell,e[0])}return A.commit({doNotUpdateCurrent:!0})}))}function h(e,t){const r=u.Transparency.ofBundle(e,t.root),n=u.Transparency.merge(r);return u.Transparency.filter(n,t)}},15826:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CustomEvents=void 0;const n=r(92794),A=r(39303);var i;!function(e){function t(e){if("function"==typeof MouseEvent)return new MouseEvent(e,{view:window,bubbles:!0,cancelable:!0});if("function"==typeof document.createEvent){const t=document.createEvent("MouseEvents");return t.initEvent(e,!0,!0),t}throw new Error("Cannot create event")}function r(e,t,r){void 0!==t&&(void 0!==t.seq_id&&(t.residueNumber=t.seq_id),e.eventData=t,r.dispatchEvent(e))}e.add=function(e,i){const o=t("PDB.molstar.click"),a=t("PDB.molstar.mouseover"),s=t("PDB.molstar.mouseout");e.behaviors.interaction.click.subscribe((e=>{if(1===e.button&&e.current&&"empty-loci"!==e.current.loci.kind){const t=(0,A.lociDetails)(e.current.loci);t&&r(o,t,i)}})),e.behaviors.interaction.hover.pipe((0,n.debounceTime)(100)).subscribe((e=>{if(e.current&&e.current.loci&&"empty-loci"!==e.current.loci.kind){const t=(0,A.lociDetails)(e.current.loci);t&&r(a,t,i)}e.current&&e.current.loci&&"empty-loci"===e.current.loci.kind&&r(s,{},i)}))}}(i||(t.CustomEvents=i={}))},30699:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PDBeDomainAnnotations=void 0;const n=r(79668),A=r(9422),i=r(86270),o=r(89856);t.PDBeDomainAnnotations=n.PluginBehavior.create({name:"pdbe-domain-annotations-prop",category:"custom-props",display:{name:"Domain annotations",description:"Data for domain annotations, obtained via PDBe."},ctor:class extends n.PluginBehavior.Handler{constructor(){super(...arguments),this.provider=o.DomainAnnotationsProvider,this.labelDomainAnnotations={label:e=>{}}}register(){this.ctx.customModelProperties.register(this.provider,this.params.autoAttach),this.ctx.managers.lociLabels.addProvider(this.labelDomainAnnotations),this.ctx.representation.structure.themes.colorThemeRegistry.add(i.DomainAnnotationsColorThemeProvider)}update(e){const t=this.params.autoAttach!==e.autoAttach;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customModelProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}unregister(){this.ctx.customModelProperties.unregister(o.DomainAnnotationsProvider.descriptor.name),this.ctx.managers.lociLabels.removeProvider(this.labelDomainAnnotations),this.ctx.representation.structure.themes.colorThemeRegistry.remove(i.DomainAnnotationsColorThemeProvider)}},params:()=>({autoAttach:A.ParamDefinition.Boolean(!1),showTooltip:A.ParamDefinition.Boolean(!0)})})},86270:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DomainAnnotationsColorThemeProvider=void 0,t.DomainAnnotationsColorTheme=u;const n=r(28243),A=r(24815),i=r(78739),o=r(9422),a=r(89856),s={outside:i.Color.fromRgb(170,170,170),inside:i.Color.fromRgb(255,112,3)};function c(e,t){const r={};let n;const A=e.length;for(let i=0;i<A;i++){const A=e[i],a=t[i];a.length>0&&(null!=n||(n=A),r[A]=o.ParamDefinition.Group({domain:o.ParamDefinition.Select(a[0],a.map((e=>[e,e])))},{isFlat:!0}))}return r.None=o.ParamDefinition.Group({domain:o.ParamDefinition.Select("None",[["None","None"]],{isHidden:!0})},{isFlat:!0}),{source:o.ParamDefinition.MappedStatic(null!=n?n:"None",r,{options:Object.keys(r).map((e=>[e,e]))})}}const l=c([],[]);function u(e,t){let r;const A=t.source.name,i=t.source.params.domain;return r=e.structure&&!e.structure.isEmpty&&e.structure.models[0].customProperties.has(a.DomainAnnotationsProvider.descriptor)&&"None"!==A?e=>n.StructureElement.Location.is(e)&&a.DomainAnnotations.isInDomain(e,A,i)?s.inside:s.outside:()=>s.outside,{factory:u,granularity:"group",color:r,props:t,description:"Highlights Sequence and Structure Domain Annotations. Data obtained via PDBe."}}t.DomainAnnotationsColorThemeProvider={name:"pdbe-domain-annotations",label:"Domain annotations",category:A.ColorTheme.Category.Misc,factory:u,getParams:e=>c(a.DomainAnnotations.getDomainTypes(e.structure),a.DomainAnnotations.getDomainNames(e.structure)),defaultValues:o.ParamDefinition.getDefaultValues(l),isApplicable:e=>{var t;return a.DomainAnnotations.isApplicable(null===(t=e.structure)||void 0===t?void 0:t.models[0])},ensureCustomProperties:{attach:(e,t)=>t.structure?a.DomainAnnotationsProvider.attach(e,t.structure.models[0],void 0,!0):Promise.resolve(),detach:e=>e.structure&&a.DomainAnnotationsProvider.ref(e.structure.models[0],!1)}}},89856:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DomainAnnotationsProvider=t.DomainAnnotationsParams=t.DomainAnnotations=void 0;const n=r(31635),A=r(75434),i=r(10482),o=r(59859),a=r(28243),s=r(59374),c=r(55178),l=r(9422);var u;function g(e,t,r,n,A){const i=function(e,t,r){const n=(0,e.entities.getEntityIndex)(t);if(n<0||!e.entity_index_label_asym_id.has(n))return-1;const A=e.entity_index_label_asym_id.get(n);return A&&A.has(r)?A.get(r):-1}(t,r,n);if(i<0)return-1;const o=t.chain_index_auth_seq_id.get(i);return o.has(A)?o.get(A):-1}function d(e,t){return`${e}:${t}`}!function(e){function r(e,t){return`${t}/${e.toLowerCase()}`}function A(e,t){const r=i.PropertyWrapper.createInfo(),n=function(e,t){const r=[],n=[],A=new Map,i=["Pfam","InterPro","CATH","SCOP"];for(const o in t){if(!i.includes(o))continue;const a=[],c=t[o];for(const t in c){const r=c[t];for(const t of r.mappings){(0,s.arraySetAdd)(a,r.identifier);const n=e.atomicHierarchy.index.map;for(let e=t.start.residue_number;e<=t.end.residue_number;e++){const i=g(0,n,`${t.entity_id}`,t.chain_id,e),a=d(o,r.identifier),s=A.get(i);s?s.push(a):A.set(i,[a])}}}r.push(o),n.push(a)}return{domains:a.IndexedCustomProperty.fromResidueMap(A),domainNames:n,domainTypes:r}}(e,t);return{info:r,data:n}}e.DefaultServerUrl="https://www.ebi.ac.uk/pdbe/api/mappings",e.getEntryUrl=r,e.isApplicable=function(e){return!!e&&a.Model.hasPdbId(e)},e.fromJson=A,e.fromServer=function(e,t,i){return n.__awaiter(this,void 0,void 0,(function*(){const n=c.Asset.getUrlAsset(e.assetManager,r(t.entryId,i.serverUrl)),o=yield e.assetManager.resolve(n,"json").runInContext(e.runtime),a=o.data[t.entryId.toLowerCase()];if(!a)throw new Error("missing data");return{value:A(t,a),assets:[o]}}))};const o=[];function l(e){if(!a.Unit.isAtomic(e.unit))return o;const r=t.DomainAnnotationsProvider.get(e.unit.model).value;if(!r||!r.data)return o;const n=e.unit.residueIndex[e.element];return r.data.domains.has(n)?r.data.domains.get(n):o}e.getDomains=l,e.isInDomain=function(e,t,r){return l(e).includes(d(t,r))},e.getDomainTypes=function(e){const r=null==e?void 0:e.models[0];if(!r)return o;const n=t.DomainAnnotationsProvider.get(r).value;return n&&n.data?n.data.domainTypes:o},e.getDomainNames=function(e){const r=null==e?void 0:e.models[0];if(!r)return[];const n=t.DomainAnnotationsProvider.get(r).value;return n&&n.data?n.data.domainNames:[]}}(u||(t.DomainAnnotations=u={})),t.DomainAnnotationsParams={serverUrl:l.ParamDefinition.Text(u.DefaultServerUrl,{description:"JSON API Server URL"})},t.DomainAnnotationsProvider=A.CustomModelProperty.createProvider({label:"Domain annotations",descriptor:(0,o.CustomPropertyDescriptor)({name:"domain_annotations"}),type:"static",defaultParams:t.DomainAnnotationsParams,getParams:e=>t.DomainAnnotationsParams,isApplicable:e=>u.isApplicable(e),obtain:(e,r,A)=>n.__awaiter(void 0,void 0,void 0,(function*(){const n=Object.assign(Object.assign({},l.ParamDefinition.getDefaultValues(t.DomainAnnotationsParams)),A);try{return yield u.fromServer(e,r,n)}catch(e){return console.error("Could not obtain domain annotations"),{value:u.fromJson(r,{})}}}))})},80254:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.colorComponents=function(e,t){return n.__awaiter(this,void 0,void 0,(function*(){const{coreColor:r=o,componentColors:n=s,components:A,mappings:i={}}=t,a=[],c=[{tooltip:"<b>Base complex</b>"}];for(let e=0;e<A.length;e++){const t=A[e],r=n[e%n.length];a.push(...g(t,i[t],{color:l(r)})),c.push(...g(t,i[t],{tooltip:`<b>component ${t}</b>`}))}yield e.visual.select({data:a,nonSelectedColor:l(r),structureId:t.structId}),yield e.visual.tooltips({data:c,structureId:t.structId})}))},t.colorSubcomplex=function(e,t){return n.__awaiter(this,void 0,void 0,(function*(){const{coreColor:r=o,componentColors:n=s,baseComponents:A,baseMappings:i={},otherMappings:a={}}=t,c=new Set(t.otherComponents),d=[],B=[{tooltip:"<b>Base complex</b>"}],h=[],f=[{tooltip:"<b>Subcomplex</b>"}];for(let e=0;e<A.length;e++){const t=A[e];if(c.has(t)){const r=n[e%n.length];d.push(...g(t,i[t],{color:l(r)})),B.push(...g(t,i[t],{tooltip:`<b>common component ${t}</b>`})),h.push(...g(t,a[t],{color:u(r)})),f.push(...g(t,a[t],{tooltip:`<b>common component ${t}</b>`}))}else B.push(...g(t,i[t],{tooltip:`<b>additional component ${t}</b>`}))}t.baseStructId&&(yield e.visual.select({data:d,nonSelectedColor:l(r),structureId:t.baseStructId}),yield e.visual.tooltips({data:B,structureId:t.baseStructId})),t.otherStructId&&(yield e.visual.select({data:h,nonSelectedColor:u(r),structureId:t.otherStructId}),yield e.visual.tooltips({data:f,structureId:t.otherStructId}))}))},t.colorSupercomplex=function(e,t){return n.__awaiter(this,void 0,void 0,(function*(){const{coreColor:r=o,unmappedColor:n=a,componentColors:A=s,baseMappings:i={},otherMappings:c={}}=t,d=new Set(t.baseComponents),B=t.baseComponents.concat(t.otherComponents.filter((e=>!d.has(e)))),h=[],f=[{tooltip:"<b>Base complex</b>"}],p=[],I=[{tooltip:"<b>Supercomplex</b>"}];for(let e=0;e<B.length;e++){const t=B[e];if(d.has(t))h.push(...g(t,i[t],{color:l(r)})),f.push(...g(t,i[t],{tooltip:`<b>common component ${t}</b>`})),p.push(...g(t,c[t],{color:u(r)})),I.push(...g(t,c[t],{tooltip:`<b>common component ${t}</b>`}));else{const r=A[e%A.length];p.push(...g(t,c[t],{color:u(r)})),I.push(...g(t,c[t],{tooltip:`<b>additional component ${t}</b>`}))}}t.baseStructId&&(yield e.visual.select({data:h,nonSelectedColor:l(n),structureId:t.baseStructId}),yield e.visual.tooltips({data:f,structureId:t.baseStructId})),t.otherStructId&&(yield e.visual.select({data:p,nonSelectedColor:u(n),structureId:t.otherStructId}),yield e.visual.tooltips({data:I,structureId:t.otherStructId}))}))};const n=r(31635),A=r(78739),i=r(50584),o="#d8d8d8",a="#222222",s=["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#7f3c8d","#11a579","#3969ac","#f2b701","#e73f74","#80ba5a","#e68310","#008695","#cf1c90","#f97b72","#66c5cc","#f6cf71","#f89c74","#dcb0f2","#87c55f","#9eb9f3","#fe88b1","#c9db74","#8be0a4","#b497e7","#e5c494","#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854"],c=.75;function l(e){return A.Color.toHexStyle(A.Color.lighten((0,i.normalizeColor)(e),c))}function u(e){return A.Color.toHexStyle(A.Color.darken((0,i.normalizeColor)(e),c))}function g(e,t,r){return t?t.map((e=>Object.assign(Object.assign({},e),r))):[Object.assign({uniprot_accession:e},r)]}},1623:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Coloring=void 0,t.loadComplexSuperposition=function(e,t){return n.__awaiter(this,void 0,void 0,(function*(){var r,n,A,d,B,h,f;const{pdbId:p,assemblyId:I,animationDuration:m=250,coloring:Q,baseComponents:E,otherComponents:C,baseMappings:y,otherMappings:v,coreColor:b,unmappedColor:D,componentColors:w,method:S="biggest-matched-chain"}=t,F=a.PDBeMolstarPlugin.MAIN_STRUCTURE_ID,x=null!==(r=t.id)&&void 0!==r?r:`${p}_${I}`;if(Q){if(!E)throw new Error("`baseComponents` is required when `coloring` is not `undefined`");if(!C)throw new Error("`otherComponents` is required when `coloring` is not `undefined`")}"subcomplex"===Q&&(yield l.colorSubcomplex(e,{baseStructId:F,baseComponents:E,otherComponents:C,baseMappings:y,otherMappings:v,coreColor:b,componentColors:w})),"supercomplex"===Q&&(yield l.colorSupercomplex(e,{baseStructId:F,baseComponents:E,otherComponents:C,baseMappings:y,otherMappings:v,coreColor:b,unmappedColor:D,componentColors:w}));const U=(0,s.getStructureUrl)(e.initParams,{pdbId:p,queryType:"full"});yield e.load({url:U,isBinary:"bcif"===e.initParams.encoding,assemblyId:I,id:x},!1),yield e.visual.structureVisibility(x,!1);const N=null===(A=null===(n=e.getStructure(F))||void 0===n?void 0:n.cell.obj)||void 0===A?void 0:A.data;if(!N)throw new Error("Static structure not loaded");const M=null===(B=null===(d=e.getStructure(x))||void 0===d?void 0:d.cell.obj)||void 0===B?void 0:B.data;if(!M)throw new Error("Mobile structure not loaded");const{status:L,superposition:R}="biggest-matched-chain"===S?(0,u.superposeStructuresByBiggestCommonChain)(N,M,E,C):g(N,M);R&&(yield(0,c.transform)(e.plugin,e.getStructure(x).cell,R.bTransform)),"subcomplex"===Q&&(yield l.colorSubcomplex(e,{otherStructId:x,baseComponents:E,otherComponents:C,baseMappings:y,otherMappings:v,coreColor:b,componentColors:w})),"supercomplex"===Q&&(yield l.colorSupercomplex(e,{otherStructId:x,baseComponents:E,otherComponents:C,baseMappings:y,otherMappings:v,coreColor:b,unmappedColor:D,componentColors:w}));const k=e.getStructure(F),G=e.getStructure(x);return yield i.PluginCommands.Camera.FocusObject(e.plugin,{targets:[{targetRef:null==k?void 0:k.cell.transform.ref,extraRadius:.3},{targetRef:null===(f=null!==(h=null==G?void 0:G.transform)&&void 0!==h?h:G)||void 0===f?void 0:f.cell.transform.ref,extraRadius:.3}],durationMs:m}),yield(0,o.sleep)(m),yield e.visual.structureVisibility(x,!0),{id:x,status:L,superposition:R,delete:()=>e.deleteStructure(x)}}))},t.superposeStructuresByMolstarDefault=g;const n=r(31635),A=r(18236),i=r(17e3),o=r(39872),a=r(8509),s=r(50584),c=r(93901),l=n.__importStar(r(80254)),u=r(24723);function g(e,t){var r;const n=(0,A.alignAndSuperposeWithSIFTSMapping)([e,t],{traceOnly:!0}),i=null===(r=n.entries.find((e=>0===e.pivot&&1===e.other)))||void 0===r?void 0:r.transform;return i?{status:"success",superposition:Object.assign(Object.assign({},i),{nAlignedElements:Number.NaN})}:n.zeroOverlapPairs.find((e=>0===e[0]&&1===e[1]))?{status:"zero-overlap",superposition:void 0}:{status:"failed",superposition:void 0}}t.Coloring=n.__importStar(r(80254))},24723:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.superposeStructuresByBiggestCommonChain=function(e,t,r,A){const s=i(e,r),c=i(t,A),l=function(e,t){const r=o(e),n=o(t);let A,i=0;for(const o of r.accessions){const s=r.units[o],c=n.units[o];if(c)for(const r of s){if(r.size<=i)break;const n=e[o][r.unitId];for(const e of c){if(e.size<=i||r.size<=i)break;const s=t[o][e.unitId],c=a(n.atomMap,s.atomMap);c>i&&(i=c,A={accession:o,unitA:r.unitId,unitB:e.unitId,nMatchedElements:c})}}}return A}(s,c);if(!l)return{status:"zero-overlap",superposition:void 0};const u=e.unitMap.get(Number(l.unitA)),g=t.unitMap.get(Number(l.unitB)),d=s[l.accession][l.unitA],B=c[l.accession][l.unitB],h=n.MinimizeRmsd.Positions.empty(l.nMatchedElements),f=n.MinimizeRmsd.Positions.empty(l.nMatchedElements);let p=0;for(const e in d.atomMap){const t=B.atomMap[e];if(void 0===t)continue;const r=d.atomMap[e];h.x[p]=u.conformation.coordinates.x[r],h.y[p]=u.conformation.coordinates.y[r],h.z[p]=u.conformation.coordinates.z[r],f.x[p]=g.conformation.coordinates.x[t],f.y[p]=g.conformation.coordinates.y[t],f.z[p]=g.conformation.coordinates.z[t],p++}const I=n.MinimizeRmsd.compute({a:h,b:f});return isNaN(I.rmsd)?{status:"failed",superposition:void 0}:{status:"success",superposition:Object.assign(Object.assign({},I),{nAlignedElements:l.nMatchedElements})}};const n=r(17942),A=r(26511);function i(e,t){var r,n,i,o,a;const s=t?new Set(t):void 0,c=new Set,l={};for(const t of e.units){if(c.has(t.invariantId))continue;c.add(t.invariantId);const u=e.model.sourceData;if(!A.MmcifFormat.is(u))throw new Error("Source data must be mmCIF/BCIF");const g=t.model.atomicHierarchy,{pdbx_sifts_xref_db_acc:d,pdbx_sifts_xref_db_name:B,pdbx_sifts_xref_db_num:h}=u.data.db.atom_site,f=t.polymerElements,p=f.length;for(let e=0;e<p;e++){const A=f[e],c=g.atomSourceIndex.value(A);if("UNP"!==B.value(c))continue;const u=d.value(c);if(s&&!s.has(u))continue;const p=h.value(c),I=null!==(r=l[u])&&void 0!==r?r:l[u]={};null!==(i=(a=(null!==(n=I[o=t.id])&&void 0!==n?n:I[o]={label_asym_id:g.chains.label_asym_id.value(g.chainAtomSegments.index[f[0]]),auth_asym_id:g.chains.auth_asym_id.value(g.chainAtomSegments.index[f[0]]),atomMap:{}}).atomMap)[p])&&void 0!==i||(a[p]=A)}}return l}function o(e){const t={};for(const r in e){const n=e[r],A=[];for(const e in n){const t=Object.keys(n[e].atomMap).length;A.push({unitId:e,size:t})}A.sort(((e,t)=>t.size-e.size)),t[r]=A}return{accessions:Object.keys(t).sort(((e,r)=>t[r][0].size-t[e][0].size)),units:t}}function a(e,t){let r=0;for(const n in e)n in t&&r++;return r}},59986:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadFoldseekSuperposition=function(e,t,r){return n.__awaiter(this,arguments,void 0,(function*(e,t,r,n="#00ff00"){var A,l,u,g;const d=o.PDBeMolstarPlugin.MAIN_STRUCTURE_ID;let B,h,f,p,I;if("pdb"===r.database)[B,h]=r.target.split("_");else{if("afdb50"!==r.database)throw new Error(`Unknown database: ${r.database}`);B=r.target,h="A"}if(r.tstructure)f=r.tstructure.url,p="cif"===r.tstructure.format||"bcif"===r.tstructure.format?"mmcif":r.tstructure.format,I=r.tstructure.binary;else{if("pdb"!==r.database)throw"afdb50"===r.database?new Error("tstructure must be provided when database==='afdb50'"):new Error(`Unknown database: ${r.database}`);f=(0,a.getStructureUrl)(e.initParams,{pdbId:B,queryType:"atoms",queryParams:{auth_asym_id:h}}),p="mmcif",I="bcif"===e.initParams.encoding}yield e.load({url:f,format:p,isBinary:I,id:t},!1);const m=null===(l=null===(A=e.getStructure(d))||void 0===A?void 0:A.cell.obj)||void 0===l?void 0:l.data,Q=null===(g=null===(u=e.getStructure(t))||void 0===u?void 0:u.cell.obj)||void 0===g?void 0:g.data;if(!m)throw new Error("Query structure not loaded");if(!Q)throw new Error("Target structure not loaded");const[E,C]=function(e,t,r,n){if(t.length!==n.length)throw new Error("Length of qaln and taln must be the same");const A=t.length;let i=e,o=r;const a=[],s=[];for(let e=0;e<A;e++)"-"===t[e]?o++:("-"===n[e]||(a.push(i),s.push(o),o++),i++);return[a,s]}(r.qstart-1,r.qaln,r.tstart-1,r.taln),y=function(e,t){const r=e.model.entities.data,n=r._rowCount,A=e.model.atomicHierarchy.chains,i=A._rowCount,o=new Set;for(let e=0;e<n;e++)"polymer"===r.type.value(e)&&o.add(r.id.value(e));for(let e=0;e<i;e++)if(A.auth_asym_id.value(e)===t&&o.has(A.label_entity_id.value(e)))return A.label_asym_id.value(e);throw new Error(`There is no polymer chain with auth_asym_id ${t}.`)}(Q,h),[v,b]=function(e,t){const r=e.x.length;if(t.x.length!==r)throw new Error("ValueError: Positions a and b must have the same length");const n=[];for(let A=0;A<r;A++)isNaN(e.x[A])||isNaN(t.x[A])||n.push(A);const A=n.length;if(A===r)return[e,t];{const r=i.MinimizeRmsd.Positions.empty(A),o=i.MinimizeRmsd.Positions.empty(A);for(let i=0;i<A;i++){const A=n[i];r.x[i]=e.x[A],r.y[i]=e.y[A],r.z[i]=e.z[A],o.x[i]=t.x[A],o.y[i]=t.y[A],o.z[i]=t.z[A]}return[r,o]}}(c(m,E,"A"),c(Q,C,y)),D=i.MinimizeRmsd.compute({a:v,b});return yield(0,s.transform)(e.plugin,e.getStructure(t).cell,D.bTransform),yield e.visual.select({data:[{color:n}],structureId:t}),yield e.visual.reset({camera:!0}),Object.assign(Object.assign({},D),{nAligned:v.x.length})}))},t.exportModels=function(e,t="cif"){return(0,A.exportHierarchy)(e.plugin,{format:t})};const n=r(31635),A=r(98567),i=r(17942),o=r(8509),a=r(50584),s=r(93901);function c(e,t,r){const n=function(e,t){const r=e.model.atomicHierarchy,n=Array.from(r.chains.label_asym_id.toArray()).indexOf(t),A=r.chainAtomSegments.offsets[n],i=r.chainAtomSegments.offsets[n+1];return{start:r.residueAtomSegments.index[A],end:r.residueAtomSegments.index[i-1]+1}}(e,r),A=t.map((e=>n.start+e));if(A[A.length-1]>=n.end)throw new Error("Residues out of range");const o=function(e,t){const r=e.model.atomicHierarchy,n=e.model.atomicConformation,A=t.length,o=i.MinimizeRmsd.Positions.empty(A);for(let i=0;i<A;i++){const A=t[i],a=r.residueAtomSegments.offsets[A],s=r.residueAtomSegments.offsets[A+1];let c=-1;for(let e=a;e<s;e++)if("CA"===r.atoms.label_atom_id.value(e)){c=e;break}if(c>=0)o.x[i]=n.x[c],o.y[i]=n.y[c],o.z[i]=n.z[c];else{const t=r.residues.label_seq_id.value(A);console.warn(`Foldseek extension: C alpha not found for residue ${t} in ${e.model.entry}. Ignoring this residue.`),o.x[i]=NaN,o.y[i]=NaN,o.z[i]=NaN}}return o}(e,A);return o}},14628:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadInteractions_example=function(e,t){return h(e,Object.assign(Object.assign({},t),{interactions:f}))},t.loadInteractions=h,t.clearInteractions=function(e){return n.__awaiter(this,void 0,void 0,(function*(){const t=l(e.plugin).visuals;if(t){for(const e of t)yield e.delete();t.length=0}}))};const n=r(31635),A=r(72658),i=r(72010),o=r(48311),a=r(15883),s=r(8509),c=r(50584),l=r(58640).ExtensionCustomState.getter("pdbe-custom-interactions"),u="white",g=.075,d=.1,B=1;function h(e,t){return n.__awaiter(this,void 0,void 0,(function*(){var r,n,h;const f=null!==(r=t.structureId)&&void 0!==r?r:s.PDBeMolstarPlugin.MAIN_STRUCTURE_ID,p=e.getStructure(f);if(!p)throw new Error(`Did not find structure with ID "${f}"`);const I=function(e){var t,r,n,A,o,a,s;const l=i.MVSData.createBuilder(),h=l.primitives({opacity:null!==(t=e.opacity)&&void 0!==t?t:B,color:null!==(r=e.color)&&void 0!==r?r:u});for(const t of e.interactions)h.tube({start:{expressions:(0,c.queryParamsToMvsComponentExpressions)([t.start])},end:{expressions:(0,c.queryParamsToMvsComponentExpressions)([t.end])},radius:null!==(A=null!==(n=t.radius)&&void 0!==n?n:e.radius)&&void 0!==A?A:g,dash_length:null!==(a=null!==(o=t.dash_length)&&void 0!==o?o:e.dash_length)&&void 0!==a?a:d,color:t.color,tooltip:t.tooltip});const f=null===(s=l.getState().root.children)||void 0===s?void 0:s.find((e=>"primitives"===e.kind));if(!f)throw new Error('AssertionError: Failed to create MVS "primitives" subtree.');return f}(t),m=e.plugin.build(),Q=m.to(p.cell).apply(A.MVSInlinePrimitiveData,{node:I},{tags:["custom-interactions-data"]});Q.apply(A.MVSBuildPrimitiveShape,{kind:"mesh"}).apply(o.ShapeRepresentation3D,{},{tags:["custom-interactions-mesh"]}),Q.apply(A.MVSBuildPrimitiveShape,{kind:"lines"}).apply(o.ShapeRepresentation3D,{},{tags:["custom-interactions-lines"]}),Q.apply(A.MVSBuildPrimitiveShape,{kind:"labels"}).apply(o.ShapeRepresentation3D,{},{tags:["custom-interactions-labels"]}),yield m.commit();const E={ref:Q.ref,setVisibility:t=>(0,a.setSubtreeVisibility)(e.plugin.state.data,Q.ref,!t),delete:()=>e.plugin.build().delete(Q.ref).commit()};return(null!==(n=(h=l(e.plugin)).visuals)&&void 0!==n?n:h.visuals=[]).push(E),E}))}const f=[{start:{auth_asym_id:"C",auth_seq_id:143,atoms:["CBC"]},end:{auth_asym_id:"C",auth_seq_id:32,atoms:["CE"]},color:"yellow",tooltip:"<strong>Hydrophobic interaction</strong><br>HEM 143 | CBC — MET 32 | CE"},{start:{auth_asym_id:"C",auth_seq_id:143,atoms:["CBC"]},end:{auth_asym_id:"C",auth_seq_id:32,atoms:["SD"]},color:"yellow",tooltip:"<strong>Hydrophobic interaction</strong><br>HEM 143 | CBC — MET 32 | SD"},{start:{auth_asym_id:"C",auth_seq_id:143,atoms:["CMD"]},end:{auth_asym_id:"C",auth_seq_id:42,atoms:["O"]},color:"gray",tooltip:"<strong>Mixed interaction</strong><br>Vdw, Weak polar<br>HEM 143 | CMD — TYR 42 | O"},{start:{auth_asym_id:"C",auth_seq_id:143,atoms:["C1B","C2B","C3B","C4B","NB"]},end:{auth_asym_id:"C",auth_seq_id:136,atoms:["CD1"]},color:"magenta",tooltip:"<strong>CARBONPI interaction</strong><br>HEM 143 | C1B, C2B, C3B, C4B, NB — LEU 136 | CD1"}]},487:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StateGalleryExtensionFunctions=t.StateGallery=t.StateGalleryCustomState=t.StateGalleryExtensionName=void 0;const n=r(79668),A=r(51142),i=r(9422),o=r(79364),a=r(58640),s=r(94334),c=r(12039);t.StateGalleryExtensionName="pdbe-state-gallery",t.StateGalleryCustomState=a.ExtensionCustomState.getter(t.StateGalleryExtensionName),t.StateGallery=n.PluginBehavior.create({name:t.StateGalleryExtensionName,category:"misc",display:{name:"3D State Gallery",description:"Browse pre-computed 3D states for a PDB entry"},ctor:class extends n.PluginBehavior.Handler{register(){(0,t.StateGalleryCustomState)(this.ctx).requestedImage=new o.BehaviorSubject(void 0),(0,t.StateGalleryCustomState)(this.ctx).manager=new o.BehaviorSubject(void 0),(0,t.StateGalleryCustomState)(this.ctx).status=new o.BehaviorSubject("ready"),this.toggleStructureControls(this.params.showControls),this.toggleTitleBox(this.params.showTitleBox)}update(e){return!(0,A.shallowEqual)(e,this.params)&&(this.toggleStructureControls(e.showControls),this.toggleTitleBox(e.showTitleBox),this.params=e,!0)}unregister(){this.toggleStructureControls(!1),this.toggleTitleBox(!1),a.ExtensionCustomState.clear(this.ctx,t.StateGalleryExtensionName)}toggleStructureControls(e){a.PluginCustomControls.toggle(this.ctx,"structure-tools",t.StateGalleryExtensionName,c.StateGalleryControls,e)}toggleTitleBox(e){a.PluginCustomControls.toggle(this.ctx,"viewport-top-center",t.StateGalleryExtensionName,c.StateGalleryTitleBox,e)}},params:()=>({showControls:i.ParamDefinition.Boolean(!0,{description:'Show "3D State Gallery" section in Structure Tools controls'}),showTitleBox:i.ParamDefinition.Boolean(!0,{description:"Show a box in viewport with state title and arrows to move between states"})})}),t.StateGalleryExtensionFunctions={StateGalleryManager:s.StateGalleryManager,StateGalleryCustomState:t.StateGalleryCustomState,UI:{StateGalleryControls:c.StateGalleryControls}}},44735:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StateGalleryConfig=t.StateGalleryConfigDefaults=void 0,t.getStateGalleryConfig=function(e){return A.PluginConfigUtils.getConfigValues(e,t.StateGalleryConfig,t.StateGalleryConfigDefaults)};const n=r(31517),A=r(50584);t.StateGalleryConfigDefaults={ServerUrl:"https://www.ebi.ac.uk/pdbe/static/entry",LoadCanvasProps:!1,LoadCameraOrientation:!0,CameraPreTransitionMs:100,CameraTransitionMs:400},t.StateGalleryConfig={ServerUrl:new n.PluginConfigItem("pdbe-state-gallery.server-url",t.StateGalleryConfigDefaults.ServerUrl),LoadCanvasProps:new n.PluginConfigItem("pdbe-state-gallery.load-canvas-props",t.StateGalleryConfigDefaults.LoadCanvasProps),LoadCameraOrientation:new n.PluginConfigItem("pdbe-state-gallery.load-camera-orientation",t.StateGalleryConfigDefaults.LoadCameraOrientation),CameraPreTransitionMs:new n.PluginConfigItem("pdbe-state-gallery.camera-pre-transition-ms",t.StateGalleryConfigDefaults.CameraPreTransitionMs),CameraTransitionMs:new n.PluginConfigItem("pdbe-state-gallery.camera-transition-ms",t.StateGalleryConfigDefaults.CameraTransitionMs)}},94334:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StateGalleryManager=t.ImageCategory=void 0;const n=r(31635),A=r(2906),i=r(73868),o=r(17e3),a=r(35332),s=r(39872),c=r(79364),l=r(50584),u=r(487),g=r(44735),d=r(73666),B=r(94830);function h(e,t){if((0,a.isPlainObject)(t))for(const r in t){const n=t[r];"image"===r&&Array.isArray(n)?e.push(...n):h(e,n)}return e}t.ImageCategory=["Entry","Assemblies","Entities","Ligands","Modified residues","Domains","Miscellaneous"],t.StateGalleryManager=class{constructor(e,t,r,n){this.plugin=e,this.entryId=t,this.data=r,this.options=n,this.events={requestedImage:new c.BehaviorSubject(void 0),loadedImage:new c.BehaviorSubject(void 0),status:new c.BehaviorSubject("ready")},this.firstLoaded=!1,this.loader=new l.PreemptiveQueue((e=>this._load(e))),this.cache={};const A=function(e,t=!1){var r,n,A,i,o,a,s,c,u,g,B,f,p,I,m,Q,E;if(t){const t=[];for(const i of null!==(A=null===(n=null===(r=null==e?void 0:e.entry)||void 0===r?void 0:r.all)||void 0===n?void 0:n.image)&&void 0!==A?A:[])t.push(Object.assign(Object.assign(Object.assign({},i),{category:"Entry"}),d.ImageTitles.entry(i)));for(const r of null!==(s=null===(a=null===(o=null===(i=null==e?void 0:e.validation)||void 0===i?void 0:i.geometry)||void 0===o?void 0:o.deposited)||void 0===a?void 0:a.image)&&void 0!==s?s:[])t.push(Object.assign(Object.assign(Object.assign({},r),{category:"Entry"}),d.ImageTitles.validation(r)));for(const r of null!==(g=null===(u=null===(c=null==e?void 0:e.entry)||void 0===c?void 0:c.bfactor)||void 0===u?void 0:u.image)&&void 0!==g?g:[])t.push(Object.assign(Object.assign(Object.assign({},r),{category:"Entry"}),d.ImageTitles.bfactor(r)));const C=null==e?void 0:e.assembly;for(const e in C)for(const r of null!==(B=C[e].image)&&void 0!==B?B:[])t.push(Object.assign(Object.assign(Object.assign({},r),{category:"Assemblies"}),d.ImageTitles.assembly(r,{assemblyId:e})));const y=null==e?void 0:e.entity;for(const e in y)for(const r of null!==(f=y[e].image)&&void 0!==f?f:[])t.push(Object.assign(Object.assign(Object.assign({},r),{category:"Entities"}),d.ImageTitles.entity(r,{entityId:e})));const v=null===(p=null==e?void 0:e.entry)||void 0===p?void 0:p.ligands;for(const e in v)for(const r of null!==(I=v[e].image)&&void 0!==I?I:[])t.push(Object.assign(Object.assign(Object.assign({},r),{category:"Ligands"}),d.ImageTitles.ligand(r,{compId:e})));const b=null===(m=null==e?void 0:e.entry)||void 0===m?void 0:m.mod_res;for(const e in b)for(const r of null!==(Q=b[e].image)&&void 0!==Q?Q:[])t.push(Object.assign(Object.assign(Object.assign({},r),{category:"Modified residues"}),d.ImageTitles.modres(r,{compId:e})));for(const e in y){const r=y[e].database;for(const n in r){const A=r[n];for(const r in A)for(const i of null!==(E=A[r].image)&&void 0!==E?E:[])t.push(Object.assign(Object.assign(Object.assign({},i),{category:"Domains"}),d.ImageTitles.domain(i,{db:n,familyId:r,entityId:e})))}}return h(t,e),(0,l.distinct)(t,(e=>e.filename))}return h([],e)}(r,!0);var i;this.images=(i=["_side","_top"],A.filter((e=>!i.some((t=>e.filename.endsWith(t)))))),this.filenameIndex=(0,l.createIndex)(this.images.map((e=>e.filename))),this.events.status.subscribe((e=>{var t,r,n;const A=(0,u.StateGalleryCustomState)(this.plugin);null===(t=A.status)||void 0===t||t.next(e),(null===(r=A.manager)||void 0===r?void 0:r.value)!==this&&(null===(n=A.manager)||void 0===n||n.next(this))})),this.events.requestedImage.subscribe((e=>{var t,r,n;const A=(0,u.StateGalleryCustomState)(this.plugin);null===(t=A.requestedImage)||void 0===t||t.next(e),(null===(r=A.manager)||void 0===r?void 0:r.value)!==this&&(null===(n=A.manager)||void 0===n||n.next(this))}))}static create(e,t,r){return n.__awaiter(this,void 0,void 0,(function*(){const A=Object.assign(Object.assign({},(0,g.getStateGalleryConfig)(e)),r),i=yield function(e,t,r){return n.__awaiter(this,void 0,void 0,(function*(){const n=(0,l.combineUrl)(t,r+".json");try{const t=yield e.runTask(e.fetch(n));return JSON.parse(t)[r]}catch(e){return}}))}(e,A.ServerUrl,t);return void 0===i&&console.error(`StateGalleryManager failed to get data for entry ${t}`),new this(e,t,i,A)}))}_load(e){return n.__awaiter(this,void 0,void 0,(function*(){if(!this.plugin.canvas3d)throw new Error("plugin.canvas3d is not defined");let t=yield this.getSnapshot(e);const r=(n=this.plugin).canvas3d?(n.canvas3d.commit(),n.canvas3d.camera.getSnapshot()):A.Camera.createDefaultSnapshot();var n;const a=function(e){var t,r,n,A;const i=JSON.parse(e);return null===(A=null===(n=null===(r=null===(t=null==i?void 0:i.entries)||void 0===t?void 0:t[0])||void 0===r?void 0:r.snapshot)||void 0===n?void 0:n.camera)||void 0===A?void 0:A.current}(t),c=Object.assign(Object.assign({},r),function(e,t){if(void 0===t)return;const r=i.Vec3.sub((0,i.Vec3)(),t.target,t.position);return e.getInvariantFocus(t.target,t.radius,t.up,r)}(this.plugin.canvas3d.camera,a));t=function(e,t){var r;const n=JSON.parse(e);for(const e of null!==(r=n.entries)&&void 0!==r?r:[])if(e.snapshot&&(t.removeCanvasProps&&e.snapshot.canvas3d&&delete e.snapshot.canvas3d.props,t.replaceCamera)){const{camera:r,transitionDurationInMs:n}=t.replaceCamera;e.snapshot.camera={current:r,transitionStyle:n>0?"animate":"instant",transitionDurationInMs:n>0?n:void 0}}return JSON.stringify(n)}(t,{removeCanvasProps:!this.options.LoadCanvasProps,replaceCamera:{camera:this.options.LoadCameraOrientation&&!this.firstLoaded?c:r,transitionDurationInMs:0}}),yield this.plugin.managers.snapshot.setStateSnapshot(JSON.parse(t)),yield(0,s.sleep)(this.firstLoaded?this.options.CameraPreTransitionMs:0),yield o.PluginCommands.Camera.Reset(this.plugin,{snapshot:this.options.LoadCameraOrientation?c:void 0,durationMs:this.firstLoaded?this.options.CameraTransitionMs:0}),this.firstLoaded=!0}))}load(e){return n.__awaiter(this,void 0,void 0,(function*(){var t;let r;"string"==typeof e&&(e=null!==(t=this.getImageByFilename(e))&&void 0!==t?t:{filename:e}),this.events.requestedImage.next(e),this.events.loadedImage.next(void 0),this.events.status.next("loading");try{return r=yield this.loader.requestRun(e.filename),r}finally{"completed"===(null==r?void 0:r.status)&&(this.events.loadedImage.next(e),this.events.status.next("ready")),r||this.events.status.next("error")}}))}shift(e){return n.__awaiter(this,void 0,void 0,(function*(){const t=this.events.requestedImage.value,r=void 0!==t?this.filenameIndex.get(t.filename):void 0;let n=void 0!==r?r+e:e>0?e-1:e;return n=(0,l.nonnegativeModulo)(n,this.images.length),yield this.load(this.images[n])}))}loadPrevious(){return n.__awaiter(this,void 0,void 0,(function*(){return yield this.shift(-1)}))}loadNext(){return n.__awaiter(this,void 0,void 0,(function*(){return yield this.shift(1)}))}fetchSnapshot(e){return n.__awaiter(this,void 0,void 0,(function*(){const t=(0,l.combineUrl)(this.options.ServerUrl,`${e}.molj`),r=yield this.plugin.runTask(this.plugin.fetch({url:t,type:"string"}));return B.StringLike.toString(r)}))}getSnapshot(e){return n.__awaiter(this,void 0,void 0,(function*(){var t,r;return null!==(t=(r=this.cache)[e])&&void 0!==t?t:r[e]=yield this.fetchSnapshot(e)}))}getImageByFilename(e){const t=this.filenameIndex.get(e);if(void 0!==t)return this.images[t]}}},73666:(e,t)=>{"use strict";function r(e){const t=(null!=e?e:"").matchAll(/<span [^>]*>([^<]*)<\/span>/g);return Array.from(t).map((e=>e[1]))}function n(e){var t;return null===(t=null==e?void 0:e.match(/\((.*)\)/))||void 0===t?void 0:t[1]}Object.defineProperty(t,"__esModule",{value:!0}),t.ImageTitles=void 0,t.ImageTitles={entry:e=>e.filename.includes("_chemically_distinct_molecules")?{title:"Deposited model (color by entity)"}:e.filename.includes("_chain")?{title:"Deposited model (color by chain)"}:{},validation:e=>({title:"Geometry validation"}),bfactor:e=>({title:"B-factor"}),assembly:(e,t)=>e.filename.includes("_chemically_distinct_molecules")?{title:`Assembly ${t.assemblyId} (color by entity)`}:e.filename.includes("_chain")?{title:`Assembly ${t.assemblyId} (color by chain)`}:{},entity(e,t){const n=r(e.description)[1];return{title:`Entity ${t.entityId}`,subtitle:n}},ligand(e,t){const A=n(r(e.description)[0]);return{title:`Ligand environment for ${t.compId}`,subtitle:A}},modres(e,t){const A=n(r(e.description)[1]);return{title:`Modified residue ${t.compId}`,subtitle:A}},domain(e,t){const A=n(r(e.description)[1]);return{title:`${t.db} ${t.familyId} (entity ${t.entityId})`,subtitle:A}}}},12039:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StateGalleryControls=void 0,t.StateGalleryManagerControls=p,t.StateGalleryTitleBox=function(){var e;const t=l.default.useContext(i.PluginReactContext),[r,n]=l.default.useState(void 0),[s,c]=l.default.useState(void 0),[u,B]=l.default.useState("ready"),h=(0,l.useRef)(0);return l.default.useEffect((()=>{var e,r,A;const i=(0,d.StateGalleryCustomState)(t),o=[null===(e=i.requestedImage)||void 0===e?void 0:e.subscribe((e=>n(e))),null===(r=i.manager)||void 0===r?void 0:r.subscribe((e=>c(e))),null===(A=i.status)||void 0===A?void 0:A.subscribe((e=>{const t=++h.current;"loading"===e?setTimeout((()=>{h.current===t&&B("loading")}),250):B(e)}))];return()=>o.forEach((e=>null==e?void 0:e.unsubscribe()))}),[t]),void 0===r?null:(0,A.jsxs)("div",{className:"pdbemolstar-state-gallery-title-box",children:[s&&(0,A.jsx)("div",{children:(0,A.jsx)(o.Button,{className:"msp-btn-icon",title:"Previous state",icon:g.ChevronLeftSvg,onClick:()=>s.loadPrevious()})}),(0,A.jsxs)("div",{className:"pdbemolstar-state-gallery-title",title:m(r,u),children:[(0,A.jsx)("div",{className:"pdbemolstar-state-gallery-title-icon",children:(0,A.jsx)(a.Icon,{svg:"error"===u?a.ErrorSvg:"loading"===u?g.HourglassBottomSvg:g.EmptyIconSvg})}),(0,A.jsxs)("div",{className:"pdbemolstar-state-gallery-title-text",children:[null!==(e=r.title)&&void 0!==e?e:r.filename,(0,A.jsx)("br",{}),(0,A.jsx)("small",{children:r.subtitle})]})]}),s&&(0,A.jsx)("div",{children:(0,A.jsx)(o.Button,{className:"msp-btn-icon",title:"Next state",icon:g.ChevronRightSvg,onClick:()=>null==s?void 0:s.loadNext()})})]})};const n=r(31635),A=r(74848),i=r(79632),o=r(30099),a=r(96410),s=r(90336),c=r(9422),l=n.__importStar(r(96540)),u=r(50584),g=r(41898),d=r(487),B=r(94334),h={entryId:c.ParamDefinition.Text(void 0,{label:"Entry ID"})};class f extends i.CollapsableControls{constructor(){super(...arguments),this.onChangeValues=e=>{this.setState({entryId:e.entryId})},this.load=()=>n.__awaiter(this,void 0,void 0,(function*(){if(this.loadDisabled())return;this.setState({isLoading:!0,description:void 0});const e=yield B.StateGalleryManager.create(this.plugin,this.state.entryId);this.setState({manager:e,isLoading:!1,description:this.state.entryId.toUpperCase()})})),this.loadDisabled=()=>{var e;return!this.state.entryId||this.state.entryId===(null===(e=this.state.manager)||void 0===e?void 0:e.entryId)||this.state.isBusy||this.state.isLoading}}defaultState(){var e,t;const r=null===(e=(0,d.StateGalleryCustomState)(this.plugin).manager)||void 0===e?void 0:e.value;return{header:"3D State Gallery",brand:{accent:"green",svg:g.CollectionsOutlinedSvg},isCollapsed:!1,entryId:null!==(t=null==r?void 0:r.entryId)&&void 0!==t?t:"",manager:r,isLoading:!1,isBusy:!1,description:null==r?void 0:r.entryId.toUpperCase()}}componentDidMount(){this.subscribe(this.plugin.managers.structure.hierarchy.behaviors.selection,(e=>{var t;if(""===this.state.entryId&&e.structures.length>0){const r=null===(t=e.structures[0].cell.obj)||void 0===t?void 0:t.data.model.entryId;r&&this.setState({entryId:r.toLowerCase()})}})),this.subscribe(this.plugin.behaviors.state.isBusy,(e=>this.setState({isBusy:e})))}get values(){return{entryId:this.state.entryId}}renderControls(){return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(s.ParameterControls,{params:h,values:this.values,onChangeValues:this.onChangeValues,onEnter:this.load}),(!this.state.manager||this.state.manager.entryId!==this.state.entryId)&&(0,A.jsx)(o.Button,{icon:this.state.isLoading?void 0:a.CheckSvg,title:"Load",disabled:this.loadDisabled(),onClick:this.load,className:"msp-btn-block",children:this.state.isLoading?"Loading...":"Load"}),this.state.manager&&(0,A.jsx)(p,{manager:this.state.manager})]})}}function p(e){var t;const r=e.manager.images,i=r.length,a=l.default.useMemo((()=>(0,u.groupElements)(r,(e=>{var t;return null!==(t=e.category)&&void 0!==t?t:"Miscellaneous"}))),[r]),[s,c]=l.default.useState(void 0),[g,d]=l.default.useState("ready"),B=l.default.useRef(null);return l.default.useEffect((()=>{var t;r.length>0&&void 0===e.manager.events.requestedImage.value&&e.manager.load(r[0]),null===(t=B.current)||void 0===t||t.focus();const n=[e.manager.events.status.subscribe((e=>d(e))),e.manager.events.requestedImage.subscribe((e=>c(e)))];return()=>n.forEach((e=>e.unsubscribe()))}),[e.manager]),0===i?(0,A.jsxs)("div",{style:{margin:8},children:["No data available for ",e.manager.entryId,"."]}):(0,A.jsxs)("div",{className:"pdbemolstar-state-gallery-controls",onKeyDown:t=>n.__awaiter(this,void 0,void 0,(function*(){"ArrowLeft"===t.code&&(yield e.manager.loadPrevious()),"ArrowRight"===t.code&&(yield e.manager.loadNext())})),tabIndex:-1,ref:B,children:[(0,A.jsx)(o.ExpandGroup,{header:"States",initiallyExpanded:!0,children:(0,A.jsx)("div",{style:{marginBottom:8},children:a.groups.map((t=>{var r;return(0,A.jsx)(o.ExpandGroup,{header:t,initiallyExpanded:!0,children:null===(r=a.members.get(t))||void 0===r?void 0:r.map((t=>(0,A.jsx)(I,{img:t,isSelected:t===s,status:g,onClick:()=>e.manager.load(t)},t.filename)))},t)}))})},"states"),(0,A.jsx)(o.ExpandGroup,{header:"Description",initiallyExpanded:!0,children:(0,A.jsx)("div",{className:"pdbemolstar-state-gallery-legend",children:(0,A.jsx)("div",{dangerouslySetInnerHTML:{__html:null!==(t=null==s?void 0:s.description)&&void 0!==t?t:""}})})},"description")]})}function I(e){var t;const{img:r,isSelected:n,status:i,onClick:s}=e,c=n?"loading"===i?g.HourglassBottomSvg:"error"===i?a.ErrorSvg:a.CheckSvg:g.EmptyIconSvg,l=m(r,n?i:"ready");return(0,A.jsxs)(o.Button,{className:"msp-action-menu-button pdbemolstar-state-gallery-state-button",icon:c,onClick:s,title:l,style:{fontWeight:n?"bold":void 0},children:[null!==(t=r.title)&&void 0!==t?t:r.filename,r.subtitle&&(0,A.jsxs)("small",{children:["  ",r.subtitle]})]})}function m(e,t){var r;return("error"===t?"[Failed to load] \n":"loading"===t?"[Loading] \n":"")+(null!==(r=e.title)&&void 0!==r?r:e.filename)+(e.subtitle?`: ${e.subtitle}`:"")}t.StateGalleryControls=f},50584:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PluginConfigUtils=t.PreemptiveQueue=t.StructureComponentTags=t.Tags=t.ModelInfo=t.QueryHelper=t.LigandView=t.AlphafoldView=t.PDBeVolumes=void 0,t.queryParamsToMvsComponentExpressions=function(e){return(t=e,r=["atoms","atom_id"],r.reduce(((e,t)=>function(e,t){const r=[];for(const n of e)if(void 0===n[t])r.push(n);else for(const e of n[t])r.push(Object.assign(Object.assign({},n),{[t]:e}));return r}(e,t)),t)).map((e=>{var t;return{label_entity_id:e.entity_id,label_asym_id:e.struct_asym_id,auth_asym_id:e.auth_asym_id,label_seq_id:e.residue_number,auth_seq_id:null!==(t=e.auth_seq_id)&&void 0!==t?t:e.auth_residue_number,pdbx_PDB_ins_code:e.auth_ins_code_id,beg_label_seq_id:e.start_residue_number,end_label_seq_id:e.end_residue_number,beg_auth_seq_id:e.start_auth_residue_number,end_auth_seq_id:e.end_auth_residue_number,label_atom_id:e.atoms,auth_atom_id:void 0,type_symbol:void 0,atom_id:e.atom_id,atom_index:void 0,label_comp_id:e.label_comp_id,auth_comp_id:void 0}}));var t,r},t.runWithProgressMessage=function(e,t,r){return n.__awaiter(this,void 0,void 0,(function*(){const A=h.Task.create(null!=t?t:"Task",(e=>n.__awaiter(this,void 0,void 0,(function*(){let n=!1;try{t&&setTimeout((()=>{n||e.update(t)}),1e3),yield r()}finally{n=!0}}))));yield e.runTask(A)}))},t.getStructureUrl=function(e,t){const r=e.pdbeUrl.replace(/\/$/,"");if("full"!==t.queryType||e.lowPrecisionCoords){const n=Object.assign(Object.assign({},t.queryParams),{encoding:e.encoding,lowPrecisionCoords:e.lowPrecisionCoords?1:void 0}),A=Object.entries(n).filter((([e,t])=>void 0!==t)).map((([e,t])=>`${e}=${t}`)).join("&"),i=`${r}/model-server/v1/${t.pdbId}/${t.queryType}`;return""!==A?`${i}?${A}`:i}{const n="bcif"===e.encoding?".bcif":"_updated.cif";return`${r}/entry-files/download/${t.pdbId}${n}`}},t.combineUrl=function(e,...t){let r=e;for(const e of t)r=r.replace(/\/$/,"")+"/"+e;return r},t.addDefaults=D,t.normalizeColor=function(e,t=f.Color.fromRgb(170,170,170)){var r,n,A;try{if(null==e)return t;if("number"==typeof e)return(0,f.Color)(e);if("string"==typeof e&&"#"===e[0])return(0,f.Color)(Number(`0x${e.substring(1)}`));if("string"==typeof e&&e in p.ColorNames)return p.ColorNames[e];if("object"==typeof e)return f.Color.fromRgb(null!==(r=e.r)&&void 0!==r?r:0,null!==(n=e.g)&&void 0!==n?n:0,null!==(A=e.b)&&void 0!==A?A:0)}catch(e){}return t},t.applyOverpaint=function(e,r,A){return n.__awaiter(this,void 0,void 0,(function*(){var n;if(0===A.length)return;const i=e.build();for(const o of r.components)if(!(null===(n=o.cell.transform.tags)||void 0===n?void 0:n.includes(t.Tags.AddedComponent)))for(const r of o.representations){const n=e.state.data.select(B.StateSelection.Generators.ofTransformer(s.StateTransforms.Representation.OverpaintStructureRepresentation3DFromBundle,r.cell.transform.ref).withTag(t.Tags.Overpaint));0===n.length?i.to(r.cell.transform.ref).apply(s.StateTransforms.Representation.OverpaintStructureRepresentation3DFromBundle,{layers:A},{tags:t.Tags.Overpaint}):i.to(n[0]).update((e=>({layers:e.layers.concat(A)})))}yield i.commit()}))},t.getComponentTypeFromTags=function(e){let r;for(r in t.StructureComponentTags)if(t.StructureComponentTags[r].some((t=>null==e?void 0:e.includes(t))))return r},t.distinct=function(e,t=e=>e){const r=[],n=new Set;for(const A of e){const e=t(A);n.has(e)||(r.push(A),n.add(e))}return r},t.groupElements=function(e,t){const r=[],n=new Map;for(const A of e){const e=t(A);n.has(e)?n.get(e).push(A):(r.push(e),n.set(e,[A]))}return{groups:r,members:n}},t.createIndex=function(e){const t=new Map;return e.forEach(((e,r)=>t.set(e,r))),t},t.nonnegativeModulo=function(e,t){const r=e%t;return r<0?r+t:r},t.pluginLayoutStateFromInitParams=function(e){return{isExpanded:e.expanded,showControls:!e.hideControls,regionState:{left:e.leftPanel?"full":"hidden",right:e.rightPanel?"full":"hidden",top:e.sequencePanel?"full":"hidden",bottom:e.logPanel?"full":"hidden"},controlsDisplay:e.reactive?"reactive":e.landscape?"landscape":u.PluginLayoutStateParams.controlsDisplay.defaultValue}},t.getRotationMat4=function(e){switch(e){case"front":return i.Mat4.identity();case"back":return[-1,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,1];case"right":return[0,0,-1,0,0,1,0,0,1,0,0,0,0,0,0,1];case"left":return[0,0,1,0,0,1,0,0,-1,0,0,0,0,0,0,1];case"top":return[1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1];case"bottom":return[1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1];default:{const t=i.Mat4.fromMat3((0,i.Mat4)(),e);return t[15]=1,t}}};const n=r(31635),A=r(38685),i=r(73868),o=r(28243),a=r(12313),s=r(18842),c=r(459),l=r(17e3),u=r(44804),g=r(13636),d=r(1366),B=r(66139),h=r(24832),f=r(78739),p=r(23391),I=r(39872),m=r(61165);var Q,E,C,y,v,b;function D(e,t){var r;const n=Object.assign({},e);for(const e in t)null!==(r=n[e])&&void 0!==r||(n[e]=t[e]);return n}!function(e){e.mapParams=function(e,t,r){const n=Object.assign({},e);n.options.behaviorRef="volume-streaming"+Math.floor(Math.random()*Math.floor(100)),n.options.emContourProvider="pdbe",n.options.serverUrl="https://www.ebi.ac.uk/pdbe/volume-server";const A={opacity:.49,wireframe:!1},i={opacity:.3,wireframe:!0};return n.options.channelParams.em=D(null==t?void 0:t.em,A),n.options.channelParams["2fo-fc"]=D(null==t?void 0:t["2fo-fc"],A),n.options.channelParams["fo-fc(+ve)"]=D(null==t?void 0:t["fo-fc(+ve)"],i),n.options.channelParams["fo-fc(-ve)"]=D(null==t?void 0:t["fo-fc(-ve)"],i),n},e.displayUsibilityMessage=function(e){l.PluginCommands.Toast.Show(e,{title:"Volume",message:"Streaming enabled, click on a residue or an atom to view the data.",key:"toast-1",timeoutMs:7e3})},e.toggle=function(e){const t=e.state.data,r=t.select(B.StateSelection.Generators.ofTransformer(c.CreateVolumeStreamingInfo))[0];r&&l.PluginCommands.State.ToggleVisibility(e,{state:t,ref:r.transform.ref})}}(Q||(t.PDBeVolumes=Q={})),function(e){e.getLociByPLDDT=function(e,t){const r=g.MolScriptBuilder.struct.modifier.union([g.MolScriptBuilder.struct.modifier.wholeResidues([g.MolScriptBuilder.struct.modifier.union([g.MolScriptBuilder.struct.generator.atomGroups({"chain-test":g.MolScriptBuilder.core.rel.eq([g.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":g.MolScriptBuilder.core.rel.gr([A.QualityAssessment.symbols.pLDDT.symbol(),e])})])])]),n=(0,d.compile)(r)(new o.QueryContext(t));return o.StructureSelection.toLociWithSourceUnits(n)}}(E||(t.AlphafoldView=E