@datagrok/helm 2.1.9 → 2.1.10

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/package.js CHANGED
@@ -1,2 +1,2 @@
1
- var helm;(()=>{"use strict";var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{_package:()=>_,editMoleculeCell:()=>z,getMolfiles:()=>q,helmCellRenderer:()=>k,helmWebEditor:()=>Y,initHelm:()=>$,openEditor:()=>j,propertiesPanel:()=>B});const n=grok,r=ui,o=DG;class s{constructor(){this.w=200,this.h=100,this.host=r.div([],{style:{width:`${this.w}px`,height:`${this.h}px`}}),this.editor=new JSDraw2.Editor(this.host,{width:this.w,height:this.h,viewonly:!0})}resizeEditor(t,e){this.editor.setSize(t,e)}createWebEditor(t){const e=r.div();org.helm.webeditor.MolViewer.molscale=.8;const n=new scil.helm.App(e,{showabout:!1,mexfontsize:"90%",mexrnapinontab:!0,topmargin:20,mexmonomerstab:!0,sequenceviewonly:!1,mexfavoritefirst:!0,mexfilter:!0}),o=n.calculateSizes();n.canvas.resize(o.rightwidth-100,o.topheight-210);let s={width:o.rightwidth-100+"px",height:o.bottomheight+"px"};return scil.apply(n.sequence.style,s),scil.apply(n.notation.style,s),s={width:o.rightwidth+"px",height:o.bottomheight+n.toolbarheight+"px"},scil.apply(n.properties.parent.style,s),n.structureview.resize(o.rightwidth,o.bottomheight+n.toolbarheight),n.mex.resize(o.topheight-80),setTimeout((function(){n.canvas.helm.setSequence(t,"HELM")}),200),{editorDiv:e,webEditor:n}}}function i(t,e){const n=[];for(let r=0;r<t.length;++r){const o=e.indexOf(t[r]),s=e.slice(0,o);n.push(s),n.push(t[r]),e=e.substring(o+t[r].length)}return n.push(e),n}function l(t){t=h(t,"$")[0];const e=[];if(!scil.Utils.isNullOrEmpty(t)){const n=h(t,"|");for(let r=0;r<n.length;++r){let o=(t=u(n[r]).str).indexOf("{");o=(t=t.substring(o+1)).indexOf("}");const s=h(t=t.substring(0,o),".");for(const t of s)if(t&&""!==t)if(t.startsWith("[")&&t.includes("]")){const n=t.substring(1,t.indexOf("]"));e.push(n);const r=t.substring(t.indexOf("]")+1);s.push(r)}else if(t.includes("[")&&t.endsWith("]")){const n=t.substring(t.lastIndexOf("[")+1,t.length-1);e.push(n);const r=t.substring(0,t.lastIndexOf("["));s.push(r)}else if(t.includes("(")&&t.includes(")")){const e=t.substring(0,t.indexOf("(")),n=t.substring(t.lastIndexOf(")")+1),r=[e,t.substring(e.length+1,t.length-n.length-1),n];for(const t of r)s.push(t)}else e.push(t)}}return e}function a(t){const e=Object.keys(org.helm.webeditor.monomerTypeList()),n=[],r=[];for(let t=0;t<e.length;t++)n.push(new scil.helm.Monomers.getMonomerSet(e[t])),Object.keys(n[t]).forEach((e=>{r.push(n[t][e].id)}));const o=l(t);return new Set(o.filter((t=>!r.includes(t))))}function h(t,e){const n=[];let r="",o=0,s=0,i=0,l=0;for(let a=0;a<t.length;++a){let h=t.substring(a,a+1);if(h==e&&0==s&&0==o&&0==i&&0==l)n.push(r),r="";else{if(r+=h,l>0&&"\\"==h&&a+1<t.length){++a;const e=t.substring(a,a+1);r+=e,h+=e}'"'==h?a>0&&"\\"==t.substring(a-1,a)||(l=0==l?1:0):"["==h?++s:"]"==h?--s:"("==h?++o:")"==h?--o:"{"==h?++i:"}"==h&&--i}}return n.push(r),n}function u(t){const e=c(t,'"');if(null!=e.tag)return e;const n=c(t,"'");return{tag:e.tag,repeat:n.tag,str:n.str}}function c(t,e){let n=null;if(scil.Utils.endswith(t,e)){let r=t.length-1;for(;r>0&&(r=t.lastIndexOf(e,r-1),!(r<=0||"\\"!=t.substring(r-1,r))););r>0&&r<t.length-1&&(n=t.substring(r+1,t.length-1),t=t.substring(0,r))}return null!=n&&(n=n.replace(new RegExp("\\"+e,"g"),e)),{tag:g(n),str:t}}function g(t){return scil.Utils.isNullOrEmpty(t)?t:t.replace(/[\\]./g,(function(t){switch(t){case"\\r":return"\r";case"\\n":return"\n";case"\\t":return"\t";default:return t.substring(1)}}))}const m=wu;var p=t.n(m);class d extends Float32Array{}function C(t){let e=0;for(let n=0;n<t.length;n++)e+=t[n]*t[n];return Math.sqrt(e)}class f{static makePalette(t,e=!1,n=f){const r={};return t.forEach((t=>{const n=t[0],o=t[1];n.forEach(((t,n)=>{r[t]=this.colourPalette[o][e?0:n]}))})),new n(r)}constructor(t){this._palette=t}get(t){return this._palette[t]}}f.undefinedColor="rgb(100,100,100)",f.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]};class b extends f{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,b)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,b)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new b({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in b.aaSynonyms?b.aaSynonyms[t]:t;return super.get(e)}}b.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class w{static getPalette(t="grok"){switch(t){case"grok":return b.GrokGroups;case"lesk":return b.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,n="",r="";for(const o of t)"("==o?e++:")"==o?e--:e?n+=o:r+=o;return isNaN(parseInt(n))?[r,n]:[r,""]}static getColorAAPivot(t="",e="grok"){var n,r,o;const s=this.getPalette(e);let[i,l]=this.getInnerOuter(t);if(i=i.length>6?`${i.slice(0,3)}...`:i,l=l.length>6?`${l.slice(0,3)}...`:l,1==t.length||"("==t[1]){const e=null===(n=t[0])||void 0===n?void 0:n.toUpperCase();return e in s?[s.get(e),e,l,1]:[this.undefinedColor,i,l,1]}if("d"==t[0]&&t[1]in s&&(2==t.length||"("==t[2])){const e=null===(r=t[1])||void 0===r?void 0:r.toUpperCase();return e in s?[s.get(e),e,l,2]:[this.undefinedColor,i,l,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in s?[s.get(e),e,l,3]:[this.undefinedColor,i,l,3]}if((null===(o=t[0])||void 0===o?void 0:o.toLowerCase())==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in s?[s.get(e),e,l,4]:[this.undefinedColor,i,l,4]}return[this.undefinedColor,i,l,0]}}w.SemType="Aminoacids",w.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",w.undefinedColor="rgb(100,100,100)",w.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},w.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},w.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},w.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"};class S{}S.SemType="Nucleotides",S.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",S.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"};class T extends class{}{static buildPalette(){return[].concat(...Object.values(f.colourPalette))}get(t){const e=class{static hashCode(t){let e=0;if(0===t.length)return e;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e}}.hashCode(t)%T.palette.length;return function(t){if(null==t)return"rgb(100,100,100)";const e=o.Color.fromHtml(t),n=o.Color.g(e),r=o.Color.r(e),s=o.Color.b(e),i=Math.sqrt(Math.pow(0-r,2)+Math.pow(0-n,2)+Math.pow(0-s,2));return i>210?`rgb(${r/i*210},${n/i*210},${s/i*210})`:o.Color.toRgb(e)}(T.palette[e])}}T.palette=T.buildPalette();class v{static setUnitsToFastaColumn(t){if(t.semType!==o.SEMTYPE.MACROMOLECULE)throw new Error("Fasta column must be MACROMOLECULE");const e=A(t,5,E),n=e.sameLength?"SEQ.MSA":"SEQ",r=function(t){const e=[["PT",v.PeptideFastaAlphabet],["DNA",v.DnaFastaAlphabet],["RNA",v.RnaFastaAlphabet]],n=e.map((e=>function(t,e,n="-"){const r=new Set([...new Set(Object.keys(t)),...e]);r.delete(n);const o=[],s=[];for(const n of r)o.push(n in t?t[n]:0),s.push(e.has(n)?1:0);const i=new d(o),l=new d(s);return function(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let n=0;for(let r=0;r<t.length;r++)n+=t[r]*e[r];return n}(i,l)/(C(i)*C(l))}(t.freq,e[1]))),r=Math.max(...n);return r>.65?e[n.indexOf(r)][0]:"UN"}(e);t.setTag(o.TAGS.UNITS,"fasta"),t.setTag("aligned",n),t.setTag("alphabet",r)}get units(){return this._units}get column(){return this._column}get notation(){return this._notation}get defaultGapSymbol(){return this._defaultGapSymbol}get separator(){var t;const e=null!==(t=this.column.getTag("separator"))&&void 0!==t?t:void 0;if("separator"===this.notation&&void 0===e)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return e}get aligned(){const t=this.column.getTag("aligned");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag("alphabet");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}getAlphabetSize(){if("helm"==this.notation||"UN"==this.alphabet){const t=this.column.getTag(".alphabetSize");let e;if(t)e=parseInt(t);else{const t=x(this.column),n=A(this.column,1,t);e=Object.keys(n.freq).length}return e}switch(this.alphabet){case"PT":return 20;case"DNA":case"RNA":return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return("helm"==this.notation||"UN"==this.alphabet)&&"true"==this.column.getTag(".alphabetIsMultichar")}isFasta(){return"fasta"===this.notation}isSeparator(){return"separator"===this.notation}isHelm(){return"helm"===this.notation}isRna(){return"RNA"===this.alphabet}isDna(){return"DNA"===this.alphabet}isPeptide(){return"PT"===this.alphabet}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}getNotation(){if(this.units.toLowerCase().startsWith("fasta"))return"fasta";if(this.units.toLowerCase().startsWith("separator"))return"separator";if(this.units.toLowerCase().startsWith("helm"))return"helm";throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getNewColumn(t){const e=this.column,n=e.length,r=t.toLowerCase()+"("+e.name+")",s=e.dataFrame.columns.getUnusedName(r),i=o.Column.fromList("string",s,new Array(n).fill(""));i.semType=o.SEMTYPE.MACROMOLECULE,i.setTag(o.TAGS.UNITS,t),i.setTag(o.TAGS.CELL_RENDERER,"Macromolecule");const l=e.getTag("aligned");l&&i.setTag("aligned",l);const a=e.getTag("alphabet");a&&i.setTag("alphabet",a);let h=e.getTag(".alphabetSize");h&&i.setTag(".alphabetSize",h);const u=e.getTag(".alphabetIsMultichar");return void 0!==u&&i.setTag(".alphabetIsMultichar",u),"helm"==t&&(h=this.getAlphabetSize().toString(),i.setTag(".alphabetSize",h)),i}static getNewColumn(t){const e=new v(t),n=e.notation;return e.getNewColumn(n)}static unitsStringIsValid(t){return t=t.toLowerCase(),["fasta","separator","helm"].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,n){if(!v.unitsStringIsValid(n))throw new Error("Invalid format of 'units' parameter");const r=o.Column.fromList("string",e,new Array(t).fill(""));return r.semType=o.SEMTYPE.MACROMOLECULE,r.setTag(o.TAGS.UNITS,n),r}constructor(t){this._column=t;const e=this._column.tags[o.TAGS.UNITS];if(null===e)throw new Error("Units are not specified in column");if(this._units=e,this._notation=this.getNotation(),this._defaultGapSymbol=this.isFasta()?v._defaultGapSymbolsDict.FASTA:this.isHelm()?v._defaultGapSymbolsDict.HELM:v._defaultGapSymbolsDict.SEPARATOR,!this.column.tags.has("aligned")&&(this.isFasta()||this.isSeparator()))throw new Error(`For column '${this.column.name}' of notation '${this.notation}' tag 'aligned' is mandatory.`);if(!this.column.tags.has(".alphabetIsMultichar")){if(this.isHelm())throw new Error(`For column '${this.column.name}' of notation '${this.notation}' tag '.alphabetIsMultichar' is mandatory.`);if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '.alphabetIsMultichar' is mandatory.`)}}}function A(t,e,n){const r={};let o=!0,s=null;for(const i of t.categories){const t=n(i);if(null==s?s=t.length:t.length!==s&&(o=!1),t.length>=e)for(const e of t)e in r||(r[e]=0),r[e]+=1}return{freq:r,sameLength:o}}v._defaultGapSymbolsDict={HELM:"*",SEPARATOR:"",FASTA:"-"},v.PeptideFastaAlphabet=new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),v.DnaFastaAlphabet=new Set(["A","C","G","T"]),v.RnaFastaAlphabet=new Set(["A","C","G","U"]);const y=/\[(\w+)\]|(\w)|(-)/g;function E(t){return p()(t.toString().matchAll(y)).map((t=>{let e;const n=t[0];return e=n.length>1?t[1]:n,e})).toArray()}const N=/(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g,O=/\[([^\[\]]+)]/g;function M(t){N.lastIndex=0;const e=N.exec(t.toString()),n=e?e[2]:null;return(n?n.split("."):[]).map((t=>{O.lastIndex=0;const e=O.exec(t);return e&&e.length>=2?e[1]:t}))}function x(t){if(t.semType!==o.SEMTYPE.MACROMOLECULE)throw new Error(`Get splitter for semType "${o.SEMTYPE.MACROMOLECULE}" only.`);return function(t,e,n){if(t.toLowerCase().startsWith("fasta"))return E;if(t.toLowerCase().startsWith("separator"))return function(t,e){return e=>e.split(t,undefined)}(e);if(t.toLowerCase().startsWith("helm"))return M;throw new Error(`Unexpected units ${t} .`)}(t.getTag(o.TAGS.UNITS),t.getTag("separator"))}const H=/(\w+)/g;var F;!function(t){t.MSA="MSA",t.classic="classic"}(F||(F={}));const L=(t,e,n,r,o,s,i="rgb(100,100,100)",l=0,a=!1,h=1,u="",c=!1,g=F.classic,m={},p=0,d=null,C=[],f=null)=>{var b,w,S;o.textAlign="start";let T=s.substring(0),v=c?"":u;g===F.MSA&&(v="");let A=!0,y=!0,E="difference";null!=d&&null!=d.cell.column&&(A=null===(b=d.cell.column.temp["color-code"])||void 0===b||b,y=null===(w=d.cell.column.temp["compare-with-current"])||void 0===w||w,E=null!==(S=d.cell.column.temp["highlight-difference"])&&void 0!==S?S:"difference");const N=C[p];y&&C.length>0&&"difference"===E&&(h=T==N?.3:h),y&&C.length>0&&"equal"===E&&(h=T!=N?.3:h),null!=f&&(T=function(t,e){var n,r;const o=t.match(H),s=t.length>e||(null!==(n=null==o?void 0:o.length)&&void 0!==n?n:0)>1,i=null!==(r=null==o?void 0:o[0])&&void 0!==r?r:" ";return s?i.substring(0,e)+"…":i}(T,f));let O=o.measureText(T+v),M=o.measureText(T).width,x=o.measureText(T).width;const L=r/2-(O.fontBoundingBoxAscent+O.fontBoundingBoxDescent)/2+1;function P(n,r){const s=A?i:"rgb(0,0,0)";o.fillStyle=s,o.globalAlpha=h,g===F.classic&&(o.fillText(T,t+n,e+L),o.fillStyle="#808080",o.fillText(v,t+r,e+L)),g===F.MSA&&(o.fillStyle=s,o.fillText(T,t+n+(m[p]-x)/2,e+L))}if(O=O.width,g===F.MSA&&(M=m[p],O=m[p]),a||O>n)return P(5,5+M),t+M+o.measureText(v).width;{const e=(n-O)/2;return P(e,e+M),t+e+M}};function P(t){var e;return"string"==typeof t||t instanceof String?t:"$thrownJsError"in t?P(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}class G extends o.GridCellRenderer{get name(){return"helm"}get cellType(){return"helm"}get defaultWidth(){return 400}get defaultHeight(){return 100}onMouseMove(t,e){var n,o,s;try{const h=t.cell.column.temp["helm-sum-maxLengthWords"],u=Object.values(t.cell.column.temp["helm-maxLengthWords"]).length-1,c=e.offsetX-t.gridColumn.left+(t.gridColumn.left-t.bounds.x);let g=0,m=u,p=!1;h[u+1]=c+1;let d=0;if(c>h[0])for(;!p;)d=Math.floor((m+g)/2),c>=h[d]&&c<=h[d+1]?(g=d,p=!0):c<h[d]?m=d-1:c>h[d+1]&&(g=d+1),g==m&&(p=!0);g=c>=h[g]?g+1:g;const C=a(t.cell.value),f=null!==(n=t.cell.value)&&void 0!==n?n:"",b=i(l(f),f),w=[];for(let t=0;t<b.length;++t)C.has(b[t])&&(w[t]=r.divV([r.divText(`Monomer ${b[t]} not found.`),r.divText("Open the Context Panel, then expand Manage Libraries")]));(null!==(s=null===(o=w[g])||void 0===o?void 0:o.childNodes.length)&&void 0!==s?s:0)>0?r.tooltip.show(r.div(w[g]),e.x+16,e.y+16):r.tooltip.hide()}catch(t){const e=P(t);console.error("Helm: HelmCellRenderer.onMouseMove() error:\n"+e)}}render(t,e,n,o,s,h,u){var c;const g=-1!==h.gridRow?h.grid:void 0,m=a(h.cell.value),p=null!==(c=h.cell.value)&&void 0!==c?c:"",d=l(p);if(0!=m.size||!g){if(!g){const e=window.devicePixelRatio;s=28,t.canvas.height=s*e,t.canvas.style.height=`${s}px`}o=g?Math.min(g.canvas.width-e,o):t.canvas.width-e,t.save(),t.beginPath(),t.rect(e,n,o,s),t.clip(),t.font="12px monospace",t.textBaseline="top";let r=e;const l={},a={},u=i(d,p);for(let e=0;e<u.length;++e){l[e]=7*u[e].length;const i=m.has(u[e])?"red":"#808080";t.fillStyle="rgb(100,100,100)",r=L(r,n,o,s,t,u[e],i,0,!0,1)}a[0]=l[0];for(let t=1;t<u.length;t++)a[t]=a[t-1]+l[t];return h.cell.column.temp={"helm-sum-maxLengthWords":a,"helm-maxLengthWords":l},void t.restore()}{const t=r.div([],{style:{width:`${o}px`,height:`${s}px`}});t.setAttribute("dataformat","helm"),t.setAttribute("data",h.cell.value),h.element=t,new JSDraw2.Editor(t,{width:o,height:s,skin:"w8",viewonly:!0})}}}class D extends v{get splitter(){return null===this._splitter&&(this._splitter=x(this.column)),this._splitter}toFasta(t){return"fasta"===t}toSeparator(t){return"separator"===t}toHelm(t){return"helm"===t}convertFastaToSeparator(t,e=null){null===e&&(e=this.defaultGapSymbol);const n=this.getNewColumn("separator");return n.init((n=>{const r=this.column.get(n),o=this.splitter(r);for(let t=0;t<o.length;t++)o[t]===e&&(o[t]=v._defaultGapSymbolsDict.SEPARATOR);return o.join(t)})),n.setTag(o.TAGS.UNITS,"separator"),n.setTag("separator",t),n}getHelmWrappers(){const t=this.isDna()?"DNA1{":this.isRna()?"RNA1{":this.isPeptide()?"PEPTIDE1{":"Unknown";if("Unknown"===t)throw new Error("Neither peptide, nor nucleotide");return[t,this.isDna()?"D(":this.isRna()?"R(":"",this.isDna()||this.isRna()?")P":"","}$$$"]}convertToHelmHelper(t,e,n,r,o,s){return`${n}${this.splitter(t).map((t=>t===e?v._defaultGapSymbolsDict.HELM:`${r}${t}${o}`)).join(".")}${s}`}convertStringToHelm(t,e=null){null===e&&(e=this.defaultGapSymbol);const[n,r,o,s]=this.getHelmWrappers();return this.convertToHelmHelper(t,e,n,r,o,s)}convertToHelm(t=null){null===t&&(t=this.defaultGapSymbol);const[e,n,r,s]=this.getHelmWrappers(),i=this.getNewColumn("helm");return i.init((o=>{const i=this.column.get(o);return this.convertToHelmHelper(i,t,e,n,r,s)})),i.setTag(o.TAGS.UNITS,"helm"),i}convertSeparatorToFasta(t=null){null===t&&(t=v._defaultGapSymbolsDict.FASTA);const e=this.getNewColumn("fasta");return e.init((e=>{const n=this.column.get(e),r=this.splitter(n),o=[];for(let e=0;e<r.length;e++){const n=r[e];if(0===n.length)o.push(t);else if(n.length>1){const t="["+n+"]";o.push(t)}else o.push(n)}return o.join("")})),e.setTag(o.TAGS.UNITS,"fasta"),e}convertHelmToFastaSeparator(t,e,n,r){r||(r=this.toFasta(e)?v._defaultGapSymbolsDict.FASTA:v._defaultGapSymbolsDict.SEPARATOR),n||(n=this.toFasta(e)?"":this.separator);const o=/(R\(|D\(|\)|P)/g,s=t.startsWith("DNA")||t.startsWith("RNA"),i=this.splitter(t),l=[];for(let t=0;t<i.length;t++){let n=i[t];if(s&&(n=n.replace(o,"")),n===v._defaultGapSymbolsDict.HELM)l.push(r);else if(this.toFasta(e)&&n.length>1){const t="["+n+"]";l.push(t)}else l.push(n)}return l.join(n)}convertHelm(t,e,n){const r=this.getNewColumn(t);r.init((r=>{const o=this.column.get(r);return this.convertHelmToFastaSeparator(o,t,e,n)}));const o=A(r,5,x(r)).sameLength?"SEQ.MSA":"SEQ";return r.setTag("aligned",o),r}convertHelmToSeparator(){return this.getNewColumn("separator")}convert(t,e=null){if(this.notation===t)throw new Error("tgt notation is invalid");if(this.toSeparator(t)&&null===e)throw new Error("tgt separator is not specified");if(this.isFasta()&&this.toSeparator(t)&&null!==e)return this.convertFastaToSeparator(e);if((this.isFasta()||this.isSeparator())&&this.toHelm(t))return this.convertToHelm();if(this.isSeparator()&&this.toFasta(t))return this.convertSeparatorToFasta();if(this.isHelm()&&this.toFasta(t))return this.convertHelm(t);if(this.isHelm()&&this.toSeparator(t))return this.convertHelm(t,e);throw new Error(`Not supported conversion from source notation '${this.notation}' to target notation '${t}'.`)}constructor(t){super(t),this._splitter=null}}var R=function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{a(r.next(t))}catch(t){s(t)}}function l(t){try{a(r.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,l)}a((r=r.apply(t,e||[])).next())}))};const _=new o.Package;let I=null;function $(){return R(this,void 0,void 0,(function*(){return Promise.all([new Promise(((t,e)=>{dojo.ready((function(){t(null)}))})),yield n.functions.call("Bio:getBioLib")]).then((([t,e])=>{I=e,U(),I.onChanged.subscribe((t=>{try{U();const t=I.getTypes(),e="Monomer lib updated:<br />"+(0==t.length?"empty":t.map((t=>`${t} ${I.getMonomerNamesByType(t).length}`)).join("<br />"));n.shell.info(e)}catch(t){const e=P(t);console.error("Helm: initHelm monomerLib.onChanged() error:\n"+e)}}))}))}))}function U(){org.helm.webeditor.Monomers.clear(),I.getTypes().forEach((t=>{I.getMonomerNamesByType(t).forEach((e=>{let n=!1;const r=I.getMonomer(t,e),o={id:e,m:r.molfile,n:r.name,na:r.naturalAnalog,rs:r.rgroups.length,type:r.polymerType,mt:r.monomerType,at:{}};if(r.rgroups.length>0){o.rs=r.rgroups.length;const t={};r.rgroups.forEach((e=>{t[e.label]=e.capGroupName})),o.at=t}else null!=r.data.smiles?(o.rs=Object.keys(V(r.data.smiles.toString())).length,o.at=V(r.data.smiles.toString())):n=!0;n||org.helm.webeditor.Monomers.addOneMonomer(o)}))}));let t=n.shell.tv.grid;t&&t.invalidate()}function k(){return new G}function W(t,e,o){const s=a(void 0===o?t.value:e);0==s.size?function(t,e,o){let s=r.div(),i=n.shell.tv.grid.dataFrame,l=new D(i.columns.bySemType("Macromolecule"));org.helm.webeditor.MolViewer.molscale=.8;let a=new scil.helm.App(s,{showabout:!1,mexfontsize:"90%",mexrnapinontab:!0,topmargin:20,mexmonomerstab:!0,sequenceviewonly:!1,mexfavoritefirst:!0,mexfilter:!0});var h=a.calculateSizes();a.canvas.resize(h.rightwidth-100,h.topheight-210);var u={width:h.rightwidth-100+"px",height:h.bottomheight+"px"};scil.apply(a.sequence.style,u),scil.apply(a.notation.style,u),u={width:h.rightwidth+"px",height:h.bottomheight+a.toolbarheight+"px"},scil.apply(a.properties.parent.style,u),a.structureview.resize(h.rightwidth,h.bottomheight+a.toolbarheight),a.mex.resize(h.topheight-80),setTimeout((function(){void 0===o?a.canvas.helm.setSequence(t.value,"HELM"):a.canvas.helm.setSequence(e,"HELM")}),200),r.dialog({showHeader:!1,showFooter:!0}).add(s).onOK((()=>{let e=a.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");if(void 0===o)t.value=e;else{let n=l.convertHelmToFastaSeparator(e,o);t.value=n}})).show({modal:!0,fullScreen:!0})}(t,e,o):n.shell.warning(`Monomers ${Array.from(s).join(", ")} are absent! <br/>Please, upload the monomer library! <br/><a href="https://datagrok.ai/help/domains/bio/macromolecules" target="_blank">Learn more</a>`)}function z(t){W(t.cell,void 0,void 0)}function j(t){let e=n.shell.tv.grid.dataFrame,r=e.columns.bySemType("Macromolecule");"helm"===r.getTag(o.TAGS.UNITS)&&W(e.currentCell,void 0,void 0);const s=new D(r).convertStringToHelm(t,"/");W(e.currentCell,s,r.getTag(o.TAGS.UNITS))}function B(t){return R(this,void 0,void 0,(function*(){let e=n.shell.tv.grid.root.parentElement;const s=r.div([]);e.appendChild(s);let i=new JSDraw2.Editor(s,{viewonly:!0});s.style.width="0px",s.style.height="0px",i.setHelm(t);let l=i.getFormula(!0),a=Math.round(100*i.getMolWeight())/100,h=Math.round(100*i.getExtinctionCoefficient(!0))/100;return e.lastChild.remove(),new o.Widget(r.tableFromMap({formula:l.replace(/<sub>/g,"").replace(/<\/sub>/g,""),"molecular weight":a,"extinction coefficient":h}))}))}function V(t){const e=t.match(/(?<=\[)[^\][]*(?=])/gm),n={};let r,o="";for(let t=0;t<e.length;t++)if(null!=e[t]&&/\d/.test(e[t])){r=e[t][e[t].length-1],e[t]=e[t].replace(/[0-9]/g,"");for(let n=0;n<e[t].length;n++)":"!=e[t][n]&&(o+=e[t][n]);n["R"+r]=o,o=""}return n}function q(t){let e=n.shell.tv.grid.root.parentElement,s=o.Column.string("mols",t.length);const i=r.div([]);e.appendChild(i);let l=new JSDraw2.Editor(i,{viewonly:!0});return i.style.width="0px",i.style.height="0px",s.init((e=>(l.setHelm(t.get(e)),l.getMolfile()))),e.lastChild.remove(),s}function Y(){return new s}helm=e})();
1
+ var helm;(()=>{"use strict";var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{_package:()=>V,editMoleculeCell:()=>X,getMolfiles:()=>nt,helmCellRenderer:()=>K,helmWebEditor:()=>rt,initHelm:()=>Y,openEditor:()=>Z,propertiesPanel:()=>tt});const n=grok,r=ui,o=DG;class s{constructor(){this.w=200,this.h=100,this.host=r.div([],{style:{width:`${this.w}px`,height:`${this.h}px`}}),this.editor=new JSDraw2.Editor(this.host,{width:this.w,height:this.h,viewonly:!0})}resizeEditor(t,e){this.editor.setSize(t,e)}createWebEditor(t){const e=r.div();org.helm.webeditor.MolViewer.molscale=.8;const n=new scil.helm.App(e,{showabout:!1,mexfontsize:"90%",mexrnapinontab:!0,topmargin:20,mexmonomerstab:!0,sequenceviewonly:!1,mexfavoritefirst:!0,mexfilter:!0}),o=n.calculateSizes();n.canvas.resize(o.rightwidth-100,o.topheight-210);let s={width:o.rightwidth-100+"px",height:o.bottomheight+"px"};return scil.apply(n.sequence.style,s),scil.apply(n.notation.style,s),s={width:o.rightwidth+"px",height:o.bottomheight+n.toolbarheight+"px"},scil.apply(n.properties.parent.style,s),n.structureview.resize(o.rightwidth,o.bottomheight+n.toolbarheight),n.mex.resize(o.topheight-80),setTimeout((function(){n.canvas.helm.setSequence(t,"HELM")}),200),{editorDiv:e,webEditor:n}}}function i(t,e){const n=[];for(let r=0;r<t.length;++r){const o=e.indexOf(t[r]),s=e.slice(0,o);n.push(s),n.push(t[r]),e=e.substring(o+t[r].length)}return n.push(e),n}function l(t){t=h(t,"$")[0];const e=[];if(!scil.Utils.isNullOrEmpty(t)){const n=h(t,"|");for(let r=0;r<n.length;++r){let o=(t=c(n[r]).str).indexOf("{");o=(t=t.substring(o+1)).indexOf("}");const s=h(t=t.substring(0,o),".");for(const t of s)if(t&&""!==t)if(t.startsWith("[")&&t.includes("]")){const n=t.substring(1,t.indexOf("]"));e.push(n);const r=t.substring(t.indexOf("]")+1);s.push(r)}else if(t.includes("[")&&t.endsWith("]")){const n=t.substring(t.lastIndexOf("[")+1,t.length-1);e.push(n);const r=t.substring(0,t.lastIndexOf("["));s.push(r)}else if(t.includes("(")&&t.includes(")")){const e=t.substring(0,t.indexOf("(")),n=t.substring(t.lastIndexOf(")")+1),r=[e,t.substring(e.length+1,t.length-n.length-1),n];for(const t of r)s.push(t)}else e.push(t)}}return e}function a(t){const e=Object.keys(org.helm.webeditor.monomerTypeList()),n=[],r=[];for(let t=0;t<e.length;t++)n.push(new scil.helm.Monomers.getMonomerSet(e[t])),Object.keys(n[t]).forEach((e=>{r.push(n[t][e].id)}));const o=l(t);return new Set(o.filter((t=>!r.includes(t))))}function h(t,e){const n=[];let r="",o=0,s=0,i=0,l=0;for(let a=0;a<t.length;++a){let h=t.substring(a,a+1);if(h==e&&0==s&&0==o&&0==i&&0==l)n.push(r),r="";else{if(r+=h,l>0&&"\\"==h&&a+1<t.length){++a;const e=t.substring(a,a+1);r+=e,h+=e}'"'==h?a>0&&"\\"==t.substring(a-1,a)||(l=0==l?1:0):"["==h?++s:"]"==h?--s:"("==h?++o:")"==h?--o:"{"==h?++i:"}"==h&&--i}}return n.push(r),n}function c(t){const e=u(t,'"');if(null!=e.tag)return e;const n=u(t,"'");return{tag:e.tag,repeat:n.tag,str:n.str}}function u(t,e){let n=null;if(scil.Utils.endswith(t,e)){let r=t.length-1;for(;r>0&&(r=t.lastIndexOf(e,r-1),!(r<=0||"\\"!=t.substring(r-1,r))););r>0&&r<t.length-1&&(n=t.substring(r+1,t.length-1),t=t.substring(0,r))}return null!=n&&(n=n.replace(new RegExp("\\"+e,"g"),e)),{tag:g(n),str:t}}function g(t){return scil.Utils.isNullOrEmpty(t)?t:t.replace(/[\\]./g,(function(t){switch(t){case"\\r":return"\r";case"\\n":return"\n";case"\\t":return"\t";default:return t.substring(1)}}))}const m=wu;var p=t.n(m);class f{constructor(t,e,n){this.name=t,this.alphabet=e,this.cutoff=n}}class d extends f{constructor(t,e,n){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=n}}const C=/\[(\w+)\]|(\w)|(-)/g,b=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},w=[new f("PT",b.fasta.peptide,.5),new f("DNA",b.fasta.dna,.55),new f("RNA",b.fasta.rna,.55)],T=new Uint32Array(65536),S={gapOpen:8,gapExtend:2,scoringMatrix:[[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]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};var A;!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch"}(A||(A={}));const y={[A.HAMMING]:function(){return(t,e)=>{let n=0;t.length!==e.length&&(n=Math.abs(t.length-e.length));let r=0;for(let n=0;n<Math.min(t.length,e.length);n++)t[n]!==e[n]&&r++;return r+n}},[A.LEVENSHTEIN]:function(){return(t,e)=>((t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,r=e.length,o=1<<n-1;let s=-1,i=0,l=n,a=n;for(;a--;)T[t.charCodeAt(a)]|=1<<a;for(a=0;a<r;a++){let t=T[e.charCodeAt(a)];const n=t|i;t|=(t&s)+s^s,i|=~(t|s),s&=t,i&o&&l++,s&o&&l--,i=i<<1|1,s=s<<1|~(n|i),i&=n}for(a=n;a--;)T[t.charCodeAt(a)]=0;return l})(t,e):((t,e)=>{const n=e.length,r=t.length,o=[],s=[],i=Math.ceil(n/32),l=Math.ceil(r/32);for(let t=0;t<i;t++)s[t]=-1,o[t]=0;let a=0;for(;a<l-1;a++){let i=0,l=-1;const h=32*a,c=Math.min(32,r)+h;for(let e=h;e<c;e++)T[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=T[e.charCodeAt(t)],r=s[t/32|0]>>>t&1,a=o[t/32|0]>>>t&1,h=n|i,c=((n|a)&l)+l^l|n|a;let u=i|~(c|l),g=l&c;u>>>31^r&&(s[t/32|0]^=1<<t),g>>>31^a&&(o[t/32|0]^=1<<t),u=u<<1|r,g=g<<1|a,l=g|~(h|u),i=u&h}for(let e=h;e<c;e++)T[t.charCodeAt(e)]=0}let h=0,c=-1;const u=32*a,g=Math.min(32,r-u)+u;for(let e=u;e<g;e++)T[t.charCodeAt(e)]|=1<<e;let m=r;for(let t=0;t<n;t++){const n=T[e.charCodeAt(t)],i=s[t/32|0]>>>t&1,l=o[t/32|0]>>>t&1,a=n|h,u=((n|l)&c)+c^c|n|l;let g=h|~(u|c),p=c&u;m+=g>>>r-1&1,m-=p>>>r-1&1,g>>>31^i&&(s[t/32|0]^=1<<t),p>>>31^l&&(o[t/32|0]^=1<<t),g=g<<1|i,p=p<<1|l,c=p|~(a|g),h=g&a}for(let e=u;e<g;e++)T[t.charCodeAt(e)]=0;return m})(t,e)})(t,e)},[A.NEEDLEMANN_WUNSCH]:function(t){return(e,n)=>{const{gapOpen:r,gapExtend:o,scoringMatrix:s,alphabetIndexes:i}=Object.assign(Object.assign({},S),t),l=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)],a=new Array(e.length+1).fill(!1),h=new Array(e.length+1).fill(!1);let c=0,u=1;for(let t=1;t<e.length+1;t++)l[0][t]=-r-(t-1)*o;for(let t=1;t<n.length+1;t++){l[u][0]=-r-(t-1)*o;for(let g=1;g<e.length+1;g++){const m=l[c][g-1]+s[i[e[g-1]]][i[n[t-1]]],p=l[c][g]-(a[g]?o:r),f=l[u][g-1]-(h[g-1]?o:r);l[u][g]=Math.max(m,f,p),l[u][g]===m?(a[g]=!1,h[g]=!1):l[u][g]===f?(a[g]=!1,h[g]=!0):(a[g]=!0,h[g]=!1)}c=u,u=(u+1)%2}return-l[c][e.length]}}};class E{static setUnitsToFastaColumn(t){if(t.semType!==o.SEMTYPE.MACROMOLECULE||"fasta"!==t.getTag(o.TAGS.UNITS))throw new Error(`The column of notation 'fasta' must be '${o.SEMTYPE.MACROMOLECULE}'.`);t.setTag(o.TAGS.UNITS,"fasta"),E.setTags(t,F)}static setUnitsToSeparatorColumn(t,e){if(t.semType!==o.SEMTYPE.MACROMOLECULE||"separator"!==t.getTag(o.TAGS.UNITS))throw new Error(`The column of notation 'separator' must be '${o.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error("The column of notation 'separator' must have the separator tag.");t.setTag(o.TAGS.UNITS,"separator"),t.setTag("separator",e),E.setTags(t,G(e))}static setUnitsToHelmColumn(t){if(t.semType!==o.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation 'helm' must be '${o.SEMTYPE.MACROMOLECULE}'`);t.setTag(o.TAGS.UNITS,"helm"),E.setTags(t,D)}static setTags(t,e){const n=t.getTag(o.TAGS.UNITS),r=P(t,5,e);if(Object.keys(r.freq).some((t=>t.length>1)),["fasta","separator"].includes(n)){if(0===Object.keys(r.freq).length)throw new Error("Alphabet is empty");const e=r.sameLength?"SEQ.MSA":"SEQ";t.setTag("aligned",e);const n=function(t,e,n="-"){const r=e.map((e=>{const r=function(t,e,n="-"){const r=new Set([...new Set(Object.keys(t)),...e]);r.delete(n);const o=[],s=[];for(const n of r)o.push(n in t?t[n]:0),s.push(e.has(n)?1:0);const i=new v(o),l=new v(s);return function(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let n=0;for(let r=0;r<t.length;r++)n+=t[r]*e[r];return n}(i,l)/(M(i)*M(l))}(t,e.alphabet,n);return new d(e,t,r)}));let o;const s=Math.max(...r.map((t=>t.similarity>t.cutoff?t.similarity:-1)));o=s>0?r.find((t=>t.similarity===s)).name:"UN";return o}(r.freq,w);if(t.setTag("alphabet",n),"UN"===n){const e=Object.keys(r.freq).length,n=Object.keys(r.freq).some((t=>t.length>1));t.setTag(".alphabetSize",e.toString()),t.setTag(".alphabetIsMultichar",n?"true":"false")}}}get units(){return this._units}get column(){return this._column}get notation(){return this._notation}get defaultGapSymbol(){return this._defaultGapSymbol}get separator(){var t;const e=null!==(t=this.column.getTag("separator"))&&void 0!==t?t:void 0;if("separator"===this.notation&&void 0===e)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return e}get aligned(){const t=this.column.getTag("aligned");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag("alphabet");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get helmCompatible(){return this.column.getTag(".isHelmCompatible")}getAlphabetSize(){if("helm"==this.notation||"UN"==this.alphabet){const t=this.column.getTag(".alphabetSize");let e;if(t)e=parseInt(t);else{const t=R(this.column),n=P(this.column,1,t);e=Object.keys(n.freq).length}return e}switch(this.alphabet){case"PT":return 20;case"DNA":case"RNA":return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return"helm"===this.notation||"UN"===this.alphabet&&"true"===this.column.getTag(".alphabetIsMultichar")}isFasta(){return"fasta"===this.notation}isSeparator(){return"separator"===this.notation}isHelm(){return"helm"===this.notation}isRna(){return"RNA"===this.alphabet}isDna(){return"DNA"===this.alphabet}isPeptide(){return"PT"===this.alphabet}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}getNotation(){if(this.units.toLowerCase().startsWith("fasta"))return"fasta";if(this.units.toLowerCase().startsWith("separator"))return"separator";if(this.units.toLowerCase().startsWith("helm"))return"helm";throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getNewColumn(t,e){const n=this.column,r=n.length,s=t.toLowerCase()+"("+n.name+")",i=n.dataFrame.columns.getUnusedName(s),l=o.Column.fromList("string",i,new Array(r).fill(""));if(l.semType=o.SEMTYPE.MACROMOLECULE,l.setTag(o.TAGS.UNITS,t),"separator"===t){if(!e)throw new Error("Notation 'separator' requires separator value.");l.setTag("separator",e)}l.setTag(o.TAGS.CELL_RENDERER,"Macromolecule");const a=n.getTag("aligned");a&&l.setTag("aligned",a);const h=n.getTag("alphabet");h&&l.setTag("alphabet",h);let c=n.getTag(".alphabetSize");c&&l.setTag(".alphabetSize",c);const u=n.getTag(".alphabetIsMultichar");return void 0!==u&&l.setTag(".alphabetIsMultichar",u),"helm"==t&&(c=this.getAlphabetSize().toString(),l.setTag(".alphabetSize",c)),l}static getNewColumn(t){const e=new E(t),n=e.notation;return e.getNewColumn(n)}static unitsStringIsValid(t){return t=t.toLowerCase(),["fasta","separator","helm"].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,n){if(!E.unitsStringIsValid(n))throw new Error("Invalid format of 'units' parameter");const r=o.Column.fromList("string",e,new Array(t).fill(""));return r.semType=o.SEMTYPE.MACROMOLECULE,r.setTag(o.TAGS.UNITS,n),r}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");if(this.isMsa())return A.HAMMING;switch(this.alphabet){case"DNA":case"RNA":default:return A.LEVENSHTEIN;case"PT":return A.NEEDLEMANN_WUNSCH}}getDistanceFunction(){return y[this.getDistanceFunctionName()]()}checkHelmCompatibility(){return t=this,e=void 0,r=function*(){if(this.column.tags.has(".isHelmCompatible"))return"true"===this.column.getTag(".isHelmCompatible");const t=(yield function(){return t=this,e=void 0,r=function*(){const t=o.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installer for MonomerLibraryHelper.');return(yield t[0].prepare().call()).getOutputParamValue()},new((n=void 0)||(n=Promise))((function(o,s){function i(t){try{a(r.next(t))}catch(t){s(t)}}function l(t){try{a(r.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,l)}a((r=r.apply(t,e||[])).next())}));var t,e,n,r}()).getBioLib().getMonomerSymbolsByType("PEPTIDE".toString()),e=new Set(t),n=G(this.separator);for(const t of this.column.categories){const r=n(t);for(const t of r)if(!e.has(t))return this.column.setTag(".isHelmCompatible","false"),!1}return this.column.setTag(".isHelmCompatible","true"),!0},new((n=void 0)||(n=Promise))((function(o,s){function i(t){try{a(r.next(t))}catch(t){s(t)}}function l(t){try{a(r.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,l)}a((r=r.apply(t,e||[])).next())}));var t,e,n,r}constructor(t){this._column=t;const e=this._column.getTag(o.TAGS.UNITS);if(null==e)throw new Error("Units are not specified in column");if(this._units=e,this._notation=this.getNotation(),this._defaultGapSymbol=this.isFasta()?E._defaultGapSymbolsDict.FASTA:this.isHelm()?E._defaultGapSymbolsDict.HELM:E._defaultGapSymbolsDict.SEPARATOR,!this.column.tags.has("aligned")||!this.column.tags.has("alphabet")||!this.column.tags.has(".alphabetIsMultichar")&&!this.isHelm()&&"UN"===this.alphabet)if(this.isFasta())E.setUnitsToFastaColumn(this.column);else if(this.isSeparator()){const e=t.getTag("separator");E.setUnitsToSeparatorColumn(this.column,e)}else{if(!this.isHelm())throw new Error(`Unexpected units '${this.column.getTag(o.TAGS.UNITS)}'.`);E.setUnitsToHelmColumn(this.column)}if(!this.column.tags.has(".alphabetIsMultichar"))if(this.isHelm())this.column.setTag(".alphabetIsMultichar","true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '.alphabetIsMultichar' is mandatory.`)}}E._defaultGapSymbolsDict={HELM:"*",SEPARATOR:"",FASTA:"-"};class v extends Float32Array{}function M(t){let e=0;for(let n=0;n<t.length;n++)e+=t[n]*t[n];return Math.sqrt(e)}class N{static makePalette(t,e=!1,n=N){const r={};return t.forEach((t=>{const n=t[0],o=t[1];n.forEach(((t,n)=>{r[t]=this.colourPalette[o][e?0:n]}))})),new n(r)}constructor(t){this._palette=t}get(t){return this._palette[t]}}N.undefinedColor="rgb(100,100,100)",N.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]};class O extends N{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,O)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,O)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new O({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in O.aaSynonyms?O.aaSynonyms[t]:t;return super.get(e)}}O.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class H{static getPalette(t="grok"){switch(t){case"grok":return O.GrokGroups;case"lesk":return O.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,n="",r="";for(const o of t)"("==o?e++:")"==o?e--:e?n+=o:r+=o;return isNaN(parseInt(n))?[r,n]:[r,""]}static getColorAAPivot(t="",e="grok"){var n,r,o;const s=this.getPalette(e);let[i,l]=this.getInnerOuter(t);if(i=i.length>6?`${i.slice(0,3)}...`:i,l=l.length>6?`${l.slice(0,3)}...`:l,1==t.length||"("==t[1]){const e=null===(n=t[0])||void 0===n?void 0:n.toUpperCase();return e in s?[s.get(e),e,l,1]:[this.undefinedColor,i,l,1]}if("d"==t[0]&&t[1]in s&&(2==t.length||"("==t[2])){const e=null===(r=t[1])||void 0===r?void 0:r.toUpperCase();return e in s?[s.get(e),e,l,2]:[this.undefinedColor,i,l,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in s?[s.get(e),e,l,3]:[this.undefinedColor,i,l,3]}if((null===(o=t[0])||void 0===o?void 0:o.toLowerCase())==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in s?[s.get(e),e,l,4]:[this.undefinedColor,i,l,4]}return[this.undefinedColor,i,l,0]}}H.SemType="Aminoacids",H.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",H.undefinedColor="rgb(100,100,100)",H.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},H.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},H.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},H.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"};class x{}x.SemType="Nucleotides",x.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",x.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"};class L extends class{}{static buildPalette(){return[].concat(...Object.values(N.colourPalette))}get(t){const e=class{static hashCode(t){let e=0;if(0===t.length)return e;for(let n=0;n<t.length;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e}}.hashCode(t)%L.palette.length;return function(t){if(null==t)return"rgb(100,100,100)";const e=o.Color.fromHtml(t),n=o.Color.g(e),r=o.Color.r(e),s=o.Color.b(e),i=Math.sqrt(Math.pow(0-r,2)+Math.pow(0-n,2)+Math.pow(0-s,2));return i>210?`rgb(${r/i*210},${n/i*210},${s/i*210})`:o.Color.toRgb(e)}(L.palette[e])}}function P(t,e,n){const r={};let o=!0,s=null;for(const i of t.categories){const t=n(i);if(null==s?s=t.length:t.length!==s&&(o=!1),t.length>=e)for(const e of t)e in r||(r[e]=0),r[e]+=1}return{freq:r,sameLength:o}}function F(t){return p()(t.toString().matchAll(C)).map((t=>{const e=t[0];return e.length>1?t[1]:e})).toArray()}function G(t,e){return n=>n.split(t,e)}L.palette=L.buildPalette();const I=/(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g,U=/\[([^\[\]]+)]/g;function D(t){I.lastIndex=0;const e=I.exec(t.toString()),n=e?e[2]:null;return(n?n.split("."):[]).map((t=>{U.lastIndex=0;const e=U.exec(t);return e&&e.length>=2?e[1]:t}))}function R(t){if(t.semType!==o.SEMTYPE.MACROMOLECULE)throw new Error(`Get splitter for semType "${o.SEMTYPE.MACROMOLECULE}" only.`);return function(t,e,n){if(t.toLowerCase().startsWith("fasta"))return F;if(t.toLowerCase().startsWith("separator"))return G(e,void 0);if(t.toLowerCase().startsWith("helm"))return D;throw new Error(`Unexpected units ${t} .`)}(t.getTag(o.TAGS.UNITS),t.getTag("separator"))}const _=/(\w+)/g;var k;!function(t){t.MSA="MSA",t.classic="classic"}(k||(k={}));const $=(t,e,n,r,o,s,i="rgb(100,100,100)",l=0,a=!1,h=1,c="",u=!1,g=k.classic,m={},p=0,f=null,d=[],C=null)=>{var b,w,T;o.textAlign="start";let S=s.substring(0),A=u?"":c;g===k.MSA&&(A="");let y=!0,E=!0,v="difference";null!=f&&null!=f.cell.column&&(y=null===(b=f.cell.column.temp["color-code"])||void 0===b||b,E=null===(w=f.cell.column.temp["compare-with-current"])||void 0===w||w,v=null!==(T=f.cell.column.temp["highlight-difference"])&&void 0!==T?T:"difference");const M=d[p];E&&d.length>0&&"difference"===v&&(h=S==M?.3:h),E&&d.length>0&&"equal"===v&&(h=S!=M?.3:h),null!=C&&(S=function(t,e){var n,r;const o=t.match(_),s=t.length>e||(null!==(n=null==o?void 0:o.length)&&void 0!==n?n:0)>1,i=null!==(r=null==o?void 0:o[0])&&void 0!==r?r:" ";return s?i.substring(0,e)+"…":i}(S,C));let N=o.measureText(S+A),O=o.measureText(S).width,H=o.measureText(S).width;const x=r/2-(N.fontBoundingBoxAscent+N.fontBoundingBoxDescent)/2+1;function L(n,r){const s=y?i:"rgb(0,0,0)";o.fillStyle=s,o.globalAlpha=h,g===k.classic&&(o.fillText(S,t+n,e+x),o.fillStyle="#808080",o.fillText(A,t+r,e+x)),g===k.MSA&&(o.fillStyle=s,o.fillText(S,t+n+(m[p]-H)/2,e+x))}if(N=N.width,g===k.MSA&&(O=m[p],N=m[p]),a||N>n)return L(5,5+O),t+O+o.measureText(A).width;{const e=(n-N)/2;return L(e,e+O),t+e+O}};function W(t){var e;return"string"==typeof t||t instanceof String?t:"$thrownJsError"in t?W(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}class j extends o.GridCellRenderer{get name(){return"helm"}get cellType(){return"helm"}get defaultWidth(){return 400}get defaultHeight(){return 100}onMouseMove(t,e){var n,o,s;try{const h=t.cell.column.temp["helm-sum-maxLengthWords"],c=Object.values(t.cell.column.temp["helm-maxLengthWords"]).length-1,u=e.offsetX-t.gridColumn.left+(t.gridColumn.left-t.bounds.x);let g=0,m=c,p=!1;h[c+1]=u+1;let f=0;if(u>h[0])for(;!p;)f=Math.floor((m+g)/2),u>=h[f]&&u<=h[f+1]?(g=f,p=!0):u<h[f]?m=f-1:u>h[f+1]&&(g=f+1),g==m&&(p=!0);g=u>=h[g]?g+1:g;const d=a(t.cell.value),C=null!==(n=t.cell.value)&&void 0!==n?n:"",b=i(l(C),C),w=[];for(let t=0;t<b.length;++t)d.has(b[t])&&(w[t]=r.divV([r.divText(`Monomer '${b[t]}' not found.`),r.divText("Open the Context Panel, then expand Manage Libraries")]));(null!==(s=null===(o=w[g])||void 0===o?void 0:o.childNodes.length)&&void 0!==s?s:0)>0?r.tooltip.show(r.div(w[g]),e.x+16,e.y+16):r.tooltip.hide()}catch(t){const e=W(t);console.error("Helm: HelmCellRenderer.onMouseMove() error:\n"+e)}}render(t,e,n,o,s,h,c){var u;const g=-1!==h.gridRow?h.grid:void 0,m=a(h.cell.value),p=null!==(u=h.cell.value)&&void 0!==u?u:"",f=l(p);if(0!=m.size||!g){if(!g){const e=window.devicePixelRatio;s=28,t.canvas.height=s*e,t.canvas.style.height=`${s}px`}o=g?Math.min(g.canvas.width-e,o):t.canvas.width-e,t.save(),t.beginPath(),t.rect(e,n,o,s),t.clip(),t.font="12px monospace",t.textBaseline="top";let r=e;const l={},a={},c=i(f,p);for(let e=0;e<c.length;++e){l[e]=7*c[e].length;const i=m.has(c[e])?"red":"#808080";t.fillStyle="rgb(100,100,100)",r=$(r,n,o,s,t,c[e],i,0,!0,1)}a[0]=l[0];for(let t=1;t<c.length;t++)a[t]=a[t-1]+l[t];return h.cell.column.temp={"helm-sum-maxLengthWords":a,"helm-maxLengthWords":l},void t.restore()}{const t=r.div([],{style:{width:`${o}px`,height:`${s}px`}});t.setAttribute("dataformat","helm"),t.setAttribute("data",h.cell.value),h.element=t,new JSDraw2.Editor(t,{width:o,height:s,skin:"w8",viewonly:!0})}}}class z extends E{get splitter(){return null===this._splitter&&(this._splitter=R(this.column)),this._splitter}toFasta(t){return"fasta"===t}toSeparator(t){return"separator"===t}toHelm(t){return"helm"===t}convertFastaToSeparator(t,e=null){null===e&&(e=this.defaultGapSymbol);const n=this.getNewColumn("separator",t);return n.init((n=>{const r=this.column.get(n),o=this.splitter(r);for(let t=0;t<o.length;t++)o[t]===e&&(o[t]=E._defaultGapSymbolsDict.SEPARATOR);return o.join(t)})),n.setTag(o.TAGS.UNITS,"separator"),n}getHelmWrappers(){const t=this.isDna()?"DNA1{":this.isRna()||this.isHelmCompatible()?"RNA1{":this.isPeptide()?"PEPTIDE1{":"Unknown";if("Unknown"===t)throw new Error("Neither peptide, nor nucleotide");return[t,this.isDna()?"D(":this.isRna()?"R(":"",this.isDna()||this.isRna()?")P":"","}$$$$"]}convertToHelmHelper(t,e,n,r,o,s){return`${n}${this.splitter(t).map((t=>t===e?E._defaultGapSymbolsDict.HELM:`${r}${t}${o}`)).join(".")}${s}`}convertStringToHelm(t,e=null){null===e&&(e=this.defaultGapSymbol);const[n,r,o,s]=this.getHelmWrappers();return this.convertToHelmHelper(t,e,n,r,o,s)}convertToHelm(t=null){null===t&&(t=this.defaultGapSymbol);const[e,n,r,s]=this.getHelmWrappers(),i=this.getNewColumn("helm");return i.init((o=>{const i=this.column.get(o);return this.convertToHelmHelper(i,t,e,n,r,s)})),i.setTag(o.TAGS.UNITS,"helm"),i}convertSeparatorToFasta(t=null){null===t&&(t=E._defaultGapSymbolsDict.FASTA);const e=this.getNewColumn("fasta");return e.init((e=>{const n=this.column.get(e),r=this.splitter(n),o=[];for(let e=0;e<r.length;e++){const n=r[e];if(0===n.length)o.push(t);else if(n.length>1){const t="["+n+"]";o.push(t)}else o.push(n)}return o.join("")})),e.setTag(o.TAGS.UNITS,"fasta"),e}convertHelmToFastaSeparator(t,e,n,r){r||(r=this.toFasta(e)?E._defaultGapSymbolsDict.FASTA:E._defaultGapSymbolsDict.SEPARATOR),n||(n=this.toFasta(e)?"":this.separator);const o=/(R\(|D\(|\)|P)/g,s=t.startsWith("DNA")||t.startsWith("RNA"),i=this.splitter(t),l=[];for(let t=0;t<i.length;t++){let n=i[t];if(s&&(n=n.replace(o,"")),n===E._defaultGapSymbolsDict.HELM)l.push(r);else if(this.toFasta(e)&&n.length>1){const t="["+n+"]";l.push(t)}else l.push(n)}return l.join(n)}convertHelm(t,e,n){const r=this.getNewColumn(t,e);r.init((r=>{const o=this.column.get(r);return this.convertHelmToFastaSeparator(o,t,e,n)}));const o=P(r,5,R(r)).sameLength?"SEQ.MSA":"SEQ";return r.setTag("aligned",o),r}convertHelmToSeparator(){return this.getNewColumn("separator")}convert(t,e=null){if(this.notation===t)throw new Error("tgt notation is invalid");if(this.toSeparator(t)&&null===e)throw new Error("tgt separator is not specified");if(this.isFasta()&&this.toSeparator(t)&&null!==e)return this.convertFastaToSeparator(e);if((this.isFasta()||this.isSeparator())&&this.toHelm(t))return this.convertToHelm();if(this.isSeparator()&&this.toFasta(t))return this.convertSeparatorToFasta();if(this.isHelm()&&this.toFasta(t))return this.convertHelm(t);if(this.isHelm()&&this.toSeparator(t))return this.convertHelm(t,e);throw new Error(`Not supported conversion from source notation '${this.notation}' to target notation '${t}'.`)}constructor(t){super(t),this._splitter=null}}var B=function(t,e,n,r){return new(n||(n=Promise))((function(o,s){function i(t){try{a(r.next(t))}catch(t){s(t)}}function l(t){try{a(r.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,l)}a((r=r.apply(t,e||[])).next())}))};const V=new o.Package;let q=null;function Y(){return B(this,void 0,void 0,(function*(){return Promise.all([new Promise(((t,e)=>{dojo.ready((function(){t(null)}))})),yield n.functions.call("Bio:getBioLib")]).then((([t,e])=>{q=e,Q(),q.onChanged.subscribe((t=>{try{Q();const t=q.getPolymerTypes(),e="Monomer lib updated:<br />"+(0==t.length?"empty":t.map((t=>`${t} ${q.getMonomerSymbolsByType(t).length}`)).join("<br />"));n.shell.info(e)}catch(t){const e=W(t);console.error("Helm: initHelm monomerLib.onChanged() error:\n"+e)}}))}))}))}function Q(){org.helm.webeditor.Monomers.clear(),q.getPolymerTypes().forEach((t=>{q.getMonomerSymbolsByType(t).forEach((e=>{let n=!1;const r=q.getMonomer(t,e),o={id:e,m:r.molfile,n:r.name,na:r.naturalAnalog,rs:r.rgroups.length,type:r.polymerType,mt:r.monomerType,at:{}};if(r.rgroups.length>0){o.rs=r.rgroups.length;const t={};r.rgroups.forEach((e=>{t[e.label]=e.capGroupName})),o.at=t}else null!=r.smiles?(o.rs=Object.keys(et(r.smiles.toString())).length,o.at=et(r.smiles.toString())):n=!0;n||org.helm.webeditor.Monomers.addOneMonomer(o)}))}));const t=n.shell.tv.grid;t&&t.invalidate()}function K(){return new j}function J(t,e,o){const s=a(void 0===o?t.value:e);0==s.size?function(t,e,o){const s=r.div(),i=n.shell.tv.grid.dataFrame,l=new z(i.columns.bySemType("Macromolecule"));org.helm.webeditor.MolViewer.molscale=.8;const a=new scil.helm.App(s,{showabout:!1,mexfontsize:"90%",mexrnapinontab:!0,topmargin:20,mexmonomerstab:!0,sequenceviewonly:!1,mexfavoritefirst:!0,mexfilter:!0}),h=a.calculateSizes();a.canvas.resize(h.rightwidth-100,h.topheight-210);let c={width:h.rightwidth-100+"px",height:h.bottomheight+"px"};scil.apply(a.sequence.style,c),scil.apply(a.notation.style,c),c={width:h.rightwidth+"px",height:h.bottomheight+a.toolbarheight+"px"},scil.apply(a.properties.parent.style,c),a.structureview.resize(h.rightwidth,h.bottomheight+a.toolbarheight),a.mex.resize(h.topheight-80),setTimeout((()=>{void 0===o?a.canvas.helm.setSequence(t.value,"HELM"):a.canvas.helm.setSequence(e,"HELM")}),200),r.dialog({showHeader:!1,showFooter:!0}).add(s).onOK((()=>{const e=a.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");if(void 0===o)t.value=e;else{const n=l.convertHelmToFastaSeparator(e,o);t.value=n}})).show({modal:!0,fullScreen:!0})}(t,e,o):n.shell.warning(`Monomers ${Array.from(s).join(", ")} are absent! <br/>Please, upload the monomer library! <br/><a href="https://datagrok.ai/help/domains/bio/macromolecules" target="_blank">Learn more</a>`)}function X(t){J(t.cell,void 0,void 0)}function Z(t){const e=n.shell.tv.grid.dataFrame,r=e.columns.bySemType("Macromolecule");"helm"===r.getTag(o.TAGS.UNITS)&&J(e.currentCell,void 0,void 0);const s=new z(r).convertStringToHelm(t,"/");J(e.currentCell,s,r.getTag(o.TAGS.UNITS))}function tt(t){return B(this,void 0,void 0,(function*(){const e=n.shell.tv.grid.root.parentElement,s=r.div([]);e.appendChild(s);const i=new JSDraw2.Editor(s,{viewonly:!0});s.style.width="0px",s.style.height="0px",i.setHelm(t);const l=i.getFormula(!0),a=Math.round(100*i.getMolWeight())/100,h=Math.round(100*i.getExtinctionCoefficient(!0))/100;return e.lastChild.remove(),new o.Widget(r.tableFromMap({formula:l.replace(/<sub>/g,"").replace(/<\/sub>/g,""),"molecular weight":a,"extinction coefficient":h}))}))}function et(t){const e=t.match(/(?<=\[)[^\][]*(?=])/gm),n={};let r,o="";for(let t=0;t<e.length;t++)if(null!=e[t]&&/\d/.test(e[t])){r=e[t][e[t].length-1],e[t]=e[t].replace(/[0-9]/g,"");for(let n=0;n<e[t].length;n++)":"!=e[t][n]&&(o+=e[t][n]);n["R"+r]=o,o=""}return n}function nt(t){const e=n.shell.tv.grid.root.parentElement,s=o.Column.string("mols",t.length),i=r.div([]);e.appendChild(i);const l=new JSDraw2.Editor(i,{viewonly:!0});return i.style.width="0px",i.style.height="0px",s.init((e=>(l.setHelm(t.get(e)),l.getMolfile()))),e.lastChild.remove(),s}function rt(){return new s}helm=e})();
2
2
  //# sourceMappingURL=package.js.map