three-forcegraph.min.js 104 KB

12345
  1. // Version 1.39.1 three-forcegraph - https://github.com/vasturiano/three-forcegraph
  2. !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("three")):"function"==typeof define&&define.amd?define(["three"],t):(n="undefined"!=typeof globalThis?globalThis:n||self).ThreeForceGraph=t(n.THREE)}(this,(function(n){"use strict";function t(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),e.push.apply(e,r)}return e}function e(n){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?t(Object(r),!0).forEach((function(t){o(n,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):t(Object(r)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(r,t))}))}return n}function r(n){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n})(n)}function i(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function o(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}function a(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),t&&s(n,t)}function u(n){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)})(n)}function s(n,t){return(s=Object.setPrototypeOf||function(n,t){return n.__proto__=t,n})(n,t)}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(n){return!1}}function l(n,t,e){return(l=f()?Reflect.construct:function(n,t,e){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(n,r));return e&&s(i,e.prototype),i}).apply(null,arguments)}function c(n,t){if(null==n)return{};var e,r,i=function(n,t){if(null==n)return{};var e,r,i={},o=Object.keys(n);for(r=0;r<o.length;r++)e=o[r],t.indexOf(e)>=0||(i[e]=n[e]);return i}(n,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r<o.length;r++)e=o[r],t.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(n,e)&&(i[e]=n[e])}return i}function h(n){if(void 0===n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}function d(n,t){return!t||"object"!=typeof t&&"function"!=typeof t?h(n):t}function p(n){var t=f();return function(){var e,r=u(n);if(t){var i=u(this).constructor;e=Reflect.construct(r,arguments,i)}else e=r.apply(this,arguments);return d(this,e)}}function g(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var e=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null==e)return;var r,i,o=[],a=!0,u=!1;try{for(e=e.call(n);!(a=(r=e.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(n){u=!0,i=n}finally{try{a||null==e.return||e.return()}finally{if(u)throw i}}return o}(n,t)||y(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(n){return function(n){if(Array.isArray(n))return b(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||y(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(n,t){if(n){if("string"==typeof n)return b(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);return"Object"===e&&n.constructor&&(e=n.constructor.name),"Map"===e||"Set"===e?Array.from(n):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?b(n,t):void 0}}function b(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=new Array(t);e<t;e++)r[e]=n[e];return r}function m(n,t,e){var r,i=1;function o(){var o,a,u=r.length,s=0,f=0,l=0;for(o=0;o<u;++o)s+=(a=r[o]).x||0,f+=a.y||0,l+=a.z||0;for(s=(s/u-n)*i,f=(f/u-t)*i,l=(l/u-e)*i,o=0;o<u;++o)a=r[o],s&&(a.x-=s),f&&(a.y-=f),l&&(a.z-=l)}return null==n&&(n=0),null==t&&(t=0),null==e&&(e=0),o.initialize=function(n){r=n},o.x=function(t){return arguments.length?(n=+t,o):n},o.y=function(n){return arguments.length?(t=+n,o):t},o.z=function(n){return arguments.length?(e=+n,o):e},o.strength=function(n){return arguments.length?(i=+n,o):i},o}function _(n,t,e){if(isNaN(t))return n;var r,i,o,a,u,s,f=n._root,l={data:e},c=n._x0,h=n._x1;if(!f)return n._root=l,n;for(;f.length;)if((a=t>=(i=(c+h)/2))?c=i:h=i,r=f,!(f=f[u=+a]))return r[u]=l,n;if(t===(o=+n._x.call(null,f.data)))return l.next=f,r?r[u]=l:n._root=l,n;do{r=r?r[u]=new Array(2):n._root=new Array(2),(a=t>=(i=(c+h)/2))?c=i:h=i}while((u=+a)==(s=+(o>=i)));return r[s]=f,r[u]=l,n}function x(n,t,e){this.node=n,this.x0=t,this.x1=e}function w(n){return n[0]}function k(n,t){var e=new O(null==t?w:t,NaN,NaN);return null==n?e:e.addAll(n)}function O(n,t,e){this._x=n,this._x0=t,this._x1=e,this._root=void 0}function A(n){for(var t={data:n.data},e=t;n=n.next;)e=e.next={data:n.data};return t}var j=k.prototype=O.prototype;function M(n,t,e,r){if(isNaN(t)||isNaN(e))return n;var i,o,a,u,s,f,l,c,h,d=n._root,p={data:r},g=n._x0,v=n._y0,y=n._x1,b=n._y1;if(!d)return n._root=p,n;for(;d.length;)if((f=t>=(o=(g+y)/2))?g=o:y=o,(l=e>=(a=(v+b)/2))?v=a:b=a,i=d,!(d=d[c=l<<1|f]))return i[c]=p,n;if(u=+n._x.call(null,d.data),s=+n._y.call(null,d.data),t===u&&e===s)return p.next=d,i?i[c]=p:n._root=p,n;do{i=i?i[c]=new Array(4):n._root=new Array(4),(f=t>=(o=(g+y)/2))?g=o:y=o,(l=e>=(a=(v+b)/2))?v=a:b=a}while((c=l<<1|f)==(h=(s>=a)<<1|u>=o));return i[h]=d,i[c]=p,n}function S(n,t,e,r,i){this.node=n,this.x0=t,this.y0=e,this.x1=r,this.y1=i}function P(n){return n[0]}function N(n){return n[1]}function B(n,t,e){var r=new C(null==t?P:t,null==e?N:e,NaN,NaN,NaN,NaN);return null==n?r:r.addAll(n)}function C(n,t,e,r,i,o){this._x=n,this._y=t,this._x0=e,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function E(n){for(var t={data:n.data},e=t;n=n.next;)e=e.next={data:n.data};return t}j.copy=function(){var n,t,e=new O(this._x,this._x0,this._x1),r=this._root;if(!r)return e;if(!r.length)return e._root=A(r),e;for(n=[{source:r,target:e._root=new Array(2)}];r=n.pop();)for(var i=0;i<2;++i)(t=r.source[i])&&(t.length?n.push({source:t,target:r.target[i]=new Array(2)}):r.target[i]=A(t));return e},j.add=function(n){var t=+this._x.call(null,n);return _(this.cover(t),t,n)},j.addAll=function(n){var t,e,r=n.length,i=new Array(r),o=1/0,a=-1/0;for(t=0;t<r;++t)isNaN(e=+this._x.call(null,n[t]))||(i[t]=e,e<o&&(o=e),e>a&&(a=e));if(o>a)return this;for(this.cover(o).cover(a),t=0;t<r;++t)_(this,i[t],n[t]);return this},j.cover=function(n){if(isNaN(n=+n))return this;var t=this._x0,e=this._x1;if(isNaN(t))e=(t=Math.floor(n))+1;else{for(var r,i,o=e-t||1,a=this._root;t>n||n>=e;)switch(i=+(n<t),(r=new Array(2))[i]=a,a=r,o*=2,i){case 0:e=t+o;break;case 1:t=e-o}this._root&&this._root.length&&(this._root=a)}return this._x0=t,this._x1=e,this},j.data=function(){var n=[];return this.visit((function(t){if(!t.length)do{n.push(t.data)}while(t=t.next)})),n},j.extent=function(n){return arguments.length?this.cover(+n[0][0]).cover(+n[1][0]):isNaN(this._x0)?void 0:[[this._x0],[this._x1]]},j.find=function(n,t){var e,r,i,o,a,u=this._x0,s=this._x1,f=[],l=this._root;for(l&&f.push(new x(l,u,s)),null==t?t=1/0:(u=n-t,s=n+t);o=f.pop();)if(!(!(l=o.node)||(r=o.x0)>s||(i=o.x1)<u))if(l.length){var c=(r+i)/2;f.push(new x(l[1],c,i),new x(l[0],r,c)),(a=+(n>=c))&&(o=f[f.length-1],f[f.length-1]=f[f.length-1-a],f[f.length-1-a]=o)}else{var h=Math.abs(n-+this._x.call(null,l.data));h<t&&(t=h,u=n-h,s=n+h,e=l.data)}return e},j.remove=function(n){if(isNaN(o=+this._x.call(null,n)))return this;var t,e,r,i,o,a,u,s,f,l=this._root,c=this._x0,h=this._x1;if(!l)return this;if(l.length)for(;;){if((u=o>=(a=(c+h)/2))?c=a:h=a,t=l,!(l=l[s=+u]))return this;if(!l.length)break;t[s+1&1]&&(e=t,f=s)}for(;l.data!==n;)if(r=l,!(l=l.next))return this;return(i=l.next)&&delete l.next,r?(i?r.next=i:delete r.next,this):t?(i?t[s]=i:delete t[s],(l=t[0]||t[1])&&l===(t[1]||t[0])&&!l.length&&(e?e[f]=l:this._root=l),this):(this._root=i,this)},j.removeAll=function(n){for(var t=0,e=n.length;t<e;++t)this.remove(n[t]);return this},j.root=function(){return this._root},j.size=function(){var n=0;return this.visit((function(t){if(!t.length)do{++n}while(t=t.next)})),n},j.visit=function(n){var t,e,r,i,o=[],a=this._root;for(a&&o.push(new x(a,this._x0,this._x1));t=o.pop();)if(!n(a=t.node,r=t.x0,i=t.x1)&&a.length){var u=(r+i)/2;(e=a[1])&&o.push(new x(e,u,i)),(e=a[0])&&o.push(new x(e,r,u))}return this},j.visitAfter=function(n){var t,e=[],r=[];for(this._root&&e.push(new x(this._root,this._x0,this._x1));t=e.pop();){var i=t.node;if(i.length){var o,a=t.x0,u=t.x1,s=(a+u)/2;(o=i[0])&&e.push(new x(o,a,s)),(o=i[1])&&e.push(new x(o,s,u))}r.push(t)}for(;t=r.pop();)n(t.node,t.x0,t.x1);return this},j.x=function(n){return arguments.length?(this._x=n,this):this._x};var z=B.prototype=C.prototype;function T(n,t,e,r,i){if(isNaN(t)||isNaN(e)||isNaN(r))return n;var o,a,u,s,f,l,c,h,d,p,g,v,y=n._root,b={data:i},m=n._x0,_=n._y0,x=n._z0,w=n._x1,k=n._y1,O=n._z1;if(!y)return n._root=b,n;for(;y.length;)if((h=t>=(a=(m+w)/2))?m=a:w=a,(d=e>=(u=(_+k)/2))?_=u:k=u,(p=r>=(s=(x+O)/2))?x=s:O=s,o=y,!(y=y[g=p<<2|d<<1|h]))return o[g]=b,n;if(f=+n._x.call(null,y.data),l=+n._y.call(null,y.data),c=+n._z.call(null,y.data),t===f&&e===l&&r===c)return b.next=y,o?o[g]=b:n._root=b,n;do{o=o?o[g]=new Array(8):n._root=new Array(8),(h=t>=(a=(m+w)/2))?m=a:w=a,(d=e>=(u=(_+k)/2))?_=u:k=u,(p=r>=(s=(x+O)/2))?x=s:O=s}while((g=p<<2|d<<1|h)==(v=(c>=s)<<2|(l>=u)<<1|f>=a));return o[v]=y,o[g]=b,n}function I(n,t,e,r,i,o,a){this.node=n,this.x0=t,this.y0=e,this.z0=r,this.x1=i,this.y1=o,this.z1=a}function $(n){return n[0]}function D(n){return n[1]}function F(n){return n[2]}function L(n,t,e,r){var i=new R(null==t?$:t,null==e?D:e,null==r?F:r,NaN,NaN,NaN,NaN,NaN,NaN);return null==n?i:i.addAll(n)}function R(n,t,e,r,i,o,a,u,s){this._x=n,this._y=t,this._z=e,this._x0=r,this._y0=i,this._z0=o,this._x1=a,this._y1=u,this._z1=s,this._root=void 0}function q(n){for(var t={data:n.data},e=t;n=n.next;)e=e.next={data:n.data};return t}z.copy=function(){var n,t,e=new C(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=E(r),e;for(n=[{source:r,target:e._root=new Array(4)}];r=n.pop();)for(var i=0;i<4;++i)(t=r.source[i])&&(t.length?n.push({source:t,target:r.target[i]=new Array(4)}):r.target[i]=E(t));return e},z.add=function(n){const t=+this._x.call(null,n),e=+this._y.call(null,n);return M(this.cover(t,e),t,e,n)},z.addAll=function(n){var t,e,r,i,o=n.length,a=new Array(o),u=new Array(o),s=1/0,f=1/0,l=-1/0,c=-1/0;for(e=0;e<o;++e)isNaN(r=+this._x.call(null,t=n[e]))||isNaN(i=+this._y.call(null,t))||(a[e]=r,u[e]=i,r<s&&(s=r),r>l&&(l=r),i<f&&(f=i),i>c&&(c=i));if(s>l||f>c)return this;for(this.cover(s,f).cover(l,c),e=0;e<o;++e)M(this,a[e],u[e],n[e]);return this},z.cover=function(n,t){if(isNaN(n=+n)||isNaN(t=+t))return this;var e=this._x0,r=this._y0,i=this._x1,o=this._y1;if(isNaN(e))i=(e=Math.floor(n))+1,o=(r=Math.floor(t))+1;else{for(var a,u,s=i-e||1,f=this._root;e>n||n>=i||r>t||t>=o;)switch(u=(t<r)<<1|n<e,(a=new Array(4))[u]=f,f=a,s*=2,u){case 0:i=e+s,o=r+s;break;case 1:e=i-s,o=r+s;break;case 2:i=e+s,r=o-s;break;case 3:e=i-s,r=o-s}this._root&&this._root.length&&(this._root=f)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},z.data=function(){var n=[];return this.visit((function(t){if(!t.length)do{n.push(t.data)}while(t=t.next)})),n},z.extent=function(n){return arguments.length?this.cover(+n[0][0],+n[0][1]).cover(+n[1][0],+n[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},z.find=function(n,t,e){var r,i,o,a,u,s,f,l=this._x0,c=this._y0,h=this._x1,d=this._y1,p=[],g=this._root;for(g&&p.push(new S(g,l,c,h,d)),null==e?e=1/0:(l=n-e,c=t-e,h=n+e,d=t+e,e*=e);s=p.pop();)if(!(!(g=s.node)||(i=s.x0)>h||(o=s.y0)>d||(a=s.x1)<l||(u=s.y1)<c))if(g.length){var v=(i+a)/2,y=(o+u)/2;p.push(new S(g[3],v,y,a,u),new S(g[2],i,y,v,u),new S(g[1],v,o,a,y),new S(g[0],i,o,v,y)),(f=(t>=y)<<1|n>=v)&&(s=p[p.length-1],p[p.length-1]=p[p.length-1-f],p[p.length-1-f]=s)}else{var b=n-+this._x.call(null,g.data),m=t-+this._y.call(null,g.data),_=b*b+m*m;if(_<e){var x=Math.sqrt(e=_);l=n-x,c=t-x,h=n+x,d=t+x,r=g.data}}return r},z.remove=function(n){if(isNaN(o=+this._x.call(null,n))||isNaN(a=+this._y.call(null,n)))return this;var t,e,r,i,o,a,u,s,f,l,c,h,d=this._root,p=this._x0,g=this._y0,v=this._x1,y=this._y1;if(!d)return this;if(d.length)for(;;){if((f=o>=(u=(p+v)/2))?p=u:v=u,(l=a>=(s=(g+y)/2))?g=s:y=s,t=d,!(d=d[c=l<<1|f]))return this;if(!d.length)break;(t[c+1&3]||t[c+2&3]||t[c+3&3])&&(e=t,h=c)}for(;d.data!==n;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):t?(i?t[c]=i:delete t[c],(d=t[0]||t[1]||t[2]||t[3])&&d===(t[3]||t[2]||t[1]||t[0])&&!d.length&&(e?e[h]=d:this._root=d),this):(this._root=i,this)},z.removeAll=function(n){for(var t=0,e=n.length;t<e;++t)this.remove(n[t]);return this},z.root=function(){return this._root},z.size=function(){var n=0;return this.visit((function(t){if(!t.length)do{++n}while(t=t.next)})),n},z.visit=function(n){var t,e,r,i,o,a,u=[],s=this._root;for(s&&u.push(new S(s,this._x0,this._y0,this._x1,this._y1));t=u.pop();)if(!n(s=t.node,r=t.x0,i=t.y0,o=t.x1,a=t.y1)&&s.length){var f=(r+o)/2,l=(i+a)/2;(e=s[3])&&u.push(new S(e,f,l,o,a)),(e=s[2])&&u.push(new S(e,r,l,f,a)),(e=s[1])&&u.push(new S(e,f,i,o,l)),(e=s[0])&&u.push(new S(e,r,i,f,l))}return this},z.visitAfter=function(n){var t,e=[],r=[];for(this._root&&e.push(new S(this._root,this._x0,this._y0,this._x1,this._y1));t=e.pop();){var i=t.node;if(i.length){var o,a=t.x0,u=t.y0,s=t.x1,f=t.y1,l=(a+s)/2,c=(u+f)/2;(o=i[0])&&e.push(new S(o,a,u,l,c)),(o=i[1])&&e.push(new S(o,l,u,s,c)),(o=i[2])&&e.push(new S(o,a,c,l,f)),(o=i[3])&&e.push(new S(o,l,c,s,f))}r.push(t)}for(;t=r.pop();)n(t.node,t.x0,t.y0,t.x1,t.y1);return this},z.x=function(n){return arguments.length?(this._x=n,this):this._x},z.y=function(n){return arguments.length?(this._y=n,this):this._y};var U=L.prototype=R.prototype;function V(n){return function(){return n}}function G(n){return 1e-6*(n()-.5)}function H(n){return n.index}function W(n,t){var e=n.get(t);if(!e)throw new Error("node not found: "+t);return e}function Q(n){var t,e,r,i,o,a,u,s=H,f=function(n){return 1/Math.min(o[n.source.index],o[n.target.index])},l=V(30),c=1;function h(r){for(var o=0,s=n.length;o<c;++o)for(var f,l,h,d,p,g=0,v=0,y=0,b=0;g<s;++g)l=(f=n[g]).source,v=(h=f.target).x+h.vx-l.x-l.vx||G(u),i>1&&(y=h.y+h.vy-l.y-l.vy||G(u)),i>2&&(b=h.z+h.vz-l.z-l.vz||G(u)),v*=d=((d=Math.sqrt(v*v+y*y+b*b))-e[g])/d*r*t[g],y*=d,b*=d,h.vx-=v*(p=a[g]),i>1&&(h.vy-=y*p),i>2&&(h.vz-=b*p),l.vx+=v*(p=1-p),i>1&&(l.vy+=y*p),i>2&&(l.vz+=b*p)}function d(){if(r){var i,u,f=r.length,l=n.length,c=new Map(r.map(((n,t)=>[s(n,t,r),n])));for(i=0,o=new Array(f);i<l;++i)(u=n[i]).index=i,"object"!=typeof u.source&&(u.source=W(c,u.source)),"object"!=typeof u.target&&(u.target=W(c,u.target)),o[u.source.index]=(o[u.source.index]||0)+1,o[u.target.index]=(o[u.target.index]||0)+1;for(i=0,a=new Array(l);i<l;++i)u=n[i],a[i]=o[u.source.index]/(o[u.source.index]+o[u.target.index]);t=new Array(l),p(),e=new Array(l),g()}}function p(){if(r)for(var e=0,i=n.length;e<i;++e)t[e]=+f(n[e],e,n)}function g(){if(r)for(var t=0,i=n.length;t<i;++t)e[t]=+l(n[t],t,n)}return null==n&&(n=[]),h.initialize=function(n,...t){r=n,u=t.find((n=>"function"==typeof n))||Math.random,i=t.find((n=>[1,2,3].includes(n)))||2,d()},h.links=function(t){return arguments.length?(n=t,d(),h):n},h.id=function(n){return arguments.length?(s=n,h):s},h.iterations=function(n){return arguments.length?(c=+n,h):c},h.strength=function(n){return arguments.length?(f="function"==typeof n?n:V(+n),p(),h):f},h.distance=function(n){return arguments.length?(l="function"==typeof n?n:V(+n),g(),h):l},h}U.copy=function(){var n,t,e=new R(this._x,this._y,this._z,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1),r=this._root;if(!r)return e;if(!r.length)return e._root=q(r),e;for(n=[{source:r,target:e._root=new Array(8)}];r=n.pop();)for(var i=0;i<8;++i)(t=r.source[i])&&(t.length?n.push({source:t,target:r.target[i]=new Array(8)}):r.target[i]=q(t));return e},U.add=function(n){var t=+this._x.call(null,n),e=+this._y.call(null,n),r=+this._z.call(null,n);return T(this.cover(t,e,r),t,e,r,n)},U.addAll=function(n){var t,e,r,i,o,a=n.length,u=new Array(a),s=new Array(a),f=new Array(a),l=1/0,c=1/0,h=1/0,d=-1/0,p=-1/0,g=-1/0;for(e=0;e<a;++e)isNaN(r=+this._x.call(null,t=n[e]))||isNaN(i=+this._y.call(null,t))||isNaN(o=+this._z.call(null,t))||(u[e]=r,s[e]=i,f[e]=o,r<l&&(l=r),r>d&&(d=r),i<c&&(c=i),i>p&&(p=i),o<h&&(h=o),o>g&&(g=o));if(l>d||c>p||h>g)return this;for(this.cover(l,c,h).cover(d,p,g),e=0;e<a;++e)T(this,u[e],s[e],f[e],n[e]);return this},U.cover=function(n,t,e){if(isNaN(n=+n)||isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,i=this._y0,o=this._z0,a=this._x1,u=this._y1,s=this._z1;if(isNaN(r))a=(r=Math.floor(n))+1,u=(i=Math.floor(t))+1,s=(o=Math.floor(e))+1;else{for(var f,l,c=a-r||1,h=this._root;r>n||n>=a||i>t||t>=u||o>e||e>=s;)switch(l=(e<o)<<2|(t<i)<<1|n<r,(f=new Array(8))[l]=h,h=f,c*=2,l){case 0:a=r+c,u=i+c,s=o+c;break;case 1:r=a-c,u=i+c,s=o+c;break;case 2:a=r+c,i=u-c,s=o+c;break;case 3:r=a-c,i=u-c,s=o+c;break;case 4:a=r+c,u=i+c,o=s-c;break;case 5:r=a-c,u=i+c,o=s-c;break;case 6:a=r+c,i=u-c,o=s-c;break;case 7:r=a-c,i=u-c,o=s-c}this._root&&this._root.length&&(this._root=h)}return this._x0=r,this._y0=i,this._z0=o,this._x1=a,this._y1=u,this._z1=s,this},U.data=function(){var n=[];return this.visit((function(t){if(!t.length)do{n.push(t.data)}while(t=t.next)})),n},U.extent=function(n){return arguments.length?this.cover(+n[0][0],+n[0][1],+n[0][2]).cover(+n[1][0],+n[1][1],+n[1][2]):isNaN(this._x0)?void 0:[[this._x0,this._y0,this._z0],[this._x1,this._y1,this._z1]]},U.find=function(n,t,e,r){var i,o,a,u,s,f,l,c,h,d=this._x0,p=this._y0,g=this._z0,v=this._x1,y=this._y1,b=this._z1,m=[],_=this._root;for(_&&m.push(new I(_,d,p,g,v,y,b)),null==r?r=1/0:(d=n-r,p=t-r,g=e-r,v=n+r,y=t+r,b=e+r,r*=r);c=m.pop();)if(!(!(_=c.node)||(o=c.x0)>v||(a=c.y0)>y||(u=c.z0)>b||(s=c.x1)<d||(f=c.y1)<p||(l=c.z1)<g))if(_.length){var x=(o+s)/2,w=(a+f)/2,k=(u+l)/2;m.push(new I(_[7],x,w,k,s,f,l),new I(_[6],o,w,k,x,f,l),new I(_[5],x,a,k,s,w,l),new I(_[4],o,a,k,x,w,l),new I(_[3],x,w,u,s,f,k),new I(_[2],o,w,u,x,f,k),new I(_[1],x,a,u,s,w,k),new I(_[0],o,a,u,x,w,k)),(h=(e>=k)<<2|(t>=w)<<1|n>=x)&&(c=m[m.length-1],m[m.length-1]=m[m.length-1-h],m[m.length-1-h]=c)}else{var O=n-+this._x.call(null,_.data),A=t-+this._y.call(null,_.data),j=e-+this._z.call(null,_.data),M=O*O+A*A+j*j;if(M<r){var S=Math.sqrt(r=M);d=n-S,p=t-S,g=e-S,v=n+S,y=t+S,b=e+S,i=_.data}}return i},U.remove=function(n){if(isNaN(o=+this._x.call(null,n))||isNaN(a=+this._y.call(null,n))||isNaN(u=+this._z.call(null,n)))return this;var t,e,r,i,o,a,u,s,f,l,c,h,d,p,g,v=this._root,y=this._x0,b=this._y0,m=this._z0,_=this._x1,x=this._y1,w=this._z1;if(!v)return this;if(v.length)for(;;){if((c=o>=(s=(y+_)/2))?y=s:_=s,(h=a>=(f=(b+x)/2))?b=f:x=f,(d=u>=(l=(m+w)/2))?m=l:w=l,t=v,!(v=v[p=d<<2|h<<1|c]))return this;if(!v.length)break;(t[p+1&7]||t[p+2&7]||t[p+3&7]||t[p+4&7]||t[p+5&7]||t[p+6&7]||t[p+7&7])&&(e=t,g=p)}for(;v.data!==n;)if(r=v,!(v=v.next))return this;return(i=v.next)&&delete v.next,r?(i?r.next=i:delete r.next,this):t?(i?t[p]=i:delete t[p],(v=t[0]||t[1]||t[2]||t[3]||t[4]||t[5]||t[6]||t[7])&&v===(t[7]||t[6]||t[5]||t[4]||t[3]||t[2]||t[1]||t[0])&&!v.length&&(e?e[g]=v:this._root=v),this):(this._root=i,this)},U.removeAll=function(n){for(var t=0,e=n.length;t<e;++t)this.remove(n[t]);return this},U.root=function(){return this._root},U.size=function(){var n=0;return this.visit((function(t){if(!t.length)do{++n}while(t=t.next)})),n},U.visit=function(n){var t,e,r,i,o,a,u,s,f=[],l=this._root;for(l&&f.push(new I(l,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1));t=f.pop();)if(!n(l=t.node,r=t.x0,i=t.y0,o=t.z0,a=t.x1,u=t.y1,s=t.z1)&&l.length){var c=(r+a)/2,h=(i+u)/2,d=(o+s)/2;(e=l[7])&&f.push(new I(e,c,h,d,a,u,s)),(e=l[6])&&f.push(new I(e,r,h,d,c,u,s)),(e=l[5])&&f.push(new I(e,c,i,d,a,h,s)),(e=l[4])&&f.push(new I(e,r,i,d,c,h,s)),(e=l[3])&&f.push(new I(e,c,h,o,a,u,d)),(e=l[2])&&f.push(new I(e,r,h,o,c,u,d)),(e=l[1])&&f.push(new I(e,c,i,o,a,h,d)),(e=l[0])&&f.push(new I(e,r,i,o,c,h,d))}return this},U.visitAfter=function(n){var t,e=[],r=[];for(this._root&&e.push(new I(this._root,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1));t=e.pop();){var i=t.node;if(i.length){var o,a=t.x0,u=t.y0,s=t.z0,f=t.x1,l=t.y1,c=t.z1,h=(a+f)/2,d=(u+l)/2,p=(s+c)/2;(o=i[0])&&e.push(new I(o,a,u,s,h,d,p)),(o=i[1])&&e.push(new I(o,h,u,s,f,d,p)),(o=i[2])&&e.push(new I(o,a,d,s,h,l,p)),(o=i[3])&&e.push(new I(o,h,d,s,f,l,p)),(o=i[4])&&e.push(new I(o,a,u,p,h,d,c)),(o=i[5])&&e.push(new I(o,h,u,p,f,d,c)),(o=i[6])&&e.push(new I(o,a,d,p,h,l,c)),(o=i[7])&&e.push(new I(o,h,d,p,f,l,c))}r.push(t)}for(;t=r.pop();)n(t.node,t.x0,t.y0,t.z0,t.x1,t.y1,t.z1);return this},U.x=function(n){return arguments.length?(this._x=n,this):this._x},U.y=function(n){return arguments.length?(this._y=n,this):this._y},U.z=function(n){return arguments.length?(this._z=n,this):this._z};var X={value:()=>{}};function J(){for(var n,t=0,e=arguments.length,r={};t<e;++t){if(!(n=arguments[t]+"")||n in r||/[\s.]/.test(n))throw new Error("illegal type: "+n);r[n]=[]}return new Y(r)}function Y(n){this._=n}function K(n,t){return n.trim().split(/^|\s+/).map((function(n){var e="",r=n.indexOf(".");if(r>=0&&(e=n.slice(r+1),n=n.slice(0,r)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:e}}))}function Z(n,t){for(var e,r=0,i=n.length;r<i;++r)if((e=n[r]).name===t)return e.value}function nn(n,t,e){for(var r=0,i=n.length;r<i;++r)if(n[r].name===t){n[r]=X,n=n.slice(0,r).concat(n.slice(r+1));break}return null!=e&&n.push({name:t,value:e}),n}Y.prototype=J.prototype={constructor:Y,on:function(n,t){var e,r=this._,i=K(n+"",r),o=-1,a=i.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++o<a;)if(e=(n=i[o]).type)r[e]=nn(r[e],n.name,t);else if(null==t)for(e in r)r[e]=nn(r[e],n.name,null);return this}for(;++o<a;)if((e=(n=i[o]).type)&&(e=Z(r[e],n.name)))return e},copy:function(){var n={},t=this._;for(var e in t)n[e]=t[e].slice();return new Y(n)},call:function(n,t){if((e=arguments.length-2)>0)for(var e,r,i=new Array(e),o=0;o<e;++o)i[o]=arguments[o+2];if(!this._.hasOwnProperty(n))throw new Error("unknown type: "+n);for(o=0,e=(r=this._[n]).length;o<e;++o)r[o].value.apply(t,i)},apply:function(n,t,e){if(!this._.hasOwnProperty(n))throw new Error("unknown type: "+n);for(var r=this._[n],i=0,o=r.length;i<o;++i)r[i].value.apply(t,e)}};var tn,en,rn=0,on=0,an=0,un=0,sn=0,fn=0,ln="object"==typeof performance&&performance.now?performance:Date,cn="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(n){setTimeout(n,17)};function hn(){return sn||(cn(dn),sn=ln.now()+fn)}function dn(){sn=0}function pn(){this._call=this._time=this._next=null}function gn(n,t,e){var r=new pn;return r.restart(n,t,e),r}function vn(){sn=(un=ln.now())+fn,rn=on=0;try{!function(){hn(),++rn;for(var n,t=tn;t;)(n=sn-t._time)>=0&&t._call.call(void 0,n),t=t._next;--rn}()}finally{rn=0,function(){var n,t,e=tn,r=1/0;for(;e;)e._call?(r>e._time&&(r=e._time),n=e,e=e._next):(t=e._next,e._next=null,e=n?n._next=t:tn=t);en=n,bn(r)}(),sn=0}}function yn(){var n=ln.now(),t=n-un;t>1e3&&(fn-=t,un=n)}function bn(n){rn||(on&&(on=clearTimeout(on)),n-sn>24?(n<1/0&&(on=setTimeout(vn,n-ln.now()-fn)),an&&(an=clearInterval(an))):(an||(un=ln.now(),an=setInterval(yn,1e3)),rn=1,cn(vn)))}pn.prototype=gn.prototype={constructor:pn,restart:function(n,t,e){if("function"!=typeof n)throw new TypeError("callback is not a function");e=(null==e?hn():+e)+(null==t?0:+t),this._next||en===this||(en?en._next=this:tn=this,en=this),this._call=n,this._time=e,bn()},stop:function(){this._call&&(this._call=null,this._time=1/0,bn())}};const mn=4294967296;function _n(n){return n.x}function xn(n){return n.y}function wn(n){return n.z}var kn=Math.PI*(3-Math.sqrt(5)),On=20*Math.PI/(9+Math.sqrt(221));function An(n,t){t=t||2;var e,r=Math.min(3,Math.max(1,Math.round(t))),i=1,o=.001,a=1-Math.pow(o,1/300),u=0,s=.6,f=new Map,l=gn(d),c=J("tick","end"),h=function(){let n=1;return()=>(n=(1664525*n+1013904223)%mn)/mn}();function d(){p(),c.call("tick",e),i<o&&(l.stop(),c.call("end",e))}function p(t){var o,l,c=n.length;void 0===t&&(t=1);for(var h=0;h<t;++h)for(i+=(u-i)*a,f.forEach((function(n){n(i)})),o=0;o<c;++o)null==(l=n[o]).fx?l.x+=l.vx*=s:(l.x=l.fx,l.vx=0),r>1&&(null==l.fy?l.y+=l.vy*=s:(l.y=l.fy,l.vy=0)),r>2&&(null==l.fz?l.z+=l.vz*=s:(l.z=l.fz,l.vz=0));return e}function g(){for(var t,e=0,i=n.length;e<i;++e){if((t=n[e]).index=e,null!=t.fx&&(t.x=t.fx),null!=t.fy&&(t.y=t.fy),null!=t.fz&&(t.z=t.fz),isNaN(t.x)||r>1&&isNaN(t.y)||r>2&&isNaN(t.z)){var o=10*(r>2?Math.cbrt(.5+e):r>1?Math.sqrt(.5+e):e),a=e*kn,u=e*On;1===r?t.x=o:2===r?(t.x=o*Math.cos(a),t.y=o*Math.sin(a)):(t.x=o*Math.sin(a)*Math.cos(u),t.y=o*Math.cos(a),t.z=o*Math.sin(a)*Math.sin(u))}(isNaN(t.vx)||r>1&&isNaN(t.vy)||r>2&&isNaN(t.vz))&&(t.vx=0,r>1&&(t.vy=0),r>2&&(t.vz=0))}}function v(t){return t.initialize&&t.initialize(n,h,r),t}return null==n&&(n=[]),g(),e={tick:p,restart:function(){return l.restart(d),e},stop:function(){return l.stop(),e},numDimensions:function(n){return arguments.length?(r=Math.min(3,Math.max(1,Math.round(n))),f.forEach(v),e):r},nodes:function(t){return arguments.length?(n=t,g(),f.forEach(v),e):n},alpha:function(n){return arguments.length?(i=+n,e):i},alphaMin:function(n){return arguments.length?(o=+n,e):o},alphaDecay:function(n){return arguments.length?(a=+n,e):+a},alphaTarget:function(n){return arguments.length?(u=+n,e):u},velocityDecay:function(n){return arguments.length?(s=1-n,e):1-s},randomSource:function(n){return arguments.length?(h=n,f.forEach(v),e):h},force:function(n,t){return arguments.length>1?(null==t?f.delete(n):f.set(n,v(t)),e):f.get(n)},find:function(){var t,e,i,o,a,u,s=Array.prototype.slice.call(arguments),f=s.shift()||0,l=(r>1?s.shift():null)||0,c=(r>2?s.shift():null)||0,h=s.shift()||1/0,d=0,p=n.length;for(h*=h,d=0;d<p;++d)(o=(t=f-(a=n[d]).x)*t+(e=l-(a.y||0))*e+(i=c-(a.z||0))*i)<h&&(u=a,h=o);return u},on:function(n,t){return arguments.length>1?(c.on(n,t),e):c.on(n)}}}function jn(){var n,t,e,r,i,o,a=V(-30),u=1,s=1/0,f=.81;function l(r){var o,a=n.length,u=(1===t?k(n,_n):2===t?B(n,_n,xn):3===t?L(n,_n,xn,wn):null).visitAfter(h);for(i=r,o=0;o<a;++o)e=n[o],u.visit(d)}function c(){if(n){var t,e,r=n.length;for(o=new Array(r),t=0;t<r;++t)e=n[t],o[e.index]=+a(e,t,n)}}function h(n){var e,r,i,a,u,s,f=0,l=0,c=n.length;if(c){for(i=a=u=s=0;s<c;++s)(e=n[s])&&(r=Math.abs(e.value))&&(f+=e.value,l+=r,i+=r*(e.x||0),a+=r*(e.y||0),u+=r*(e.z||0));f*=Math.sqrt(4/c),n.x=i/l,t>1&&(n.y=a/l),t>2&&(n.z=u/l)}else{(e=n).x=e.data.x,t>1&&(e.y=e.data.y),t>2&&(e.z=e.data.z);do{f+=o[e.data.index]}while(e=e.next)}n.value=f}function d(n,a,l,c,h){if(!n.value)return!0;var d=[l,c,h][t-1],p=n.x-e.x,g=t>1?n.y-e.y:0,v=t>2?n.z-e.z:0,y=d-a,b=p*p+g*g+v*v;if(y*y/f<b)return b<s&&(0===p&&(b+=(p=G(r))*p),t>1&&0===g&&(b+=(g=G(r))*g),t>2&&0===v&&(b+=(v=G(r))*v),b<u&&(b=Math.sqrt(u*b)),e.vx+=p*n.value*i/b,t>1&&(e.vy+=g*n.value*i/b),t>2&&(e.vz+=v*n.value*i/b)),!0;if(!(n.length||b>=s)){(n.data!==e||n.next)&&(0===p&&(b+=(p=G(r))*p),t>1&&0===g&&(b+=(g=G(r))*g),t>2&&0===v&&(b+=(v=G(r))*v),b<u&&(b=Math.sqrt(u*b)));do{n.data!==e&&(y=o[n.data.index]*i/b,e.vx+=p*y,t>1&&(e.vy+=g*y),t>2&&(e.vz+=v*y))}while(n=n.next)}}return l.initialize=function(e,...i){n=e,r=i.find((n=>"function"==typeof n))||Math.random,t=i.find((n=>[1,2,3].includes(n)))||2,c()},l.strength=function(n){return arguments.length?(a="function"==typeof n?n:V(+n),c(),l):a},l.distanceMin=function(n){return arguments.length?(u=n*n,l):Math.sqrt(u)},l.distanceMax=function(n){return arguments.length?(s=n*n,l):Math.sqrt(s)},l.theta=function(n){return arguments.length?(f=n*n,l):Math.sqrt(f)},l}var Mn=function(n){!function(n){if(!n)throw new Error("Eventify cannot use falsy object as events subject");for(var t=["on","fire","off"],e=0;e<t.length;++e)if(n.hasOwnProperty(t[e]))throw new Error("Subject cannot be eventified, since it already has property '"+t[e]+"'")}(n);var t=function(n){var t=Object.create(null);return{on:function(e,r,i){if("function"!=typeof r)throw new Error("callback is expected to be a function");var o=t[e];return o||(o=t[e]=[]),o.push({callback:r,ctx:i}),n},off:function(e,r){if(void 0===e)return t=Object.create(null),n;if(t[e])if("function"!=typeof r)delete t[e];else for(var i=t[e],o=0;o<i.length;++o)i[o].callback===r&&i.splice(o,1);return n},fire:function(e){var r,i=t[e];if(!i)return n;arguments.length>1&&(r=Array.prototype.splice.call(arguments,1));for(var o=0;o<i.length;++o){var a=i[o];a.callback.apply(a.ctx,r)}return n}}}(n);return n.on=t.on,n.off=t.off,n.fire=t.fire,n};var Sn=function(n){"uniqueLinkId"in(n=n||{})&&(console.warn("ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\nUse `multigraph` option instead\n","\n","Note: there is also change in default behavior: From now on each graph\nis considered to be not a multigraph by default (each edge is unique)."),n.multigraph=n.uniqueLinkId);void 0===n.multigraph&&(n.multigraph=!1);if("function"!=typeof Map)throw new Error("ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph");var t=new Map,e=[],r={},i=0,o=n.multigraph?function(n,t,e){var i=zn(n,t),o=r.hasOwnProperty(i);if(o||_(n,t)){o||(r[i]=0);var a="@"+ ++r[i];i=zn(n+a,t+a)}return new En(n,t,e,i)}:function(n,t,e){var r=zn(n,t);return new En(n,t,e,r)},a=[],u=x,s=x,f=x,l=x,c={addNode:p,addLink:function(n,t,r){f();var i=g(n)||p(n),a=g(t)||p(t),s=o(n,t,r);e.push(s),Cn(i,s),n!==t&&Cn(a,s);return u(s,"add"),l(),s},removeLink:m,removeNode:v,getNode:g,getNodeCount:y,getLinkCount:b,getLinksCount:b,getNodesCount:y,getLinks:function(n){var t=g(n);return t?t.links:null},forEachNode:O,forEachLinkedNode:function(n,e,r){var i=g(n);if(i&&i.links&&"function"==typeof e)return r?function(n,e,r){for(var i=0;i<n.length;++i){var o=n[i];if(o.fromId===e&&r(t.get(o.toId),o))return!0}}(i.links,n,e):function(n,e,r){for(var i=0;i<n.length;++i){var o=n[i],a=o.fromId===e?o.toId:o.fromId;if(r(t.get(a),o))return!0}}(i.links,n,e)},forEachLink:function(n){var t,r;if("function"==typeof n)for(t=0,r=e.length;t<r;++t)n(e[t])},beginUpdate:f,endUpdate:l,clear:function(){f(),O((function(n){v(n.id)})),l()},hasLink:_,hasNode:g,getLink:_};return Pn(c),function(){var n=c.on;function t(){return c.beginUpdate=f=w,c.endUpdate=l=k,u=h,s=d,c.on=n,n.apply(c,arguments)}c.on=t}(),c;function h(n,t){a.push({link:n,changeType:t})}function d(n,t){a.push({node:n,changeType:t})}function p(n,e){if(void 0===n)throw new Error("Invalid node identifier");f();var r=g(n);return r?(r.data=e,s(r,"update")):(r=new Bn(n,e),s(r,"add")),t.set(n,r),l(),r}function g(n){return t.get(n)}function v(n){var e=g(n);if(!e)return!1;f();var r=e.links;if(r){e.links=null;for(var i=0;i<r.length;++i)m(r[i])}return t.delete(n),s(e,"remove"),l(),!0}function y(){return t.size}function b(){return e.length}function m(n){if(!n)return!1;var t=Nn(n,e);if(t<0)return!1;f(),e.splice(t,1);var r=g(n.fromId),i=g(n.toId);return r&&(t=Nn(n,r.links))>=0&&r.links.splice(t,1),i&&(t=Nn(n,i.links))>=0&&i.links.splice(t,1),u(n,"remove"),l(),!0}function _(n,t){var e,r=g(n);if(!r||!r.links)return null;for(e=0;e<r.links.length;++e){var i=r.links[e];if(i.fromId===n&&i.toId===t)return i}return null}function x(){}function w(){i+=1}function k(){0===(i-=1)&&a.length>0&&(c.fire("changed",a),a.length=0)}function O(n){if("function"!=typeof n)throw new Error("Function is expected to iterate over graph nodes. You passed "+n);for(var e=t.values(),r=e.next();!r.done;){if(n(r.value))return!0;r=e.next()}}},Pn=Mn;function Nn(n,t){if(!t)return-1;if(t.indexOf)return t.indexOf(n);var e,r=t.length;for(e=0;e<r;e+=1)if(t[e]===n)return e;return-1}function Bn(n,t){this.id=n,this.links=null,this.data=t}function Cn(n,t){n.links?n.links.push(t):n.links=[t]}function En(n,t,e,r){this.fromId=n,this.toId=t,this.data=e,this.id=r}function zn(n,t){return n.toString()+"👉 "+t.toString()}var Tn={exports:{}},In={exports:{}},$n=function(n){return 0===n?"x":1===n?"y":2===n?"z":"c"+(n+1)};const Dn=$n;var Fn=function(n){return function(t,e){let r=e&&e.indent||0,i=e&&void 0!==e.join?e.join:"\n",o=Array(r+1).join(" "),a=[];for(let e=0;e<n;++e){let n=Dn(e),r=0===e?"":o;a.push(r+t.replace(/{var}/g,n))}return a.join(i)}};const Ln=Fn;function Rn(n,t){return`\n${Un(n,t)}\n${qn(n)}\nreturn {Body: Body, Vector: Vector};\n`}function qn(n){let t=Ln(n),e=t("{var}",{join:", "});return`\nfunction Body(${e}) {\n this.isPinned = false;\n this.pos = new Vector(${e});\n this.force = new Vector();\n this.velocity = new Vector();\n this.mass = 1;\n\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.reset = function() {\n this.force.reset();\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.setPosition = function (${e}) {\n ${t("this.pos.{var} = {var} || 0;",{indent:2})}\n};`}function Un(n,t){let e=Ln(n),r="";return t&&(r=`${e("\n var v{var};\nObject.defineProperty(this, '{var}', {\n set: function(v) { \n if (!Number.isFinite(v)) throw new Error('Cannot set non-numbers to {var}');\n v{var} = v; \n },\n get: function() { return v{var}; }\n});")}`),`function Vector(${e("{var}",{join:", "})}) {\n ${r}\n if (typeof arguments[0] === 'object') {\n // could be another vector\n let v = arguments[0];\n ${e('if (!Number.isFinite(v.{var})) throw new Error("Expected value is not a finite number at Vector constructor ({var})");',{indent:4})}\n ${e("this.{var} = v.{var};",{indent:4})}\n } else {\n ${e('this.{var} = typeof {var} === "number" ? {var} : 0;',{indent:4})}\n }\n }\n \n Vector.prototype.reset = function () {\n ${e("this.{var} = ",{join:""})}0;\n };`}In.exports=function(n,t){let e=Rn(n,t),{Body:r}=new Function(e)();return r},In.exports.generateCreateBodyFunctionBody=Rn,In.exports.getVectorCode=Un,In.exports.getBodyCode=qn;var Vn={exports:{}};const Gn=Fn,Hn=$n;function Wn(n){let t=Gn(n),e=Math.pow(2,n);return`\n${Kn()}\n${Yn(n)}\n${Qn(n)}\n${Jn(n)}\n${Xn(n)}\n\nfunction createQuadTree(options, random) {\n options = options || {};\n options.gravity = typeof options.gravity === 'number' ? options.gravity : -1;\n options.theta = typeof options.theta === 'number' ? options.theta : 0.8;\n\n var gravity = options.gravity;\n var updateQueue = [];\n var insertStack = new InsertStack();\n var theta = options.theta;\n\n var nodesCache = [];\n var currentInCache = 0;\n var root = newNode();\n\n return {\n insertBodies: insertBodies,\n\n /**\n * Gets root node if it is present\n */\n getRoot: function() {\n return root;\n },\n\n updateBodyForce: update,\n\n options: function(newOptions) {\n if (newOptions) {\n if (typeof newOptions.gravity === 'number') {\n gravity = newOptions.gravity;\n }\n if (typeof newOptions.theta === 'number') {\n theta = newOptions.theta;\n }\n\n return this;\n }\n\n return {\n gravity: gravity,\n theta: theta\n };\n }\n };\n\n function newNode() {\n // To avoid pressure on GC we reuse nodes.\n var node = nodesCache[currentInCache];\n if (node) {\n${function(n){let t=[];for(let r=0;r<e;++r)t.push(`${n}quad${r} = null;`);return t.join("\n")}(" node.")}\n node.body = null;\n node.mass = ${t("node.mass_{var} = ",{join:""})}0;\n ${t("node.min_{var} = node.max_{var} = ",{join:""})}0;\n } else {\n node = new QuadNode();\n nodesCache[currentInCache] = node;\n }\n\n ++currentInCache;\n return node;\n }\n\n function update(sourceBody) {\n var queue = updateQueue;\n var v;\n ${t("var d{var};",{indent:4})}\n var r; \n ${t("var f{var} = 0;",{indent:4})}\n var queueLength = 1;\n var shiftIdx = 0;\n var pushIdx = 1;\n\n queue[0] = root;\n\n while (queueLength) {\n var node = queue[shiftIdx];\n var body = node.body;\n\n queueLength -= 1;\n shiftIdx += 1;\n var differentBody = (body !== sourceBody);\n if (body && differentBody) {\n // If the current node is a leaf node (and it is not source body),\n // calculate the force exerted by the current node on body, and add this\n // amount to body's net force.\n ${t("d{var} = body.pos.{var} - sourceBody.pos.{var};",{indent:8})}\n r = Math.sqrt(${t("d{var} * d{var}",{join:" + "})});\n\n if (r === 0) {\n // Poor man's protection against zero distance.\n ${t("d{var} = (random.nextDouble() - 0.5) / 50;",{indent:10})}\n r = Math.sqrt(${t("d{var} * d{var}",{join:" + "})});\n }\n\n // This is standard gravitation force calculation but we divide\n // by r^3 to save two operations when normalizing force vector.\n v = gravity * body.mass * sourceBody.mass / (r * r * r);\n ${t("f{var} += v * d{var};",{indent:8})}\n } else if (differentBody) {\n // Otherwise, calculate the ratio s / r, where s is the width of the region\n // represented by the internal node, and r is the distance between the body\n // and the node's center-of-mass\n ${t("d{var} = node.mass_{var} / node.mass - sourceBody.pos.{var};",{indent:8})}\n r = Math.sqrt(${t("d{var} * d{var}",{join:" + "})});\n\n if (r === 0) {\n // Sorry about code duplication. I don't want to create many functions\n // right away. Just want to see performance first.\n ${t("d{var} = (random.nextDouble() - 0.5) / 50;",{indent:10})}\n r = Math.sqrt(${t("d{var} * d{var}",{join:" + "})});\n }\n // If s / r < θ, treat this internal node as a single body, and calculate the\n // force it exerts on sourceBody, and add this amount to sourceBody's net force.\n if ((node.max_${Hn(0)} - node.min_${Hn(0)}) / r < theta) {\n // in the if statement above we consider node's width only\n // because the region was made into square during tree creation.\n // Thus there is no difference between using width or height.\n v = gravity * node.mass * sourceBody.mass / (r * r * r);\n ${t("f{var} += v * d{var};",{indent:10})}\n } else {\n // Otherwise, run the procedure recursively on each of the current node's children.\n\n // I intentionally unfolded this loop, to save several CPU cycles.\n${function(){let n=Array(11).join(" "),t=[];for(let r=0;r<e;++r)t.push(n+`if (node.quad${r}) {`),t.push(n+` queue[pushIdx] = node.quad${r};`),t.push(n+" queueLength += 1;"),t.push(n+" pushIdx += 1;"),t.push(n+"}");return t.join("\n")}()}\n }\n }\n }\n\n ${t("sourceBody.force.{var} += f{var};",{indent:4})}\n }\n\n function insertBodies(bodies) {\n ${t("var {var}min = Number.MAX_VALUE;",{indent:4})}\n ${t("var {var}max = Number.MIN_VALUE;",{indent:4})}\n var i = bodies.length;\n\n // To reduce quad tree depth we are looking for exact bounding box of all particles.\n while (i--) {\n var pos = bodies[i].pos;\n ${t("if (pos.{var} < {var}min) {var}min = pos.{var};",{indent:6})}\n ${t("if (pos.{var} > {var}max) {var}max = pos.{var};",{indent:6})}\n }\n\n // Makes the bounds square.\n var maxSideLength = -Infinity;\n ${t("if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;",{indent:4})}\n\n currentInCache = 0;\n root = newNode();\n ${t("root.min_{var} = {var}min;",{indent:4})}\n ${t("root.max_{var} = {var}min + maxSideLength;",{indent:4})}\n\n i = bodies.length - 1;\n if (i >= 0) {\n root.body = bodies[i];\n }\n while (i--) {\n insert(bodies[i], root);\n }\n }\n\n function insert(newBody) {\n insertStack.reset();\n insertStack.push(root, newBody);\n\n while (!insertStack.isEmpty()) {\n var stackItem = insertStack.pop();\n var node = stackItem.node;\n var body = stackItem.body;\n\n if (!node.body) {\n // This is internal node. Update the total mass of the node and center-of-mass.\n ${t("var {var} = body.pos.{var};",{indent:8})}\n node.mass += body.mass;\n ${t("node.mass_{var} += body.mass * {var};",{indent:8})}\n\n // Recursively insert the body in the appropriate quadrant.\n // But first find the appropriate quadrant.\n var quadIdx = 0; // Assume we are in the 0's quad.\n ${t("var min_{var} = node.min_{var};",{indent:8})}\n ${t("var max_{var} = (min_{var} + node.max_{var}) / 2;",{indent:8})}\n\n${function(t){let e=[],r=Array(t+1).join(" ");for(let t=0;t<n;++t)e.push(r+`if (${Hn(t)} > max_${Hn(t)}) {`),e.push(r+` quadIdx = quadIdx + ${Math.pow(2,t)};`),e.push(r+` min_${Hn(t)} = max_${Hn(t)};`),e.push(r+` max_${Hn(t)} = node.max_${Hn(t)};`),e.push(r+"}");return e.join("\n")}(8)}\n\n var child = getChild(node, quadIdx);\n\n if (!child) {\n // The node is internal but this quadrant is not taken. Add\n // subnode to it.\n child = newNode();\n ${t("child.min_{var} = min_{var};",{indent:10})}\n ${t("child.max_{var} = max_{var};",{indent:10})}\n child.body = body;\n\n setChild(node, quadIdx, child);\n } else {\n // continue searching in this quadrant.\n insertStack.push(child, body);\n }\n } else {\n // We are trying to add to the leaf node.\n // We have to convert current leaf into internal node\n // and continue adding two nodes.\n var oldBody = node.body;\n node.body = null; // internal nodes do not cary bodies\n\n if (isSamePosition(oldBody.pos, body.pos)) {\n // Prevent infinite subdivision by bumping one node\n // anywhere in this quadrant\n var retriesCount = 3;\n do {\n var offset = random.nextDouble();\n ${t("var d{var} = (node.max_{var} - node.min_{var}) * offset;",{indent:12})}\n\n ${t("oldBody.pos.{var} = node.min_{var} + d{var};",{indent:12})}\n retriesCount -= 1;\n // Make sure we don't bump it out of the box. If we do, next iteration should fix it\n } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos));\n\n if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) {\n // This is very bad, we ran out of precision.\n // if we do not return from the method we'll get into\n // infinite loop here. So we sacrifice correctness of layout, and keep the app running\n // Next layout iteration should get larger bounding box in the first step and fix this\n return;\n }\n }\n // Next iteration should subdivide node further.\n insertStack.push(node, oldBody);\n insertStack.push(node, body);\n }\n }\n }\n}\nreturn createQuadTree;\n\n`}function Qn(n){let t=Gn(n);return`\n function isSamePosition(point1, point2) {\n ${t("var d{var} = Math.abs(point1.{var} - point2.{var});",{indent:2})}\n \n return ${t("d{var} < 1e-8",{join:" && "})};\n } \n`}function Xn(n){var t=Math.pow(2,n);return`\nfunction setChild(node, idx, child) {\n ${function(){let n=[];for(let e=0;e<t;++e){let t=0===e?" ":" else ";n.push(`${t}if (idx === ${e}) node.quad${e} = child;`)}return n.join("\n")}()}\n}`}function Jn(n){return`function getChild(node, idx) {\n${function(){let t=[],e=Math.pow(2,n);for(let n=0;n<e;++n)t.push(` if (idx === ${n}) return node.quad${n};`);return t.join("\n")}()}\n return null;\n}`}function Yn(n){let t=Gn(n),e=Math.pow(2,n);return`\nfunction QuadNode() {\n // body stored inside this node. In quad tree only leaf nodes (by construction)\n // contain bodies:\n this.body = null;\n\n // Child nodes are stored in quads. Each quad is presented by number:\n // 0 | 1\n // -----\n // 2 | 3\n${function(n){let t=[];for(let r=0;r<e;++r)t.push(`${n}quad${r} = null;`);return t.join("\n")}(" this.")}\n\n // Total mass of current node\n this.mass = 0;\n\n // Center of mass coordinates\n ${t("this.mass_{var} = 0;",{indent:2})}\n\n // bounding box coordinates\n ${t("this.min_{var} = 0;",{indent:2})}\n ${t("this.max_{var} = 0;",{indent:2})}\n}\n`}function Kn(){return"\n/**\n * Our implementation of QuadTree is non-recursive to avoid GC hit\n * This data structure represent stack of elements\n * which we are trying to insert into quad tree.\n */\nfunction InsertStack () {\n this.stack = [];\n this.popIdx = 0;\n}\n\nInsertStack.prototype = {\n isEmpty: function() {\n return this.popIdx === 0;\n },\n push: function (node, body) {\n var item = this.stack[this.popIdx];\n if (!item) {\n // we are trying to avoid memory pressure: create new element\n // only when absolutely necessary\n this.stack[this.popIdx] = new InsertStackElement(node, body);\n } else {\n item.node = node;\n item.body = body;\n }\n ++this.popIdx;\n },\n pop: function () {\n if (this.popIdx > 0) {\n return this.stack[--this.popIdx];\n }\n },\n reset: function () {\n this.popIdx = 0;\n }\n};\n\nfunction InsertStackElement(node, body) {\n this.node = node; // QuadTree node\n this.body = body; // physical body which needs to be inserted to node\n}\n"}Vn.exports=function(n){let t=Wn(n);return new Function(t)()},Vn.exports.generateQuadTreeFunctionBody=Wn,Vn.exports.getInsertStackCode=Kn,Vn.exports.getQuadNodeCode=Yn,Vn.exports.isSamePosition=Qn,Vn.exports.getChildBodyCode=Jn,Vn.exports.setChildBodyCode=Xn;var Zn={exports:{}};Zn.exports=function(n){let t=tt(n);return new Function("bodies","settings","random",t)},Zn.exports.generateFunctionBody=tt;const nt=Fn;function tt(n){let t=nt(n);return`\n var boundingBox = {\n ${t("min_{var}: 0, max_{var}: 0,",{indent:4})}\n };\n\n return {\n box: boundingBox,\n\n update: updateBoundingBox,\n\n reset: resetBoundingBox,\n\n getBestNewPosition: function (neighbors) {\n var ${t("base_{var} = 0",{join:", "})};\n\n if (neighbors.length) {\n for (var i = 0; i < neighbors.length; ++i) {\n let neighborPos = neighbors[i].pos;\n ${t("base_{var} += neighborPos.{var};",{indent:10})}\n }\n\n ${t("base_{var} /= neighbors.length;",{indent:8})}\n } else {\n ${t("base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;",{indent:8})}\n }\n\n var springLength = settings.springLength;\n return {\n ${t("{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,",{indent:8})}\n };\n }\n };\n\n function updateBoundingBox() {\n var i = bodies.length;\n if (i === 0) return; // No bodies - no borders.\n\n ${t("var max_{var} = -Infinity;",{indent:4})}\n ${t("var min_{var} = Infinity;",{indent:4})}\n\n while(i--) {\n // this is O(n), it could be done faster with quadtree, if we check the root node bounds\n var bodyPos = bodies[i].pos;\n ${t("if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};",{indent:6})}\n ${t("if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};",{indent:6})}\n }\n\n ${t("boundingBox.min_{var} = min_{var};",{indent:4})}\n ${t("boundingBox.max_{var} = max_{var};",{indent:4})}\n }\n\n function resetBoundingBox() {\n ${t("boundingBox.min_{var} = boundingBox.max_{var} = 0;",{indent:4})}\n }\n`}var et={exports:{}};const rt=Fn;function it(n){return`\n if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number');\n\n return {\n update: function(body) {\n ${rt(n)("body.force.{var} -= options.dragCoefficient * body.velocity.{var};",{indent:6})}\n }\n };\n`}et.exports=function(n){let t=it(n);return new Function("options",t)},et.exports.generateCreateDragForceFunctionBody=it;var ot={exports:{}};const at=Fn;function ut(n){let t=at(n);return`\n if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number');\n if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number');\n\n return {\n /**\n * Updates forces acting on a spring\n */\n update: function (spring) {\n var body1 = spring.from;\n var body2 = spring.to;\n var length = spring.length < 0 ? options.springLength : spring.length;\n ${t("var d{var} = body2.pos.{var} - body1.pos.{var};",{indent:6})}\n var r = Math.sqrt(${t("d{var} * d{var}",{join:" + "})});\n\n if (r === 0) {\n ${t("d{var} = (random.nextDouble() - 0.5) / 50;",{indent:8})}\n r = Math.sqrt(${t("d{var} * d{var}",{join:" + "})});\n }\n\n var d = r - length;\n var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r;\n\n ${t("body1.force.{var} += coefficient * d{var}",{indent:6})};\n body1.springCount += 1;\n body1.springLength += r;\n\n ${t("body2.force.{var} -= coefficient * d{var}",{indent:6})};\n body2.springCount += 1;\n body2.springLength += r;\n }\n };\n`}ot.exports=function(n){let t=ut(n);return new Function("options","random",t)},ot.exports.generateCreateSpringForceFunctionBody=ut;var st={exports:{}};const ft=Fn;function lt(n){let t=ft(n);return`\n var length = bodies.length;\n if (length === 0) return 0;\n\n ${t("var d{var} = 0, t{var} = 0;",{indent:2})}\n\n for (var i = 0; i < length; ++i) {\n var body = bodies[i];\n if (body.isPinned) continue;\n\n if (adaptiveTimeStepWeight && body.springCount) {\n timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount);\n }\n\n var coeff = timeStep / body.mass;\n\n ${t("body.velocity.{var} += coeff * body.force.{var};",{indent:4})}\n ${t("var v{var} = body.velocity.{var};",{indent:4})}\n var v = Math.sqrt(${t("v{var} * v{var}",{join:" + "})});\n\n if (v > 1) {\n // We normalize it so that we move within timeStep range. \n // for the case when v <= 1 - we let velocity to fade out.\n ${t("body.velocity.{var} = v{var} / v;",{indent:6})}\n }\n\n ${t("d{var} = timeStep * body.velocity.{var};",{indent:4})}\n\n ${t("body.pos.{var} += d{var};",{indent:4})}\n\n ${t("t{var} += Math.abs(d{var});",{indent:4})}\n }\n\n return (${t("t{var} * t{var}",{join:" + "})})/length;\n`}st.exports=function(n){let t=lt(n);return new Function("bodies","timeStep","adaptiveTimeStepWeight",t)},st.exports.generateIntegratorFunctionBody=lt;var ct=function(n,t,e,r){this.from=n,this.to=t,this.length=e,this.coefficient=r};var ht=function n(t,e){var r;t||(t={});if(e)for(r in e)if(e.hasOwnProperty(r)){var i=t.hasOwnProperty(r),o=typeof e[r];!i||typeof t[r]!==o?t[r]=e[r]:"object"===o&&(t[r]=n(t[r],e[r]))}return t};var dt={exports:{}};function pt(n){return new gt("number"==typeof n?n:+new Date)}function gt(n){this.seed=n}function vt(n){return Math.sqrt(2*Math.PI/n)*Math.pow(1/Math.E*(n+1/(12*n-1/(10*n))),n)}function yt(){var n=this.seed;return n=4294967295&(3042594569^(n=(n=4294967295&((n=(n=4294967295&(3345072700^(n=n+2127912214+(n<<12)&4294967295)^n>>>19))+374761393+(n<<5)&4294967295)+3550635116^n<<9))+4251993797+(n<<3)&4294967295)^n>>>16),this.seed=n,(268435455&n)/268435456}dt.exports=pt,dt.exports.random=pt,dt.exports.randomIterator=function(n,t){var e=t||pt();if("function"!=typeof e.next)throw new Error("customRandom does not match expected API: next() function is missing");return{forEach:function(t){var r,i,o;for(r=n.length-1;r>0;--r)i=e.next(r+1),o=n[i],n[i]=n[r],n[r]=o,t(o);n.length&&t(n[0])},shuffle:function(){var t,r,i;for(t=n.length-1;t>0;--t)r=e.next(t+1),i=n[r],n[r]=n[t],n[t]=i;return n}}},gt.prototype.next=function(n){return Math.floor(this.nextDouble()*n)},gt.prototype.nextDouble=yt,gt.prototype.uniform=yt,gt.prototype.gaussian=function(){var n,t,e;do{t=2*this.nextDouble()-1,e=2*this.nextDouble()-1,n=t*t+e*e}while(n>=1||0===n);return t*Math.sqrt(-2*Math.log(n)/n)},gt.prototype.levy=function(){var n=1.5,t=Math.pow(vt(2.5)*Math.sin(Math.PI*n/2)/(vt(1.25)*n*Math.pow(2,.25)),1/n);return this.gaussian()*t/Math.pow(Math.abs(this.gaussian()),1/n)};var bt=function(n){var t=ct,e=ht,r=Mn;if(n){if(void 0!==n.springCoeff)throw new Error("springCoeff was renamed to springCoefficient");if(void 0!==n.dragCoeff)throw new Error("dragCoeff was renamed to dragCoefficient")}n=e(n,{springLength:10,springCoefficient:.8,gravity:-12,theta:.8,dragCoefficient:.9,timeStep:.5,adaptiveTimeStepWeight:0,dimensions:2,debug:!1});var i=At[n.dimensions];if(!i){var o=n.dimensions;i={Body:mt(o,n.debug),createQuadTree:_t(o),createBounds:xt(o),createDragForce:wt(o),createSpringForce:kt(o),integrate:Ot(o)},At[o]=i}var a=i.Body,u=i.createQuadTree,s=i.createBounds,f=i.createDragForce,l=i.createSpringForce,c=i.integrate,h=dt.exports.random(42),d=[],p=[],g=u(n,h),v=s(d,n,h),y=l(n,h),b=f(n),m=[],_=new Map,x=0;O("nbody",(function(){if(0===d.length)return;g.insertBodies(d);var n=d.length;for(;n--;){var t=d[n];t.isPinned||(t.reset(),g.updateBodyForce(t),b.update(t))}})),O("spring",(function(){var n=p.length;for(;n--;)y.update(p[n])}));var w={bodies:d,quadTree:g,springs:p,settings:n,addForce:O,removeForce:function(n){var t=m.indexOf(_.get(n));if(t<0)return;m.splice(t,1),_.delete(n)},getForces:function(){return _},step:function(){for(var t=0;t<m.length;++t)m[t](x);var e=c(d,n.timeStep,n.adaptiveTimeStepWeight);return x+=1,e},addBody:function(n){if(!n)throw new Error("Body is required");return d.push(n),n},addBodyAt:function(n){if(!n)throw new Error("Body position is required");var t=(n=>new a(n))(n);return d.push(t),t},removeBody:function(n){if(n){var t=d.indexOf(n);if(!(t<0))return d.splice(t,1),0===d.length&&v.reset(),!0}},addSpring:function(n,e,r,i){if(!n||!e)throw new Error("Cannot add null spring to force simulator");"number"!=typeof r&&(r=-1);var o=new t(n,e,r,i>=0?i:-1);return p.push(o),o},getTotalMovement:function(){return 0},removeSpring:function(n){if(n){var t=p.indexOf(n);return t>-1?(p.splice(t,1),!0):void 0}},getBestNewBodyPosition:function(n){return v.getBestNewPosition(n)},getBBox:k,getBoundingBox:k,invalidateBBox:function(){console.warn("invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call")},gravity:function(t){return void 0!==t?(n.gravity=t,g.options({gravity:t}),this):n.gravity},theta:function(t){return void 0!==t?(n.theta=t,g.options({theta:t}),this):n.theta},random:h};return function(n,t){for(var e in n)jt(n,t,e)}(n,w),r(w),w;function k(){return v.update(),v.box}function O(n,t){if(_.has(n))throw new Error("Force "+n+" is already added");_.set(n,t),m.push(t)}},mt=In.exports,_t=Vn.exports,xt=Zn.exports,wt=et.exports,kt=ot.exports,Ot=st.exports,At={};function jt(n,t,e){if(n.hasOwnProperty(e)&&"function"!=typeof t[e]){var r=Number.isFinite(n[e]);t[e]=r?function(r){if(void 0!==r){if(!Number.isFinite(r))throw new Error("Value of "+e+" should be a valid number.");return n[e]=r,t}return n[e]}:function(r){return void 0!==r?(n[e]=r,t):n[e]}}}Tn.exports=function(n,t){if(!n)throw new Error("Graph structure cannot be undefined");var e=(t&&t.createSimulator||bt)(t);if(Array.isArray(t))throw new Error("Physics settings is expected to be an object");var r=function(t){var e=n.getLinks(t);return e?1+e.length/3:1};t&&"function"==typeof t.nodeMass&&(r=t.nodeMass);var i=new Map,o={},a=0,u=e.settings.springTransform||St;a=0,n.forEachNode((function(n){d(n.id),a+=1})),n.forEachLink(g),n.on("changed",h);var s=!1,f={step:function(){if(0===a)return l(!0),!0;var n=e.step();f.lastMove=n,f.fire("step");var t=n/a<=.01;return l(t),t},getNodePosition:function(n){return b(n).pos},setNodePosition:function(n){var t=b(n);t.setPosition.apply(t,Array.prototype.slice.call(arguments,1))},getLinkPosition:function(n){var t=o[n];if(t)return{from:t.from.pos,to:t.to.pos}},getGraphRect:function(){return e.getBBox()},forEachBody:c,pinNode:function(n,t){b(n.id).isPinned=!!t},isNodePinned:function(n){return b(n.id).isPinned},dispose:function(){n.off("changed",h),f.fire("disposed")},getBody:function(n){return i.get(n)},getSpring:function(t,e){var r;if(void 0===e)r="object"!=typeof t?t:t.id;else{var i=n.hasLink(t,e);if(!i)return;r=i.id}return o[r]},getForceVectorLength:function(){var n=0,t=0;return c((function(e){n+=Math.abs(e.force.x),t+=Math.abs(e.force.y)})),Math.sqrt(n*n+t*t)},simulator:e,graph:n,lastMove:0};return Mt(f),f;function l(n){var t;s!==n&&(s=n,t=n,f.fire("stable",t))}function c(n){i.forEach(n)}function h(t){for(var e=0;e<t.length;++e){var r=t[e];"add"===r.changeType?(r.node&&d(r.node.id),r.link&&g(r.link)):"remove"===r.changeType&&(r.node&&p(r.node),r.link&&v(r.link))}a=n.getNodesCount()}function d(t){var r=i.get(t);if(!r){var o=n.getNode(t);if(!o)throw new Error("initBody() was called with unknown node id");var a=o.position;if(!a){var u=function(n){var t=[];if(!n.links)return t;for(var e=Math.min(n.links.length,2),r=0;r<e;++r){var o=n.links[r],a=o.fromId!==n.id?i.get(o.fromId):i.get(o.toId);a&&a.pos&&t.push(a)}return t}(o);a=e.getBestNewBodyPosition(u)}(r=e.addBodyAt(a)).id=t,i.set(t,r),y(t),function(n){return n&&(n.isPinned||n.data&&n.data.isPinned)}(o)&&(r.isPinned=!0)}}function p(n){var t=n.id,r=i.get(t);r&&(i.delete(t),e.removeBody(r))}function g(n){y(n.fromId),y(n.toId);var t=i.get(n.fromId),r=i.get(n.toId),a=e.addSpring(t,r,n.length);u(n,a),o[n.id]=a}function v(t){var r=o[t.id];if(r){var i=n.getNode(t.fromId),a=n.getNode(t.toId);i&&y(i.id),a&&y(a.id),delete o[t.id],e.removeSpring(r)}}function y(n){var t=i.get(n);if(t.mass=r(n),Number.isNaN(t.mass))throw new Error("Node mass should be a number")}function b(n){var t=i.get(n);return t||(d(n),t=i.get(n)),t}},Tn.exports.simulator=bt;var Mt=Mn;function St(){}var Pt=Tn.exports;function Nt(n,t,e){var r,i,o,a,u;function s(){var f=Date.now()-a;f<t&&f>=0?r=setTimeout(s,t-f):(r=null,e||(u=n.apply(o,i),o=i=null))}null==t&&(t=100);var f=function(){o=this,i=arguments,a=Date.now();var f=e&&!r;return r||(r=setTimeout(s,t)),f&&(u=n.apply(o,i),o=i=null),u};return f.clear=function(){r&&(clearTimeout(r),r=null)},f.flush=function(){r&&(u=n.apply(o,i),o=i=null,clearTimeout(r),r=null)},f}Nt.debounce=Nt;var Bt=Nt;function Ct(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var e=n&&("undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"]);if(null==e)return;var r,i,o=[],a=!0,u=!1;try{for(e=e.call(n);!(a=(r=e.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(n){u=!0,i=n}finally{try{a||null==e.return||e.return()}finally{if(u)throw i}}return o}(n,t)||function(n,t){if(!n)return;if("string"==typeof n)return Et(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);"Object"===e&&n.constructor&&(e=n.constructor.name);if("Map"===e||"Set"===e)return Array.from(n);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return Et(n,t)}(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Et(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=new Array(t);e<t;e++)r[e]=n[e];return r}var zt=function n(t,e){var r=e.default,i=void 0===r?null:r,o=e.triggerUpdate,a=void 0===o||o,u=e.onChange,s=void 0===u?function(n,t){}:u;!function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),this.name=t,this.defaultVal=i,this.triggerUpdate=a,this.onChange=s};var Tt=function(n){return n instanceof Function?n:"string"==typeof n?function(t){return t[n]}:function(t){return n}};class It extends Map{constructor(n,t=Dt){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),null!=n)for(const[t,e]of n)this.set(t,e)}get(n){return super.get($t(this,n))}has(n){return super.has($t(this,n))}set(n,t){return super.set(function({_intern:n,_key:t},e){const r=t(e);return n.has(r)?n.get(r):(n.set(r,e),e)}(this,n),t)}delete(n){return super.delete(function({_intern:n,_key:t},e){const r=t(e);n.has(r)&&(e=n.get(e),n.delete(r));return e}(this,n))}}function $t({_intern:n,_key:t},e){const r=t(e);return n.has(r)?n.get(r):e}function Dt(n){return null!==n&&"object"==typeof n?n.valueOf():n}function Ft(n,t){let e;if(void 0===t)for(const t of n)null!=t&&(e<t||void 0===e&&t>=t)&&(e=t);else{let r=-1;for(let i of n)null!=(i=t(i,++r,n))&&(e<i||void 0===e&&i>=i)&&(e=i)}return e}function Lt(n,t){let e;if(void 0===t)for(const t of n)null!=t&&(e>t||void 0===e&&t>=t)&&(e=t);else{let r=-1;for(let i of n)null!=(i=t(i,++r,n))&&(e>i||void 0===e&&i>=i)&&(e=i)}return e}function Rt(n,t){if(null==n)return{};var e,r,i=function(n,t){if(null==n)return{};var e,r,i={},o=Object.keys(n);for(r=0;r<o.length;r++)e=o[r],t.indexOf(e)>=0||(i[e]=n[e]);return i}(n,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r<o.length;r++)e=o[r],t.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(n,e)&&(i[e]=n[e])}return i}function qt(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var e=n&&("undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"]);if(null==e)return;var r,i,o=[],a=!0,u=!1;try{for(e=e.call(n);!(a=(r=e.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(n){u=!0,i=n}finally{try{a||null==e.return||e.return()}finally{if(u)throw i}}return o}(n,t)||Vt(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ut(n){return function(n){if(Array.isArray(n))return Gt(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||Vt(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vt(n,t){if(n){if("string"==typeof n)return Gt(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);return"Object"===e&&n.constructor&&(e=n.constructor.name),"Map"===e||"Set"===e?Array.from(n):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?Gt(n,t):void 0}}function Gt(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=new Array(t);e<t;e++)r[e]=n[e];return r}function Ht(n){var t=function(n,t){if("object"!=typeof n||null===n)return n;var e=n[Symbol.toPrimitive];if(void 0!==e){var r=e.call(n,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(n)}(n,"string");return"symbol"==typeof t?t:String(t)}var Wt=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],e=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=(t instanceof Array?t.length?t:[void 0]:[t]).map((function(n){return{keyAccessor:n,isProp:!(n instanceof Function)}})),o=n.reduce((function(n,t){var r=n,o=t;return i.forEach((function(n,t){var a,u=n.keyAccessor;if(n.isProp){var s=o,f=s[u],l=Rt(s,[u].map(Ht));a=f,o=l}else a=u(o,t);t+1<i.length?(r.hasOwnProperty(a)||(r[a]={}),r=r[a]):e?(r.hasOwnProperty(a)||(r[a]=[]),r[a].push(o)):r[a]=o})),n}),{});e instanceof Function&&function n(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;r===i.length?Object.keys(t).forEach((function(n){return t[n]=e(t[n])})):Object.values(t).forEach((function(t){return n(t,r+1)}))}(o);var a=o;return r&&(a=[],function n(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e.length===i.length?a.push({keys:e,vals:t}):Object.entries(t).forEach((function(t){var r=qt(t,2),i=r[0],o=r[1];return n(o,[].concat(Ut(e),[i]))}))}(o),t instanceof Array&&0===t.length&&1===a.length&&(a[0].keys=[])),a};function Qt(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),e.push.apply(e,r)}return e}function Xt(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}function Jt(n,t){if(null==n)return{};var e,r,i=function(n,t){if(null==n)return{};var e,r,i={},o=Object.keys(n);for(r=0;r<o.length;r++)e=o[r],t.indexOf(e)>=0||(i[e]=n[e]);return i}(n,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);for(r=0;r<o.length;r++)e=o[r],t.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(n,e)&&(i[e]=n[e])}return i}function Yt(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var e=n&&("undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"]);if(null==e)return;var r,i,o=[],a=!0,u=!1;try{for(e=e.call(n);!(a=(r=e.next()).done)&&(o.push(r.value),!t||o.length!==t);a=!0);}catch(n){u=!0,i=n}finally{try{a||null==e.return||e.return()}finally{if(u)throw i}}return o}(n,t)||Zt(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Kt(n){return function(n){if(Array.isArray(n))return ne(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||Zt(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zt(n,t){if(n){if("string"==typeof n)return ne(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);return"Object"===e&&n.constructor&&(e=n.constructor.name),"Map"===e||"Set"===e?Array.from(n):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?ne(n,t):void 0}}function ne(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=new Array(t);e<t;e++)r[e]=n[e];return r}function te(n,t,e){var r=e.objBindAttr,i=void 0===r?"__obj":r,o=e.dataBindAttr,a=void 0===o?"__data":o,u=e.idAccessor,s=e.purge,f=void 0!==s&&s,l=function(n){return n.hasOwnProperty(a)},c=t.filter((function(n){return!l(n)})),h=t.filter(l).map((function(n){return n[a]})),d=f?{enter:n,exit:h,update:[]}:function(n,t,e){var r={enter:[],update:[],exit:[]};if(e){var i=Wt(n,e,!1),o=Wt(t,e,!1),a=Object.assign({},i,o);Object.entries(a).forEach((function(n){var t=Yt(n,2),e=t[0],a=t[1],u=i.hasOwnProperty(e)?o.hasOwnProperty(e)?"update":"exit":"enter";r[u].push("update"===u?[i[e],o[e]]:a)}))}else{var u=new Set(n),s=new Set(t);new Set([].concat(Kt(u),Kt(s))).forEach((function(n){var t=u.has(n)?s.has(n)?"update":"exit":"enter";r[t].push("update"===t?[n,n]:n)}))}return r}(h,n,u);return d.update=d.update.map((function(n){var t=Yt(n,2),e=t[0],r=t[1];return e!==r&&(r[i]=e[i],r[i][a]=r),r})),d.exit=d.exit.concat(c.map((function(n){return Xt({},i,n)}))),d}function ee(n,t,e,r,i){var o=i.createObj,a=void 0===o?function(n){return{}}:o,u=i.updateObj,s=void 0===u?function(n,t){}:u,f=i.exitObj,l=void 0===f?function(n){}:f,c=i.objBindAttr,h=void 0===c?"__obj":c,d=i.dataBindAttr,p=void 0===d?"__data":d,g=Jt(i,["createObj","updateObj","exitObj","objBindAttr","dataBindAttr"]),v=te(n,t,function(n){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?Qt(Object(e),!0).forEach((function(t){Xt(n,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):Qt(Object(e)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t))}))}return n}({objBindAttr:h,dataBindAttr:p},g)),y=v.enter,b=v.update;v.exit.forEach((function(n){var t=n[h];delete n[h],l(t),r(t)}));var m=function(n){var t=[];return n.forEach((function(n){var e=a(n);e&&(e[p]=n,n[h]=e,t.push(e))})),t}(y);!function(n){n.forEach((function(n){var t=n[h];t&&(t[p]=n,s(t,n))}))}([].concat(Kt(y),Kt(b))),m.forEach(e)}var re=function n(t){t instanceof Array?t.forEach(n):(t.map&&t.map.dispose(),t.dispose())},ie=function n(t){t.geometry&&t.geometry.dispose(),t.material&&re(t.material),t.texture&&t.texture.dispose(),t.children&&t.children.forEach(n)},oe=function(n){for(;n.children.length;){var t=n.children[0];n.remove(t),ie(t)}},ae=["objFilter"];function ue(n,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=r.objFilter,o=void 0===i?function(){return!0}:i,a=c(r,ae);return ee(n,t.children.filter(o),(function(n){return t.add(n)}),(function(n){t.remove(n),oe(n)}),e({objBindAttr:"__threeObj"},a))}function se(n,t){switch(arguments.length){case 0:break;case 1:this.range(n);break;default:this.range(t).domain(n)}return this}const fe=Symbol("implicit");var le=function(n){for(var t=n.length/6|0,e=new Array(t),r=0;r<t;)e[r]="#"+n.slice(6*r,6*++r);return e}("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),ce={exports:{}};!function(n){!function(t){var e=/^\s+/,r=/\s+$/,i=0,o=t.round,a=t.min,u=t.max,s=t.random;function f(n,s){if(s=s||{},(n=n||"")instanceof f)return n;if(!(this instanceof f))return new f(n,s);var l=function(n){var i={r:0,g:0,b:0},o=1,s=null,f=null,l=null,c=!1,h=!1;"string"==typeof n&&(n=function(n){n=n.replace(e,"").replace(r,"").toLowerCase();var t,i=!1;if(M[n])n=M[n],i=!0;else if("transparent"==n)return{r:0,g:0,b:0,a:0,format:"name"};if(t=L.rgb.exec(n))return{r:t[1],g:t[2],b:t[3]};if(t=L.rgba.exec(n))return{r:t[1],g:t[2],b:t[3],a:t[4]};if(t=L.hsl.exec(n))return{h:t[1],s:t[2],l:t[3]};if(t=L.hsla.exec(n))return{h:t[1],s:t[2],l:t[3],a:t[4]};if(t=L.hsv.exec(n))return{h:t[1],s:t[2],v:t[3]};if(t=L.hsva.exec(n))return{h:t[1],s:t[2],v:t[3],a:t[4]};if(t=L.hex8.exec(n))return{r:C(t[1]),g:C(t[2]),b:C(t[3]),a:I(t[4]),format:i?"name":"hex8"};if(t=L.hex6.exec(n))return{r:C(t[1]),g:C(t[2]),b:C(t[3]),format:i?"name":"hex"};if(t=L.hex4.exec(n))return{r:C(t[1]+""+t[1]),g:C(t[2]+""+t[2]),b:C(t[3]+""+t[3]),a:I(t[4]+""+t[4]),format:i?"name":"hex8"};if(t=L.hex3.exec(n))return{r:C(t[1]+""+t[1]),g:C(t[2]+""+t[2]),b:C(t[3]+""+t[3]),format:i?"name":"hex"};return!1}(n));"object"==typeof n&&(R(n.r)&&R(n.g)&&R(n.b)?(d=n.r,p=n.g,g=n.b,i={r:255*N(d,255),g:255*N(p,255),b:255*N(g,255)},c=!0,h="%"===String(n.r).substr(-1)?"prgb":"rgb"):R(n.h)&&R(n.s)&&R(n.v)?(s=z(n.s),f=z(n.v),i=function(n,e,r){n=6*N(n,360),e=N(e,100),r=N(r,100);var i=t.floor(n),o=n-i,a=r*(1-e),u=r*(1-o*e),s=r*(1-(1-o)*e),f=i%6;return{r:255*[r,u,a,a,s,r][f],g:255*[s,r,r,u,a,a][f],b:255*[a,a,s,r,r,u][f]}}(n.h,s,f),c=!0,h="hsv"):R(n.h)&&R(n.s)&&R(n.l)&&(s=z(n.s),l=z(n.l),i=function(n,t,e){var r,i,o;function a(n,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?n+6*(t-n)*e:e<.5?t:e<2/3?n+(t-n)*(2/3-e)*6:n}if(n=N(n,360),t=N(t,100),e=N(e,100),0===t)r=i=o=e;else{var u=e<.5?e*(1+t):e+t-e*t,s=2*e-u;r=a(s,u,n+1/3),i=a(s,u,n),o=a(s,u,n-1/3)}return{r:255*r,g:255*i,b:255*o}}(n.h,s,l),c=!0,h="hsl"),n.hasOwnProperty("a")&&(o=n.a));var d,p,g;return o=P(o),{ok:c,format:n.format||h,r:a(255,u(i.r,0)),g:a(255,u(i.g,0)),b:a(255,u(i.b,0)),a:o}}(n);this._originalInput=n,this._r=l.r,this._g=l.g,this._b=l.b,this._a=l.a,this._roundA=o(100*this._a)/100,this._format=s.format||l.format,this._gradientType=s.gradientType,this._r<1&&(this._r=o(this._r)),this._g<1&&(this._g=o(this._g)),this._b<1&&(this._b=o(this._b)),this._ok=l.ok,this._tc_id=i++}function l(n,t,e){n=N(n,255),t=N(t,255),e=N(e,255);var r,i,o=u(n,t,e),s=a(n,t,e),f=(o+s)/2;if(o==s)r=i=0;else{var l=o-s;switch(i=f>.5?l/(2-o-s):l/(o+s),o){case n:r=(t-e)/l+(t<e?6:0);break;case t:r=(e-n)/l+2;break;case e:r=(n-t)/l+4}r/=6}return{h:r,s:i,l:f}}function c(n,t,e){n=N(n,255),t=N(t,255),e=N(e,255);var r,i,o=u(n,t,e),s=a(n,t,e),f=o,l=o-s;if(i=0===o?0:l/o,o==s)r=0;else{switch(o){case n:r=(t-e)/l+(t<e?6:0);break;case t:r=(e-n)/l+2;break;case e:r=(n-t)/l+4}r/=6}return{h:r,s:i,v:f}}function h(n,t,e,r){var i=[E(o(n).toString(16)),E(o(t).toString(16)),E(o(e).toString(16))];return r&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join("")}function d(n,t,e,r){return[E(T(r)),E(o(n).toString(16)),E(o(t).toString(16)),E(o(e).toString(16))].join("")}function p(n,t){t=0===t?0:t||10;var e=f(n).toHsl();return e.s-=t/100,e.s=B(e.s),f(e)}function g(n,t){t=0===t?0:t||10;var e=f(n).toHsl();return e.s+=t/100,e.s=B(e.s),f(e)}function v(n){return f(n).desaturate(100)}function y(n,t){t=0===t?0:t||10;var e=f(n).toHsl();return e.l+=t/100,e.l=B(e.l),f(e)}function b(n,t){t=0===t?0:t||10;var e=f(n).toRgb();return e.r=u(0,a(255,e.r-o(-t/100*255))),e.g=u(0,a(255,e.g-o(-t/100*255))),e.b=u(0,a(255,e.b-o(-t/100*255))),f(e)}function m(n,t){t=0===t?0:t||10;var e=f(n).toHsl();return e.l-=t/100,e.l=B(e.l),f(e)}function _(n,t){var e=f(n).toHsl(),r=(e.h+t)%360;return e.h=r<0?360+r:r,f(e)}function x(n){var t=f(n).toHsl();return t.h=(t.h+180)%360,f(t)}function w(n){var t=f(n).toHsl(),e=t.h;return[f(n),f({h:(e+120)%360,s:t.s,l:t.l}),f({h:(e+240)%360,s:t.s,l:t.l})]}function k(n){var t=f(n).toHsl(),e=t.h;return[f(n),f({h:(e+90)%360,s:t.s,l:t.l}),f({h:(e+180)%360,s:t.s,l:t.l}),f({h:(e+270)%360,s:t.s,l:t.l})]}function O(n){var t=f(n).toHsl(),e=t.h;return[f(n),f({h:(e+72)%360,s:t.s,l:t.l}),f({h:(e+216)%360,s:t.s,l:t.l})]}function A(n,t,e){t=t||6,e=e||30;var r=f(n).toHsl(),i=360/e,o=[f(n)];for(r.h=(r.h-(i*t>>1)+720)%360;--t;)r.h=(r.h+i)%360,o.push(f(r));return o}function j(n,t){t=t||6;for(var e=f(n).toHsv(),r=e.h,i=e.s,o=e.v,a=[],u=1/t;t--;)a.push(f({h:r,s:i,v:o})),o=(o+u)%1;return a}f.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var n=this.toRgb();return(299*n.r+587*n.g+114*n.b)/1e3},getLuminance:function(){var n,e,r,i=this.toRgb();return n=i.r/255,e=i.g/255,r=i.b/255,.2126*(n<=.03928?n/12.92:t.pow((n+.055)/1.055,2.4))+.7152*(e<=.03928?e/12.92:t.pow((e+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:t.pow((r+.055)/1.055,2.4))},setAlpha:function(n){return this._a=P(n),this._roundA=o(100*this._a)/100,this},toHsv:function(){var n=c(this._r,this._g,this._b);return{h:360*n.h,s:n.s,v:n.v,a:this._a}},toHsvString:function(){var n=c(this._r,this._g,this._b),t=o(360*n.h),e=o(100*n.s),r=o(100*n.v);return 1==this._a?"hsv("+t+", "+e+"%, "+r+"%)":"hsva("+t+", "+e+"%, "+r+"%, "+this._roundA+")"},toHsl:function(){var n=l(this._r,this._g,this._b);return{h:360*n.h,s:n.s,l:n.l,a:this._a}},toHslString:function(){var n=l(this._r,this._g,this._b),t=o(360*n.h),e=o(100*n.s),r=o(100*n.l);return 1==this._a?"hsl("+t+", "+e+"%, "+r+"%)":"hsla("+t+", "+e+"%, "+r+"%, "+this._roundA+")"},toHex:function(n){return h(this._r,this._g,this._b,n)},toHexString:function(n){return"#"+this.toHex(n)},toHex8:function(n){return function(n,t,e,r,i){var a=[E(o(n).toString(16)),E(o(t).toString(16)),E(o(e).toString(16)),E(T(r))];if(i&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)&&a[3].charAt(0)==a[3].charAt(1))return a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0);return a.join("")}(this._r,this._g,this._b,this._a,n)},toHex8String:function(n){return"#"+this.toHex8(n)},toRgb:function(){return{r:o(this._r),g:o(this._g),b:o(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+o(this._r)+", "+o(this._g)+", "+o(this._b)+")":"rgba("+o(this._r)+", "+o(this._g)+", "+o(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:o(100*N(this._r,255))+"%",g:o(100*N(this._g,255))+"%",b:o(100*N(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+o(100*N(this._r,255))+"%, "+o(100*N(this._g,255))+"%, "+o(100*N(this._b,255))+"%)":"rgba("+o(100*N(this._r,255))+"%, "+o(100*N(this._g,255))+"%, "+o(100*N(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(S[h(this._r,this._g,this._b,!0)]||!1)},toFilter:function(n){var t="#"+d(this._r,this._g,this._b,this._a),e=t,r=this._gradientType?"GradientType = 1, ":"";if(n){var i=f(n);e="#"+d(i._r,i._g,i._b,i._a)}return"progid:DXImageTransform.Microsoft.gradient("+r+"startColorstr="+t+",endColorstr="+e+")"},toString:function(n){var t=!!n;n=n||this._format;var e=!1,r=this._a<1&&this._a>=0;return t||!r||"hex"!==n&&"hex6"!==n&&"hex3"!==n&&"hex4"!==n&&"hex8"!==n&&"name"!==n?("rgb"===n&&(e=this.toRgbString()),"prgb"===n&&(e=this.toPercentageRgbString()),"hex"!==n&&"hex6"!==n||(e=this.toHexString()),"hex3"===n&&(e=this.toHexString(!0)),"hex4"===n&&(e=this.toHex8String(!0)),"hex8"===n&&(e=this.toHex8String()),"name"===n&&(e=this.toName()),"hsl"===n&&(e=this.toHslString()),"hsv"===n&&(e=this.toHsvString()),e||this.toHexString()):"name"===n&&0===this._a?this.toName():this.toRgbString()},clone:function(){return f(this.toString())},_applyModification:function(n,t){var e=n.apply(null,[this].concat([].slice.call(t)));return this._r=e._r,this._g=e._g,this._b=e._b,this.setAlpha(e._a),this},lighten:function(){return this._applyModification(y,arguments)},brighten:function(){return this._applyModification(b,arguments)},darken:function(){return this._applyModification(m,arguments)},desaturate:function(){return this._applyModification(p,arguments)},saturate:function(){return this._applyModification(g,arguments)},greyscale:function(){return this._applyModification(v,arguments)},spin:function(){return this._applyModification(_,arguments)},_applyCombination:function(n,t){return n.apply(null,[this].concat([].slice.call(t)))},analogous:function(){return this._applyCombination(A,arguments)},complement:function(){return this._applyCombination(x,arguments)},monochromatic:function(){return this._applyCombination(j,arguments)},splitcomplement:function(){return this._applyCombination(O,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},f.fromRatio=function(n,t){if("object"==typeof n){var e={};for(var r in n)n.hasOwnProperty(r)&&(e[r]="a"===r?n[r]:z(n[r]));n=e}return f(n,t)},f.equals=function(n,t){return!(!n||!t)&&f(n).toRgbString()==f(t).toRgbString()},f.random=function(){return f.fromRatio({r:s(),g:s(),b:s()})},f.mix=function(n,t,e){e=0===e?0:e||50;var r=f(n).toRgb(),i=f(t).toRgb(),o=e/100;return f({r:(i.r-r.r)*o+r.r,g:(i.g-r.g)*o+r.g,b:(i.b-r.b)*o+r.b,a:(i.a-r.a)*o+r.a})},
  3. // <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)
  4. // Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)
  5. f.readability=function(n,e){var r=f(n),i=f(e);return(t.max(r.getLuminance(),i.getLuminance())+.05)/(t.min(r.getLuminance(),i.getLuminance())+.05)},f.isReadable=function(n,t,e){var r,i,o=f.readability(n,t);switch(i=!1,(r=function(n){var t,e;t=((n=n||{level:"AA",size:"small"}).level||"AA").toUpperCase(),e=(n.size||"small").toLowerCase(),"AA"!==t&&"AAA"!==t&&(t="AA");"small"!==e&&"large"!==e&&(e="small");return{level:t,size:e}}(e)).level+r.size){case"AAsmall":case"AAAlarge":i=o>=4.5;break;case"AAlarge":i=o>=3;break;case"AAAsmall":i=o>=7}return i},f.mostReadable=function(n,t,e){var r,i,o,a,u=null,s=0;i=(e=e||{}).includeFallbackColors,o=e.level,a=e.size;for(var l=0;l<t.length;l++)(r=f.readability(n,t[l]))>s&&(s=r,u=f(t[l]));return f.isReadable(n,u,{level:o,size:a})||!i?u:(e.includeFallbackColors=!1,f.mostReadable(n,["#fff","#000"],e))};var M=f.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},S=f.hexNames=function(n){var t={};for(var e in n)n.hasOwnProperty(e)&&(t[n[e]]=e);return t}(M);function P(n){return n=parseFloat(n),(isNaN(n)||n<0||n>1)&&(n=1),n}function N(n,e){(function(n){return"string"==typeof n&&-1!=n.indexOf(".")&&1===parseFloat(n)})(n)&&(n="100%");var r=function(n){return"string"==typeof n&&-1!=n.indexOf("%")}(n);return n=a(e,u(0,parseFloat(n))),r&&(n=parseInt(n*e,10)/100),t.abs(n-e)<1e-6?1:n%e/parseFloat(e)}function B(n){return a(1,u(0,n))}function C(n){return parseInt(n,16)}function E(n){return 1==n.length?"0"+n:""+n}function z(n){return n<=1&&(n=100*n+"%"),n}function T(n){return t.round(255*parseFloat(n)).toString(16)}function I(n){return C(n)/255}var $,D,F,L=(D="[\\s|\\(]+("+($="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+$+")[,|\\s]+("+$+")\\s*\\)?",F="[\\s|\\(]+("+$+")[,|\\s]+("+$+")[,|\\s]+("+$+")[,|\\s]+("+$+")\\s*\\)?",{CSS_UNIT:new RegExp($),rgb:new RegExp("rgb"+D),rgba:new RegExp("rgba"+F),hsl:new RegExp("hsl"+D),hsla:new RegExp("hsla"+F),hsv:new RegExp("hsv"+D),hsva:new RegExp("hsva"+F),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function R(n){return!!L.CSS_UNIT.exec(n)}n.exports?n.exports=f:window.tinycolor=f}(Math)}(ce);var he=ce.exports,de=function(n){return isNaN(n)?parseInt(he(n).toHex(),16):n},pe=function(n){return isNaN(n)?he(n).getAlpha():1},ge=function n(){var t=new It,e=[],r=[],i=fe;function o(n){let o=t.get(n);if(void 0===o){if(i!==fe)return i;t.set(n,o=e.push(n)-1)}return r[o%r.length]}return o.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new It;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return o},o.range=function(n){return arguments.length?(r=Array.from(n),o):r.slice()},o.unknown=function(n){return arguments.length?(i=n,o):i},o.copy=function(){return n(e,r).unknown(i)},se.apply(o,arguments),o}(le);function ve(n,t,e){t&&"string"==typeof e&&n.filter((function(n){return!n[e]})).forEach((function(n){n[e]=ge(t(n))}))}var ye,be,me,_e,xe,we,ke,Oe,Ae,je,Me,Se,Pe,Ne,Be=window.THREE?window.THREE:{Group:n.Group,Mesh:n.Mesh,MeshLambertMaterial:n.MeshLambertMaterial,Color:n.Color,BufferGeometry:n.BufferGeometry,BufferAttribute:n.BufferAttribute,Matrix4:n.Matrix4,Vector3:n.Vector3,SphereBufferGeometry:n.SphereBufferGeometry,CylinderBufferGeometry:n.CylinderBufferGeometry,TubeBufferGeometry:n.TubeBufferGeometry,ConeBufferGeometry:n.ConeBufferGeometry,Line:n.Line,LineBasicMaterial:n.LineBasicMaterial,QuadraticBezierCurve3:n.QuadraticBezierCurve3,CubicBezierCurve3:n.CubicBezierCurve3,Box3:n.Box3},Ce={graph:Sn,forcelayout:Pt},Ee=(new Be.BufferGeometry).setAttribute?"setAttribute":"addAttribute",ze=(new Be.BufferGeometry).applyMatrix4?"applyMatrix4":"applyMatrix";return function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Object,e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=function(t){a(o,t);var r=p(o);function o(){var t;i(this,o);for(var a=arguments.length,u=new Array(a),s=0;s<a;s++)u[s]=arguments[s];return(t=r.call.apply(r,[this].concat(u))).__kapsuleInstance=n().apply(void 0,[].concat(v(e?[h(t)]:[]),u)),t}return o}(t);return Object.keys(n()).forEach((function(n){return r.prototype[n]=function(){var t,e=(t=this.__kapsuleInstance)[n].apply(t,arguments);return e===this.__kapsuleInstance?this:e}})),r}((be=(ye={props:{jsonUrl:{onChange:function(n,t){var e=this;n&&!t.fetchingJson&&(t.fetchingJson=!0,t.onLoading(),fetch(n).then((function(n){return n.json()})).then((function(n){t.fetchingJson=!1,t.onFinishLoading(n),e.graphData(n)})))},triggerUpdate:!1},graphData:{default:{nodes:[],links:[]},onChange:function(n,t){t.engineRunning=!1}},numDimensions:{default:3,onChange:function(n,t){var e=t.d3ForceLayout.force("charge");function r(n,t){n.forEach((function(n){delete n[t],delete n["v".concat(t)]}))}e&&e.strength(n>2?-60:-30),n<3&&r(t.graphData.nodes,"z"),n<2&&r(t.graphData.nodes,"y")}},dagMode:{onChange:function(n,t){!n&&"d3"===t.forceEngine&&(t.graphData.nodes||[]).forEach((function(n){return n.fx=n.fy=n.fz=void 0}))}},dagLevelDistance:{},dagNodeFilter:{default:function(n){return!0}},onDagError:{triggerUpdate:!1},nodeRelSize:{default:4},nodeId:{default:"id"},nodeVal:{default:"val"},nodeResolution:{default:8},nodeColor:{default:"color"},nodeAutoColorBy:{},nodeOpacity:{default:.75},nodeVisibility:{default:!0},nodeThreeObject:{},nodeThreeObjectExtend:{default:!1},linkSource:{default:"source"},linkTarget:{default:"target"},linkVisibility:{default:!0},linkColor:{default:"color"},linkAutoColorBy:{},linkOpacity:{default:.2},linkWidth:{},linkResolution:{default:6},linkCurvature:{default:0,triggerUpdate:!1},linkCurveRotation:{default:0,triggerUpdate:!1},linkMaterial:{},linkThreeObject:{},linkThreeObjectExtend:{default:!1},linkPositionUpdate:{triggerUpdate:!1},linkDirectionalArrowLength:{default:0},linkDirectionalArrowColor:{},linkDirectionalArrowRelPos:{default:.5,triggerUpdate:!1},linkDirectionalArrowResolution:{default:8},linkDirectionalParticles:{default:0},linkDirectionalParticleSpeed:{default:.01,triggerUpdate:!1},linkDirectionalParticleWidth:{default:.5},linkDirectionalParticleColor:{},linkDirectionalParticleResolution:{default:4},forceEngine:{default:"d3"},d3AlphaMin:{default:0},d3AlphaDecay:{default:.0228,triggerUpdate:!1,onChange:function(n,t){t.d3ForceLayout.alphaDecay(n)}},d3AlphaTarget:{default:0,triggerUpdate:!1,onChange:function(n,t){t.d3ForceLayout.alphaTarget(n)}},d3VelocityDecay:{default:.4,triggerUpdate:!1,onChange:function(n,t){t.d3ForceLayout.velocityDecay(n)}},ngraphPhysics:{default:{timeStep:20,gravity:-1.2,theta:.8,springLength:30,springCoefficient:8e-4,dragCoefficient:.02}},warmupTicks:{default:0,triggerUpdate:!1},cooldownTicks:{default:1/0,triggerUpdate:!1},cooldownTime:{default:15e3,triggerUpdate:!1},onLoading:{default:function(){},triggerUpdate:!1},onFinishLoading:{default:function(){},triggerUpdate:!1},onUpdate:{default:function(){},triggerUpdate:!1},onFinishUpdate:{default:function(){},triggerUpdate:!1},onEngineTick:{default:function(){},triggerUpdate:!1},onEngineStop:{default:function(){},triggerUpdate:!1}},methods:{refresh:function(n){return n._flushObjects=!0,n._rerender(),this},d3Force:function(n,t,e){return void 0===e?n.d3ForceLayout.force(t):(n.d3ForceLayout.force(t,e),this)},d3ReheatSimulation:function(n){return n.d3ForceLayout.alpha(1),this.resetCountdown(),this},resetCountdown:function(n){return n.cntTicks=0,n.startTickTime=new Date,n.engineRunning=!0,this},tickFrame:function(n){var t,e,r,i,o="ngraph"!==n.forceEngine;return n.engineRunning&&function(){++n.cntTicks>n.cooldownTicks||new Date-n.startTickTime>n.cooldownTime||o&&n.d3AlphaMin>0&&n.d3ForceLayout.alpha()<n.d3AlphaMin?(n.engineRunning=!1,n.onEngineStop()):(n.layout[o?"tick":"step"](),n.onEngineTick()),n.graphData.nodes.forEach((function(t){var e=t.__threeObj;if(e){var r=o?t:n.layout.getNodePosition(t[n.nodeId]);e.position.x=r.x,e.position.y=r.y||0,e.position.z=r.z||0}}));var t=Tt(n.linkWidth),e=Tt(n.linkCurvature),r=Tt(n.linkCurveRotation),i=Tt(n.linkThreeObjectExtend);function a(t){var i=o?t:n.layout.getLinkPosition(n.layout.graph.getLink(t.source,t.target).id),a=i[o?"source":"from"],u=i[o?"target":"to"];if(a&&u&&a.hasOwnProperty("x")&&u.hasOwnProperty("x")){var s=e(t);if(s){var f,l=new Be.Vector3(a.x,a.y||0,a.z||0),c=new Be.Vector3(u.x,u.y||0,u.z||0),h=l.distanceTo(c),d=r(t);if(h>0){var p=u.x-a.x,g=u.y-a.y||0,v=(new Be.Vector3).subVectors(c,l),y=v.clone().multiplyScalar(s).cross(0!==p||0!==g?new Be.Vector3(0,0,1):new Be.Vector3(0,1,0)).applyAxisAngle(v.normalize(),d).add((new Be.Vector3).addVectors(l,c).divideScalar(2));f=new Be.QuadraticBezierCurve3(l,y,c)}else{var b=70*s,m=-d,_=m+Math.PI/2;f=new Be.CubicBezierCurve3(l,new Be.Vector3(b*Math.cos(_),b*Math.sin(_),0).add(l),new Be.Vector3(b*Math.cos(m),b*Math.sin(m),0).add(l),c)}t.__curve=f}else t.__curve=null}}n.graphData.links.forEach((function(e){var r=e.__lineObj;if(r){var u=o?e:n.layout.getLinkPosition(n.layout.graph.getLink(e.source,e.target).id),s=u[o?"source":"from"],f=u[o?"target":"to"];if(s&&f&&s.hasOwnProperty("x")&&f.hasOwnProperty("x")){a(e);var l=i(e);if(!n.linkPositionUpdate||!n.linkPositionUpdate(l?r.children[1]:r,{start:{x:s.x,y:s.y,z:s.z},end:{x:f.x,y:f.y,z:f.z}},e)||l){var c=30,h=e.__curve,d=r.children.length?r.children[0]:r;if("Line"===d.type){if(h)d.geometry.setFromPoints(h.getPoints(c));else{var p=d.geometry.getAttribute("position");p&&p.array&&6===p.array.length||d.geometry[Ee]("position",p=new Be.BufferAttribute(new Float32Array(6),3)),p.array[0]=s.x,p.array[1]=s.y||0,p.array[2]=s.z||0,p.array[3]=f.x,p.array[4]=f.y||0,p.array[5]=f.z||0,p.needsUpdate=!0}d.geometry.computeBoundingSphere()}else if("Mesh"===d.type)if(h){d.geometry.type.match(/^Tube(Buffer)?Geometry$/)||(d.position.set(0,0,0),d.rotation.set(0,0,0),d.scale.set(1,1,1));var g=Math.ceil(10*t(e))/10/2,v=new Be.TubeBufferGeometry(h,c,g,n.linkResolution,!1);d.geometry.dispose(),d.geometry=v}else{if(!d.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)){var y=Math.ceil(10*t(e))/10/2,b=new Be.CylinderBufferGeometry(y,y,1,n.linkResolution,1,!1);b[ze]((new Be.Matrix4).makeTranslation(0,.5,0)),b[ze]((new Be.Matrix4).makeRotationX(Math.PI/2)),d.geometry.dispose(),d.geometry=b}var m=new Be.Vector3(s.x,s.y||0,s.z||0),_=new Be.Vector3(f.x,f.y||0,f.z||0),x=m.distanceTo(_);d.position.x=m.x,d.position.y=m.y,d.position.z=m.z,d.scale.z=x,d.parent.localToWorld(_),d.lookAt(_)}}}}}))}(),t=Tt(n.linkDirectionalArrowRelPos),e=Tt(n.linkDirectionalArrowLength),r=Tt(n.nodeVal),n.graphData.links.forEach((function(i){var a=i.__arrowObj;if(a){var u=o?i:n.layout.getLinkPosition(n.layout.graph.getLink(i.source,i.target).id),s=u[o?"source":"from"],f=u[o?"target":"to"];if(s&&f&&s.hasOwnProperty("x")&&f.hasOwnProperty("x")){var c=Math.sqrt(Math.max(0,r(s)||1))*n.nodeRelSize,h=Math.sqrt(Math.max(0,r(f)||1))*n.nodeRelSize,d=e(i),p=t(i),g=i.__curve?function(n){return i.__curve.getPoint(n)}:function(n){var t=function(n,t,e,r){return t[n]+(e[n]-t[n])*r||0};return{x:t("x",s,f,n),y:t("y",s,f,n),z:t("z",s,f,n)}},y=i.__curve?i.__curve.getLength():Math.sqrt(["x","y","z"].map((function(n){return Math.pow((f[n]||0)-(s[n]||0),2)})).reduce((function(n,t){return n+t}),0)),b=c+d+(y-c-h-d)*p,m=g(b/y),_=g((b-d)/y);["x","y","z"].forEach((function(n){return a.position[n]=_[n]}));var x=l(Be.Vector3,v(["x","y","z"].map((function(n){return m[n]}))));a.parent.localToWorld(x),a.lookAt(x)}}})),i=Tt(n.linkDirectionalParticleSpeed),n.graphData.links.forEach((function(t){var e=t.__photonsObj&&t.__photonsObj.children,r=t.__singleHopPhotonsObj&&t.__singleHopPhotonsObj.children;if(r&&r.length||e&&e.length){var a=o?t:n.layout.getLinkPosition(n.layout.graph.getLink(t.source,t.target).id),u=a[o?"source":"from"],s=a[o?"target":"to"];if(u&&s&&u.hasOwnProperty("x")&&s.hasOwnProperty("x")){var f=i(t),l=t.__curve?function(n){return t.__curve.getPoint(n)}:function(n){var t=function(n,t,e,r){return t[n]+(e[n]-t[n])*r||0};return{x:t("x",u,s,n),y:t("y",u,s,n),z:t("z",u,s,n)}};[].concat(v(e||[]),v(r||[])).forEach((function(n,t){var r="singleHopPhotons"===n.parent.__linkThreeObjType;if(n.hasOwnProperty("__progressRatio")||(n.__progressRatio=r?0:t/e.length),n.__progressRatio+=f,n.__progressRatio>=1){if(r)return n.parent.remove(n),void oe(n);n.__progressRatio=n.__progressRatio%1}var i=n.__progressRatio,o=l(i);["x","y","z"].forEach((function(t){return n.position[t]=o[t]}))}))}}})),this},emitParticle:function(n,t){if(t){if(!t.__singleHopPhotonsObj){var e=new Be.Group;e.__linkThreeObjType="singleHopPhotons",t.__singleHopPhotonsObj=e,n.graphScene.add(e)}var r=Tt(n.linkDirectionalParticleWidth),i=Math.ceil(10*r(t))/10/2,o=n.linkDirectionalParticleResolution,a=new Be.SphereBufferGeometry(i,o,o),u=Tt(n.linkColor),s=Tt(n.linkDirectionalParticleColor)(t)||u(t)||"#f0f0f0",f=new Be.Color(de(s)),l=3*n.linkOpacity,c=new Be.MeshLambertMaterial({color:f,transparent:!0,opacity:l});t.__singleHopPhotonsObj.add(new Be.Mesh(a,c))}return this},getGraphBbox:function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0};if(!n.initialised)return null;var e=function n(e){var r=[];if(e.geometry){e.geometry.computeBoundingBox();var i=new Be.Box3;i.copy(e.geometry.boundingBox).applyMatrix4(e.matrixWorld),r.push(i)}return r.concat.apply(r,v((e.children||[]).filter((function(n){return!n.hasOwnProperty("__graphObjType")||"node"===n.__graphObjType&&t(n.__data)})).map(n)))}(n.graphScene);return e.length?Object.assign.apply(Object,v(["x","y","z"].map((function(n){return o({},n,[Lt(e,(function(t){return t.min[n]})),Ft(e,(function(t){return t.max[n]}))])})))):null}},stateInit:function(){return{d3ForceLayout:An().force("link",Q()).force("charge",jn()).force("center",m()).force("dagRadial",null).stop(),engineRunning:!1}},init:function(n,t){t.graphScene=n},update:function(n,t){var i=function(n){return n.some((function(n){return t.hasOwnProperty(n)}))};if(n.engineRunning=!1,n.onUpdate(),null!==n.nodeAutoColorBy&&i(["nodeAutoColorBy","graphData","nodeColor"])&&ve(n.graphData.nodes,Tt(n.nodeAutoColorBy),n.nodeColor),null!==n.linkAutoColorBy&&i(["linkAutoColorBy","graphData","linkColor"])&&ve(n.graphData.links,Tt(n.linkAutoColorBy),n.linkColor),n._flushObjects||i(["graphData","nodeThreeObject","nodeThreeObjectExtend","nodeVal","nodeColor","nodeVisibility","nodeRelSize","nodeResolution","nodeOpacity"])){var a=Tt(n.nodeThreeObject),u=Tt(n.nodeThreeObjectExtend),s=Tt(n.nodeVal),f=Tt(n.nodeColor),l=Tt(n.nodeVisibility),c={},h={};ue(n.graphData.nodes.filter(l),n.graphScene,{purge:n._flushObjects||i(["nodeThreeObject","nodeThreeObjectExtend"]),objFilter:function(n){return"node"===n.__graphObjType},createObj:function(t){var e,r=a(t),i=u(t);return r&&n.nodeThreeObject===r&&(r=r.clone()),r&&!i?e=r:((e=new Be.Mesh).__graphDefaultObj=!0,r&&i&&e.add(r)),e.__graphObjType="node",e},updateObj:function(t,e){if(t.__graphDefaultObj){var r=s(e)||1,i=Math.cbrt(r)*n.nodeRelSize,o=n.nodeResolution;t.geometry.type.match(/^Sphere(Buffer)?Geometry$/)&&t.geometry.parameters.radius===i&&t.geometry.parameters.widthSegments===o||(c.hasOwnProperty(r)||(c[r]=new Be.SphereBufferGeometry(i,o,o)),t.geometry.dispose(),t.geometry=c[r]);var a=f(e),u=new Be.Color(de(a||"#ffffaa")),l=n.nodeOpacity*pe(a);"MeshLambertMaterial"===t.material.type&&t.material.color.equals(u)&&t.material.opacity===l||(h.hasOwnProperty(a)||(h[a]=new Be.MeshLambertMaterial({color:u,transparent:!0,opacity:l})),t.material.dispose(),t.material=h[a])}}})}if(n._flushObjects||i(["graphData","linkThreeObject","linkThreeObjectExtend","linkMaterial","linkColor","linkWidth","linkVisibility","linkResolution","linkOpacity","linkDirectionalArrowLength","linkDirectionalArrowColor","linkDirectionalArrowResolution","linkDirectionalParticles","linkDirectionalParticleWidth","linkDirectionalParticleColor","linkDirectionalParticleResolution"])){var d=Tt(n.linkThreeObject),p=Tt(n.linkThreeObjectExtend),y=Tt(n.linkMaterial),b=Tt(n.linkVisibility),m=Tt(n.linkColor),_=Tt(n.linkWidth),x={},w={},k={},O=n.graphData.links.filter(b);if(ue(O,n.graphScene,{objBindAttr:"__lineObj",purge:n._flushObjects||i(["linkThreeObject","linkThreeObjectExtend","linkWidth"]),objFilter:function(n){return"link"===n.__graphObjType},createObj:function(t){var e,r,i=d(t),o=p(t);if(i&&n.linkThreeObject===i&&(i=i.clone()),!i||o)if(_(t))e=new Be.Mesh;else{var a=new Be.BufferGeometry;a[Ee]("position",new Be.BufferAttribute(new Float32Array(6),3)),e=new Be.Line(a)}return i?o?((r=new Be.Group).__graphDefaultObj=!0,r.add(e),r.add(i)):r=i:(r=e).__graphDefaultObj=!0,r.renderOrder=10,r.__graphObjType="link",r},updateObj:function(t,e){if(t.__graphDefaultObj){var r=t.children.length?t.children[0]:t,i=Math.ceil(10*_(e))/10,o=!!i;if(o){var a=i/2,u=n.linkResolution;if(!r.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)||r.geometry.parameters.radiusTop!==a||r.geometry.parameters.radialSegments!==u){if(!x.hasOwnProperty(i)){var s=new Be.CylinderBufferGeometry(a,a,1,u,1,!1);s[ze]((new Be.Matrix4).makeTranslation(0,.5,0)),s[ze]((new Be.Matrix4).makeRotationX(Math.PI/2)),x[i]=s}r.geometry.dispose(),r.geometry=x[i]}}var f=y(e);if(f)r.material=f;else{var l=m(e),c=new Be.Color(de(l||"#f0f0f0")),h=n.linkOpacity*pe(l),d=o?"MeshLambertMaterial":"LineBasicMaterial";if(r.material.type!==d||!r.material.color.equals(c)||r.material.opacity!==h){var p=o?w:k;p.hasOwnProperty(l)||(p[l]=new Be[d]({color:c,transparent:h<1,opacity:h,depthWrite:h>=1})),r.material.dispose(),r.material=p[l]}}}}}),n.linkDirectionalArrowLength||t.hasOwnProperty("linkDirectionalArrowLength")){var A=Tt(n.linkDirectionalArrowLength),j=Tt(n.linkDirectionalArrowColor);ue(O.filter(A),n.graphScene,{objBindAttr:"__arrowObj",objFilter:function(n){return"arrow"===n.__linkThreeObjType},createObj:function(){var n=new Be.Mesh(void 0,new Be.MeshLambertMaterial({transparent:!0}));return n.__linkThreeObjType="arrow",n},updateObj:function(t,e){var r=A(e),i=n.linkDirectionalArrowResolution;if(!t.geometry.type.match(/^Cone(Buffer)?Geometry$/)||t.geometry.parameters.height!==r||t.geometry.parameters.radialSegments!==i){var o=new Be.ConeBufferGeometry(.25*r,r,i);o.translate(0,r/2,0),o.rotateX(Math.PI/2),t.geometry.dispose(),t.geometry=o}t.material.color=new Be.Color(j(e)||m(e)||"#f0f0f0"),t.material.opacity=3*n.linkOpacity}})}if(n.linkDirectionalParticles||t.hasOwnProperty("linkDirectionalParticles")){var M=Tt(n.linkDirectionalParticles),S=Tt(n.linkDirectionalParticleWidth),P=Tt(n.linkDirectionalParticleColor),N={},B={};ue(O.filter(M),n.graphScene,{objBindAttr:"__photonsObj",objFilter:function(n){return"photons"===n.__linkThreeObjType},createObj:function(){var n=new Be.Group;return n.__linkThreeObjType="photons",n},updateObj:function(t,e){var r,i=Math.round(Math.abs(M(e))),o=!!t.children.length&&t.children[0],a=Math.ceil(10*S(e))/10/2,u=n.linkDirectionalParticleResolution;o&&o.geometry.parameters.radius===a&&o.geometry.parameters.widthSegments===u?r=o.geometry:(B.hasOwnProperty(a)||(B[a]=new Be.SphereBufferGeometry(a,u,u)),r=B[a],o&&o.geometry.dispose());var s,f=P(e)||m(e)||"#f0f0f0",l=new Be.Color(de(f)),c=3*n.linkOpacity;o&&o.material.color.equals(l)&&o.material.opacity===c?s=o.material:(N.hasOwnProperty(f)||(N[f]=new Be.MeshLambertMaterial({color:l,transparent:!0,opacity:c})),s=N[f],o&&o.material.dispose()),ue(v(new Array(i)).map((function(n,t){return{idx:t}})),t,{idAccessor:function(n){return n.idx},createObj:function(){return new Be.Mesh(r,s)},updateObj:function(n){n.geometry=r,n.material=s}})}})}}if(n._flushObjects=!1,i(["graphData","nodeId","linkSource","linkTarget","numDimensions","forceEngine","dagMode","dagNodeFilter","dagLevelDistance"])){n.engineRunning=!1,n.graphData.links.forEach((function(t){t.source=t[n.linkSource],t.target=t[n.linkTarget]}));var C,E="ngraph"!==n.forceEngine;if(E){(C=n.d3ForceLayout).stop().alpha(1).numDimensions(n.numDimensions).nodes(n.graphData.nodes);var z=n.d3ForceLayout.force("link");z&&z.id((function(t){return t[n.nodeId]})).links(n.graphData.links);var T=n.dagMode&&function(n,t){var e=n.nodes,i=n.links,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},u=a.nodeFilter,s=void 0===u?function(){return!0}:u,f=a.onLoopError,l=void 0===f?function(n){throw"Invalid DAG structure! Found cycle in node path: ".concat(n.join(" -> "),".")}:f,c={};e.forEach((function(n){return c[t(n)]={data:n,out:[],depth:-1,skip:!s(n)}})),i.forEach((function(n){var e=n.source,i=n.target,o=f(e),a=f(i);if(!c.hasOwnProperty(o))throw"Missing source node with id: ".concat(o);if(!c.hasOwnProperty(a))throw"Missing target node with id: ".concat(a);var u=c[o],s=c[a];function f(n){return"object"===r(n)?t(n):n}u.out.push(s)}));var h=[];return d(Object.values(c)),Object.assign.apply(Object,[{}].concat(v(Object.entries(c).filter((function(n){return!g(n,2)[1].skip})).map((function(n){var t=g(n,2);return o({},t[0],t[1].depth)})))));function d(n){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=0,o=n.length;i<o;i++){var a=n[i];-1!==e.indexOf(a)&&"continue"===function(){var n=[].concat(v(e.slice(e.indexOf(a))),[a]).map((function(n){return t(n.data)}));return h.some((function(t){return t.length===n.length&&t.every((function(t,e){return t===n[e]}))}))||(h.push(n),l(n)),"continue"}()||r>a.depth&&(a.depth=r,d(a.out,[].concat(v(e),[a]),r+(a.skip?0:1)))}}}(n.graphData,(function(t){return t[n.nodeId]}),{nodeFilter:n.dagNodeFilter,onLoopError:n.onDagError||void 0}),I=Math.max.apply(Math,v(Object.values(T||[]))),$=n.dagLevelDistance||n.graphData.nodes.length/(I||1)*2*(-1!==["radialin","radialout"].indexOf(n.dagMode)?.7:1);if(n.dagMode){var D=function(t,e){return function(r){return t?(T[r[n.nodeId]]-I/2)*$*(e?-1:1):void 0}},F=D(-1!==["lr","rl"].indexOf(n.dagMode),"rl"===n.dagMode),L=D(-1!==["td","bu"].indexOf(n.dagMode),"td"===n.dagMode),R=D(-1!==["zin","zout"].indexOf(n.dagMode),"zout"===n.dagMode);n.graphData.nodes.filter(n.dagNodeFilter).forEach((function(n){n.fx=F(n),n.fy=L(n),n.fz=R(n)}))}n.d3ForceLayout.force("dagRadial",-1!==["radialin","radialout"].indexOf(n.dagMode)?function(n,t,e,r){var i,o,a,u,s=V(.1);function f(n){for(var s=0,f=i.length;s<f;++s){var l=i[s],c=l.x-t||1e-6,h=(l.y||0)-e||1e-6,d=(l.z||0)-r||1e-6,p=Math.sqrt(c*c+h*h+d*d),g=(u[s]-p)*a[s]*n/p;l.vx+=c*g,o>1&&(l.vy+=h*g),o>2&&(l.vz+=d*g)}}function l(){if(i){var t,e=i.length;for(a=new Array(e),u=new Array(e),t=0;t<e;++t)u[t]=+n(i[t],t,i),a[t]=isNaN(u[t])?0:+s(i[t],t,i)}}return"function"!=typeof n&&(n=V(+n)),null==t&&(t=0),null==e&&(e=0),null==r&&(r=0),f.initialize=function(n,...t){i=n,o=t.find((n=>[1,2,3].includes(n)))||2,l()},f.strength=function(n){return arguments.length?(s="function"==typeof n?n:V(+n),l(),f):s},f.radius=function(t){return arguments.length?(n="function"==typeof t?t:V(+t),l(),f):n},f.x=function(n){return arguments.length?(t=+n,f):t},f.y=function(n){return arguments.length?(e=+n,f):e},f.z=function(n){return arguments.length?(r=+n,f):r},f}((function(t){var e=T[t[n.nodeId]]||-1;return("radialin"===n.dagMode?I-e:e)*$})).strength((function(t){return n.dagNodeFilter(t)?1:0})):null)}else{var q=Ce.graph();n.graphData.nodes.forEach((function(t){q.addNode(t[n.nodeId])})),n.graphData.links.forEach((function(n){q.addLink(n.source,n.target)})),(C=Ce.forcelayout(q,e({dimensions:n.numDimensions},n.ngraphPhysics))).graph=q}for(var U=0;U<n.warmupTicks&&!(E&&n.d3AlphaMin>0&&n.d3ForceLayout.alpha()<n.d3AlphaMin);U++)C[E?"tick":"step"]();n.layout=C,this.resetCountdown()}n.engineRunning=!0,n.onFinishUpdate()}}).stateInit,me=void 0===be?function(){return{}}:be,_e=ye.props,xe=void 0===_e?{}:_e,we=ye.methods,ke=void 0===we?{}:we,Oe=ye.aliases,Ae=void 0===Oe?{}:Oe,je=ye.init,Me=void 0===je?function(){}:je,Se=ye.update,Pe=void 0===Se?function(){}:Se,Ne=Object.keys(xe).map((function(n){return new zt(n,xe[n])})),function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},me instanceof Function?me(n):me,{initialised:!1}),e={};function r(t){return i(t,n),o(),r}var i=function(n,e){Me.call(r,n,t,e),t.initialised=!0},o=Bt((function(){t.initialised&&(Pe.call(r,t,e),e={})}),1);return Ne.forEach((function(n){r[n.name]=function(n){var i=n.name,a=n.triggerUpdate,u=void 0!==a&&a,s=n.onChange,f=void 0===s?function(n,t){}:s,l=n.defaultVal,c=void 0===l?null:l;return function(n){var a=t[i];if(!arguments.length)return a;var s=void 0===n?c:n;return t[i]=s,f.call(r,s,t,a),!e.hasOwnProperty(i)&&(e[i]=a),u&&o(),r}}(n)})),Object.keys(ke).forEach((function(n){r[n]=function(){for(var e,i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];return(e=ke[n]).call.apply(e,[r,t].concat(o))}})),Object.entries(Ae).forEach((function(n){var t=Ct(n,2),e=t[0],i=t[1];return r[e]=r[i]})),r.resetProps=function(){return Ne.forEach((function(n){r[n.name](n.defaultVal)})),r},r.resetProps(),t._rerender=o,r}),(window.THREE?window.THREE:{Group:n.Group}).Group,!0)}));