markdown-it-smiles
Version:
A markdown-it plugin for rendering SMILES (Simplified molecular input line entry specification) chemical structures
5 lines (4 loc) • 189 kB
JavaScript
import Es from 'json5';
var ys=Object.create;var Ui=Object.defineProperty;var Ss=Object.getOwnPropertyDescriptor;var As=Object.getOwnPropertyNames;var Cs=Object.getPrototypeOf,xs=Object.prototype.hasOwnProperty;var Yt=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var ve=(x,e)=>()=>(e||x((e={exports:{}}).exports,e),e.exports);var Ns=(x,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of As(e))!xs.call(x,i)&&i!==t&&Ui(x,i,{get:()=>e[i],enumerable:!(r=Ss(e,i))||r.enumerable});return x};var Rs=(x,e,t)=>(t=x!=null?ys(Cs(x)):{},Ns(e||!x||!x.__esModule?Ui(t,"default",{value:x,enumerable:!0}):t,x));var Vt=ve((Sa,Ji)=>{var Qr=class x{static clone(e){let t=Array.isArray(e)?Array():{};for(let r in e){let i=e[r];typeof i.clone=="function"?t[r]=i.clone():t[r]=typeof i=="object"?x.clone(i):i;}return t}static equals(e,t){if(e.length!==t.length)return !1;let r=e.slice().sort(),i=t.slice().sort();for(var s=0;s<r.length;s++)if(r[s]!==i[s])return !1;return !0}static print(e){if(e.length==0)return "";let t="(";for(let r=0;r<e.length;r++)t+=e[r].id?e[r].id+", ":e[r]+", ";return t=t.substring(0,t.length-2),t+")"}static each(e,t){for(let r=0;r<e.length;r++)t(e[r]);}static get(e,t,r){for(let i=0;i<e.length;i++)if(e[i][t]==r)return e[i]}static contains(e,t){if(!t.property&&!t.func){for(let r=0;r<e.length;r++)if(e[r]==t.value)return !0}else if(t.func){for(let r=0;r<e.length;r++)if(t.func(e[r]))return !0}else for(let r=0;r<e.length;r++)if(e[r][t.property]==t.value)return !0;return !1}static intersection(e,t){let r=new Array;for(let i=0;i<e.length;i++)for(let s=0;s<t.length;s++)e[i]===t[s]&&r.push(e[i]);return r}static unique(e){let t={};return e.filter(function(r){return t[r]!==void 0?!1:t[r]=!0})}static count(e,t){let r=0;for(let i=0;i<e.length;i++)e[i]===t&&r++;return r}static toggle(e,t){let r=Array(),i=!1;for(let s=0;s<e.length;s++)e[s]!==t?r.push(e[s]):i=!0;return i||r.push(t),r}static remove(e,t){let r=Array();for(let i=0;i<e.length;i++)e[i]!==t&&r.push(e[i]);return r}static removeUnique(e,t){let r=e.indexOf(t);return r>-1&&e.splice(r,1),e}static removeAll(e,t){return e.filter(function(r){return t.indexOf(r)===-1})}static merge(e,t){let r=new Array(e.length+t.length);for(let i=0;i<e.length;i++)r[i]=e[i];for(let i=0;i<t.length;i++)r[e.length+i]=t[i];return r}static containsAll(e,t){let r=0;for(let i=0;i<e.length;i++)for(let s=0;s<t.length;s++)e[i]===t[s]&&r++;return r===t.length}static sortByAtomicNumberDesc(e){let t=e.map(function(r,i){return {index:i,value:r.atomicNumber.split(".").map(Number)}});return t.sort(function(r,i){let s=Math.min(i.value.length,r.value.length),a=0;for(;a<s&&i.value[a]===r.value[a];)a++;return a===s?i.value.length-r.value.length:i.value[a]-r.value[a]}),t.map(function(r){return e[r.index]})}static deepCopy(e){let t=Array();for(let r=0;r<e.length;r++){let i=e[r];i instanceof Array?t[r]=x.deepCopy(i):t[r]=i;}return t}};Ji.exports=Qr;});var Ut=ve((Aa,Zi)=>{var ei=class x{static round(e,t){return t=t||1,+(Math.round(e+"e"+t)+"e-"+t)}static meanAngle(e){let t=0,r=0;for(var i=0;i<e.length;i++)t+=Math.sin(e[i]),r+=Math.cos(e[i]);return Math.atan2(t/e.length,r/e.length)}static innerAngle(e){return x.toRad((e-2)*180/e)}static polyCircumradius(e,t){return e/(2*Math.sin(Math.PI/t))}static apothem(e,t){return e*Math.cos(Math.PI/t)}static apothemFromSideLength(e,t){let r=x.polyCircumradius(e,t);return x.apothem(r,t)}static centralAngle(e){return x.toRad(360/e)}static toDeg(e){return e*x.degFactor}static toRad(e){return e*x.radFactor}static parityOfPermutation(e){let t=new Uint8Array(e.length),r=0,i=function(a,n=0){return t[a]===1?n:(n++,t[a]=1,i(e[a],n))};for(var s=0;s<e.length;s++){if(t[s]===1)continue;let a=i(s);r+=1-a%2;}return r%2?-1:1}static get radFactor(){return Math.PI/180}static get degFactor(){return 180/Math.PI}static get twoPI(){return 2*Math.PI}};Zi.exports=ei;});var st=ve((Ca,Ki)=>{var ti=class x{constructor(e,t){arguments.length==0?(this.x=0,this.y=0):arguments.length==1?(this.x=e.x,this.y=e.y):(this.x=e,this.y=t);}clone(){return new x(this.x,this.y)}toString(){return "("+this.x+","+this.y+")"}add(e){return this.x+=e.x,this.y+=e.y,this}subtract(e){return this.x-=e.x,this.y-=e.y,this}divide(e){return this.x/=e,this.y/=e,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}invert(){return this.x=-this.x,this.y=-this.y,this}angle(){return Math.atan2(this.y,this.x)}distance(e){return Math.sqrt((e.x-this.x)*(e.x-this.x)+(e.y-this.y)*(e.y-this.y))}distanceSq(e){return (e.x-this.x)*(e.x-this.x)+(e.y-this.y)*(e.y-this.y)}clockwise(e){let t=this.y*e.x,r=this.x*e.y;return t>r?-1:t===r?0:1}relativeClockwise(e,t){let r=(this.y-e.y)*(t.x-e.x),i=(this.x-e.x)*(t.y-e.y);return r>i?-1:r===i?0:1}rotate(e){let t=new x(0,0),r=Math.cos(e),i=Math.sin(e);return t.x=this.x*r-this.y*i,t.y=this.x*i+this.y*r,this.x=t.x,this.y=t.y,this}rotateAround(e,t){let r=Math.sin(e),i=Math.cos(e);this.x-=t.x,this.y-=t.y;let s=this.x*i-this.y*r,a=this.x*r+this.y*i;return this.x=s+t.x,this.y=a+t.y,this}rotateTo(e,t,r=0){this.x+=.001,this.y-=.001;let i=x.subtract(this,t),s=x.subtract(e,t),a=x.angle(s,i);return this.rotateAround(a+r,t),this}rotateAwayFrom(e,t,r){this.rotateAround(r,t);let i=this.distanceSq(e);this.rotateAround(-2*r,t),this.distanceSq(e)<i&&this.rotateAround(2*r,t);}getRotateAwayFromAngle(e,t,r){let i=this.clone();i.rotateAround(r,t);let s=i.distanceSq(e);return i.rotateAround(-2*r,t),i.distanceSq(e)<s?r:-r}getRotateTowardsAngle(e,t,r){let i=this.clone();i.rotateAround(r,t);let s=i.distanceSq(e);return i.rotateAround(-2*r,t),i.distanceSq(e)>s?r:-r}getRotateToAngle(e,t){let r=x.subtract(this,t),i=x.subtract(e,t),s=x.angle(i,r);return Number.isNaN(s)?0:s}isInPolygon(e){let t=!1;for(let r=0,i=e.length-1;r<e.length;i=r++)e[r].y>this.y!=e[i].y>this.y&&this.x<(e[i].x-e[r].x)*(this.y-e[r].y)/(e[i].y-e[r].y)+e[r].x&&(t=!t);return t}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}lengthSq(){return this.x*this.x+this.y*this.y}normalize(){return this.divide(this.length()),this}normalized(){return x.divideScalar(this,this.length())}whichSide(e,t){return (this.x-e.x)*(t.y-e.y)-(this.y-e.y)*(t.x-e.x)}sameSideAs(e,t,r){let i=this.whichSide(e,t),s=r.whichSide(e,t);return i<0&&s<0||i==0&&s==0||i>0&&s>0}static add(e,t){return new x(e.x+t.x,e.y+t.y)}static subtract(e,t){return new x(e.x-t.x,e.y-t.y)}static multiply(e,t){return new x(e.x*t.x,e.y*t.y)}static multiplyScalar(e,t){return new x(e.x,e.y).multiplyScalar(t)}static midpoint(e,t){return new x((e.x+t.x)/2,(e.y+t.y)/2)}static normals(e,t){let r=x.subtract(t,e);return [new x(-r.y,r.x),new x(r.y,-r.x)]}static units(e,t){let r=x.subtract(t,e);return [new x(-r.y,r.x).normalize(),new x(r.y,-r.x).normalize()]}static divide(e,t){return new x(e.x/t.x,e.y/t.y)}static divideScalar(e,t){return new x(e.x/t,e.y/t)}static dot(e,t){return e.x*t.x+e.y*t.y}static angle(e,t){let r=x.dot(e,t);return Math.acos(r/(e.length()*t.length()))}static threePointangle(e,t,r){let i=x.subtract(t,e),s=x.subtract(r,t),a=e.distance(t),n=t.distance(r);return Math.acos(x.dot(i,s)/(a*n))}static scalarProjection(e,t){let r=t.normalized();return x.dot(e,r)}static averageDirection(e){let t=new x(0,0);for(var r=0;r<e.length;r++){let i=e[r];t.add(i);}return t.normalize()}};Ki.exports=ti;});var kt=ve((Na,Qi)=>{var ji=Ut(),Nr=Vt(),lr=st();or();var ri=class x{constructor(e,t=0,r=0){this.id=null,this.value=e,this.position=new lr(t||0,r||0),this.previousPosition=new lr(0,0),this.parentVertexId=null,this.children=Array(),this.spanningTreeChildren=Array(),this.edges=Array(),this.positioned=!1,this.angle=null,this.dir=1,this.neighbourCount=0,this.neighbours=Array(),this.neighbouringElements=Array(),this.forcePositioned=!1;}setPosition(e,t){this.position.x=e,this.position.y=t;}setPositionFromVector(e){this.position.x=e.x,this.position.y=e.y;}addChild(e){this.children.push(e),this.neighbours.push(e),this.neighbourCount++;}addRingbondChild(e,t){if(this.children.push(e),this.value.bracket){let r=1;this.id===0&&this.value.bracket.hcount===0&&(r=0),this.value.bracket.hcount===1&&t===0&&(r=2),this.value.bracket.hcount===1&&t===1&&(this.neighbours.length<3?r=2:r=3),this.value.bracket.hcount===null&&t===0&&(r=1),this.value.bracket.hcount===null&&t===1&&(this.neighbours.length<3?r=1:r=2),this.neighbours.splice(r,0,e);}else this.neighbours.push(e);this.neighbourCount++;}setParentVertexId(e){this.neighbourCount++,this.parentVertexId=e,this.neighbours.push(e);}isTerminal(){return this.value.hasAttachedPseudoElements?!0:this.parentVertexId===null&&this.children.length<2||this.children.length===0}clone(){let e=new x(this.value,this.position.x,this.position.y);return e.id=this.id,e.previousPosition=new lr(this.previousPosition.x,this.previousPosition.y),e.parentVertexId=this.parentVertexId,e.children=Nr.clone(this.children),e.spanningTreeChildren=Nr.clone(this.spanningTreeChildren),e.edges=Nr.clone(this.edges),e.positioned=this.positioned,e.angle=this.angle,e.forcePositioned=this.forcePositioned,e}equals(e){return this.id===e.id}getAngle(e=null,t=!1){let r=null;return e?r=lr.subtract(this.position,e):r=lr.subtract(this.position,this.previousPosition),t?ji.toDeg(r.angle()):r.angle()}getTextDirection(e,t=!1){let r=this.getDrawnNeighbours(e),i=Array();if(e.length===1)return "right";for(let a=0;a<r.length;a++)i.push(this.getAngle(e[r[a]].position));let s=ji.meanAngle(i);if(this.isTerminal()||t)Math.round(s*100)/100===1.57&&(s=s-.2),s=Math.round(Math.round(s/Math.PI)*Math.PI);else {let a=Math.PI/2;s=Math.round(Math.round(s/a)*a);}return s===2?"down":s===-2?"up":s===0||s===-0?"right":s===3||s===-3?"left":"down"}getNeighbours(e=null){if(e===null)return this.neighbours.slice();let t=Array();for(let r=0;r<this.neighbours.length;r++)this.neighbours[r]!==e&&t.push(this.neighbours[r]);return t}getDrawnNeighbours(e){let t=Array();for(let r=0;r<this.neighbours.length;r++)e[this.neighbours[r]].value.isDrawn&&t.push(this.neighbours[r]);return t}getNeighbourCount(){return this.neighbourCount}getSpanningTreeNeighbours(e=null){let t=Array();for(let r=0;r<this.spanningTreeChildren.length;r++)(e===void 0||e!=this.spanningTreeChildren[r])&&t.push(this.spanningTreeChildren[r]);return this.parentVertexId!=null&&(e===void 0||e!=this.parentVertexId)&&t.push(this.parentVertexId),t}getNextInRing(e,t,r){let i=this.getNeighbours();for(let s=0;s<i.length;s++)if(Nr.contains(e[i[s]].value.rings,{value:t})&&i[s]!=r)return i[s];return null}};Qi.exports=ri;});var ni=ve((Ta,en)=>{kt();Gt();var ii=class{constructor(e,t){this.id=null,this.firstRingId=e.id,this.secondRingId=t.id,this.vertices=new Set;for(var r=0;r<e.members.length;r++){let i=e.members[r];for(let s=0;s<t.members.length;s++){let a=t.members[s];i===a&&this.addVertex(i);}}}addVertex(e){this.vertices.add(e);}updateOther(e,t){this.firstRingId===t?this.secondRingId=e:this.firstRingId=e;}containsRing(e){return this.firstRingId===e||this.secondRingId===e}isBridge(e){if(this.vertices.size>2)return !0;for(let t of this.vertices)if(e[t].value.rings.length>2)return !0;return !1}static isBridge(e,t,r,i){let s=null;for(let a=0;a<e.length;a++)if(s=e[a],s.firstRingId===r&&s.secondRingId===i||s.firstRingId===i&&s.secondRingId===r)return s.isBridge(t);return !1}static getNeighbours(e,t){let r=[];for(let i=0;i<e.length;i++){let s=e[i];s.firstRingId===t?r.push(s.secondRingId):s.secondRingId===t&&r.push(s.firstRingId);}return r}static getVertices(e,t,r){for(let i=0;i<e.length;i++){let s=e[i];if(s.firstRingId===t&&s.secondRingId===r||s.firstRingId===r&&s.secondRingId===t)return [...s.vertices]}}};en.exports=ii;});var Gt=ve((La,tn)=>{var si=Vt(),Ts=st();kt();var Ms=ni(),ai=class x{constructor(e){this.id=null,this.members=e,this.edges=[],this.insiders=[],this.neighbours=[],this.positioned=!1,this.center=new Ts(0,0),this.rings=[],this.isBridged=!1,this.isPartOfBridged=!1,this.isSpiro=!1,this.isFused=!1,this.centralAngle=0,this.canFlip=!0;}clone(){let e=new x(this.members);return e.id=this.id,e.insiders=si.clone(this.insiders),e.neighbours=si.clone(this.neighbours),e.positioned=this.positioned,e.center=this.center.clone(),e.rings=si.clone(this.rings),e.isBridged=this.isBridged,e.isPartOfBridged=this.isPartOfBridged,e.isSpiro=this.isSpiro,e.isFused=this.isFused,e.centralAngle=this.centralAngle,e.canFlip=this.canFlip,e}getSize(){return this.members.length}getPolygon(e){let t=[];for(let r=0;r<this.members.length;r++)t.push(e[this.members[r]].position);return t}getAngle(){return Math.PI-this.centralAngle}eachMember(e,t,r,i){r=r||r===0?r:this.members[0];let s=r,a=0;for(;s!=null&&a<100;){let n=s;t(n),s=e[s].getNextInRing(e,this.id,i),i=n,s==r&&(s=null),a++;}}getOrderedNeighbours(e){let t=Array(this.neighbours.length);for(let r=0;r<this.neighbours.length;r++){let i=Ms.getVertices(e,this.id,this.neighbours[r]);t[r]={n:i.length,neighbour:this.neighbours[r]};}return t.sort(function(r,i){return i.n-r.n}),t}isBenzeneLike(e){let t=this.getDoubleBondCount(e),r=this.members.length;return t===3&&r===6||t===2&&r===5}getDoubleBondCount(e){let t=0;for(let r=0;r<this.members.length;r++){let i=e[this.members[r]].value;(i.bondType==="="||i.branchBond==="=")&&t++;}return t}contains(e){for(let t=0;t<this.members.length;t++)if(this.members[t]==e)return !0;return !1}};tn.exports=ai;});var or=ve((Ba,rn)=>{var Ls=Vt();kt();Gt();var li=class x{constructor(e,t="-"){this.idx=null,this.element=e.length===1?e.toUpperCase():e,this.drawExplicit=!1,this.ringbonds=Array(),this.rings=Array(),this.bondType=t,this.branchBond=null,this.isBridge=!1,this.isBridgeNode=!1,this.originalRings=Array(),this.bridgedRing=null,this.anchoredRings=Array(),this.bracket=null,this.plane=0,this.attachedPseudoElements={},this.hasAttachedPseudoElements=!1,this.isDrawn=!0,this.isConnectedToRing=!1,this.neighbouringElements=Array(),this.isPartOfAromaticRing=e!==this.element,this.bondCount=0,this.chirality="",this.isStereoCenter=!1,this.priority=0,this.mainChain=!1,this.hydrogenDirection="down",this.subtreeDepth=1,this.hasHydrogen=!1,this.class=void 0;}addNeighbouringElement(e){this.neighbouringElements.push(e);}attachPseudoElement(e,t,r=0,i=0){r===null&&(r=0),i===null&&(i=0);let s=r+e+i;this.attachedPseudoElements[s]?this.attachedPseudoElements[s].count+=1:this.attachedPseudoElements[s]={element:e,count:1,hydrogenCount:r,previousElement:t,charge:i},this.hasAttachedPseudoElements=!0;}getAttachedPseudoElements(){let e={},t=this;return Object.keys(this.attachedPseudoElements).sort().forEach(function(r){e[r]=t.attachedPseudoElements[r];}),e}getAttachedPseudoElementsCount(){return Object.keys(this.attachedPseudoElements).length}isHeteroAtom(){return this.element!=="C"&&this.element!=="H"}addAnchoredRing(e){Ls.contains(this.anchoredRings,{value:e})||this.anchoredRings.push(e);}getRingbondCount(){return this.ringbonds.length}backupRings(){this.originalRings=Array(this.rings.length);for(let e=0;e<this.rings.length;e++)this.originalRings[e]=this.rings[e];}restoreRings(){this.rings=Array(this.originalRings.length);for(let e=0;e<this.originalRings.length;e++)this.rings[e]=this.originalRings[e];}haveCommonRingbond(e,t){for(let r=0;r<e.ringbonds.length;r++)for(let i=0;i<t.ringbonds.length;i++)if(e.ringbonds[r].id==t.ringbonds[i].id)return !0;return !1}neighbouringElementsEqual(e){if(e.length!==this.neighbouringElements.length)return !1;e.sort(),this.neighbouringElements.sort();for(var t=0;t<this.neighbouringElements.length;t++)if(e[t]!==this.neighbouringElements[t])return !1;return !0}getAtomicNumber(){return x.atomicNumbers[this.element]}getMaxBonds(){return x.maxBonds[this.element]}static get maxBonds(){return {H:1,C:4,N:3,O:2,P:3,S:2,B:3,F:1,I:1,Cl:1,Br:1}}static get atomicNumbers(){return {H:1,He:2,Li:3,Be:4,B:5,b:5,C:6,c:6,N:7,n:7,O:8,o:8,F:9,Ne:10,Na:11,Mg:12,Al:13,Si:14,P:15,p:15,S:16,s:16,Cl:17,Ar:18,K:19,Ca:20,Sc:21,Ti:22,V:23,Cr:24,Mn:25,Fe:26,Co:27,Ni:28,Cu:29,Zn:30,Ga:31,Ge:32,As:33,Se:34,Br:35,Kr:36,Rb:37,Sr:38,Y:39,Zr:40,Nb:41,Mo:42,Tc:43,Ru:44,Rh:45,Pd:46,Ag:47,Cd:48,In:49,Sn:50,Sb:51,Te:52,I:53,Xe:54,Cs:55,Ba:56,La:57,Ce:58,Pr:59,Nd:60,Pm:61,Sm:62,Eu:63,Gd:64,Tb:65,Dy:66,Ho:67,Er:68,Tm:69,Yb:70,Lu:71,Hf:72,Ta:73,W:74,Re:75,Os:76,Ir:77,Pt:78,Au:79,Hg:80,Tl:81,Pb:82,Bi:83,Po:84,At:85,Rn:86,Fr:87,Ra:88,Ac:89,Th:90,Pa:91,U:92,Np:93,Pu:94,Am:95,Cm:96,Bk:97,Cf:98,Es:99,Fm:100,Md:101,No:102,Lr:103,Rf:104,Db:105,Sg:106,Bh:107,Hs:108,Mt:109,Ds:110,Rg:111,Cn:112,Uut:113,Uuq:114,Uup:115,Uuh:116,Uus:117,Uuo:118}}static get mass(){return {H:1,He:2,Li:3,Be:4,B:5,b:5,C:6,c:6,N:7,n:7,O:8,o:8,F:9,Ne:10,Na:11,Mg:12,Al:13,Si:14,P:15,p:15,S:16,s:16,Cl:17,Ar:18,K:19,Ca:20,Sc:21,Ti:22,V:23,Cr:24,Mn:25,Fe:26,Co:27,Ni:28,Cu:29,Zn:30,Ga:31,Ge:32,As:33,Se:34,Br:35,Kr:36,Rb:37,Sr:38,Y:39,Zr:40,Nb:41,Mo:42,Tc:43,Ru:44,Rh:45,Pd:46,Ag:47,Cd:48,In:49,Sn:50,Sb:51,Te:52,I:53,Xe:54,Cs:55,Ba:56,La:57,Ce:58,Pr:59,Nd:60,Pm:61,Sm:62,Eu:63,Gd:64,Tb:65,Dy:66,Ho:67,Er:68,Tm:69,Yb:70,Lu:71,Hf:72,Ta:73,W:74,Re:75,Os:76,Ir:77,Pt:78,Au:79,Hg:80,Tl:81,Pb:82,Bi:83,Po:84,At:85,Rn:86,Fr:87,Ra:88,Ac:89,Th:90,Pa:91,U:92,Np:93,Pu:94,Am:95,Cm:96,Bk:97,Cf:98,Es:99,Fm:100,Md:101,No:102,Lr:103,Rf:104,Db:105,Sg:106,Bh:107,Hs:108,Mt:109,Ds:110,Rg:111,Cn:112,Uut:113,Uuq:114,Uup:115,Uuh:116,Uus:117,Uuo:118}}};rn.exports=li;});var hr=ve((Oa,nn)=>{var Jt=st(),oi=class x{constructor(e=new Jt(0,0),t=new Jt(0,0),r=null,i=null,s=!1,a=!1){this.from=e,this.to=t,this.elementFrom=r,this.elementTo=i,this.chiralFrom=s,this.chiralTo=a;}clone(){return new x(this.from.clone(),this.to.clone(),this.elementFrom,this.elementTo)}getLength(){return Math.sqrt(Math.pow(this.to.x-this.from.x,2)+Math.pow(this.to.y-this.from.y,2))}getAngle(){return Jt.subtract(this.getRightVector(),this.getLeftVector()).angle()}getRightVector(){return this.from.x<this.to.x?this.to:this.from}getLeftVector(){return this.from.x<this.to.x?this.from:this.to}getRightElement(){return this.from.x<this.to.x?this.elementTo:this.elementFrom}getLeftElement(){return this.from.x<this.to.x?this.elementFrom:this.elementTo}getRightChiral(){return this.from.x<this.to.x?this.chiralTo:this.chiralFrom}getLeftChiral(){return this.from.x<this.to.x?this.chiralFrom:this.chiralTo}setRightVector(e,t){return this.from.x<this.to.x?(this.to.x=e,this.to.y=t):(this.from.x=e,this.from.y=t),this}setLeftVector(e,t){return this.from.x<this.to.x?(this.from.x=e,this.from.y=t):(this.to.x=e,this.to.y=t),this}rotateToXAxis(){let e=this.getLeftVector();return this.setRightVector(e.x+this.getLength(),e.y),this}rotate(e){let t=this.getLeftVector(),r=this.getRightVector(),i=Math.sin(e),s=Math.cos(e),a=s*(r.x-t.x)-i*(r.y-t.y)+t.x,n=i*(r.x-t.x)-s*(r.y-t.y)+t.y;return this.setRightVector(a,n),this}shortenFrom(e){let t=Jt.subtract(this.to,this.from);return t.normalize(),t.multiplyScalar(e),this.from.add(t),this}shortenTo(e){let t=Jt.subtract(this.from,this.to);return t.normalize(),t.multiplyScalar(e),this.to.add(t),this}shortenRight(e){return this.from.x<this.to.x?this.shortenTo(e):this.shortenFrom(e),this}shortenLeft(e){return this.from.x<this.to.x?this.shortenFrom(e):this.shortenTo(e),this}shorten(e){let t=Jt.subtract(this.from,this.to);return t.normalize(),t.multiplyScalar(e/2),this.to.add(t),this.from.subtract(t),this}};nn.exports=oi;});var gi=ve((Ia,sn)=>{var hi=class x{constructor(e,t,r=1){this.id=null,this.sourceId=e,this.targetId=t,this.weight=r,this.bondType="-",this.isPartOfAromaticRing=!1,this.center=!1,this.wedge="";}setBondType(e){this.bondType=e,this.weight=x.bonds[e];}static get bonds(){return {"-":1,"/":1,"\\":1,"=":2,"#":3,$:4}}};sn.exports=hi;});var ui=ve((Da,an)=>{function Ps(x){return x===1?"+":x===2?"2+":x===-1?"-":x===-2?"2-":""}an.exports={getChargeText:Ps};});var hn=ve((qa,on)=>{var Zt=Ut(),ze=st();hr();kt();Gt();var {getChargeText:ln}=ui(),fi=class{constructor(e,t,r){typeof e=="string"||e instanceof String?this.canvas=document.getElementById(e):this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.themeManager=t,this.opts=r,this.drawingWidth=0,this.drawingHeight=0,this.offsetX=0,this.offsetY=0,this.fontLarge=this.opts.fontSizeLarge+"pt Helvetica, Arial, sans-serif",this.fontSmall=this.opts.fontSizeSmall+"pt Helvetica, Arial, sans-serif",this.updateSize(this.opts.width,this.opts.height),this.ctx.font=this.fontLarge,this.hydrogenWidth=this.ctx.measureText("H").width,this.halfHydrogenWidth=this.hydrogenWidth/2,this.halfBondThickness=this.opts.bondThickness/2;}updateSize(e,t){this.devicePixelRatio=window.devicePixelRatio||1,this.backingStoreRatio=this.ctx.webkitBackingStorePixelRatio||this.ctx.mozBackingStorePixelRatio||this.ctx.msBackingStorePixelRatio||this.ctx.oBackingStorePixelRatio||this.ctx.backingStorePixelRatio||1,this.ratio=this.devicePixelRatio/this.backingStoreRatio,this.ratio!==1?(this.canvas.width=e*this.ratio,this.canvas.height=t*this.ratio,this.canvas.style.width=e+"px",this.canvas.style.height=t+"px",this.ctx.setTransform(this.ratio,0,0,this.ratio,0,0)):(this.canvas.width=e*this.ratio,this.canvas.height=t*this.ratio);}setTheme(e){this.colors=e;}scale(e){let t=-Number.MAX_VALUE,r=-Number.MAX_VALUE,i=Number.MAX_VALUE,s=Number.MAX_VALUE;for(var a=0;a<e.length;a++){if(!e[a].value.isDrawn)continue;let g=e[a].position;t<g.x&&(t=g.x),r<g.y&&(r=g.y),i>g.x&&(i=g.x),s>g.y&&(s=g.y);}var n=this.opts.padding;t+=n,r+=n,i-=n,s-=n,this.drawingWidth=t-i,this.drawingHeight=r-s;var f=this.canvas.offsetWidth/this.drawingWidth,h=this.canvas.offsetHeight/this.drawingHeight,c=f<h?f:h;this.ctx.scale(c,c),this.offsetX=-i,this.offsetY=-s,f<h?this.offsetY+=this.canvas.offsetHeight/(2*c)-this.drawingHeight/2:this.offsetX+=this.canvas.offsetWidth/(2*c)-this.drawingWidth/2;}reset(){this.ctx.setTransform(1,0,0,1,0,0);}getColor(e){return e=e.toUpperCase(),e in this.colors?this.colors[e]:this.colors.C}drawCircle(e,t,r,i,s=!0,a=!1,n=""){let f=this.ctx,h=this.offsetX,c=this.offsetY;f.save(),f.lineWidth=1.5,f.beginPath(),f.arc(e+h,t+c,r,0,Zt.twoPI,!0),f.closePath(),a?(s?(f.fillStyle="#f00",f.fill()):(f.strokeStyle="#f00",f.stroke()),this.drawDebugText(e,t,n)):s?(f.fillStyle=i,f.fill()):(f.strokeStyle=i,f.stroke()),f.restore();}drawLine(e,t=!1,r=1){let i=this.ctx,s=this.offsetX,a=this.offsetY,n=e.clone().shorten(4),f=n.getLeftVector().clone(),h=n.getRightVector().clone();f.x+=s,f.y+=a,h.x+=s,h.y+=a,t||(i.save(),i.globalCompositeOperation="destination-out",i.beginPath(),i.moveTo(f.x,f.y),i.lineTo(h.x,h.y),i.lineCap="round",i.lineWidth=this.opts.bondThickness+1.2,i.strokeStyle=this.themeManager.getColor("BACKGROUND"),i.stroke(),i.globalCompositeOperation="source-over",i.restore()),f=e.getLeftVector().clone(),h=e.getRightVector().clone(),f.x+=s,f.y+=a,h.x+=s,h.y+=a,i.save(),i.beginPath(),i.moveTo(f.x,f.y),i.lineTo(h.x,h.y),i.lineCap="round",i.lineWidth=this.opts.bondThickness;let c=this.ctx.createLinearGradient(f.x,f.y,h.x,h.y);c.addColorStop(.4,this.themeManager.getColor(e.getLeftElement())||this.themeManager.getColor("C")),c.addColorStop(.6,this.themeManager.getColor(e.getRightElement())||this.themeManager.getColor("C")),t&&(i.setLineDash([1,1.5]),i.lineWidth=this.opts.bondThickness/1.5),r<1&&(i.globalAlpha=r),i.strokeStyle=c,i.stroke(),i.restore();}drawWedge(e,t=1){if(isNaN(e.from.x)||isNaN(e.from.y)||isNaN(e.to.x)||isNaN(e.to.y))return;let r=this.ctx,i=this.offsetX,s=this.offsetY,a=e.clone().shorten(5),n=a.getLeftVector().clone(),f=a.getRightVector().clone();n.x+=i,n.y+=s,f.x+=i,f.y+=s,n=e.getLeftVector().clone(),f=e.getRightVector().clone(),n.x+=i,n.y+=s,f.x+=i,f.y+=s,r.save();let h=ze.normals(n,f);h[0].normalize(),h[1].normalize();let c=e.getRightChiral(),g=n,d=f;c&&(g=f,d=n);let p=ze.add(g,ze.multiplyScalar(h[0],this.halfBondThickness)),C=ze.add(d,ze.multiplyScalar(h[0],1.5+this.halfBondThickness)),S=ze.add(d,ze.multiplyScalar(h[1],1.5+this.halfBondThickness)),T=ze.add(g,ze.multiplyScalar(h[1],this.halfBondThickness));r.beginPath(),r.moveTo(p.x,p.y),r.lineTo(C.x,C.y),r.lineTo(S.x,S.y),r.lineTo(T.x,T.y);let w=this.ctx.createRadialGradient(f.x,f.y,this.opts.bondLength,f.x,f.y,0);w.addColorStop(.4,this.themeManager.getColor(e.getLeftElement())||this.themeManager.getColor("C")),w.addColorStop(.6,this.themeManager.getColor(e.getRightElement())||this.themeManager.getColor("C")),r.fillStyle=w,r.fill(),r.restore();}drawDashedWedge(e){if(isNaN(e.from.x)||isNaN(e.from.y)||isNaN(e.to.x)||isNaN(e.to.y))return;let t=this.ctx,r=this.offsetX,i=this.offsetY,s=e.getLeftVector().clone(),a=e.getRightVector().clone();s.x+=r,s.y+=i,a.x+=r,a.y+=i,t.save();let n=ze.normals(s,a);n[0].normalize(),n[1].normalize();let f=e.getRightChiral(),h,c,g,d,p=e.clone();f?(h=a,c=s,p.shortenRight(1),g=p.getRightVector().clone(),d=p.getLeftVector().clone()):(h=s,c=a,p.shortenLeft(1),g=p.getLeftVector().clone(),d=p.getRightVector().clone()),g.x+=r,g.y+=i,d.x+=r,d.y+=i;let C=ze.subtract(c,h).normalize();t.strokeStyle=this.themeManager.getColor("C"),t.lineCap="round",t.lineWidth=this.opts.bondThickness,t.beginPath();let S=e.getLength(),T=1.25/(S/(this.opts.bondThickness*3)),w=!1;for(var B=0;B<1;B+=T){let P=ze.multiplyScalar(C,B*S),I=ze.add(h,P),H=1.5*B,K=ze.multiplyScalar(n[0],H);!w&&B>.5&&(t.stroke(),t.beginPath(),t.strokeStyle=this.themeManager.getColor(e.getRightElement())||this.themeManager.getColor("C"),w=!0),I.subtract(K),t.moveTo(I.x,I.y),I.add(ze.multiplyScalar(K,2)),t.lineTo(I.x,I.y);}t.stroke(),t.restore();}drawDebugText(e,t,r){let i=this.ctx;i.save(),i.font="5px Droid Sans, sans-serif",i.textAlign="start",i.textBaseline="top",i.fillStyle="#ff0000",i.fillText(r,e+this.offsetX,t+this.offsetY),i.restore();}drawBall(e,t,r){let i=this.ctx;i.save(),i.beginPath(),i.arc(e+this.offsetX,t+this.offsetY,this.opts.bondLength/4.5,0,Zt.twoPI,!1),i.fillStyle=this.themeManager.getColor(r),i.fill(),i.restore();}drawPoint(e,t,r){let i=this.ctx,s=this.offsetX,a=this.offsetY;i.save(),i.globalCompositeOperation="destination-out",i.beginPath(),i.arc(e+s,t+a,1.5,0,Zt.twoPI,!0),i.closePath(),i.fill(),i.globalCompositeOperation="source-over",i.beginPath(),i.arc(e+this.offsetX,t+this.offsetY,.75,0,Zt.twoPI,!1),i.fillStyle=this.themeManager.getColor(r),i.fill(),i.restore();}drawText(e,t,r,i,s,a,n,f,h,c={}){let g=this.ctx,d=this.offsetX,p=this.offsetY;g.save(),g.textAlign="start",g.textBaseline="alphabetic";let S="",T=0;n&&(S=ln(n),g.font=this.fontSmall,T=g.measureText(S).width);let w="0",B=0;f>0&&(w=f.toString(),g.font=this.fontSmall,B=g.measureText(w).width),n===1&&r==="N"&&c.hasOwnProperty("0O")&&c.hasOwnProperty("0O-1")&&(c={"0O":{element:"O",count:2,hydrogenCount:0,previousElement:"C",charge:""}},n=0),g.font=this.fontLarge,g.fillStyle=this.themeManager.getColor("BACKGROUND");let P=g.measureText(r);P.totalWidth=P.width+T,P.height=parseInt(this.fontLarge,10);let I=P.width>this.opts.fontSizeLarge?P.width:this.opts.fontSizeLarge;I/=1.5,g.globalCompositeOperation="destination-out",g.beginPath(),g.arc(e+d,t+p,I,0,Zt.twoPI,!0),g.closePath(),g.fill(),g.globalCompositeOperation="source-over";let H=-P.width/2,K=-P.width/2;g.fillStyle=this.themeManager.getColor(r),g.fillText(r,e+d+H,t+this.opts.halfFontSizeLarge+p),H+=P.width,n&&(g.font=this.fontSmall,g.fillText(S,e+d+H,t-this.opts.fifthFontSizeSmall+p),H+=T),f>0&&(g.font=this.fontSmall,g.fillText(w,e+d+K-B,t-this.opts.fifthFontSizeSmall+p),K-=B),g.font=this.fontLarge;let j=0,ne=0;if(i===1){let se=e+d,Q=t+p+this.opts.halfFontSizeLarge;j=this.hydrogenWidth,K-=j,s==="left"?se+=K:s==="right"||s==="up"&&a||s==="down"&&a?se+=H:s==="up"&&!a?(Q-=this.opts.fontSizeLarge+this.opts.quarterFontSizeLarge,se-=this.halfHydrogenWidth):s==="down"&&!a&&(Q+=this.opts.fontSizeLarge+this.opts.quarterFontSizeLarge,se-=this.halfHydrogenWidth),g.fillText("H",se,Q),H+=j;}else if(i>1){let se=e+d,Q=t+p+this.opts.halfFontSizeLarge;j=this.hydrogenWidth,g.font=this.fontSmall,ne=g.measureText(i).width,K-=j+ne,s==="left"?se+=K:s==="right"||s==="up"&&a||s==="down"&&a?se+=H:s==="up"&&!a?(Q-=this.opts.fontSizeLarge+this.opts.quarterFontSizeLarge,se-=this.halfHydrogenWidth):s==="down"&&!a&&(Q+=this.opts.fontSizeLarge+this.opts.quarterFontSizeLarge,se-=this.halfHydrogenWidth),g.font=this.fontLarge,g.fillText("H",se,Q),g.font=this.fontSmall,g.fillText(i,se+this.halfHydrogenWidth+ne,Q+this.opts.fifthFontSizeSmall),H+=j+this.halfHydrogenWidth+ne;}for(let se in c){if(!c.hasOwnProperty(se))continue;let Q=0,ee=0,me=c[se].element,fe=c[se].count,Ne=c[se].hydrogenCount,We=c[se].charge;g.font=this.fontLarge,fe>1&&Ne>0&&(Q=g.measureText("(").width,ee=g.measureText(")").width);let He=g.measureText(me).width,Ze=0,Ke="",lt=0;j=0,Ne>0&&(j=this.hydrogenWidth),g.font=this.fontSmall,fe>1&&(Ze=g.measureText(fe).width),We!==0&&(Ke=ln(We),lt=g.measureText(Ke).width),ne=0,Ne>1&&(ne=g.measureText(Ne).width),g.font=this.fontLarge;let Ce=e+d,Ae=t+p+this.opts.halfFontSizeLarge;g.fillStyle=this.themeManager.getColor(me),fe>0&&(K-=Ze),fe>1&&Ne>0&&(s==="left"?(K-=ee,g.fillText(")",Ce+K,Ae)):(g.fillText("(",Ce+H,Ae),H+=Q)),s==="left"?(K-=He,g.fillText(me,Ce+K,Ae)):(g.fillText(me,Ce+H,Ae),H+=He),Ne>0&&(s==="left"?(K-=j+ne,g.fillText("H",Ce+K,Ae),Ne>1&&(g.font=this.fontSmall,g.fillText(Ne,Ce+K+j,Ae+this.opts.fifthFontSizeSmall))):(g.fillText("H",Ce+H,Ae),H+=j,Ne>1&&(g.font=this.fontSmall,g.fillText(Ne,Ce+H,Ae+this.opts.fifthFontSizeSmall),H+=ne))),g.font=this.fontLarge,fe>1&&Ne>0&&(s==="left"?(K-=Q,g.fillText("(",Ce+K,Ae)):(g.fillText(")",Ce+H,Ae),H+=ee)),g.font=this.fontSmall,fe>1&&(s==="left"?g.fillText(fe,Ce+K+Q+ee+j+ne+He,Ae+this.opts.fifthFontSizeSmall):(g.fillText(fe,Ce+H,Ae+this.opts.fifthFontSizeSmall),H+=Ze)),We!==0&&(s==="left"?g.fillText(Ke,Ce+K+Q+ee+j+ne+He,t-this.opts.fifthFontSizeSmall+p):(g.fillText(Ke,Ce+H,t-this.opts.fifthFontSizeSmall+p),H+=lt));}g.restore();}getChargeText(e){return e===1?"+":e===2?"2+":e===-1?"-":e===-2?"2-":""}drawDebugPoint(e,t,r="",i="#f00"){this.drawCircle(e,t,2,i,!0,!0,r);}drawAromaticityRing(e){let t=this.ctx,r=Zt.apothemFromSideLength(this.opts.bondLength,e.getSize());t.save(),t.strokeStyle=this.themeManager.getColor("C"),t.lineWidth=this.opts.bondThickness,t.beginPath(),t.arc(e.center.x+this.offsetX,e.center.y+this.offsetY,r-this.opts.bondSpacing,0,Math.PI*2,!0),t.closePath(),t.stroke(),t.restore();}clear(){this.ctx.clearRect(0,0,this.canvas.offsetWidth,this.canvas.offsetHeight);}};on.exports=fi;});var Rr=ve((_a,un)=>{var gn=Ut();st();var ks=kt(),Bs=gi();Gt();var Os=or(),ci=class x{constructor(e,t=!1){this.vertices=Array(),this.edges=Array(),this.atomIdxToVertexId=Array(),this.vertexIdsToEdgeId={},this.isomeric=t,this._atomIdx=0,this._time=0,this._init(e);}_init(e,t=0,r=null,i=!1){let s=e.atom.element?e.atom.element:e.atom,a=new Os(s,e.bond);(s!=="H"||!e.hasNext&&r===null)&&(a.idx=this._atomIdx,this._atomIdx++),a.branchBond=e.branchBond,a.ringbonds=e.ringbonds,a.bracket=e.atom.element?e.atom:null,a.class=e.atom.class;let n=new ks(a),f=this.vertices[r];if(this.addVertex(n),a.idx!==null&&this.atomIdxToVertexId.push(n.id),r!==null){n.setParentVertexId(r),n.value.addNeighbouringElement(f.value.element),f.addChild(n.id),f.value.addNeighbouringElement(a.element),f.spanningTreeChildren.push(n.id);let d=new Bs(r,n.id,1);i?(d.setBondType(n.value.branchBond||"-"),n.id,d.setBondType(n.value.branchBond||"-"),n.id):(d.setBondType(f.value.bondType||"-"),f.id);this.addEdge(d);}let h=e.ringbondCount+1;a.bracket&&(h+=a.bracket.hcount);let c=0;if(a.bracket&&a.bracket.chirality){a.isStereoCenter=!0,c=a.bracket.hcount;for(var g=0;g<c;g++)this._init({atom:"H",isBracket:"false",branches:Array(),branchCount:0,ringbonds:Array(),ringbondCount:!1,next:null,hasNext:!1,bond:"-"},g,n.id,!0);}for(var g=0;g<e.branchCount;g++)this._init(e.branches[g],g+h,n.id,!0);e.hasNext&&this._init(e.next,e.branchCount+h,n.id);}clear(){this.vertices=Array(),this.edges=Array(),this.vertexIdsToEdgeId={};}addVertex(e){return e.id=this.vertices.length,this.vertices.push(e),e.id}addEdge(e){let t=this.vertices[e.sourceId],r=this.vertices[e.targetId];return e.id=this.edges.length,this.edges.push(e),this.vertexIdsToEdgeId[e.sourceId+"_"+e.targetId]=e.id,this.vertexIdsToEdgeId[e.targetId+"_"+e.sourceId]=e.id,e.isPartOfAromaticRing=t.value.isPartOfAromaticRing&&r.value.isPartOfAromaticRing,t.value.bondCount+=e.weight,r.value.bondCount+=e.weight,t.edges.push(e.id),r.edges.push(e.id),e.id}getEdge(e,t){let r=this.vertexIdsToEdgeId[e+"_"+t];return r===void 0?null:this.edges[r]}getEdges(e){let t=Array(),r=this.vertices[e];for(var i=0;i<r.neighbours.length;i++)t.push(this.vertexIdsToEdgeId[e+"_"+r.neighbours[i]]);return t}hasEdge(e,t){return this.vertexIdsToEdgeId[e+"_"+t]!==void 0}getVertexList(){let e=[this.vertices.length];for(var t=0;t<this.vertices.length;t++)e[t]=this.vertices[t].id;return e}getEdgeList(){let e=Array(this.edges.length);for(var t=0;t<this.edges.length;t++)e[t]=[this.edges[t].sourceId,this.edges[t].targetId];return e}getAdjacencyMatrix(){let e=this.vertices.length,t=Array(e);for(var r=0;r<e;r++)t[r]=new Array(e),t[r].fill(0);for(var r=0;r<this.edges.length;r++){let s=this.edges[r];t[s.sourceId][s.targetId]=1,t[s.targetId][s.sourceId]=1;}return t}getComponentsAdjacencyMatrix(){let e=this.vertices.length,t=Array(e),r=this.getBridges();for(var i=0;i<e;i++)t[i]=new Array(e),t[i].fill(0);for(var i=0;i<this.edges.length;i++){let a=this.edges[i];t[a.sourceId][a.targetId]=1,t[a.targetId][a.sourceId]=1;}for(var i=0;i<r.length;i++)t[r[i][0]][r[i][1]]=0,t[r[i][1]][r[i][0]]=0;return t}getSubgraphAdjacencyMatrix(e){let t=e.length,r=Array(t);for(var i=0;i<t;i++){r[i]=new Array(t),r[i].fill(0);for(var s=0;s<t;s++)i!==s&&this.hasEdge(e[i],e[s])&&(r[i][s]=1);}return r}getDistanceMatrix(){let e=this.vertices.length,t=this.getAdjacencyMatrix(),r=Array(e);for(var i=0;i<e;i++)r[i]=Array(e),r[i].fill(1/0);for(var i=0;i<e;i++)for(var s=0;s<e;s++)t[i][s]===1&&(r[i][s]=1);for(var a=0;a<e;a++)for(var i=0;i<e;i++)for(var s=0;s<e;s++)r[i][s]>r[i][a]+r[a][s]&&(r[i][s]=r[i][a]+r[a][s]);return r}getSubgraphDistanceMatrix(e){let t=e.length,r=this.getSubgraphAdjacencyMatrix(e),i=Array(t);for(var s=0;s<t;s++)i[s]=Array(t),i[s].fill(1/0);for(var s=0;s<t;s++)for(var a=0;a<t;a++)r[s][a]===1&&(i[s][a]=1);for(var n=0;n<t;n++)for(var s=0;s<t;s++)for(var a=0;a<t;a++)i[s][a]>i[s][n]+i[n][a]&&(i[s][a]=i[s][n]+i[n][a]);return i}getAdjacencyList(){let e=this.vertices.length,t=Array(e);for(var r=0;r<e;r++){t[r]=[];for(var i=0;i<e;i++)r!==i&&this.hasEdge(this.vertices[r].id,this.vertices[i].id)&&t[r].push(i);}return t}getSubgraphAdjacencyList(e){let t=e.length,r=Array(t);for(var i=0;i<t;i++){r[i]=Array();for(var s=0;s<t;s++)i!==s&&this.hasEdge(e[i],e[s])&&r[i].push(s);}return r}getBridges(){let e=this.vertices.length,t=new Array(e),r=new Array(e),i=new Array(e),s=new Array(e),a=this.getAdjacencyList(),n=Array();t.fill(!1),s.fill(null),this._time=0;for(var f=0;f<e;f++)t[f]||this._bridgeDfs(f,t,r,i,s,a,n);return n}traverseBF(e,t){let r=this.vertices.length,i=new Array(r);i.fill(!1);for(var s=[e];s.length>0;){let n=s.shift(),f=this.vertices[n];t(f);for(var a=0;a<f.neighbours.length;a++){let h=f.neighbours[a];i[h]||(i[h]=!0,s.push(h));}}}getTreeDepth(e,t){if(e===null||t===null)return 0;let r=this.vertices[e].getSpanningTreeNeighbours(t),i=0;for(var s=0;s<r.length;s++){let a=r[s],n=this.getTreeDepth(a,e);n>i&&(i=n);}return i+1}traverseTree(e,t,r,i=999999,s=!1,a=1,n=null){if(n===null&&(n=new Uint8Array(this.vertices.length)),a>i+1||n[e]===1)return;n[e]=1;let f=this.vertices[e],h=f.getNeighbours(t);(!s||a>1)&&r(f);for(var c=0;c<h.length;c++)this.traverseTree(h[c],e,r,i,s,a+1,n);}kkLayout(e,t,r,i,s,a=.1,n=.1,f=2e3,h=50,c=1e9){let g=s;for(var d=e.length;d--;)var p=this.vertices[e[d]].neighbours.length;let C=this.getSubgraphDistanceMatrix(e),S=e.length,T=gn.polyCircumradius(500,S),w=gn.centralAngle(S),B=0,P=new Float32Array(S),I=new Float32Array(S),H=Array(S);for(d=S;d--;){let U=this.vertices[e[d]];U.positioned?(P[d]=U.position.x,I[d]=U.position.y):(P[d]=t.x+Math.cos(B)*T,I[d]=t.y+Math.sin(B)*T),H[d]=U.positioned,B+=w;}let K=Array(S);for(d=S;d--;){K[d]=new Array(S);for(var p=S;p--;)K[d][p]=s*C[d][p];}let j=Array(S);for(d=S;d--;){j[d]=Array(S);for(var p=S;p--;)j[d][p]=g*Math.pow(C[d][p],-2);}let ne=Array(S),se=new Float32Array(S),Q=new Float32Array(S);for(d=S;d--;)ne[d]=Array(S);d=S;let ee,me,fe,Ne,We,He,Ze;for(;d--;){ee=P[d],me=I[d],fe=0,Ne=0;let U=S;for(;U--;)d!==U&&(We=P[U],He=I[U],Ze=1/Math.sqrt((ee-We)*(ee-We)+(me-He)*(me-He)),ne[d][U]=[j[d][U]*(ee-We-K[d][U]*(ee-We)*Ze),j[d][U]*(me-He-K[d][U]*(me-He)*Ze)],ne[U][d]=ne[d][U],fe+=ne[d][U][0],Ne+=ne[d][U][1]);se[d]=fe,Q[d]=Ne;}let Ke=function(U){return [se[U]*se[U]+Q[U]*Q[U],se[U],Q[U]]},lt=function(){let U=0,Re=0,je=0,Pe=0;for(d=S;d--;){let[et,Ge,_e]=Ke(d);et>U&&H[d]===!1&&(U=et,Re=d,je=Ge,Pe=_e);}return [Re,U,je,Pe]},Ce=function(U,Re,je){let Pe=0,et=0,Ge=0,_e=P[U],Xe=I[U],Nt=K[U],Je=j[U];for(d=S;d--;){if(d===U)continue;let nt=P[d],tt=I[d],gt=Nt[d],ut=Je[d],ft=(_e-nt)*(_e-nt),Et=1/Math.pow(ft+(Xe-tt)*(Xe-tt),1.5);Pe+=ut*(1-gt*(Xe-tt)*(Xe-tt)*Et),et+=ut*(1-gt*ft*Et),Ge+=ut*(gt*(_e-nt)*(Xe-tt)*Et);}Pe===0&&(Pe=.1),et===0&&(et=.1),Ge===0&&(Ge=.1);let Be=Re/Pe+je/Ge;Be/=Ge/Pe-et/Ge;let Me=-(Ge*Be+Re)/Pe;P[U]+=Me,I[U]+=Be;let Oe=ne[U];Re=0,je=0,_e=P[U],Xe=I[U];let ot,Se,Rt,pt,ht;for(d=S;d--;)U!==d&&(ot=P[d],Se=I[d],Rt=Oe[d][0],pt=Oe[d][1],ht=1/Math.sqrt((_e-ot)*(_e-ot)+(Xe-Se)*(Xe-Se)),Me=Je[d]*(_e-ot-Nt[d]*(_e-ot)*ht),Be=Je[d]*(Xe-Se-Nt[d]*(Xe-Se)*ht),Oe[d]=[Me,Be],Re+=Me,je+=Be,se[d]+=Me-Rt,Q[d]+=Be-pt);se[U]=Re,Q[U]=je;},Ae=0,St=0,At=0,Ct=0,Bt=0,xt=0;for(;c>a&&f>Bt;)for(Bt++,[Ae,c,St,At]=lt(),Ct=c,xt=0;Ct>n&&h>xt;)xt++,Ce(Ae,St,At),[Ct,St,At]=Ke(Ae);for(d=S;d--;){let U=e[d],Re=this.vertices[U];Re.position.x=P[d],Re.position.y=I[d],Re.positioned=!0,Re.forcePositioned=!0;}}_bridgeDfs(e,t,r,i,s,a,n){t[e]=!0,r[e]=i[e]=++this._time;for(var f=0;f<a[e].length;f++){let h=a[e][f];t[h]?h!==s[e]&&(i[e]=Math.min(i[e],r[h])):(s[h]=e,this._bridgeDfs(h,t,r,i,s,a,n),i[e]=Math.min(i[e],i[h]),i[h]>r[e]&&n.push([e,h]));}}static getConnectedComponents(e){let t=e.length,r=new Array(t),i=new Array;r.fill(!1);for(var a=0;a<t;a++)if(!r[a]){let n=Array();r[a]=!0,n.push(a),x._ccGetDfs(a,r,e,n),n.length>1&&i.push(n);}return i}static getConnectedComponentCount(e){let t=e.length,r=new Array(t),i=0;r.fill(!1);for(var s=0;s<t;s++)r[s]||(r[s]=!0,i++,x._ccCountDfs(s,r,e));return i}static _ccCountDfs(e,t,r){for(var i=0;i<r[e].length;i++)!r[e][i]||t[i]||e===i||(t[i]=!0,x._ccCountDfs(i,t,r));}static _ccGetDfs(e,t,r,i){for(var s=0;s<r[e].length;s++)!r[e][s]||t[s]||e===s||(t[s]=!0,i.push(s),x._ccGetDfs(s,t,r,i));}};un.exports=ci;});var cn=ve((Xa,fn)=>{var Is=Rr(),di=class x{static getRings(e,t=!1){let r=e.getComponentsAdjacencyMatrix();if(r.length===0)return null;let i=Is.getConnectedComponents(r),s=Array();for(var a=0;a<i.length;a++){let h=i[a],c=e.getSubgraphAdjacencyMatrix([...h]),g=new Uint16Array(c.length),d=new Uint16Array(c.length);for(var n=0;n<c.length;n++){d[n]=0,g[n]=0;for(var f=0;f<c[n].length;f++)g[n]+=c[n][f];}let p=0;for(var n=0;n<c.length;n++)for(var f=n+1;f<c.length;f++)p+=c[n][f];let C=p-c.length+1,S=!0;for(var n=0;n<g.length;n++)g[n]!==3&&(S=!1);if(S&&(C=2+p-c.length),C===1){s.push([...h]);continue}t&&(C=999);let{d:T,pe:w,pe_prime:B}=x.getPathIncludedDistanceMatrices(c),P=x.getRingCandidates(T,w,B),I=x.getSSSR(P,T,c,w,B,g,d,C);for(var n=0;n<I.length;n++){let K=Array(I[n].size),j=0;for(let ne of I[n])K[j++]=h[ne];s.push(K);}}return s}static matrixToString(e){let t="";for(var r=0;r<e.length;r++){for(var i=0;i<e[r].length;i++)t+=e[r][i]+" ";t+=`
`;}return t}static getPathIncludedDistanceMatrices(e){let t=e.length,r=Array(t),i=Array(t),s=Array(t);for(var a=0,n=0,f=0,h=t;h--;){r[h]=Array(t),i[h]=Array(t),s[h]=Array(t);for(var g=t;g--;)r[h][g]=h===g||e[h][g]===1?e[h][g]:Number.POSITIVE_INFINITY,r[h][g]===1?i[h][g]=[[[h,g]]]:i[h][g]=Array(),s[h][g]=Array();}for(var c=t,g;c--;)for(h=t;h--;)for(g=t;g--;){let d=r[h][g],p=r[h][c]+r[c][g];if(d>p){var a,n,f;if(d===p+1)for(s[h][g]=[i[h][g].length],a=i[h][g].length;a--;)for(s[h][g][a]=[i[h][g][a].length],n=i[h][g][a].length;n--;)for(s[h][g][a][n]=[i[h][g][a][n].length],f=i[h][g][a][n].length;f--;)s[h][g][a][n][f]=[i[h][g][a][n][0],i[h][g][a][n][1]];else s[h][g]=Array();for(r[h][g]=p,i[h][g]=[[]],a=i[h][c][0].length;a--;)i[h][g][0].push(i[h][c][0][a]);for(a=i[c][g][0].length;a--;)i[h][g][0].push(i[c][g][0][a]);}else if(d===p){if(i[h][c].length&&i[c][g].length){var a;if(i[h][g].length){let S=Array();for(a=i[h][c][0].length;a--;)S.push(i[h][c][0][a]);for(a=i[c][g][0].length;a--;)S.push(i[c][g][0][a]);i[h][g].push(S);}else {let S=Array();for(a=i[h][c][0].length;a--;)S.push(i[h][c][0][a]);for(a=i[c][g][0].length;a--;)S.push(i[c][g][0][a]);i[h][g][0]=S;}}}else if(d===p-1){var a;if(s[h][g].length){let S=Array();for(a=i[h][c][0].length;a--;)S.push(i[h][c][0][a]);for(a=i[c][g][0].length;a--;)S.push(i[c][g][0][a]);s[h][g].push(S);}else {let S=Array();for(a=i[h][c][0].length;a--;)S.push(i[h][c][0][a]);for(a=i[c][g][0].length;a--;)S.push(i[c][g][0][a]);s[h][g][0]=S;}}}return {d:r,pe:i,pe_prime:s}}static getRingCandidates(e,t,r){let i=e.length,s=Array(),a=0;for(let n=0;n<i;n++)for(let f=0;f<i;f++)e[n][f]===0||t[n][f].length===1&&r[n][f]===0||(r[n][f].length!==0?a=2*(e[n][f]+.5):a=2*e[n][f],a!==1/0&&s.push([a,t[n][f],r[n][f]]));return s.sort(function(n,f){return n[0]-f[0]}),s}static getSSSR(e,t,r,i,s,a,n,f){let h=Array(),c=Array();for(let d=0;d<e.length;d++)if(e[d][0]%2!==0)for(let p=0;p<e[d][2].length;p++){let C=e[d][1][0].concat(e[d][2][p]);for(var g=0;g<C.length;g++)C[g][0].constructor===Array&&(C[g]=C[g][0]);let S=x.bondsToAtoms(C);if(x.getBondCount(S,r)===S.size&&!x.pathSetsContain(h,S,C,c,a,n)&&(h.push(S),c=c.concat(C)),h.length>f)return h}else for(let p=0;p<e[d][1].length-1;p++){let C=e[d][1][p].concat(e[d][1][p+1]);for(var g=0;g<C.length;g++)C[g][0].constructor===Array&&(C[g]=C[g][0]);let S=x.bondsToAtoms(C);if(x.getBondCount(S,r)===S.size&&!x.pathSetsContain(h,S,C,c,a,n)&&(h.push(S),c=c.concat(C)),h.length>f)return h}return h}static getEdgeCount(e){let t=0,r=e.length;for(var i=r-1;i--;)for(var s=r;s--;)e[i][s]===1&&t++;return t}static getEdgeList(e){let t=e.length,r=Array();for(var i=t-1;i--;)for(var s=t;s--;)e[i][s]===1&&r.push([i,s]);return r}static bondsToAtoms(e){let t=new Set;for(var r=e.length;r--;)t.add(e[r][0]),t.add(e[r][1]);return t}static getBondCount(e,t){let r=0;for(let i of e)for(let s of e)i!==s&&(r+=t[i][s]);return r/2}static pathSetsContain(e,t,r,i,s,a){for(var n=e.length;n--;){if(x.isSupersetOf(t,e[n]))return !0;if(e[n].size===t.size&&x.areSetsEqual(e[n],t))return !0}let f=0,h=!1;for(n=r.length;n--;)for(var c=i.length;c--;)(r[n][0]===i[c][0]&&r[n][1]===i[c][1]||r[n][1]===i[c][0]&&r[n][0]===i[c][1])&&f++,f===r.length&&(h=!0);let g=!1;if(h){for(let d of t)if(a[d]<s[d]){g=!0;break}}if(h&&!g)return !0;for(let d of t)a[d]++;return !1}static areSetsEqual(e,t){if(e.size!==t.size)return !1;for(let r of e)if(!t.has(r))return !1;return !0}static isSupersetOf(e,t){for(var r of t)if(!e.has(r))return !1;return !0}};fn.exports=di;});var Er=ve((Ya,dn)=>{var pi=class{constructor(e,t){this.colors=e,this.theme=this.colors[t];}getColor(e){return e&&(e=e.toUpperCase(),e in this.theme)?this.theme[e]:this.theme.C}setTheme(e){this.colors.hasOwnProperty(e)&&(this.theme=this.colors[e]);}};dn.exports=pi;});var Tr=ve((Va,pn)=>{var vi=class{static extend(){let e=this,t={},r=!1,i=0,s=arguments.length;Object.prototype.toString.call(arguments[0])==="[object Boolean]"&&(r=arguments[0],i++);let a=function(n){for(var f in n)Object.prototype.hasOwnProperty.call(n,f)&&(r&&Object.prototype.toString.call(n[f])==="[object Object]"?t[f]=e.extend(!0,t[f],n[f]):t[f]=n[f]);};for(;i<s;i++){let n=arguments[i];a(n);}return t}};pn.exports=vi;});var wn=ve((Ga,bn)=>{var we=Ut(),at=Vt(),Z=st(),xe=hr();kt();var Ds=gi(),Mr=or(),vn=Gt(),Lr=ni(),$s=hn(),mn=Rr(),Hs=cn(),zs=Er(),qs=Tr(),mi=class{constructor(e){this.graph=null,this.doubleBondConfigCount=0,this.doubleBondConfig=null,this.ringIdCounter=0,this.ringConnectionIdCounter=0,this.canvasWrapper=null,this.totalOverlapScore=0,this.defaultOptions={width:500,height:500,scale:0,bondThickness:1,bondLength:30,shortBondLength:.8,bondSpacing:.17*30,atomVisualization:"default",isomeric:!0,debug:!1,terminalCarbons:!1,explicitHydrogens:!0,overlapSensitivity:.42,overlapResolutionIterations:1,compactDrawing:!0,fontFamily:"Arial, Helvetica, sans-serif",fontSizeLarge:11,fontSizeSmall:3,padding:10,experimentalSSSR:!1,kkThreshold:.1,kkInnerThreshold:.1,kkMaxIteration:2e4,kkMaxInnerIteration:50,kkMaxEnergy:1e9,weights:{colormap:null,additionalPadding:20,sigma:10,interval:0,opacity:1},themes:{dark:{C:"#fff",O:"#e74c3c",N:"#3498db",F:"#27ae60",CL:"#16a085",BR:"#d35400",I:"#8e44ad",P:"#d35400",S:"#f1c40f",B:"#e67e22",SI:"#e67e22",H:"#aaa",BACKGROUND:"#141414"},light:{C:"#222",O:"#e74c3c",N:"#3498db",F:"#27ae60",CL:"#16a085",BR:"#d35400",I:"#8e44ad",P:"#d35400",S:"#f1c40f",B:"#e67e22",SI:"#e67e22",H:"#666",BACKGROUND:"#fff"},oldschool:{C:"#000",O:"#000",N:"#000",F:"#000",CL:"#000",BR:"#000",I:"#000",P:"#000",S:"#000",B:"#000",SI:"#000",H:"#000",BACKGROUND:"#fff"},solarized:{C:"#586e75",O:"#dc322f",N:"#268bd2",F:"#859900",CL:"#16a085",BR:"#cb4b16",I:"#6c71c4",P:"#d33682",S:"#b58900",B:"#2aa198",SI:"#2aa198",H:"#657b83",BACKGROUND:"#fff"},"solarized-dark":{C:"#93a1a1",O:"#dc322f",N:"#268bd2",F:"#859900",CL:"#16a085",BR:"#cb4b16",I:"#6c71c4",P:"#d33682",S:"#b58900",B:"#2aa198",SI:"#2aa198",H:"#839496",BACKGROUND:"#fff"},matrix:{C:"#678c61",O:"#2fc079",N:"#4f7e7e",F:"#90d762",CL:"#82d967",BR:"#23755a",I:"#409931",P:"#c1ff8a",S:"#faff00",B:"#50b45a",SI:"#409931",H:"#426644",BACKGROUND:"#fff"},github:{C:"#24292f",O:"#cf222e",N:"#0969da",F:"#2da44e",CL:"#6fdd8b",BR:"#bc4c00",I:"#8250df",P:"#bf3989",S:"#d4a72c",B:"#fb8f44",SI:"#bc4c00",H:"#57606a",BACKGROUND:"#fff"},carbon:{C:"#161616",O:"#da1e28",N:"#0f62fe",F:"#198038",CL:"#007d79",BR:"#fa4d56",I:"#8a3ffc",P:"#ff832b",S:"#f1c21b",B:"#8a3800",SI:"#e67e22",H:"#525252",BACKGROUND:"#fff"},cyberpunk:{C:"#ea00d9",O:"#ff3131",N:"#0abdc6",F:"#00ff9f",CL:"#00fe00",BR:"#fe9f20",I:"#ff00ff",P:"#fe7f00",S:"#fcee0c",B:"#ff00ff",SI:"#ffffff",H:"#913cb1",BACKGROUND:"#fff"},gruvbox:{C:"#665c54",O:"#cc241d",N:"#458588",F:"#98971a",CL:"#79740e",BR:"#d65d0e",I:"#b16286",P:"#af3a03",S:"#d79921",B:"#689d6a",SI:"#427b58",H:"#7c6f64",BACKGROUND:"#fbf1c7"},"gruvbox-dark":{C:"#ebdbb2",O:"#cc241d",N:"#458588",F:"#98971a",CL:"#b8bb26",BR:"#d65d0e",I:"#b16286",P:"#fe8019",S:"#d79921",B:"#8ec07c",SI:"#83a598",H:"#bdae93",BACKGROUND:"#282828"},custom:{C:"#222",O:"#e74c3c",N:"#3498db",F:"#27ae60",CL:"#16a085",BR:"#d35400",I:"#8e44ad",P:"#d35400",S:"#f1c40f",B:"#e67e22",SI:"#e67e22",H:"#666",BACKGROUND:"#fff"}}},this.opts=qs.extend(!0,this.defaultOptions,e),this.opts.halfBondSpacing=this.opts.bondSpacing/2,this.opts.bondLengthSq=this.opts.bondLength*this.opts.bondLength,this.opts.halfFontSizeLarge=this.opts.fontSizeLarge/2,this.opts.quarterFontSizeLarge=this.opts.fontSizeLarge/4,this.opts.fifthFontSizeSmall=this.opts.fontSizeSmall/5,this.theme=this.opts.themes.dark;}draw(e,t,r="light",i=!1){this.initDraw(e,r,i),this.infoOnly||(this.themeManager=new zs(this.opts.themes,r),this.canvasWrapper=new $s(t,this.themeManager,this.opts)),i||(this.processGraph(),this.canvasWrapper.scale(this.graph.vertices),this.drawEdges(this.opts.debug),this.drawVertices(this.opts.debug),this.canvasWrapper.reset(),this.opts.debug&&(console.log(this.graph),console.log(this.rings),console.log(this.ringConnections)));}edgeRingCount(e){let t=this.graph.edges[e],r=this.graph.vertices[t.sourceId],i=this.graph.vertices[t.targetId];return Math.min(r.value.rings.length,i.value.rings.length)}getBridgedRings(){let e=Array();for(var t=0;t<this.rings.length;t++)this.rings[t].isBridged&&e.push(this.rings[t]);return e}getFusedRings(){let e=Array();for(var t=0;t<this.rings.length;t++)this.rings[t].isFused&&e.push(this.rings[t]);return e}getSpiros(){let e=Array();for(var t=0;t<this.rings.length;t++)this.rings[t].isSpiro&&e.push(this.rings[t]);return e}printRingInfo(){let e="";for(var t=0;t<this.rings.length;t++){let r=this.rings[t];e+=r.id+";",e+=r.members.length+";",e+=r.neighbours.length+";",e+=r.isSpiro?"true;":"false;",e+=r.isFused?"true;":"false;",e+=r.isBridged?"true;":"false;",e+=r.rings.length+";",e+=`
`;}return e}rotateDrawing(){let e=0,t=0,r=0;for(var i=0;i<this.graph.vertices.length;i++){let n=this.graph.vertices[i];if(n.value.isDrawn)for(var s=i+1;s<this.graph.vertices.length;s++){let f=this.graph.vertices[s];if(!f.value.isDrawn)continue;let h=n.position.distanceSq(f.position);h>r&&(r=h,e=i,t=s);}}let a=-Z.subtract(this.graph.vertices[e].position,this.graph.vertices[t].position).angle();if(!isNaN(a)){let n=a%.523599;n<.2617995?a=a-n:a+=.523599-n;for(var i=0;i<this.graph.vertices.length;i++)i!==t&&this.graph.vertices[i].position.rotateAround(a,this.graph.vertices[t].position);for(var i=0;i<this.rings.length;i++)this.rings[i].center.rotateAround(a,this.graph.vertices[t].position);}}getTotalOverlapScore(){return this.totalOverlapScore}getRingCount(){return this.rings.length}hasBridgedRing(){return this.bridgedRing}getHeavyAtomCount(){let e=0;for(var t=0;t<this.graph.vertices.length;t++)this.graph.vertices[t].value.element!=="H"&&e++;return e}getMolecularFormula(e=null){let t="",r=new Map,i=e===null?this.graph:new mn(e,this.opts.isomeric);for(var s=0;s<i.vertices.length;s++){let n=i.vertices[s].value;if(r.has(n.element)?r.set(n.element,r.get(n.element)+1):r.set(n.element,1),n.bracket&&!n.bracket.chirality&&(r.has("H")?r.set("H",r.get("H")+n.bracket.hcount):r.set("H",n.bracket.hcount)),!n.bracket){let f=Mr.maxBonds[n.element]-n.bondCount;n.isPartOfAromaticRing&&f--,r.has("H")?r.set("H",r.get("H")+f):r.set("H",f);}}if(r.has("C")){let n=r.get("C");t+="C"+(n>1?n:""),r.delete("C");}if(r.has("H")){let n=r.get("H");t+="H"+(n>1?n:""),r.delete("H");}return Object.keys(Mr.atomicNumbers).sort().map(n=>{if(r.has(n)){let f=r.get(n);t+=n+(f>1?f:"");}}),t}getRingbondType(e,t){if(e.value.getRingbondCount()<1||t.value.getRingbondCount()<1)return null;for(var r=0;r<e.value.ringbonds.length;r++)for(var i=0;i<t.value.ringbonds