UNPKG

tsparticles

Version:

Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.

2 lines 151 kB
/*! tsParticles v1.26.1 by Matteo Bruni */ !function(t,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i();else if("function"==typeof define&&define.amd)define([],i);else{var e=i();for(var o in e)("object"==typeof exports?exports:t)[o]=e[o]}}(this,(function(){return(()=>{"use strict";var t={d:(i,e)=>{for(var o in e)t.o(e,o)&&!t.o(i,o)&&Object.defineProperty(i,o,{enumerable:!0,get:e[o]})},o:(t,i)=>Object.prototype.hasOwnProperty.call(t,i),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},i={};t.r(i),t.d(i,{AbsorberClickMode:()=>le,AnimationStatus:()=>m,CanvasUtils:()=>O,ClickMode:()=>l,CollisionMode:()=>u,ColorUtils:()=>T,Constants:()=>C,Container:()=>ee,DestroyMode:()=>c,DestroyType:()=>f,DivMode:()=>d,DivType:()=>x,EmitterClickMode:()=>Me,HoverMode:()=>h,InlineArrangement:()=>Ce,InteractivityDetect:()=>k,Main:()=>We,MoveDirection:()=>s,MoveType:()=>ze,OutMode:()=>v,ProcessBubbleType:()=>g,RotateDirection:()=>n,ShapeType:()=>b,SizeMode:()=>p,StartValueType:()=>w,ThemeMode:()=>y,Type:()=>Ae,Utils:()=>S,Vector:()=>a,pJSDom:()=>$e,particlesJS:()=>Ne,tsParticles:()=>Ge});class e{getSidesCount(){return 4}draw(t,i,e){t.rect(-e,-e,2*e,2*e)}}var o,s,n;!function(t){t.bottom="bottom",t.left="left",t.right="right",t.top="top"}(o||(o={})),function(t){t.bottom="bottom",t.bottomLeft="bottom-left",t.bottomRight="bottom-right",t.left="left",t.none="none",t.right="right",t.top="top",t.topLeft="top-left",t.topRight="top-right"}(s||(s={})),function(t){t.clockwise="clockwise",t.counterClockwise="counter-clockwise",t.random="random"}(n||(n={}));class a{constructor(t,i){let e,o;if(void 0===i){if("number"==typeof t)throw new Error("tsParticles - Vector not initialized correctly");const i=t;[e,o]=[i.x,i.y]}else[e,o]=[t,i];this.x=e,this.y=o}static clone(t){return a.create(t.x,t.y)}static create(t,i){return new a(t,i)}get angle(){return Math.atan2(this.y,this.x)}set angle(t){this.updateFromAngle(t,this.length)}get length(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}set length(t){this.updateFromAngle(this.angle,t)}add(t){return a.create(this.x+t.x,this.y+t.y)}addTo(t){this.x+=t.x,this.y+=t.y}sub(t){return a.create(this.x-t.x,this.y-t.y)}subFrom(t){this.x-=t.x,this.y-=t.y}mult(t){return a.create(this.x*t,this.y*t)}multTo(t){this.x*=t,this.y*=t}div(t){return a.create(this.x/t,this.y/t)}divTo(t){this.x/=t,this.y/=t}distanceTo(t){return this.sub(t).length}getLengthSq(){return Math.pow(this.x,2)+Math.pow(this.y,2)}distanceToSq(t){return this.sub(t).getLengthSq()}manhattanDistanceTo(t){return Math.abs(t.x-this.x)+Math.abs(t.y-this.y)}copy(){return a.clone(this)}setTo(t){this.x=t.x,this.y=t.y}rotate(t){return a.create(this.x*Math.cos(t)-this.y*Math.sin(t),this.x*Math.sin(t)+this.y*Math.cos(t))}updateFromAngle(t,i){this.x=Math.cos(t)*i,this.y=Math.sin(t)*i}}a.origin=a.create(0,0);class r{static clamp(t,i,e){return Math.min(Math.max(t,i),e)}static mix(t,i,e,o){return Math.floor((t*e+i*o)/(e+o))}static randomInRange(t){const i=r.getRangeMax(t);let e=r.getRangeMin(t);return i===e&&(e=0),Math.random()*(i-e)+e}static getRangeValue(t){return"number"==typeof t?t:r.randomInRange(t)}static getRangeMin(t){return"number"==typeof t?t:t.min}static getRangeMax(t){return"number"==typeof t?t:t.max}static setRangeValue(t,i){if(t===i||void 0===i&&"number"==typeof t)return t;const e=r.getRangeMin(t),o=r.getRangeMax(t);return void 0!==i?{min:Math.min(e,i),max:Math.max(o,i)}:r.setRangeValue(e,o)}static getValue(t){const i=t.random,{enable:e,minimumValue:o}="boolean"==typeof i?{enable:i,minimumValue:0}:i;return e?r.getRangeValue(r.setRangeValue(t.value,o)):r.getRangeValue(t.value)}static getDistances(t,i){const e=t.x-i.x,o=t.y-i.y;return{dx:e,dy:o,distance:Math.sqrt(e*e+o*o)}}static getDistance(t,i){return r.getDistances(t,i).distance}static getParticleBaseVelocity(t){const i=a.origin;switch(i.length=1,t){case s.top:i.angle=-Math.PI/2;break;case s.topRight:i.angle=-Math.PI/4;break;case s.right:i.angle=0;break;case s.bottomRight:i.angle=Math.PI/4;break;case s.bottom:i.angle=Math.PI/2;break;case s.bottomLeft:i.angle=3*Math.PI/4;break;case s.left:i.angle=Math.PI;break;case s.topLeft:i.angle=-3*Math.PI/4;break;case s.none:default:i.angle=Math.random()*Math.PI*2}return i}static rotateVelocity(t,i){return{horizontal:t.horizontal*Math.cos(i)-t.vertical*Math.sin(i),vertical:t.horizontal*Math.sin(i)+t.vertical*Math.cos(i)}}static collisionVelocity(t,i,e,o){return a.create(t.x*(e-o)/(e+o)+2*i.x*o/(e+o),t.y)}}var l,c,d,h,u,v,p,y,m,f,g,b,w,x,k,P=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};function M(t,i,e,o,s,n){const a={bounced:!1};return i.min>=o.min&&i.min<=o.max&&i.max>=o.min&&i.max<=o.max&&(t.max>=e.min&&t.max<=(e.max+e.min)/2&&s>0||t.min<=e.max&&t.min>(e.max+e.min)/2&&s<0)&&(a.velocity=s*-n,a.bounced=!0),a}function R(t,i){if(i instanceof Array){for(const e of i)if(t.matches(e))return!0;return!1}return t.matches(i)}class S{static isSsr(){return"undefined"==typeof window||!window}static get animate(){return S.isSsr()?t=>setTimeout(t):t=>(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||window.setTimeout)(t)}static get cancelAnimation(){return S.isSsr()?t=>clearTimeout(t):t=>(window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelRequestAnimationFrame||window.oCancelRequestAnimationFrame||window.msCancelRequestAnimationFrame||window.clearTimeout)(t)}static isInArray(t,i){return t===i||i instanceof Array&&i.indexOf(t)>-1}static loadFont(t){return P(this,void 0,void 0,(function*(){try{yield document.fonts.load(`${t.weight} 36px '${t.font}'`)}catch(t){}}))}static arrayRandomIndex(t){return Math.floor(Math.random()*t.length)}static itemFromArray(t,i,e=!0){return t[void 0!==i&&e?i%t.length:S.arrayRandomIndex(t)]}static isPointInside(t,i,e,o){return S.areBoundsInside(S.calculateBounds(t,null!=e?e:0),i,o)}static areBoundsInside(t,i,e){let s=!0;return e&&e!==o.bottom||(s=t.top<i.height),!s||e&&e!==o.left||(s=t.right>0),!s||e&&e!==o.right||(s=t.left<i.width),!s||e&&e!==o.top||(s=t.bottom>0),s}static calculateBounds(t,i){return{bottom:t.y+i,left:t.x-i,right:t.x+i,top:t.y-i}}static loadImage(t){return new Promise(((i,e)=>{if(!t)return void e("Error tsParticles - No image.src");const o={source:t,type:t.substr(t.length-3)},s=new Image;s.addEventListener("load",(()=>{o.element=s,i(o)})),s.addEventListener("error",(()=>{e(`Error tsParticles - loading image: ${t}`)})),s.src=t}))}static downloadSvgImage(t){return P(this,void 0,void 0,(function*(){if(!t)throw new Error("Error tsParticles - No image.src");const i={source:t,type:t.substr(t.length-3)};if("svg"!==i.type)return S.loadImage(t);const e=yield fetch(i.source);if(!e.ok)throw new Error("Error tsParticles - Image not found");return i.svgData=yield e.text(),i}))}static deepExtend(t,...i){for(const e of i){if(null==e)continue;if("object"!=typeof e){t=e;continue}const i=Array.isArray(e);!i||"object"==typeof t&&t&&Array.isArray(t)?i||"object"==typeof t&&t&&!Array.isArray(t)||(t={}):t=[];for(const i in e){if("__proto__"===i)continue;const o=e[i],s="object"==typeof o,n=t;n[i]=s&&Array.isArray(o)?o.map((t=>S.deepExtend(n[i],t))):S.deepExtend(n[i],o)}}return t}static isDivModeEnabled(t,i){return i instanceof Array?!!i.find((i=>i.enable&&S.isInArray(t,i.mode))):S.isInArray(t,i.mode)}static divModeExecute(t,i,e){if(i instanceof Array)for(const o of i){const i=o.mode;o.enable&&S.isInArray(t,i)&&S.singleDivModeExecute(o,e)}else{const o=i.mode;i.enable&&S.isInArray(t,o)&&S.singleDivModeExecute(i,e)}}static singleDivModeExecute(t,i){const e=t.selectors;if(e instanceof Array)for(const o of e)i(o,t);else i(e,t)}static divMode(t,i){if(i&&t)return t instanceof Array?t.find((t=>R(i,t.selectors))):R(i,t.selectors)?t:void 0}static circleBounceDataFromParticle(t){return{position:t.getPosition(),radius:t.getRadius(),mass:t.getMass(),velocity:t.velocity,factor:{horizontal:r.getValue(t.options.bounce.horizontal),vertical:r.getValue(t.options.bounce.vertical)}}}static circleBounce(t,i){const e=t.velocity.x,o=t.velocity.y,s=t.position,n=i.position;if(e*(n.x-s.x)+o*(n.y-s.y)>=0){const e=-Math.atan2(n.y-s.y,n.x-s.x),o=t.mass,a=i.mass,l=t.velocity.rotate(e),c=i.velocity.rotate(e),d=r.collisionVelocity(l,c,o,a),h=r.collisionVelocity(c,l,o,a),u=d.rotate(-e),v=h.rotate(-e);t.velocity.x=u.x*t.factor.horizontal,t.velocity.y=u.y*t.factor.vertical,i.velocity.x=v.x*i.factor.horizontal,i.velocity.y=v.y*i.factor.vertical}}static rectBounce(t,i){const e=t.getPosition(),o=t.getRadius(),s=S.calculateBounds(e,o),n=M({min:s.left,max:s.right},{min:s.top,max:s.bottom},{min:i.left,max:i.right},{min:i.top,max:i.bottom},t.velocity.x,r.getValue(t.options.bounce.horizontal));n.bounced&&(void 0!==n.velocity&&(t.velocity.x=n.velocity),void 0!==n.position&&(t.position.x=n.position));const a=M({min:s.top,max:s.bottom},{min:s.left,max:s.right},{min:i.top,max:i.bottom},{min:i.left,max:i.right},t.velocity.y,r.getValue(t.options.bounce.vertical));a.bounced&&(void 0!==a.velocity&&(t.velocity.y=a.velocity),void 0!==a.position&&(t.position.y=a.position))}}class C{}function z(t,i,e){let o=e;return o<0&&(o+=1),o>1&&(o-=1),o<1/6?t+6*(i-t)*o:o<.5?i:o<2/3?t+(i-t)*(2/3-o)*6:t}function A(t){if(t.startsWith("rgb")){const i=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.]+)\s*)?\)/i.exec(t);return i?{a:i.length>4?parseFloat(i[5]):1,b:parseInt(i[3],10),g:parseInt(i[2],10),r:parseInt(i[1],10)}:void 0}if(t.startsWith("hsl")){const i=/hsla?\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i.exec(t);return i?T.hslaToRgba({a:i.length>4?parseFloat(i[5]):1,h:parseInt(i[1],10),l:parseInt(i[3],10),s:parseInt(i[2],10)}):void 0}if(t.startsWith("hsv")){const i=/hsva?\(\s*(\d+)°\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i.exec(t);return i?T.hsvaToRgba({a:i.length>4?parseFloat(i[5]):1,h:parseInt(i[1],10),s:parseInt(i[2],10),v:parseInt(i[3],10)}):void 0}{const i=/^#?([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i,e=t.replace(i,((t,i,e,o,s)=>i+i+e+e+o+o+(void 0!==s?s+s:""))),o=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i.exec(e);return o?{a:void 0!==o[4]?parseInt(o[4],16)/255:1,b:parseInt(o[3],16),g:parseInt(o[2],16),r:parseInt(o[1],16)}:void 0}}C.canvasClass="tsparticles-canvas-el",C.randomColorValue="random",C.midColorValue="mid",C.touchEndEvent="touchend",C.mouseDownEvent="mousedown",C.mouseUpEvent="mouseup",C.mouseMoveEvent="mousemove",C.touchStartEvent="touchstart",C.touchMoveEvent="touchmove",C.mouseLeaveEvent="mouseleave",C.mouseOutEvent="mouseout",C.touchCancelEvent="touchcancel",C.resizeEvent="resize",C.visibilityChangeEvent="visibilitychange",C.noPolygonDataLoaded="No polygon data loaded.",C.noPolygonFound="No polygon found, you need to specify SVG url in config.";class T{static colorToRgb(t,i,e=!0){var o,s,n;if(void 0===t)return;const a="string"==typeof t?{value:t}:t;let r;if("string"==typeof a.value)r=a.value===C.randomColorValue?T.getRandomRgbColor():T.stringToRgb(a.value);else if(a.value instanceof Array){const t=S.itemFromArray(a.value,i,e);r=T.colorToRgb({value:t})}else{const t=a.value,i=null!==(o=t.rgb)&&void 0!==o?o:a.value;if(void 0!==i.r)r=i;else{const i=null!==(s=t.hsl)&&void 0!==s?s:a.value;if(void 0!==i.h&&void 0!==i.l)r=T.hslToRgb(i);else{const i=null!==(n=t.hsv)&&void 0!==n?n:a.value;void 0!==i.h&&void 0!==i.v&&(r=T.hsvToRgb(i))}}}return r}static colorToHsl(t,i,e=!0){const o=T.colorToRgb(t,i,e);return void 0!==o?T.rgbToHsl(o):void 0}static rgbToHsl(t){const i=t.r/255,e=t.g/255,o=t.b/255,s=Math.max(i,e,o),n=Math.min(i,e,o),a={h:0,l:(s+n)/2,s:0};return s!=n&&(a.s=a.l<.5?(s-n)/(s+n):(s-n)/(2-s-n),a.h=i===s?(e-o)/(s-n):a.h=e===s?2+(o-i)/(s-n):4+(i-e)/(s-n)),a.l*=100,a.s*=100,a.h*=60,a.h<0&&(a.h+=360),a}static stringToAlpha(t){var i;return null===(i=A(t))||void 0===i?void 0:i.a}static stringToRgb(t){return A(t)}static hslToRgb(t){const i={b:0,g:0,r:0},e={h:t.h/360,l:t.l/100,s:t.s/100};if(0===e.s)i.b=e.l,i.g=e.l,i.r=e.l;else{const t=e.l<.5?e.l*(1+e.s):e.l+e.s-e.l*e.s,o=2*e.l-t;i.r=z(o,t,e.h+1/3),i.g=z(o,t,e.h),i.b=z(o,t,e.h-1/3)}return i.r=Math.floor(255*i.r),i.g=Math.floor(255*i.g),i.b=Math.floor(255*i.b),i}static hslaToRgba(t){const i=T.hslToRgb(t);return{a:t.a,b:i.b,g:i.g,r:i.r}}static hslToHsv(t){const i=t.l/100,e=i+t.s/100*Math.min(i,1-i),o=e?2*(1-i/e):0;return{h:t.h,s:100*o,v:100*e}}static hslaToHsva(t){const i=T.hslToHsv(t);return{a:t.a,h:i.h,s:i.s,v:i.v}}static hsvToHsl(t){const i=t.v/100,e=i*(1-t.s/100/2),o=0===e||1===e?0:(i-e)/Math.min(e,1-e);return{h:t.h,l:100*e,s:100*o}}static hsvaToHsla(t){const i=T.hsvToHsl(t);return{a:t.a,h:i.h,l:i.l,s:i.s}}static hsvToRgb(t){const i={b:0,g:0,r:0},e=t.h/60,o=t.s/100,s=t.v/100,n=s*o,a=n*(1-Math.abs(e%2-1));let r;if(e>=0&&e<=1?r={r:n,g:a,b:0}:e>1&&e<=2?r={r:a,g:n,b:0}:e>2&&e<=3?r={r:0,g:n,b:a}:e>3&&e<=4?r={r:0,g:a,b:n}:e>4&&e<=5?r={r:a,g:0,b:n}:e>5&&e<=6&&(r={r:n,g:0,b:a}),r){const t=s-n;i.r=Math.floor(255*(r.r+t)),i.g=Math.floor(255*(r.g+t)),i.b=Math.floor(255*(r.b+t))}return i}static hsvaToRgba(t){const i=T.hsvToRgb(t);return{a:t.a,b:i.b,g:i.g,r:i.r}}static rgbToHsv(t){const i={r:t.r/255,g:t.g/255,b:t.b/255},e=Math.max(i.r,i.g,i.b),o=e-Math.min(i.r,i.g,i.b);let s=0;e===i.r?s=(i.g-i.b)/o*60:e===i.g?s=60*(2+(i.b-i.r)/o):e===i.b&&(s=60*(4+(i.r-i.g)/o));return{h:s,s:100*(e?o/e:0),v:100*e}}static rgbaToHsva(t){const i=T.rgbToHsv(t);return{a:t.a,h:i.h,s:i.s,v:i.v}}static getRandomRgbColor(t){const i=null!=t?t:0;return{b:Math.floor(r.randomInRange(r.setRangeValue(i,256))),g:Math.floor(r.randomInRange(r.setRangeValue(i,256))),r:Math.floor(r.randomInRange(r.setRangeValue(i,256)))}}static getStyleFromRgb(t,i){return`rgba(${t.r}, ${t.g}, ${t.b}, ${null!=i?i:1})`}static getStyleFromHsl(t,i){return`hsla(${t.h}, ${t.s}%, ${t.l}%, ${null!=i?i:1})`}static getStyleFromHsv(t,i){return T.getStyleFromHsl(T.hsvToHsl(t),i)}static mix(t,i,e,o){let s=t,n=i;return void 0===s.r&&(s=T.hslToRgb(t)),void 0===n.r&&(n=T.hslToRgb(i)),{b:r.mix(s.b,n.b,e,o),g:r.mix(s.g,n.g,e,o),r:r.mix(s.r,n.r,e,o)}}static replaceColorSvg(t,i,e){if(!t.svgData)return"";return t.svgData.replace(/#([0-9A-F]{3,6})/gi,(()=>T.getStyleFromHsl(i,e)))}static getLinkColor(t,i,e){var o,s;if(e===C.randomColorValue)return T.getRandomRgbColor();if("mid"!==e)return e;{const e=null!==(o=t.getFillColor())&&void 0!==o?o:t.getStrokeColor(),n=null!==(s=null==i?void 0:i.getFillColor())&&void 0!==s?s:null==i?void 0:i.getStrokeColor();if(e&&n&&i)return T.mix(e,n,t.getRadius(),i.getRadius());{const t=null!=e?e:n;if(t)return T.hslToRgb(t)}}}static getLinkRandomColor(t,i,e){const o="string"==typeof t?t:t.value;return o===C.randomColorValue?e?T.colorToRgb({value:o}):i?C.randomColorValue:C.midColorValue:T.colorToRgb({value:o})}static getHslFromAnimation(t){return void 0!==t?{h:t.h.value,s:t.s.value,l:t.l.value}:void 0}}function D(t,i,e){t.beginPath(),t.moveTo(i.x,i.y),t.lineTo(e.x,e.y),t.closePath()}class O{static paintBase(t,i,e){t.save(),t.fillStyle=null!=e?e:"rgba(0,0,0,0)",t.fillRect(0,0,i.width,i.height),t.restore()}static clear(t,i){t.clearRect(0,0,i.width,i.height)}static drawLinkLine(t,i,e,o,s,n,a,l,c,d,h,u){let v=!1;if(r.getDistance(e,o)<=s)D(t,e,o),v=!0;else if(a){let i,a;const l={x:o.x-n.width,y:o.y},c=r.getDistances(e,l);if(c.distance<=s){const t=e.y-c.dy/c.dx*e.x;i={x:0,y:t},a={x:n.width,y:t}}else{const t={x:o.x,y:o.y-n.height},l=r.getDistances(e,t);if(l.distance<=s){const t=-(e.y-l.dy/l.dx*e.x)/(l.dy/l.dx);i={x:t,y:0},a={x:t,y:n.height}}else{const t={x:o.x-n.width,y:o.y-n.height},l=r.getDistances(e,t);if(l.distance<=s){const t=e.y-l.dy/l.dx*e.x;i={x:-t/(l.dy/l.dx),y:t},a={x:i.x+n.width,y:i.y+n.height}}}}i&&a&&(D(t,e,i),D(t,o,a),v=!0)}if(v){if(t.lineWidth=i,l&&(t.globalCompositeOperation=c),t.strokeStyle=T.getStyleFromRgb(d,h),u.enable){const i=T.colorToRgb(u.color);i&&(t.shadowBlur=u.blur,t.shadowColor=T.getStyleFromRgb(i))}t.stroke()}}static drawLinkTriangle(t,i,e,o,s,n,a,r){!function(t,i,e,o){t.beginPath(),t.moveTo(i.x,i.y),t.lineTo(e.x,e.y),t.lineTo(o.x,o.y),t.closePath()}(t,i,e,o),s&&(t.globalCompositeOperation=n),t.fillStyle=T.getStyleFromRgb(a,r),t.fill()}static drawConnectLine(t,i,e,o,s){t.save(),D(t,o,s),t.lineWidth=i,t.strokeStyle=e,t.stroke(),t.restore()}static gradient(t,i,e,o){const s=Math.floor(e.getRadius()/i.getRadius()),n=i.getFillColor(),a=e.getFillColor();if(!n||!a)return;const r=i.getPosition(),l=e.getPosition(),c=T.mix(n,a,i.getRadius(),e.getRadius()),d=t.createLinearGradient(r.x,r.y,l.x,l.y);return d.addColorStop(0,T.getStyleFromHsl(n,o)),d.addColorStop(s>1?1:s,T.getStyleFromRgb(c,o)),d.addColorStop(1,T.getStyleFromHsl(a,o)),d}static drawGrabLine(t,i,e,o,s,n){t.save(),D(t,e,o),t.strokeStyle=T.getStyleFromRgb(s,n),t.lineWidth=i,t.stroke(),t.restore()}static drawLight(t,i,e){const o=t.actualOptions.interactivity.modes.light.area;i.beginPath(),i.arc(e.x,e.y,o.radius,0,2*Math.PI);const s=i.createRadialGradient(e.x,e.y,0,e.x,e.y,o.radius),n=o.gradient,a={start:T.colorToRgb(n.start),stop:T.colorToRgb(n.stop)};a.start&&a.stop&&(s.addColorStop(0,T.getStyleFromRgb(a.start)),s.addColorStop(1,T.getStyleFromRgb(a.stop)),i.fillStyle=s,i.fill())}static drawParticleShadow(t,i,e,o){const s=e.getPosition(),n=t.actualOptions.interactivity.modes.light.shadow;i.save();const a=e.getRadius(),r=e.sides,l=2*Math.PI/r,c=-e.rotate.value+Math.PI/4,d=[];for(let t=0;t<r;t++)d.push({x:s.x+a*Math.sin(c+l*t)*1,y:s.y+a*Math.cos(c+l*t)*1});const h=[],u=n.length;for(const t of d){const i=Math.atan2(o.y-t.y,o.x-t.x),e=t.x+u*Math.sin(-i-Math.PI/2),s=t.y+u*Math.cos(-i-Math.PI/2);h.push({endX:e,endY:s,startX:t.x,startY:t.y})}const v=T.colorToRgb(n.color);if(!v)return;const p=T.getStyleFromRgb(v);for(let t=h.length-1;t>=0;t--){const e=t==h.length-1?0:t+1;i.beginPath(),i.moveTo(h[t].startX,h[t].startY),i.lineTo(h[e].startX,h[e].startY),i.lineTo(h[e].endX,h[e].endY),i.lineTo(h[t].endX,h[t].endY),i.fillStyle=p,i.fill()}i.restore()}static drawParticle(t,i,e,o,s,n,a,r,l,c,d){const h=e.getPosition();i.save(),i.translate(h.x,h.y),i.beginPath();const u=e.rotate.value+(e.options.rotate.path?e.velocity.angle:0);0!==u&&i.rotate(u),a&&(i.globalCompositeOperation=r);const v=e.shadowColor;d.enable&&v&&(i.shadowBlur=d.blur,i.shadowColor=T.getStyleFromRgb(v),i.shadowOffsetX=d.offset.x,i.shadowOffsetY=d.offset.y),s&&(i.fillStyle=s);const p=e.stroke;i.lineWidth=e.strokeWidth,n&&(i.strokeStyle=n),O.drawShape(t,i,e,l,c,o),p.width>0&&i.stroke(),e.close&&i.closePath(),e.fill&&i.fill(),i.restore(),i.save(),i.translate(h.x,h.y),0!==u&&i.rotate(u),a&&(i.globalCompositeOperation=r),O.drawShapeAfterEffect(t,i,e,l,c,o),i.restore()}static drawShape(t,i,e,o,s,n){if(!e.shape)return;const a=t.drawers.get(e.shape);a&&a.draw(i,e,o,s,n,t.retina.pixelRatio)}static drawShapeAfterEffect(t,i,e,o,s,n){if(!e.shape)return;const a=t.drawers.get(e.shape);(null==a?void 0:a.afterEffect)&&a.afterEffect(i,e,o,s,n,t.retina.pixelRatio)}static drawPlugin(t,i,e){void 0!==i.draw&&(t.save(),i.draw(t,e),t.restore())}}class E{constructor(t,i){this.position={x:t,y:i}}}class I extends E{constructor(t,i,e){super(t,i),this.radius=e}contains(t){return Math.pow(t.x-this.position.x,2)+Math.pow(t.y-this.position.y,2)<=this.radius*this.radius}intersects(t){const i=t,e=t,o=this.position,s=t.position,n=Math.abs(s.x-o.x),a=Math.abs(s.y-o.y),r=this.radius;if(void 0!==e.radius){return r+e.radius>Math.sqrt(n*n+a+a)}if(void 0!==i.size){const t=i.size.width,e=i.size.height,o=Math.pow(n-t,2)+Math.pow(a-e,2);return!(n>r+t||a>r+e)&&(n<=t||a<=e||o<=r*r)}return!1}}class F extends E{constructor(t,i,e,o){super(t,i),this.size={height:o,width:e}}contains(t){const i=this.size.width,e=this.size.height,o=this.position;return t.x>=o.x&&t.x<=o.x+i&&t.y>=o.y&&t.y<=o.y+e}intersects(t){const i=t,e=t,o=this.size.width,s=this.size.height,n=this.position,a=t.position;if(void 0!==e.radius)return e.intersects(this);if(void 0!==i.size){const t=i.size,e=t.width,r=t.height;return a.x<n.x+o&&a.x+e>n.x&&a.y<n.y+s&&a.y+r>n.y}return!1}}class V extends I{constructor(t,i,e,o){super(t,i,e),this.canvasSize=o,this.canvasSize={height:o.height,width:o.width}}contains(t){if(super.contains(t))return!0;const i={x:t.x-this.canvasSize.width,y:t.y};if(super.contains(i))return!0;const e={x:t.x-this.canvasSize.width,y:t.y-this.canvasSize.height};if(super.contains(e))return!0;const o={x:t.x,y:t.y-this.canvasSize.height};return super.contains(o)}intersects(t){if(super.intersects(t))return!0;const i=t,e=t,o={x:t.position.x-this.canvasSize.width,y:t.position.y-this.canvasSize.height};if(void 0!==e.radius){const t=new I(o.x,o.y,2*e.radius);return super.intersects(t)}if(void 0!==i.size){const t=new F(o.x,o.y,2*i.size.width,2*i.size.height);return super.intersects(t)}return!1}}function L(t,i,e,o,s){if(o){let o={passive:!0};"boolean"==typeof s?o.capture=s:void 0!==s&&(o=s),t.addEventListener(i,e,o)}else{const o=s;t.removeEventListener(i,e,o)}}!function(t){t.attract="attract",t.bubble="bubble",t.push="push",t.remove="remove",t.repulse="repulse",t.pause="pause",t.trail="trail"}(l||(l={})),function(t){t.none="none",t.split="split"}(c||(c={})),function(t){t.bounce="bounce",t.bubble="bubble",t.repulse="repulse"}(d||(d={})),function(t){t.attract="attract",t.bounce="bounce",t.bubble="bubble",t.connect="connect",t.grab="grab",t.light="light",t.repulse="repulse",t.slow="slow",t.trail="trail"}(h||(h={})),function(t){t.absorb="absorb",t.bounce="bounce",t.destroy="destroy"}(u||(u={})),function(t){t.bounce="bounce",t.bounceHorizontal="bounce-horizontal",t.bounceVertical="bounce-vertical",t.none="none",t.out="out",t.destroy="destroy",t.split="split"}(v||(v={})),function(t){t.precise="precise",t.percent="percent"}(p||(p={})),function(t){t.any="any",t.dark="dark",t.light="light"}(y||(y={})),function(t){t[t.increasing=0]="increasing",t[t.decreasing=1]="decreasing"}(m||(m={})),function(t){t.none="none",t.max="max",t.min="min"}(f||(f={})),function(t){t.color="color",t.opacity="opacity",t.size="size"}(g||(g={})),function(t){t.char="char",t.character="character",t.circle="circle",t.edge="edge",t.image="image",t.images="images",t.line="line",t.polygon="polygon",t.square="square",t.star="star",t.triangle="triangle"}(b||(b={})),function(t){t.max="max",t.min="min",t.random="random"}(w||(w={})),function(t){t.circle="circle",t.rectangle="rectangle"}(x||(x={})),function(t){t.canvas="canvas",t.parent="parent",t.window="window"}(k||(k={}));class H{constructor(t){this.container=t,this.canPush=!0,this.mouseMoveHandler=t=>this.mouseTouchMove(t),this.touchStartHandler=t=>this.mouseTouchMove(t),this.touchMoveHandler=t=>this.mouseTouchMove(t),this.touchEndHandler=()=>this.mouseTouchFinish(),this.mouseLeaveHandler=()=>this.mouseTouchFinish(),this.touchCancelHandler=()=>this.mouseTouchFinish(),this.touchEndClickHandler=t=>this.mouseTouchClick(t),this.mouseUpHandler=t=>this.mouseTouchClick(t),this.mouseDownHandler=()=>this.mouseDown(),this.visibilityChangeHandler=()=>this.handleVisibilityChange(),this.resizeHandler=()=>this.handleWindowResize()}addListeners(){this.manageListeners(!0)}removeListeners(){this.manageListeners(!1)}manageListeners(t){var i;const e=this.container,o=e.actualOptions,s=o.interactivity.detectsOn;let n=C.mouseLeaveEvent;if(s===k.window)e.interactivity.element=window,n=C.mouseOutEvent;else if(s===k.parent&&e.canvas.element){const t=e.canvas.element;e.interactivity.element=null!==(i=t.parentElement)&&void 0!==i?i:t.parentNode}else e.interactivity.element=e.canvas.element;const a=e.interactivity.element;if(!a)return;const r=a;(o.interactivity.events.onHover.enable||o.interactivity.events.onClick.enable)&&(L(a,C.mouseMoveEvent,this.mouseMoveHandler,t),L(a,C.touchStartEvent,this.touchStartHandler,t),L(a,C.touchMoveEvent,this.touchMoveHandler,t),o.interactivity.events.onClick.enable?(L(a,C.touchEndEvent,this.touchEndClickHandler,t),L(a,C.mouseUpEvent,this.mouseUpHandler,t),L(a,C.mouseDownEvent,this.mouseDownHandler,t)):L(a,C.touchEndEvent,this.touchEndHandler,t),L(a,n,this.mouseLeaveHandler,t),L(a,C.touchCancelEvent,this.touchCancelHandler,t)),e.canvas.element&&(e.canvas.element.style.pointerEvents=r===e.canvas.element?"initial":"none"),o.interactivity.events.resize&&L(window,C.resizeEvent,this.resizeHandler,t),document&&L(document,C.visibilityChangeEvent,this.visibilityChangeHandler,t,!1)}handleWindowResize(){var t;null===(t=this.container.canvas)||void 0===t||t.windowResize()}handleVisibilityChange(){const t=this.container,i=t.actualOptions;this.mouseTouchFinish(),i.pauseOnBlur&&((null===document||void 0===document?void 0:document.hidden)?(t.pageHidden=!0,t.pause()):(t.pageHidden=!1,t.getAnimationStatus()?t.play(!0):t.draw()))}mouseDown(){const t=this.container.interactivity;if(t){const i=t.mouse;i.clicking=!0,i.downPosition=i.position}}mouseTouchMove(t){var i,e,o,s,n,a,r;const l=this.container,c=l.actualOptions;if(void 0===(null===(i=l.interactivity)||void 0===i?void 0:i.element))return;let d;l.interactivity.mouse.inside=!0;const h=l.canvas.element;if(t.type.startsWith("mouse")){this.canPush=!0;const i=t;if(l.interactivity.element===window){if(h){const t=h.getBoundingClientRect();d={x:i.clientX-t.left,y:i.clientY-t.top}}}else if(c.interactivity.detectsOn===k.parent){const t=i.target,s=i.currentTarget,n=l.canvas.element;if(t&&s&&n){const e=t.getBoundingClientRect(),o=s.getBoundingClientRect(),a=n.getBoundingClientRect();d={x:i.offsetX+2*e.left-(o.left+a.left),y:i.offsetY+2*e.top-(o.top+a.top)}}else d={x:null!==(e=i.offsetX)&&void 0!==e?e:i.clientX,y:null!==(o=i.offsetY)&&void 0!==o?o:i.clientY}}else i.target===l.canvas.element&&(d={x:null!==(s=i.offsetX)&&void 0!==s?s:i.clientX,y:null!==(n=i.offsetY)&&void 0!==n?n:i.clientY})}else{this.canPush="touchmove"!==t.type;const i=t,e=i.touches[i.touches.length-1],o=null==h?void 0:h.getBoundingClientRect();d={x:e.clientX-(null!==(a=null==o?void 0:o.left)&&void 0!==a?a:0),y:e.clientY-(null!==(r=null==o?void 0:o.top)&&void 0!==r?r:0)}}const u=l.retina.pixelRatio;d&&(d.x*=u,d.y*=u),l.interactivity.mouse.position=d,l.interactivity.status=C.mouseMoveEvent}mouseTouchFinish(){const t=this.container.interactivity;if(void 0===t)return;const i=t.mouse;delete i.position,delete i.clickPosition,delete i.downPosition,t.status=C.mouseLeaveEvent,i.inside=!1,i.clicking=!1}mouseTouchClick(t){const i=this.container,e=i.actualOptions,o=i.interactivity.mouse;o.inside=!0;let s=!1;const n=o.position;if(void 0!==n&&e.interactivity.events.onClick.enable){for(const[,t]of i.plugins)if(void 0!==t.clickPositionValid&&(s=t.clickPositionValid(n),s))break;s||this.doMouseTouchClick(t),o.clicking=!1}}doMouseTouchClick(t){const i=this.container,e=i.actualOptions;if(this.canPush){const t=i.interactivity.mouse.position;if(!t)return;i.interactivity.mouse.clickPosition={x:t.x,y:t.y},i.interactivity.mouse.clickTime=(new Date).getTime();const o=e.interactivity.events.onClick;if(o.mode instanceof Array)for(const t of o.mode)this.handleClickMode(t);else this.handleClickMode(o.mode)}"touchend"===t.type&&setTimeout((()=>this.mouseTouchFinish()),500)}handleClickMode(t){const i=this.container,e=i.actualOptions,o=e.interactivity.modes.push.quantity,s=e.interactivity.modes.remove.quantity;switch(t){case l.push:o>0&&i.particles.push(o,i.interactivity.mouse);break;case l.remove:i.particles.removeQuantity(s);break;case l.bubble:i.bubble.clicking=!0;break;case l.repulse:i.repulse.clicking=!0,i.repulse.count=0;for(const t of i.repulse.particles)t.velocity.setTo(t.initialVelocity);i.repulse.particles=[],i.repulse.finish=!1,setTimeout((()=>{i.destroyed||(i.repulse.clicking=!1)}),1e3*e.interactivity.modes.repulse.duration);break;case l.attract:i.attract.clicking=!0,i.attract.count=0;for(const t of i.attract.particles)t.velocity.setTo(t.initialVelocity);i.attract.particles=[],i.attract.finish=!1,setTimeout((()=>{i.destroyed||(i.attract.clicking=!1)}),1e3*e.interactivity.modes.attract.duration);break;case l.pause:i.getAnimationStatus()?i.pause():i.play()}for(const[,e]of i.plugins)e.handleClickMode&&e.handleClickMode(t)}}const q=[],_=new Map,B=new Map,W=new Map;class G{static getPlugin(t){return q.find((i=>i.id===t))}static addPlugin(t){G.getPlugin(t.id)||q.push(t)}static getAvailablePlugins(t){const i=new Map;for(const e of q)e.needsPlugin(t.actualOptions)&&i.set(e.id,e.getPlugin(t));return i}static loadOptions(t,i){for(const e of q)e.loadOptions(t,i)}static getPreset(t){return _.get(t)}static addPreset(t,i){G.getPreset(t)||_.set(t,i)}static addShapeDrawer(t,i){G.getShapeDrawer(t)||B.set(t,i)}static getShapeDrawer(t){return B.get(t)}static getSupportedShapes(){return B.keys()}static getPathGenerator(t){return W.get(t)}static addPathGenerator(t,i){G.getPathGenerator(t)||W.set(t,i)}}class N{constructor(t,i){this.position=t,this.particle=i}}class ${constructor(t,i){this.rectangle=t,this.capacity=i,this.points=[],this.divided=!1}subdivide(){const t=this.rectangle.position.x,i=this.rectangle.position.y,e=this.rectangle.size.width,o=this.rectangle.size.height,s=this.capacity;this.northEast=new $(new F(t,i,e/2,o/2),s),this.northWest=new $(new F(t+e/2,i,e/2,o/2),s),this.southEast=new $(new F(t,i+o/2,e/2,o/2),s),this.southWest=new $(new F(t+e/2,i+o/2,e/2,o/2),s),this.divided=!0}insert(t){var i,e,o,s,n;return!!this.rectangle.contains(t.position)&&(this.points.length<this.capacity?(this.points.push(t),!0):(this.divided||this.subdivide(),null!==(n=(null===(i=this.northEast)||void 0===i?void 0:i.insert(t))||(null===(e=this.northWest)||void 0===e?void 0:e.insert(t))||(null===(o=this.southEast)||void 0===o?void 0:o.insert(t))||(null===(s=this.southWest)||void 0===s?void 0:s.insert(t)))&&void 0!==n&&n))}queryCircle(t,i){return this.query(new I(t.x,t.y,i))}queryCircleWarp(t,i,e){const o=e,s=e;return this.query(new V(t.x,t.y,i,void 0!==o.canvas?o.canvas.size:s))}queryRectangle(t,i){return this.query(new F(t.x,t.y,i.width,i.height))}query(t,i){var e,o,s,n;const a=null!=i?i:[];if(!t.intersects(this.rectangle))return[];for(const i of this.points)t.contains(i.position)&&a.push(i.particle);return this.divided&&(null===(e=this.northEast)||void 0===e||e.query(t,a),null===(o=this.northWest)||void 0===o||o.query(t,a),null===(s=this.southEast)||void 0===s||s.query(t,a),null===(n=this.southWest)||void 0===n||n.query(t,a)),a}}var U=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};class j{getSidesCount(){return 12}init(t){var i;return U(this,void 0,void 0,(function*(){const e=t.actualOptions;if(S.isInArray(b.char,e.particles.shape.type)||S.isInArray(b.character,e.particles.shape.type)){const t=null!==(i=e.particles.shape.options[b.character])&&void 0!==i?i:e.particles.shape.options[b.char];if(t instanceof Array)for(const i of t)yield S.loadFont(i);else void 0!==t&&(yield S.loadFont(t))}}))}draw(t,i,e){const o=i.shapeData;if(void 0===o)return;const s=o.value;if(void 0===s)return;const n=i;void 0===n.text&&(n.text=s instanceof Array?S.itemFromArray(s,i.randomIndexData):s);const a=n.text,r=o.style,l=o.weight,c=2*Math.round(e),d=o.font,h=i.fill,u=a.length*e/2;t.font=`${r} ${l} ${c}px "${d}"`;const v={x:-u,y:e/2};h?t.fillText(a,v.x,v.y):t.strokeText(a,v.x,v.y)}}var X=function(t,i,e,o){return new(e||(e=Promise))((function(s,n){function a(t){try{l(o.next(t))}catch(t){n(t)}}function r(t){try{l(o.throw(t))}catch(t){n(t)}}function l(t){var i;t.done?s(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,r)}l((o=o.apply(t,i||[])).next())}))};class Y{constructor(){this.images=[]}getSidesCount(){return 12}getImages(t){const i=this.images.filter((i=>i.id===t.id));return i.length?i[0]:(this.images.push({id:t.id,images:[]}),this.getImages(t))}addImage(t,i){const e=this.getImages(t);null==e||e.images.push(i)}init(t){var i;return X(this,void 0,void 0,(function*(){const e=t.actualOptions.particles.shape;if(!S.isInArray(b.image,e.type)&&!S.isInArray(b.images,e.type))return;const o=null!==(i=e.options[b.images])&&void 0!==i?i:e.options[b.image];if(o instanceof Array)for(const i of o)yield this.loadImageShape(t,i);else yield this.loadImageShape(t,o)}))}destroy(){this.images=[]}loadImageShape(t,i){return X(this,void 0,void 0,(function*(){try{const e=i.replaceColor?yield S.downloadSvgImage(i.src):yield S.loadImage(i.src);e&&this.addImage(t,e)}catch(t){console.warn(`tsParticles error - ${i.src} not found`)}}))}draw(t,i,e,o){var s,n;if(!t)return;const a=i.image,r=null===(s=null==a?void 0:a.data)||void 0===s?void 0:s.element;if(!r)return;const l=null!==(n=null==a?void 0:a.ratio)&&void 0!==n?n:1,c={x:-e,y:-e};(null==a?void 0:a.data.svgData)&&(null==a?void 0:a.replaceColor)||(t.globalAlpha=o),t.drawImage(r,c.x,c.y,2*e,2*e/l),(null==a?void 0:a.data.svgData)&&(null==a?void 0:a.replaceColor)||(t.globalAlpha=1)}}class J{getSidesCount(){return 1}draw(t,i,e){t.moveTo(0,-e/2),t.lineTo(0,e/2)}}class Q{getSidesCount(){return 12}draw(t,i,e){t.arc(0,0,e,0,2*Math.PI,!1)}}class Z{getSidesCount(t){var i,e;const o=t.shapeData;return null!==(e=null!==(i=null==o?void 0:o.sides)&&void 0!==i?i:null==o?void 0:o.nb_sides)&&void 0!==e?e:5}draw(t,i,e){const o=this.getCenter(i,e),s=this.getSidesData(i,e),n=s.count.numerator*s.count.denominator,a=s.count.numerator/s.count.denominator,r=180*(a-2)/a,l=Math.PI-Math.PI*r/180;if(t){t.beginPath(),t.translate(o.x,o.y),t.moveTo(0,0);for(let i=0;i<n;i++)t.lineTo(s.length,0),t.translate(s.length,0),t.rotate(l)}}}class K extends Z{getSidesCount(){return 3}getSidesData(t,i){return{count:{denominator:2,numerator:3},length:2*i}}getCenter(t,i){return{x:-i,y:i/1.66}}}class tt{getSidesCount(t){var i,e;const o=t.shapeData;return null!==(e=null!==(i=null==o?void 0:o.sides)&&void 0!==i?i:null==o?void 0:o.nb_sides)&&void 0!==e?e:5}draw(t,i,e){var o;const s=i.shapeData,n=this.getSidesCount(i),a=null!==(o=null==s?void 0:s.inset)&&void 0!==o?o:2;t.moveTo(0,0-e);for(let i=0;i<n;i++)t.rotate(Math.PI/n),t.lineTo(0,0-e*a),t.rotate(Math.PI/n),t.lineTo(0,0-e)}}class it extends Z{getSidesData(t,i){var e,o;const s=t.shapeData,n=null!==(o=null!==(e=null==s?void 0:s.sides)&&void 0!==e?e:null==s?void 0:s.nb_sides)&&void 0!==o?o:5;return{count:{denominator:1,numerator:n},length:2.66*i/(n/3)}}getCenter(t,i){return{x:-i/(this.getSidesCount(t)/3.5),y:-i/.76}}}class et{constructor(t){this.container=t,this.size={height:0,width:0},this.context=null,this.generatedCanvas=!1}init(){var t,i,e,o,s,n,a,r,l,c,d,h;this.resize();const u=this.container.actualOptions,v=this.element;v&&(u.fullScreen.enable?(this.originalStyle=S.deepExtend({},v.style),v.style.position="fixed",v.style.zIndex=u.fullScreen.zIndex.toString(10),v.style.top="0",v.style.left="0",v.style.width="100%",v.style.height="100%"):(v.style.position=null!==(i=null===(t=this.originalStyle)||void 0===t?void 0:t.position)&&void 0!==i?i:"",v.style.zIndex=null!==(o=null===(e=this.originalStyle)||void 0===e?void 0:e.zIndex)&&void 0!==o?o:"",v.style.top=null!==(n=null===(s=this.originalStyle)||void 0===s?void 0:s.top)&&void 0!==n?n:"",v.style.left=null!==(r=null===(a=this.originalStyle)||void 0===a?void 0:a.left)&&void 0!==r?r:"",v.style.width=null!==(c=null===(l=this.originalStyle)||void 0===l?void 0:l.width)&&void 0!==c?c:"",v.style.height=null!==(h=null===(d=this.originalStyle)||void 0===d?void 0:d.height)&&void 0!==h?h:""));const p=u.backgroundMask.cover,y=p.color,m=u.particles.move.trail,f=T.colorToRgb(y);this.coverColor=void 0!==f?{r:f.r,g:f.g,b:f.b,a:p.opacity}:void 0,this.trailFillColor=T.colorToRgb(m.fillColor),this.initBackground(),this.paint()}loadCanvas(t,i){var e;t.className||(t.className=C.canvasClass),this.generatedCanvas&&(null===(e=this.element)||void 0===e||e.remove()),this.generatedCanvas=null!=i?i:this.generatedCanvas,this.element=t,this.originalStyle=S.deepExtend({},this.element.style),this.size.height=t.offsetHeight,this.size.width=t.offsetWidth,this.context=this.element.getContext("2d"),this.container.retina.init(),this.initBackground()}destroy(){var t;this.generatedCanvas&&(null===(t=this.element)||void 0===t||t.remove()),this.context&&O.clear(this.context,this.size)}paint(){const t=this.container.actualOptions;this.context&&(t.backgroundMask.enable&&t.backgroundMask.cover&&this.coverColor?(O.clear(this.context,this.size),this.paintBase(T.getStyleFromRgb(this.coverColor,this.coverColor.a))):this.paintBase())}clear(){const t=this.container.actualOptions,i=t.particles.move.trail;t.backgroundMask.enable?this.paint():i.enable&&i.length>0&&this.trailFillColor?this.paintBase(T.getStyleFromRgb(this.trailFillColor,1/i.length)):this.context&&O.clear(this.context,this.size)}windowResize(){if(!this.element)return;const t=this.container;this.resize(),t.actualOptions.setResponsive(this.size.width,t.retina.pixelRatio,t.options),t.particles.setDensity();for(const[,i]of t.plugins)void 0!==i.resize&&i.resize()}resize(){if(!this.element)return;const t=this.container,i=t.retina.pixelRatio,e=t.canvas.size,o=e.width,s=e.height;e.width=this.element.offsetWidth*i,e.height=this.element.offsetHeight*i,this.element.width=e.width,this.element.height=e.height,this.container.started&&(this.resizeFactor={width:e.width/o,height:e.height/s})}drawConnectLine(t,i){var e;const o=this.context;if(!o)return;const s=this.lineStyle(t,i);if(!s)return;const n=t.getPosition(),a=i.getPosition();O.drawConnectLine(o,null!==(e=t.linksWidth)&&void 0!==e?e:this.container.retina.linksWidth,s,n,a)}drawGrabLine(t,i,e,o){var s;const n=this.container,a=n.canvas.context;if(!a)return;const r=t.getPosition();O.drawGrabLine(a,null!==(s=t.linksWidth)&&void 0!==s?s:n.retina.linksWidth,r,o,i,e)}drawParticleShadow(t,i){this.context&&O.drawParticleShadow(this.container,this.context,t,i)}drawLinkTriangle(t,i,e){var o;const s=this.container,n=s.actualOptions,a=i.destination,l=e.destination,c=t.options.links.triangles,d=null!==(o=c.opacity)&&void 0!==o?o:(i.opacity+e.opacity)/2;if(d<=0)return;const h=t.getPosition(),u=a.getPosition(),v=l.getPosition(),p=this.context;if(!p)return;if(r.getDistance(h,u)>s.retina.linksDistance||r.getDistance(v,u)>s.retina.linksDistance||r.getDistance(v,h)>s.retina.linksDistance)return;let y=T.colorToRgb(c.color);if(!y){const i=t.options.links,e=void 0!==i.id?s.particles.linksColors.get(i.id):s.particles.linksColor;y=T.getLinkColor(t,a,e)}y&&O.drawLinkTriangle(p,h,u,v,n.backgroundMask.enable,n.backgroundMask.composite,y,d)}drawLinkLine(t,i){var e,o;const s=this.container,n=s.actualOptions,a=i.destination;let r=i.opacity;const l=t.getPosition(),c=a.getPosition(),d=this.context;if(!d)return;let h;const u=t.options.twinkle.lines;if(u.enable){const t=u.frequency,i=T.colorToRgb(u.color);Math.random()<t&&void 0!==i&&(h=i,r=u.opacity)}if(!h){const i=t.options.links,e=void 0!==i.id?s.particles.linksColors.get(i.id):s.particles.linksColor;h=T.getLinkColor(t,a,e)}if(!h)return;const v=null!==(e=t.linksWidth)&&void 0!==e?e:s.retina.linksWidth,p=null!==(o=t.linksDistance)&&void 0!==o?o:s.retina.linksDistance;O.drawLinkLine(d,v,l,c,p,s.canvas.size,t.options.links.warp,n.backgroundMask.enable,n.backgroundMask.composite,h,r,t.options.links.shadow)}drawParticle(t,i){var e,o,s,n;if(!1===(null===(e=t.image)||void 0===e?void 0:e.loaded)||t.spawning||t.destroyed)return;const a=t.getFillColor(),r=null!==(o=t.getStrokeColor())&&void 0!==o?o:a;if(!a&&!r)return;const l=this.container.actualOptions,c=t.options.twinkle.particles,d=c.frequency,h=T.colorToRgb(c.color),u=c.enable&&Math.random()<d,v=t.getRadius(),p=u?c.opacity:null!==(s=t.bubble.opacity)&&void 0!==s?s:t.opacity.value,y=t.infecter.infectionStage,m=l.infection.stages,f=void 0!==y?m[y].color:void 0,g=T.colorToRgb(f),b=u&&void 0!==h?h:null!=g?g:a?T.hslToRgb(a):void 0,w=u&&void 0!==h?h:null!=g?g:r?T.hslToRgb(r):void 0,x=void 0!==b?T.getStyleFromRgb(b,p):void 0;if(!this.context||!x&&!w)return;const k=void 0!==w?T.getStyleFromRgb(w,null!==(n=t.stroke.opacity)&&void 0!==n?n:p):x;this.drawParticleLinks(t),v>0&&O.drawParticle(this.container,this.context,t,i,x,k,l.backgroundMask.enable,l.backgroundMask.composite,v,p,t.options.shadow)}drawParticleLinks(t){if(!this.context)return;const i=this.container,e=i.particles,o=t.options;if(t.links.length>0){this.context.save();const s=t.links.filter((e=>i.particles.getLinkFrequency(t,e.destination)<=o.links.frequency));for(const n of s){const a=n.destination;if(o.links.triangles.enable){const r=s.map((t=>t.destination)),l=a.links.filter((t=>i.particles.getLinkFrequency(a,t.destination)<=a.options.links.frequency&&r.indexOf(t.destination)>=0));if(l.length)for(const i of l){const s=i.destination;e.getTriangleFrequency(t,a,s)>o.links.triangles.frequency||this.drawLinkTriangle(t,n,i)}}n.opacity>0&&i.retina.linksWidth>0&&this.drawLinkLine(t,n)}this.context.restore()}}drawPlugin(t,i){this.context&&O.drawPlugin(this.context,t,i)}drawLight(t){this.context&&O.drawLight(this.container,this.context,t)}paintBase(t){this.context&&O.paintBase(this.context,this.size,t)}lineStyle(t,i){if(!this.context)return;const e=this.container.actualOptions.interactivity.modes.connect;return O.gradient(this.context,t,i,e.links.opacity)}initBackground(){const t=this.container.actualOptions.background,i=this.element,e=null==i?void 0:i.style;if(e){if(t.color){const i=T.colorToRgb(t.color);e.backgroundColor=i?T.getStyleFromRgb(i,t.opacity):""}else e.backgroundColor="";e.backgroundImage=t.image||"",e.backgroundPosition=t.position||"",e.backgroundRepeat=t.repeat||"",e.backgroundSize=t.size||""}}}function ot(t,i,e,o,s){switch(i){case f.max:e>=s&&t.destroy();break;case f.min:e<=o&&t.destroy()}}class st{constructor(t,i){this.container=t,this.particle=i}update(t){this.particle.destroyed||(this.updateLife(t),this.particle.destroyed||this.particle.spawning||(this.updateOpacity(t),this.updateSize(t),this.updateAngle(t),this.updateColor(t),this.updateStrokeColor(t),this.updateOutModes(t)))}updateLife(t){const i=this.particle;let e=!1;if(i.spawning&&(i.lifeDelayTime+=t.value,i.lifeDelayTime>=i.lifeDelay&&(e=!0,i.spawning=!1,i.lifeDelayTime=0,i.lifeTime=0)),-1!==i.lifeDuration&&!i.spawning&&(e?i.lifeTime=0:i.lifeTime+=t.value,i.lifeTime>=i.lifeDuration)){if(i.lifeTime=0,i.livesRemaining>0&&i.livesRemaining--,0===i.livesRemaining)return void i.destroy();const t=this.container.canvas.size;i.position.x=r.randomInRange(r.setRangeValue(0,t.width)),i.position.y=r.randomInRange(r.setRangeValue(0,t.height)),i.spawning=!0,i.lifeDelayTime=0,i.lifeTime=0,i.reset();const e=i.options.life;i.lifeDelay=1e3*r.getValue(e.delay),i.lifeDuration=1e3*r.getValue(e.duration)}}updateOpacity(t){var i,e;const o=this.particle,s=o.options.opacity,n=s.animation,a=r.getRangeMin(s.value),l=r.getRangeMax(s.value);if(!o.destroyed&&n.enable&&(n.count<=0||o.loops.size<n.count)){switch(o.opacity.status){case m.increasing:o.opacity.value>=l?(o.opacity.status=m.decreasing,o.loops.opacity++):o.opacity.value+=(null!==(i=o.opacity.velocity)&&void 0!==i?i:0)*t.factor;break;case m.decreasing:o.opacity.value<=a?(o.opacity.status=m.increasing,o.loops.opacity++):o.opacity.value-=(null!==(e=o.opacity.velocity)&&void 0!==e?e:0)*t.factor}ot(o,n.destroy,o.opacity.value,a,l),o.destroyed||(o.opacity.value=r.clamp(o.opacity.value,a,l))}}updateSize(t){var i;const e=this.container,o=this.particle,s=o.options.size,n=s.animation,a=(null!==(i=o.size.velocity)&&void 0!==i?i:0)*t.factor,l=r.getRangeMin(s.value)*e.retina.pixelRatio,c=r.getRangeMax(s.value)*e.retina.pixelRatio;if(!o.destroyed&&n.enable&&(n.count<=0||o.loops.size<n.count)){switch(o.size.status){case m.increasing:o.size.value>=c?(o.size.status=m.decreasing,o.loops.size++):o.size.value+=a;break;case m.decreasing:o.size.value<=l?(o.size.status=m.increasing,o.loops.size++):o.size.value-=a}ot(o,n.destroy,o.size.value,l,c),o.destroyed||(o.size.value=r.clamp(o.size.value,l,c))}}updateAngle(t){var i;const e=this.particle,o=e.options.rotate.animation,s=(null!==(i=e.rotate.velocity)&&void 0!==i?i:0)*t.factor,n=2*Math.PI;if(o.enable)switch(e.rotate.status){case m.increasing:e.rotate.value+=s,e.rotate.value>n&&(e.rotate.value-=n);break;case m.decreasing:default:e.rotate.value-=s,e.rotate.value<0&&(e.rotate.value+=n)}}updateColor(t){var i,e,o;const s=this.particle,n=s.options.color.animation;void 0!==(null===(i=s.color)||void 0===i?void 0:i.h)&&this.updateColorValue(s,t,s.color.h,n.h,360,!1),void 0!==(null===(e=s.color)||void 0===e?void 0:e.s)&&this.updateColorValue(s,t,s.color.s,n.s,100,!0),void 0!==(null===(o=s.color)||void 0===o?void 0:o.l)&&this.updateColorValue(s,t,s.color.l,n.l,100,!0)}updateStrokeColor(t){var i,e,o,s,n,a,r,l,c,d,h,u;const v=this.particle;if(!v.stroke.color)return;const p=v.stroke.color.animation,y=p;if(void 0!==y.enable){const s=null!==(e=null===(i=v.strokeColor)||void 0===i?void 0:i.h)&&void 0!==e?e:null===(o=v.color)||void 0===o?void 0:o.h;s&&this.updateColorValue(v,t,s,y,360,!1)}else{const i=p,e=null!==(n=null===(s=v.strokeColor)||void 0===s?void 0:s.h)&&void 0!==n?n:null===(a=v.color)||void 0===a?void 0:a.h;e&&this.updateColorValue(v,t,e,i.h,360,!1);const o=null!==(l=null===(r=v.strokeColor)||void 0===r?void 0:r.s)&&void 0!==l?l:null===(c=v.color)||void 0===c?void 0:c.s;o&&this.updateColorValue(v,t,o,i.s,100,!0);const y=null!==(h=null===(d=v.strokeColor)||void 0===d?void 0:d.l)&&void 0!==h?h:null===(u=v.color)||void 0===u?void 0:u.l;y&&this.updateColorValue(v,t,y,i.l,100,!0)}}updateColorValue(t,i,e,o,s,n){var a;const l=e;if(!l||!o.enable)return;const c=r.randomInRange(o.offset),d=(null!==(a=e.velocity)&&void 0!==a?a:0)*i.factor+3.6*c;n&&l.status!==m.increasing?(l.value-=d,l.value<0&&(l.status=m.increasing,l.value+=l.value)):(l.value+=d,n&&l.value>s&&(l.status=m.decreasing,l.value-=l.value%s)),l.value>s&&(l.value%=s)}updateOutModes(t){var i,e,s,n;const a=this.particle.options.move.outModes;this.updateOutMode(t,null!==(i=a.bottom)&&void 0!==i?i:a.default,o.bottom),this.updateOutMode(t,null!==(e=a.left)&&void 0!==e?e:a.default,o.left),this.updateOutMode(t,null!==(s=a.right)&&void 0!==s?s:a.default,o.right),this.updateOutMode(t,null!==(n=a.top)&&void 0!==n?n:a.default,o.top)}updateOutMode(t,i,e){const o=this.container,s=this.particle;switch(i){case v.bounce:case v.bounceVertical:case v.bounceHorizontal:case"bounceVertical":case"bounceHorizontal":case v.split:this.updateBounce(t,e,i);break;case v.destroy:S.isPointInside(s.position,o.canvas.size,s.getRadius(),e)||o.particles.remove(s,!0);break;case v.out:S.isPointInside(s.position,o.canvas.size,s.getRadius(),e)||this.fixOutOfCanvasPosition(e);break;case v.none:this.bounceNone(e)}}fixOutOfCanvasPosition(t){const i=this.container,e=this.particle,s=e.options.move.warp,n=i.canvas.size,a={bottom:n.height+e.getRadius()-e.offset.y,left:-e.getRadius()-e.offset.x,right:n.width+e.getRadius()+e.offset.x,top:-e.getRadius()-e.offset.y},r=e.getRadius(),l=S.calculateBounds(e.position,r);t===o.right&&l.left>n.width-e.offset.x?(e.position.x=a.left,s||(e.position.y=Math.random()*n.height)):t===o.left&&l.right<-e.offset.x&&(e.position.x=a.right,s||(e.position.y=Math.random()*n.height)),t===o.bottom&&l.top>n.height-e.offset.y?(s||(e.position.x=Math.random()*n.width),e.position.y=a.top):t===o.top&&l.bottom<-e.offset.y&&(s||(e.position.x=Math.random()*n.width),e.position.y=a.bottom)}updateBounce(t,i,e){const s=this.container,n=this.particle;let a=!1;for(const[,e]of s.plugins)if(void 0!==e.particleBounce&&(a=e.particleBounce(n,t,i)),a)break;if(a)return;const l=n.getPosition(),c=n.offset,d=n.getRadius(),h=S.calculateBounds(l,d),u=s.canvas.size;!function(t){if(t.outMode===v.bounce||t.outMode===v.bounceHorizontal||"bounceHorizontal"===t.outMode||t.outMode===v.split){const i=t.particle.velocity.x;let e=!1;if(t.direction===o.right&&t.bounds.right>=t.canvasSize.width&&i>0||t.direction===o.left&&t.bounds.left<=0&&i<0){const i=r.getValue(t.particle.options.bounce.horizontal);t.particle.velocity.x*=-i,e=!0}if(!e)return;const s=t.offset.x+t.size;t.bounds.right>=t.canvasSize.width?t.particle.position.x=t.canvasSize.width-s:t.bounds.left<=0&&(t.particle.position.x=s),t.outMode===v.split&&t.particle.destroy()}}({particle:n,outMode:e,direction:i,bounds:h,canvasSize:u,offset:c,size:d}),function(t){if(t.outMode===v.bounce||t.outMode===v.bounceVertical||"bounceVertical"===t.outMode||t.outMode===v.split){const i=t.particle.velocity.y;let e=!1;if(t.direction===o.bottom&&t.bounds.bottom>=t.canvasSize.height&&i>0||t.direction===o.top&&t.bounds.top<=0&&i<0){const i=r.getValue(t.particle.options.bounce.vertical);t.particle.velocity.y*=-i,e=!0}if(!e)return;const s=t.offset.y+t.size;t.bounds.bottom>=t.canvasSize.height?t.particle.position.y=t.canvasSize.height-s:t.bounds.top<=0&&(t.particle.position.y=s),t.outMode===v.split&&t.particle.destroy()}}({particle:n,outMode:e,direction:i,bounds:h,canvasSize:u,offset:c,size:d})}bounceNone(t){const i=this.particle;if(i.options.move.distance)return;const e=i.options.move.gravity,s=this.container;if(e.enable){const n=i.position;(e.acceleration>=0&&n.y>s.canvas.size.height&&t===o.bottom||e.acceleration<0&&n.y<0&&t===o.top)&&s.particles.remove(i)}else S.isPointInside(i.position,s.canvas.size,i.getRadius(),t)||s.particles.remove(i)}}class nt{constructor(){this.value="#fff"}static create(t,i){const e=null!=t?t:new nt;return void 0!==i&&e.load("string"==typeof i?{value:i}:i),e}load(t){void 0!==(null==t?void 0:t.value)&&(this.value=t.value)}}class at{constructor(){this.blur=5,this.color=new nt,this.enable=!1,this.color.value="#00ff00"}load(t){void 0!==t&&(void 0!==t.blur&&(this.blur=t.blur),this.color=nt.create(this.color,t.color),void 0!==t.enable&&(this.enable=t.enable))}}class rt{constructor(){this.enable=!1,this.frequency=1}load(t){void 0!==t&&(void 0!==t.color&&(this.color=nt.create(this.color,t.color)),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.freque