UNPKG

tsparticles

Version:

Porting of the abandoned Vincent Garreau's particles.js, converted in TypeScript. Added many new cool features and various bug fixes.

1 lines 73.6 kB
!function(t,i){for(var e in i)t[e]=i[e]}(window,function(t){var i={};function e(o){if(i[o])return i[o].exports;var s=i[o]={i:o,l:!1,exports:{}};return t[o].call(s.exports,s,s.exports,e),s.l=!0,s.exports}return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:o})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,i){if(1&i&&(t=e(t)),8&i)return t;if(4&i&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(e.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&i&&"string"!=typeof t)for(var s in t)e.d(o,s,function(i){return t[i]}.bind(null,s));return o},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},e.p="",e(e.s=0)}([function(t,i,e){"use strict";e.r(i),e.d(i,"tsParticles",(function(){return Yt}));class o{}var s;o.canvasClass="tsparticles-canvas-el",o.randomColorValue="random",o.touchEndEvent="touchend",o.mouseUpEvent="mouseup",o.mouseMoveEvent="mousemove",o.touchStartEvent="touchstart",o.touchMoveEvent="touchmove",o.mouseLeaveEvent="mouseleave",o.touchCancelEvent="touchcancel",o.resizeEvent="resize",o.visibilityChangeEvent="visibilitychange",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={}));var n,a,r,l,c,h,d,u,p,v,y=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 m{static clamp(t,i,e){return Math.min(Math.max(t,i),e)}static isInArray(t,i){return t===i||i.indexOf(t)>-1}static mix(t,i,e,o){return(t*e+i*o)/(e+o)}static getParticleBaseVelocity(t){let i;switch(t.particles.move.direction){case s.top:i={x:0,y:-1};break;case s.topRight:i={x:.5,y:-.5};break;case s.right:i={x:1,y:-0};break;case s.bottomRight:i={x:.5,y:.5};break;case s.bottom:i={x:0,y:1};break;case s.bottomLeft:i={x:-.5,y:1};break;case s.left:i={x:-1,y:0};break;case s.topLeft:i={x:-.5,y:-.5};break;default:i={x:0,y:0}}return i}static getDistanceBetweenCoordinates(t,i){const e=t.x-i.x,o=t.y-i.y;return Math.sqrt(e*e+o*o)}static loadFont(t){return y(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){return t[void 0!==i?i:this.arrayRandomIndex(t)]}static randomInRange(t,i){return Math.random()*(i-t)+t}static isPointInside(t,i,e){return this.areBoundsInside(this.calculateBounds(t,null!=e?e:0),i)}static areBoundsInside(t,i){return t.left<i.width&&t.right>0&&t.top<i.height&&t.bottom>0}static calculateBounds(t,i){return{bottom:t.y+i,left:t.x-i,right:t.x+i,top:t.y-i}}}class g{static addShapeDrawer(t,i){this.drawers[t]||(this.drawers[t]=i)}static drawShape(t,i,e,o){if(!i.shape)return;const s=this.drawers[i.shape];s&&s.draw(t,i,e,o)}}g.drawers={};class b{static colorToRgb(t){let i;if("string"==typeof t.value)i=t.value===o.randomColorValue?{b:Math.floor(256*Math.random()),g:Math.floor(256*Math.random()),r:Math.floor(256*Math.random())}:b.stringToRgb(t.value);else if(t.value instanceof Array){const e=m.itemFromArray(t.value);i=b.stringToRgb(e)}else{const e=t.value;void 0!==e.r&&(i=e);const o=t.value;void 0!==o.h&&(i=b.hslToRgb(o))}return i}static stringToAlpha(t){var i;return null===(i=b.stringToRgba(t))||void 0===i?void 0:i.a}static stringToRgb(t){return b.stringToRgba(t)}static hslToRgb(t){const i={b:0,g:0,r:0};if(0===t.s)i.b=t.l,i.g=t.l,i.r=t.l;else{const e=t.l<.5?t.l*(1+t.s):t.l+t.s-t.l*t.s,o=2*t.l-e;i.r=b.hue2rgb(o,e,t.h+1/3),i.g=b.hue2rgb(o,e,t.h),i.b=b.hue2rgb(o,e,t.h-1/3)}return i.r=Math.round(255*i.r),i.g=Math.round(255*i.g),i.b=Math.round(255*i.b),i}static hslaToRgba(t){const i=b.hslToRgb(t);return{a:t.a,b:i.b,g:i.g,r:i.r}}static getRandomRgbColor(t){var i;const e=t||0,o=e+e*Math.pow(16,2)+e*Math.pow(16,4),s=16777215^o,n=(Math.random()*s+o).toString(16);return null!==(i=this.stringToRgb(`#${n}`))&&void 0!==i?i:{b:0,g:0,r:0}}static getStyleFromColor(t,i){const e=null!=i?i:1;return`rgba(${Math.round(t.r)}, ${Math.round(t.g)}, ${Math.round(t.b)}, ${e})`}static hue2rgb(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}static stringToRgba(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]),g:parseInt(i[2]),r:parseInt(i[1])}: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?b.hslaToRgba({a:i.length>4?parseFloat(i[5]):1,h:parseInt(i[1]),l:parseInt(i[3]),s:parseInt(i[2])}):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+(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:parseInt(o[4],16)/255,b:parseInt(o[3],16),g:parseInt(o[2],16),r:parseInt(o[1],16)}:void 0}}}class f{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 drawPolygonMask(t,i,e){const o="string"==typeof e.color?b.stringToRgb(e.color):b.colorToRgb(e.color);if(o){t.save(),t.beginPath(),t.moveTo(i[0].x,i[0].y);for(let e=1;e<i.length;e++)t.lineTo(i[e].x,i[e].y);t.closePath(),t.strokeStyle=b.getStyleFromColor(o),t.lineWidth=e.width,t.stroke(),t.restore()}}static drawPolygonMaskPath(t,i,e,o){t.save(),t.translate(o.x,o.y);const s="string"==typeof e.color?b.stringToRgb(e.color):b.colorToRgb(e.color);s&&(t.strokeStyle=b.getStyleFromColor(s,e.opacity),t.lineWidth=e.width,t.stroke(i)),t.restore()}static drawLineLinked(t,i,e,o,s,n,a,r){t.save(),s&&(t.globalCompositeOperation="destination-out"),n&&(t.strokeStyle=b.getStyleFromColor(n,a)),t.lineWidth=i,t.beginPath();const l="string"==typeof r.color?b.stringToRgb(r.color):b.colorToRgb(r.color);r.enable&&l&&(t.shadowBlur=r.blur,t.shadowColor=b.getStyleFromColor(l)),t.moveTo(e.x,e.y),t.lineTo(o.x,o.y),t.stroke(),t.closePath(),t.restore()}static drawConnectLine(t,i,e,o,s){t.save(),t.beginPath(),t.lineWidth=i,t.strokeStyle=e,t.moveTo(o.x,o.y),t.lineTo(s.x,s.y),t.stroke(),t.closePath(),t.restore()}static gradient(t,i,e,o,s){const n=Math.floor(e.radius/i.radius);if(!i.color||!e.color)return;const a=i.position,r=e.position,l=t.createLinearGradient(a.x,a.y,r.x,r.y);return l.addColorStop(0,b.getStyleFromColor(i.color,s)),l.addColorStop(n>1?1:n,b.getStyleFromColor(o,s)),l.addColorStop(1,b.getStyleFromColor(e.color,s)),l}static drawGrabLine(t,i,e,o,s,n){t.save(),t.strokeStyle=b.getStyleFromColor(s,n),t.lineWidth=i,t.beginPath(),t.moveTo(e.x,e.y),t.lineTo(o.x,o.y),t.stroke(),t.closePath(),t.restore()}static drawParticle(t,i,e,o,s,n){t.save();const a=i.container.options.particles.shadow,r=i.shadowColor;a.enable&&r&&(t.shadowBlur=a.blur,t.shadowColor=b.getStyleFromColor(r),t.shadowOffsetX=a.offset.x,t.shadowOffsetY=a.offset.y),t.fillStyle=e;const l={x:i.position.x+i.offset.x,y:i.position.y+i.offset.y};t.translate(l.x,l.y),t.beginPath(),0!==i.angle&&t.rotate(i.angle*Math.PI/180),o&&(t.globalCompositeOperation="destination-out");const c=i.stroke;c.width>0&&i.strokeColor&&(t.strokeStyle=b.getStyleFromColor(i.strokeColor,i.stroke.opacity),t.lineWidth=c.width),g.drawShape(t,i,s,n),i.close&&t.closePath(),c.width>0&&i.strokeColor&&t.stroke(),i.fill&&t.fill(),t.restore()}}class w{constructor(t){this.container=t,this.dimension={height:0,width:0},this.context=null,this.generatedCanvas=!1}init(){this.size();const t=this.container.options,i=t.backgroundMask.cover,e=t.particles.move.trail;this.coverColor=b.colorToRgb(void 0!==i.color?i.color:t.backgroundMask.cover),this.trailFillColor="string"==typeof e.fillColor?b.stringToRgb(e.fillColor):b.colorToRgb(e.fillColor),this.paint()}loadCanvas(t,i){var e;t.className||(t.className=o.canvasClass),this.generatedCanvas&&(null===(e=this.element)||void 0===e||e.remove()),this.generatedCanvas=null!=i&&i,this.element=t,this.dimension.height=t.offsetHeight,this.dimension.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&&f.clear(this.context,this.dimension)}size(){this.element&&(this.element.width=this.dimension.width,this.element.height=this.dimension.height)}paint(){const t=this.container.options;this.context&&(t.backgroundMask.enable&&t.backgroundMask.cover&&this.coverColor?this.paintBase(b.getStyleFromColor(this.coverColor)):this.paintBase())}clear(){const t=this.container.options,i=t.particles.move.trail;t.backgroundMask.enable?this.paint():i.enable&&i.length>0&&this.trailFillColor?this.paintBase(b.getStyleFromColor(this.trailFillColor,1/i.length)):this.context&&f.clear(this.context,this.dimension)}isPointInPath(t,i){var e,o;return null!==(o=null===(e=this.context)||void 0===e?void 0:e.isPointInPath(t,i.x,i.y))&&void 0!==o&&o}drawPolygonMask(){const t=this.container,i=t.options,e=this.context,o=i.polygon.draw,s=t.polygon,n=s.raw,a=s.polygonPath,r=s.path2DSupported;e&&(r&&a&&s.offset?f.drawPolygonMaskPath(e,a,o.stroke,s.offset):n&&f.drawPolygonMask(e,n,o.stroke))}drawLinkedLine(t,i,e,s,n){const a=this.container,r=a.options,l=this.context;if(!l)return;let c;if(a.particles.lineLinkedColor===o.randomColorValue)c=b.getRandomRgbColor();else if("mid"==a.particles.lineLinkedColor&&t.color&&i.color){const e=t.color,o=i.color;c={b:Math.floor(m.mix(e.b,o.b,t.radius,i.radius)),g:Math.floor(m.mix(e.g,o.g,t.radius,i.radius)),r:Math.floor(m.mix(e.r,o.r,t.radius,i.radius))}}else c=a.particles.lineLinkedColor;const h=a.retina.lineLinkedWidth;f.drawLineLinked(l,h,e,s,r.backgroundMask.enable,c,n,r.particles.lineLinked.shadow)}drawConnectLine(t,i){const e=this.lineStyle(t,i);if(!e)return;const o=this.context;o&&f.drawConnectLine(o,this.container.retina.lineLinkedWidth,e,t.position,i.position)}drawGrabLine(t,i,e){const s=this.container,n=s.options.particles.lineLinked.color;let a=s.particles.lineLinkedColor||("string"==typeof n?b.stringToRgb(n):b.colorToRgb(n));a==o.randomColorValue&&(a=b.getRandomRgbColor()),s.particles.lineLinkedColor=a;let r={r:127,g:127,b:127};const l=s.canvas.context;if(!l)return;r=s.particles.lineLinkedColor==o.randomColorValue?b.getRandomRgbColor()||r:s.particles.lineLinkedColor||r;const c={x:t.position.x+t.offset.x,y:t.position.y+t.offset.y};f.drawGrabLine(l,s.retina.lineLinkedWidth,c,e,r,i)}drawParticle(t){const i=this.container.options;let e;const o=void 0!==t.bubbler.radius?t.bubbler.radius:t.radius,s=void 0!==t.bubbler.opacity?t.bubbler.opacity:t.opacity.value;t.color&&(e=b.getStyleFromColor(t.color,s)),this.context&&e&&f.drawParticle(this.context,t,e,i.backgroundMask.enable,o,s)}paintBase(t){this.context&&f.paintBase(this.context,this.dimension,t)}lineStyle(t,i){const e=this.container.options.interactivity.modes.connect;if(t.color&&i.color){const o=t.color,s=i.color,n={b:m.mix(o.b,s.b,t.radius,i.radius),g:m.mix(o.g,s.g,t.radius,i.radius),r:m.mix(o.r,s.r,t.radius,i.radius)};if(this.context)return f.gradient(this.context,t,i,n,e.lineLinked.opacity)}}initBackground(){const t=this.container.options.background,i=this.element;if(!i)return;const e=i.style;if(t.color){const i="string"==typeof t.color?b.stringToRgb(t.color):b.colorToRgb(t.color);i&&(e.backgroundColor=b.getStyleFromColor(i,t.opacity))}t.image&&(e.backgroundImage=t.image),t.position&&(e.backgroundPosition=t.position),t.repeat&&(e.backgroundRepeat=t.repeat),t.size&&(e.backgroundSize=t.size)}}!function(t){t.bubble="bubble",t.push="push",t.remove="remove",t.repulse="repulse"}(n||(n={})),function(t){t.canvas="canvas",t.parent="parent",t.window="window"}(a||(a={})),function(t){t.inline="inline",t.inside="inside",t.outside="outside",t.none="none"}(r||(r={}));class x{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.visibilityChangeHandler=()=>this.handleVisibilityChange(),this.resizeHandler=()=>this.handleWindowResize()}addListeners(){this.manageListeners(!0)}removeListeners(){this.manageListeners(!1)}manageListeners(t){const i=this.container,e=i.options;e.interactivity.detectsOn===a.window?i.interactivity.element=window:e.interactivity.detectsOn===a.parent&&i.canvas.element?i.interactivity.element=i.canvas.element.parentNode:i.interactivity.element=i.canvas.element;const s=i.interactivity.element;s&&(e.interactivity.events.onHover.enable||e.interactivity.events.onClick.enable)&&(this.manageListener(s,o.mouseMoveEvent,this.mouseMoveHandler,t),this.manageListener(s,o.touchStartEvent,this.touchStartHandler,t),this.manageListener(s,o.touchMoveEvent,this.touchMoveHandler,t),e.interactivity.events.onClick.enable||this.manageListener(s,o.touchEndEvent,this.touchEndHandler,t),this.manageListener(s,o.mouseLeaveEvent,this.mouseLeaveHandler,t),this.manageListener(s,o.touchCancelEvent,this.touchCancelHandler,t)),e.interactivity.events.onClick.enable&&s&&(this.manageListener(s,o.touchEndEvent,this.touchEndClickHandler,t),this.manageListener(s,o.mouseUpEvent,this.mouseUpHandler,t)),e.interactivity.events.resize&&this.manageListener(window,o.resizeEvent,this.resizeHandler,t),document&&this.manageListener(document,o.visibilityChangeEvent,this.visibilityChangeHandler,t,!1)}manageListener(t,i,e,o,s){o?this.addListener(t,i,e,s):this.removeListener(t,i,e,s)}addListener(t,i,e,o){t.addEventListener(i,e,o)}removeListener(t,i,e,o){t.removeEventListener(i,e,o)}handleWindowResize(){const t=this.container,i=t.options;t.canvas.element&&(t.canvas.dimension.width=t.canvas.element.offsetWidth,t.canvas.dimension.height=t.canvas.element.offsetHeight,t.retina.isRetina&&(t.canvas.dimension.width*=t.retina.pxRatio,t.canvas.dimension.height*=t.retina.pxRatio),t.canvas.element.width=t.canvas.dimension.width,t.canvas.element.height=t.canvas.dimension.height,i.particles.move.enable||t.particles.redraw(),t.densityAutoParticles(),t.polygon.redraw())}handleVisibilityChange(){const t=this.container;t.options.pauseOnBlur&&((null===document||void 0===document?void 0:document.hidden)?(t.pageHidden=!0,t.pause()):(t.pageHidden=!1,t.play()))}mouseTouchMove(t){var i,e,s;const n=this.container,r=n.options;let l;if(t.type.startsWith("mouse")){this.canPush=!0;const i=t;if(n.interactivity.element===window&&n.canvas.element){const t=n.canvas.element.getBoundingClientRect();l={x:i.clientX-t.left,y:i.clientY-t.top}}else if(r.interactivity.detectsOn===a.parent){const t=i.target,e=i.currentTarget;if(t&&e){const o=t.getBoundingClientRect(),s=e.getBoundingClientRect();l={x:i.offsetX+o.left-s.left,y:i.offsetY+o.top-s.top}}else l={x:i.offsetX||i.clientX,y:i.offsetY||i.clientY}}else l={x:i.offsetX||i.clientX,y:i.offsetY||i.clientY}}else{this.canPush="touchmove"!==t.type;const o=t,a=o.touches[o.touches.length-1],r=null===(i=n.canvas.element)||void 0===i?void 0:i.getBoundingClientRect();l={x:a.clientX-(null!==(e=null==r?void 0:r.left)&&void 0!==e?e:0),y:a.clientY-(null!==(s=null==r?void 0:r.top)&&void 0!==s?s:0)}}n.interactivity.mouse.position=l,n.retina.isRetina&&(n.interactivity.mouse.position.x*=n.retina.pxRatio,n.interactivity.mouse.position.y*=n.retina.pxRatio),n.interactivity.status=o.mouseMoveEvent}mouseTouchFinish(){const t=this.container;delete t.interactivity.mouse.position,t.interactivity.status=o.mouseLeaveEvent}mouseTouchClick(t){const i=this.container,e=i.options;e.polygon.enable&&e.polygon.type!==r.none&&e.polygon.type!==r.inline?i.polygon.checkInsidePolygon(i.interactivity.mouse.position)&&this.doMouseTouchClick(t):this.doMouseTouchClick(t)}doMouseTouchClick(t){const i=this.container,e=i.options;if(this.canPush){i.interactivity.mouse.position&&(i.interactivity.mouse.clickPosition={x:i.interactivity.mouse.position.x,y:i.interactivity.mouse.position.y}),i.interactivity.mouse.clickTime=(new Date).getTime();const t=e.interactivity.modes.push.quantity,o=e.interactivity.modes.remove.quantity;switch(e.interactivity.events.onClick.mode){case n.push:e.particles.move.enable||1===e.interactivity.modes.push.quantity?i.particles.push(t,i.interactivity.mouse):e.interactivity.modes.push.quantity>1&&i.particles.push(t);break;case n.remove:i.particles.removeQuantity(o);break;case n.bubble:i.bubble.clicking=!0;break;case n.repulse:i.repulse.clicking=!0,i.repulse.count=0,i.repulse.finish=!1,setTimeout(()=>{i.destroyed||(i.repulse.clicking=!1)},1e3*e.interactivity.modes.repulse.duration)}}t.preventDefault(),"touchend"===t.type&&setTimeout(()=>this.mouseTouchFinish(),500),t.preventDefault()}}!function(t){t.opacity="opacity",t.size="size"}(l||(l={})),function(t){t.bubble="bubble",t.connect="connect",t.grab="grab",t.repulse="repulse",t.slow="slow"}(c||(c={}));class k{constructor(t,i){this.container=t,this.particle=i}bubble(){const t=this.container.options,i=t.interactivity.events.onHover.enable,e=t.interactivity.events.onHover.mode,o=t.interactivity.events.onClick.enable,s=t.interactivity.events.onClick.mode;i&&m.isInArray(c.bubble,e)?this.hoverBubble():o&&m.isInArray(n.bubble,s)&&this.clickBubble()}init(){const t=this.particle;this.opacity=t.opacity.value,this.radius=t.radius}process(t,i,e){const o=this.container,s=o.options.interactivity.modes.bubble.duration,n=e.bubbleObj.optValue,a=o.retina.bubbleModeDistance,r=e.particlesObj.optValue,c=e.bubbleObj.value,h=e.particlesObj.value||0,d=e.type;if(n!==r)if(o.bubble.durationEnd){if(c){const t=2*n-h-i*(h-n)/s;d===l.size&&(this.radius=t),d===l.opacity&&(this.opacity=t)}}else if(t<=a){if((null!=c?c:h)!==n){const t=h-i*(h-n)/s;d===l.size&&(this.radius=t),d===l.opacity&&(this.opacity=t)}}else d===l.size&&(this.radius=void 0),d===l.opacity&&(this.opacity=void 0)}clickBubble(){const t=this.container,i=t.options,e=this.particle,o=t.interactivity.mouse.clickPosition||{x:0,y:0},s=m.getDistanceBetweenCoordinates(e.position,o),n=((new Date).getTime()-(t.interactivity.mouse.clickTime||0))/1e3;if(t.bubble.clicking){n>i.interactivity.modes.bubble.duration&&(t.bubble.durationEnd=!0),n>2*i.interactivity.modes.bubble.duration&&(t.bubble.clicking=!1,t.bubble.durationEnd=!1);const e={bubbleObj:{optValue:t.retina.bubbleModeSize,value:this.radius},particlesObj:{optValue:t.retina.sizeValue,value:this.particle.radius},type:l.size};this.process(s,n,e);const o={bubbleObj:{optValue:i.interactivity.modes.bubble.opacity,value:this.opacity},particlesObj:{optValue:i.particles.opacity.value,value:this.particle.opacity.value},type:l.opacity};this.process(s,n,o)}}hoverBubble(){const t=this.container,i=this.particle,e=t.interactivity.mouse.position||{x:0,y:0},s=m.getDistanceBetweenCoordinates(i.position,e),n=1-s/t.retina.bubbleModeDistance;s<=t.retina.bubbleModeDistance?n>=0&&t.interactivity.status===o.mouseMoveEvent&&(this.hoverBubbleSize(n),this.hoverBubbleOpacity(n)):this.init(),t.interactivity.status===o.mouseLeaveEvent&&this.init()}hoverBubbleSize(t){const i=this.container,e=i.options,o=this.particle,s=e.interactivity.modes.bubble.size,n=e.particles.size.value,a=o.radius;if(i.retina.bubbleModeSize>i.retina.sizeValue){const i=a+s*t;i>a&&i<=s&&(this.radius=i)}else if(i.retina.bubbleModeSize<i.retina.sizeValue){const i=a-(n-s)*t;i<a&&i>=s&&(this.radius=i)}}hoverBubbleOpacity(t){const i=this.container.options,e=this.particle,o=i.interactivity.modes.bubble.opacity,s=i.particles.opacity.value,n=e.opacity.value;if(o>s){const i=n+o*t;i>n&&i<=o&&(this.opacity=i)}else if(o<s){const i=n-(s-o)*t;i<n&&i>=o&&(this.opacity=i)}}}class P{constructor(t,i){this.container=t,this.particle=i}draw(){const t=this.container,i=this.particle;t.canvas.drawParticle(i)}}class C{constructor(t,i){this.container=t,this.particle=i}grab(){const t=this.container,i=t.options,e=this.particle,s=i.interactivity;if(s.events.onHover.enable&&t.interactivity.status===o.mouseMoveEvent){const i=t.interactivity.mouse.position||{x:0,y:0},o=m.getDistanceBetweenCoordinates(e.position,i);if(o<=t.retina.grabModeDistance){const n=s.modes.grab.lineLinked.opacity,a=n-o*n/t.retina.grabModeDistance;a>0&&t.canvas.drawGrabLine(e,a,i)}}}}!function(t){t.bounce="bounce",t.bounceHorizontal="bounce-horizontal",t.bounceVertical="bounce-vertical",t.out="out",t.destroy="destroy"}(h||(h={})),function(t){t.repulse="repulse"}(d||(d={}));class S{constructor(t,i){this.container=t,this.particle=i}repulse(){const t=this.container,i=t.options,e=i.interactivity.events.onHover.enable,s=i.interactivity.events.onClick.enable,a=t.interactivity.status===o.mouseMoveEvent,r=i.interactivity.events.onHover.mode,l=i.interactivity.events.onClick.mode,h=i.interactivity.events.onDiv.mode;a&&e&&m.isInArray(c.repulse,r)?this.hoverRepulse():s&&m.isInArray(n.repulse,l)?this.clickRepulse():i.interactivity.events.onDiv.enable&&m.isInArray(d.repulse,h)&&this.divRepulse()}divRepulse(){const t=this.container,i=t.options,e=this.particle,o=document.getElementById(i.interactivity.events.onDiv.elementId),s={x:o.offsetLeft+o.offsetWidth/2,y:o.offsetTop+o.offsetHeight/2};let n=o.offsetWidth/2;t.retina.isRetina&&(s.x*=t.retina.pxRatio,s.y*=t.retina.pxRatio,n*=t.retina.pxRatio);const a=e.position.x-s.x,r=e.position.y-s.y,l=Math.sqrt(a*a+r*r),c=a/l,h=r/l,d=n,u=m.clamp(100*(1-Math.pow(l/d,4)),0,50);this.particle.position.x+=c*u,this.particle.position.y+=h*u}clickRepulse(){const t=this.container,i=this.particle;if(t.repulse.finish||(t.repulse.count||(t.repulse.count=0),t.repulse.count++,t.repulse.count===t.particles.count&&(t.repulse.finish=!0)),t.repulse.clicking){const e=t.retina.repulseModeDistance,o=Math.pow(e/6,3),s=t.interactivity.mouse.clickPosition||{x:0,y:0},n=s.x-i.position.x,a=s.y-i.position.y,r=n*n+a*a,l=-o/r;r<=o&&this.processRepulse(n,a,l)}else!1===t.repulse.clicking&&(i.velocity.horizontal=i.initialVelocity.horizontal,i.velocity.vertical=i.initialVelocity.vertical)}hoverRepulse(){const t=this.container,i=t.options,e=this.particle,o=t.interactivity.mouse.position||{x:0,y:0},s=e.position.x-o.x,n=e.position.y-o.y,a=Math.sqrt(s*s+n*n),r=s/a,l=n/a,c=t.retina.repulseModeDistance,d=m.clamp(100*(1-Math.pow(a/c,2)),0,50),u={x:e.position.x+r*d,y:e.position.y+l*d},p=i.particles.move.outMode;if(p===h.bounce||p===h.bounceVertical||p===h.bounceHorizontal){const i={horizontal:u.x-e.radius>0&&u.x+e.radius<t.canvas.dimension.width,vertical:u.y-e.radius>0&&u.y+e.radius<t.canvas.dimension.height};(p===h.bounceVertical||i.horizontal)&&(e.position.x=u.x),(p===h.bounceHorizontal||i.vertical)&&(e.position.y=u.y)}else e.position.x=u.x,e.position.y=u.y}processRepulse(t,i,e){const o=this.container,s=o.options,n=this.particle,a=Math.atan2(i,t);n.velocity.horizontal=e*Math.cos(a),n.velocity.vertical=e*Math.sin(a);const r=s.particles.move.outMode;if(r===h.bounce||r===h.bounceHorizontal||r===h.bounceVertical){const t={x:n.position.x+n.velocity.horizontal,y:n.position.y+n.velocity.vertical};r!==h.bounceVertical&&(t.x+n.radius>o.canvas.dimension.width||t.x-n.radius<0)&&(n.velocity.horizontal=-n.velocity.horizontal),r!==h.bounceHorizontal&&(t.y+n.radius>o.canvas.dimension.height||t.y-n.radius<0)&&(n.velocity.vertical=-n.velocity.vertical)}}}!function(t){t.char="char",t.character="character",t.circle="circle",t.edge="edge",t.heart="heart",t.image="image",t.line="line",t.polygon="polygon",t.square="square",t.star="star",t.triangle="triangle"}(u||(u={}));class M{constructor(t,i){this.container=t,this.particle=i}move(t){const i=this.container,e=i.options,o=this.particle;if(e.particles.move.enable){const s=this.getProximitySpeedFactor(),n=e.fpsLimit>0?60*t/1e3:3.6,a=i.retina.moveSpeed/2*s*n;o.position.x+=o.velocity.horizontal*a,o.position.y+=o.velocity.vertical*a}this.moveParallax()}moveParallax(){const t=this.container,i=t.options;if(!i.interactivity.events.onHover.parallax.enable)return;const e=this.particle,o=i.interactivity.events.onHover.parallax.force,s=t.interactivity.mouse.position||{x:0,y:0},n=window.innerHeight/2,a=window.innerWidth/2,r=i.interactivity.events.onHover.parallax.smooth,l=(s.x-a)*(e.radius/o),c=(s.y-n)*(e.radius/o);e.offset.x+=(l-e.offset.x)/r,e.offset.y+=(c-e.offset.y)/r}getProximitySpeedFactor(){const t=this.container,i=t.options,e=this.particle;if(!m.isInArray(c.slow,i.interactivity.events.onHover.mode))return 1;const o=this.container.interactivity.mouse.position;if(!o)return 1;const s=e.position,n=m.getDistanceBetweenCoordinates(o,s),a=t.retina.slowModeRadius;return n>a?1:(n/a||0)/i.interactivity.modes.slow.factor}}!function(t){t.clockwise="clockwise",t.counterClockwise="counter-clockwise",t.random="random"}(p||(p={}));class L{constructor(t,i){this.container=t,this.particle=i,this.mover=new M(t,i)}static checkBounds(t,i,e,o){(t+i>e||t-i<0)&&o()}update(t){this.mover.move(t),this.updateOpacity(),this.updateSize(),this.updateAngle(),this.fixOutOfCanvasPosition(),this.updateOutMode()}updateOpacity(){const t=this.container.options,i=this.particle;t.particles.opacity.animation.enable&&(i.opacity.status?(i.opacity.value>=t.particles.opacity.value&&(i.opacity.status=!1),i.opacity.value+=i.opacity.velocity||0):(i.opacity.value<=t.particles.opacity.animation.minimumValue&&(i.opacity.status=!0),i.opacity.value-=i.opacity.velocity||0),i.opacity.value<0&&(i.opacity.value=0))}updateSize(){const t=this.container,i=t.options,e=this.particle;i.particles.size.animation.enable&&(e.size.status?(e.radius>=t.retina.sizeValue&&(e.size.status=!1),e.radius+=e.size.velocity||0):(e.radius<=i.particles.size.animation.minimumValue&&(e.size.status=!0),e.radius-=e.size.velocity||0),e.radius<0&&(e.radius=0))}updateAngle(){const t=this.container.options,i=this.particle;if(t.particles.rotate.animation.enable)switch(i.rotateDirection){case p.clockwise:i.angle+=t.particles.rotate.animation.speed*Math.PI/18,i.angle>360&&(i.angle-=360);break;case p.counterClockwise:default:i.angle-=t.particles.rotate.animation.speed*Math.PI/18,i.angle<0&&(i.angle+=360)}}fixOutOfCanvasPosition(){const t=this.container,i=t.options,e=this.particle,o=i.particles.move.outMode,s=t.canvas.dimension;let n;if(n=o===h.bounce?{bottom:s.height,left:e.radius,right:s.width,top:e.radius}:o===h.bounceHorizontal?{bottom:s.height+e.radius-e.offset.y,left:e.radius,right:s.width,top:-e.radius-e.offset.y}:o===h.bounceVertical?{bottom:s.height,left:-e.radius-e.offset.x,right:s.width+e.radius+e.offset.x,top:e.radius}:{bottom:s.height+e.radius-e.offset.y,left:-e.radius-e.offset.x,right:s.width+e.radius+e.offset.x,top:-e.radius-e.offset.y},o===h.destroy)m.isPointInside(e.position,t.canvas.dimension,e.radius)||t.particles.remove(e);else{const t=m.calculateBounds(e.position,e.radius);t.left>s.width-e.offset.x?(e.position.x=n.left,e.position.y=Math.random()*s.height):t.right<-e.offset.x&&(e.position.x=n.right,e.position.y=Math.random()*s.height),t.top>s.height-e.offset.y?(e.position.y=n.top,e.position.x=Math.random()*s.width):t.bottom<-e.offset.y&&(e.position.y=n.bottom,e.position.x=Math.random()*s.width)}}updateOutMode(){switch(this.container.options.particles.move.outMode){case h.bounce:case h.bounceVertical:case h.bounceHorizontal:this.updateBounce()}}updateBounce(){const t=this.container,i=t.options,e=this.particle;if(i.polygon.enable&&i.polygon.type!==r.none&&i.polygon.type!==r.inline)t.polygon.checkInsidePolygon(e.position)||this.polygonBounce();else if(i.polygon.enable&&i.polygon.type===r.inline){if(e.initialPosition){m.getDistanceBetweenCoordinates(e.initialPosition,e.position)>t.retina.polygonMaskMoveRadius&&this.polygonBounce()}}else{const o=i.particles.move.outMode,s=e.position.x+e.offset.x,n=e.position.y+e.offset.y;o!==h.bounce&&o!==h.bounceHorizontal||L.checkBounds(s,e.radius,t.canvas.dimension.width,()=>{e.velocity.horizontal=-e.velocity.horizontal}),o!==h.bounce&&o!==h.bounceVertical||L.checkBounds(n,e.radius,t.canvas.dimension.height,()=>{e.velocity.vertical=-e.velocity.vertical})}}polygonBounce(){const t=this.particle;t.velocity.horizontal=-t.velocity.horizontal+t.velocity.vertical/2,t.velocity.vertical=-t.velocity.vertical+t.velocity.horizontal/2}}class A{constructor(t,i){this.container=t,this.particle=i}connect(t){const i=this.container,e=i.options,o=this.particle;if(e.interactivity.events.onHover.enable&&"mousemove"==i.interactivity.status){const e=Math.abs(o.position.x-t.position.x),s=Math.abs(o.position.y-t.position.y),n=i.interactivity.mouse.position||{x:0,y:0},a=Math.abs(o.position.x-n.x),r=Math.abs(o.position.y-n.y),l=Math.abs(i.retina.connectModeDistance),c=Math.abs(i.retina.connectModeRadius);e<l&&s<l&&a<c&&r<c&&i.canvas.drawConnectLine(o,t)}}}class R{constructor(t,i){this.container=t,this.particle=i}link(t){const i=this.container,e=i.options,s=this.particle,n={x:s.position.x+s.offset.x,y:s.position.y+s.offset.y},a={x:t.position.x+t.offset.x,y:t.position.y+t.offset.y},r=m.getDistanceBetweenCoordinates(n,a),l=e.particles.lineLinked.opacity,c=i.retina.lineLinkedDistance;if(r<=c){const h=l-r*l/c;if(h>0){if(!i.particles.lineLinkedColor){const t=e.particles.lineLinked.color;t===o.randomColorValue?e.particles.lineLinked.consent?i.particles.lineLinkedColor=b.stringToRgb(t):e.particles.lineLinked.blink?i.particles.lineLinkedColor=o.randomColorValue:i.particles.lineLinkedColor="mid":i.particles.lineLinkedColor="string"==typeof t?b.stringToRgb(t):b.colorToRgb(t)}i.canvas.drawLinkedLine(s,t,n,a,h)}}}}class T{constructor(t,i){this.container=t,this.particle=i}attract(t){const i=this.container,e=i.options,o=this.particle,s=o.position.x-t.position.x,n=o.position.y-t.position.y;if(Math.sqrt(s*s+n*n)<=i.retina.lineLinkedDistance){const i=s/(1e3*e.particles.move.attract.rotate.x),a=n/(1e3*e.particles.move.attract.rotate.y);o.velocity.horizontal-=i,o.velocity.vertical-=a,t.velocity.horizontal+=i,t.velocity.vertical+=a}}}class z{constructor(t,i){this.container=t,this.particle=i}collide(t){const i=this.particle;i!==t&&m.getDistanceBetweenCoordinates(i.position,t.position)<=(i.bubbler.radius||i.radius)+(t.bubbler.radius||t.radius)&&(i.resetVelocity(),t.resetVelocity())}}class E{constructor(t,i){this.container=t,this.linker=new R(t,i),this.attracter=new T(t,i),this.collider=new z(t,i)}interact(t){const i=this.container.options;i.particles.lineLinked.enable&&this.linker.link(t),i.particles.move.attract.enable&&this.attracter.attract(t),i.particles.move.collisions&&this.collider.collide(t)}}class O{constructor(t,i){var e,o,s,n,a,l,c,h;this.container=t;const d=t.options,v=d.particles.color;if(this.size={},this.angle=d.particles.rotate.random?360*Math.random():d.particles.rotate.value,d.particles.rotate.direction==p.random){const t=Math.floor(2*Math.random());this.rotateDirection=t>0?p.counterClockwise:p.clockwise}else this.rotateDirection=d.particles.rotate.direction;const y=d.particles.size.random,g=t.retina.sizeValue;this.radius=y.enable?m.randomInRange(y.minimumValue,g):g,d.particles.size.animation.enable&&(this.size.status=!1,this.size.velocity=t.retina.sizeAnimationSpeed/100,d.particles.size.animation.sync||(this.size.velocity=this.size.velocity*Math.random())),d.particles.rotate.animation.enable&&(d.particles.rotate.animation.sync||(this.angle=360*Math.random())),this.position=this.calcPosition(this.container,i),d.polygon.enable&&d.polygon.type===r.inline&&(this.initialPosition={x:this.position.x,y:this.position.y}),this.offset={x:0,y:0},d.particles.move.collisions&&this.checkOverlap(i),this.color=v instanceof Array?b.colorToRgb(m.itemFromArray(v)):b.colorToRgb(v);const f=d.particles.opacity.random,w=d.particles.opacity.value;this.opacity={value:f.enable?m.randomInRange(f.minimumValue,w):w},d.particles.opacity.animation.enable&&(this.opacity.status=!1,this.opacity.velocity=d.particles.opacity.animation.speed/100,d.particles.opacity.animation.sync||(this.opacity.velocity*=Math.random())),this.initialVelocity=O.calculateVelocity(d),this.velocity={horizontal:this.initialVelocity.horizontal,vertical:this.initialVelocity.vertical},this.fill=!0,this.close=!0;const x=d.particles.shape.type;if(this.shape=x instanceof Array?m.itemFromArray(x):x,this.shape===u.image){const i=d.particles.shape,s=m.arrayRandomIndex(t.images),n=t.images[s],a=i.image instanceof Array?i.image[s]:i.image;this.image={data:n,ratio:a.width/a.height,replaceColor:a.replaceColor,src:a.src},this.image.ratio||(this.image.ratio=1),this.fill=null!==(e=a.fill)&&void 0!==e?e:this.fill,this.close=null!==(o=a.close)&&void 0!==o?o:this.close}if(this.shape===u.polygon&&(d.particles.shape.polygon instanceof Array?this.polygon=m.itemFromArray(d.particles.shape.polygon):this.polygon=d.particles.shape.polygon,this.fill=null!==(s=this.polygon.fill)&&void 0!==s?s:this.fill,this.close=null!==(n=this.polygon.close)&&void 0!==n?n:this.close),d.particles.stroke instanceof Array?this.stroke=m.itemFromArray(d.particles.stroke):this.stroke=d.particles.stroke,this.strokeColor="string"==typeof this.stroke.color?b.stringToRgb(this.stroke.color):b.colorToRgb(this.stroke.color),this.shadowColor="string"==typeof d.particles.shadow.color?b.stringToRgb(d.particles.shadow.color):b.colorToRgb(d.particles.shadow.color),this.shape===u.char||this.shape===u.character){d.particles.shape.character instanceof Array?this.character=m.itemFromArray(d.particles.shape.character):this.character=d.particles.shape.character;const t=this.character.value;this.text=t instanceof Array?m.itemFromArray(t):t,this.fill=null!==(a=this.character.fill)&&void 0!==a?a:this.fill,this.close=null!==(l=this.character.close)&&void 0!==l?l:this.close}const M=d.particles.shape.custom[this.shape];M&&(this.shapeData=M instanceof Array?m.itemFromArray(M):M,this.fill=null!==(c=this.shapeData.fill)&&void 0!==c?c:this.fill,this.close=null!==(h=this.shapeData.close)&&void 0!==h?h:this.close),this.updater=new L(this.container,this),this.bubbler=new k(this.container,this),this.repulser=new S(this.container,this),this.drawer=new P(this.container,this),this.grabber=new C(this.container,this),this.connecter=new A(this.container,this),this.interactionManager=new E(this.container,this)}static calculateVelocity(t){const i=m.getParticleBaseVelocity(t),e={horizontal:0,vertical:0};return t.particles.move.straight?(e.horizontal=i.x,e.vertical=i.y,t.particles.move.random&&(e.horizontal*=Math.random(),e.vertical*=Math.random())):(e.horizontal=i.x+Math.random()-.5,e.vertical=i.y+Math.random()-.5),e}resetVelocity(){const t=this.container.options,i=O.calculateVelocity(t);this.velocity.horizontal=i.horizontal,this.velocity.vertical=i.vertical}update(t,i){const e=this.container,o=e.options;this.updater.update(i);const s=o.interactivity.events.onHover.mode,a=o.interactivity.events.onClick.mode;if(m.isInArray(c.grab,s)&&this.grabber.grab(),m.isInArray(c.connect,o.interactivity.events.onHover.mode))for(let i=t+1;i<e.particles.count;i++){const t=e.particles.array[i];this.connecter.connect(t)}(m.isInArray(c.bubble,s)||m.isInArray(n.bubble,a))&&this.bubbler.bubble(),(m.isInArray(c.repulse,s)||m.isInArray(n.repulse,a))&&this.repulser.repulse()}interact(t){this.interactionManager.interact(t)}draw(){this.drawer.draw()}isOverlapping(){const t=this.container,i=this;let e=!1,o=0;for(const s of t.particles.array.filter(t=>t!=i)){if(o++,m.getDistanceBetweenCoordinates(i.position,s.position)<=i.radius+s.radius){e=!0;break}}return{collisionFound:e,iterations:o}}checkOverlap(t){const i=this.container,e=this,o=e.isOverlapping();o.iterations>=i.particles.count?i.particles.remove(this):o.collisionFound&&(e.position.x=t?t.x:Math.random()*i.canvas.dimension.width,e.position.y=t?t.y:Math.random()*i.canvas.dimension.height,e.checkOverlap())}calcPosition(t,i){var e,o;const s={x:0,y:0};if(t.options.polygon.enable&&(null!==(o=null===(e=t.polygon.raw)||void 0===e?void 0:e.length)&&void 0!==o?o:0)>0)if(i)s.x=i.x,s.y=i.y;else{const i=t.polygon.randomPointInPolygon();s.x=i.x,s.y=i.y}else s.x=i?i.x:Math.random()*t.canvas.dimension.width,s.y=i?i.y:Math.random()*t.canvas.dimension.height,s.x>t.canvas.dimension.width-2*this.radius?s.x-=this.radius:s.x<2*this.radius&&(s.x+=this.radius),s.y>t.canvas.dimension.height-2*this.radius?s.y-=this.radius:s.y<2*this.radius&&(s.y+=this.radius);return s}}!function(t){t.equidistant="equidistant",t.onePerPoint="one-per-point",t.perPoint="per-point",t.randomLength="random-length",t.randomPoint="random-point"}(v||(v={}));class _{constructor(t){this.container=t,this.array=[],this.interactionsEnabled=!1}get count(){return this.array.length}init(){const t=this.container,i=t.options;if(!i.polygon.enable||i.polygon.type!==r.inline||i.polygon.inline.arrangement!==v.onePerPoint&&i.polygon.inline.arrangement!==v.perPoint)for(let e=this.array.length;e<i.particles.number.value;e++)this.addParticle(new O(t));else t.polygon.drawPointsOnPolygonPath();this.interactionsEnabled=i.particles.lineLinked.enable||i.particles.move.attract.enable||i.particles.move.collisions}redraw(){this.clear(),this.init(),this.draw(0)}removeAt(t,i){t>=0&&t<=this.count&&this.array.splice(t,null!=i?i:1)}remove(t){this.removeAt(this.array.indexOf(t))}update(t){for(let i=0;i<this.array.length;i++){const e=this.array[i];if(e.update(i,t),this.interactionsEnabled)for(let t=i+1;t<this.array.length;t++){const i=this.array[t];e.interact(i)}}}draw(t){const i=this.container,e=i.options;i.canvas.clear(),this.update(t),e.polygon.enable&&e.polygon.draw.enable&&i.polygon.drawPolygon();for(const t of this.array)t.draw()}clear(){this.array=[]}push(t,i){var e;const o=this.container,s=o.options;let n;this.pushing=!0,s.particles.number.limit>0&&this.array.length+t>s.particles.number.limit&&this.removeQuantity(this.array.length+t-s.particles.number.limit),i&&(n=null!==(e=i.position)&&void 0!==e?e:{x:0,y:0});for(let i=0;i<t;i++)this.addParticle(new O(o,n));s.particles.move.enable||this.container.play(),this.pushing=!1}addParticle(t){this.array.push(t)}removeQuantity(t){const i=this.container.options;this.removeAt(0,t),i.particles.move.enable||this.container.play()}}class V{constructor(t){this.container=t,this.isRetina=!1,this.bubbleModeDistance=0,this.bubbleModeSize=0,this.connectModeDistance=0,this.connectModeRadius=0,this.grabModeDistance=0,this.repulseModeDistance=0,this.slowModeRadius=0,this.lineLinkedDistance=0,this.lineLinkedWidth=0,this.moveSpeed=0,this.sizeValue=0,this.sizeAnimationSpeed=0,this.polygonMaskMoveRadius=0,this.pxRatio=1}init(){const t=this.container,i=t.options;i.detectRetina&&window.devicePixelRatio>1?(this.pxRatio=window.devicePixelRatio,this.isRetina=!0):(this.pxRatio=1,this.isRetina=!1);const e=this.pxRatio;t.canvas.element&&(t.canvas.dimension.width=t.canvas.element.offsetWidth*e,t.canvas.dimension.height=t.canvas.element.offsetHeight*e),this.bubbleModeDistance=i.interactivity.modes.bubble.distance*e,this.bubbleModeSize=i.interactivity.modes.bubble.size*e,this.connectModeDistance=i.interactivity.modes.connect.distance*e,this.connectModeRadius=i.interactivity.modes.connect.radius*e,this.grabModeDistance=i.interactivity.modes.grab.distance*e,this.repulseModeDistance=i.interactivity.modes.repulse.distance*e,this.slowModeRadius=i.interactivity.modes.slow.radius*e,this.lineLinkedDistance=i.particles.lineLinked.distance*e,this.lineLinkedWidth=i.particles.lineLinked.width*e,this.moveSpeed=i.particles.move.speed*e,this.sizeValue=i.particles.size.value*e,this.sizeAnimationSpeed=i.particles.size.animation.speed*e,this.polygonMaskMoveRadius=i.polygon.move.radius*e}reset(){}}var I,H=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 F{constructor(t){this.container=t,this.dimension={height:0,width:0},this.polygonPathLength=0,this.path2DSupported=window.hasOwnProperty("Path2D")}checkInsidePolygon(t){const i=this.container,e=i.options;if(!e.polygon.enable||e.polygon.type===r.none||e.polygon.type===r.inline)return!0;if(!this.raw)return console.error("No polygon found, you need to specify SVG url in config."),!0;const o=t?t.x:Math.random()*i.canvas.dimension.width,s=t?t.y:Math.random()*i.canvas.dimension.height;let n=!1;for(let t=0,i=this.raw.length-1;t<this.raw.length;i=t++){const e=this.raw[t].x,a=this.raw[t].y,r=this.raw[i].x,l=this.raw[i].y;a>s!=l>s&&o<(r-e)*(s-a)/(l-a)+e&&(n=!n)}return e.polygon.type===r.inside?n:e.polygon.type===r.outside&&!n}redraw(){const t=this.container,i=t.options;i.polygon.enable&&i.polygon.type!==r.none&&(this.redrawTimeout&&clearTimeout(this.redrawTimeout),this.redrawTimeout=setTimeout(()=>{this.parseSvgPathToPolygon().then(i=>{this.raw=i,this.createPath2D(),t.particles.redraw()})},250))}init(){return H(this,void 0,void 0,(function*(){const t=this.container.options;t.polygon.enable&&t.polygon.url&&(this.raw=yield this.parseSvgPathToPolygon(t.polygon.url),this.createPath2D())}))}reset(){delete this.raw,delete this.path,delete this.svg}randomPointInPolygon(){const t=this.container,i=t.options;let e;if(i.polygon.type===r.inline)switch(i.polygon.inline.arrangement){case v.randomPoint:e=this.getRandomPointOnPolygonPath();break;case v.randomLength:e=this.getRandomPointOnPolygonPathByLength();break;case v.equidistant:e=this.getEquidistantPointOnPolygonPathByIndex(t.particles.count);break;case v.onePerPoint:case v.perPoint:default:e=this.getPoingOnPolygonPathByIndex(t.particles.count)}else e={x:Math.random()*t.canvas.dimension.width,y:Math.random()*t.canvas.dimension.height};return this.checkInsidePolygon(e)?e:this.randomPointInPolygon()}parseSvgPathToPolygon(t){return H(this,void 0,void 0,(function*(){const i=this.container,e=i.options,o=t||e.polygon.url;if(!this.path||!this.svg){const t=yield fetch(o);if(!t.ok)return void console.error("tsParticles Error - during polygon mask download");{const i=yield t.text(),e=(new DOMParser).parseFromString(i,"image/svg+xml");this.svg=e.getElementsByTagName("svg")[0],this.path=e.getElementsByTagName("path")[0],this.path&&(this.polygonPathLength=this.path.getTotalLength())}}const s=e.polygon.scale;this.dimension.width=parseFloat(this.svg.getAttribute("width")||"0")*s,this.dimension.height=parseFloat(this.svg.getAttribute("height")||"0")*s,this.offset={x:i.canvas.dimension.width/2-this.dimension.width/2,y:i.canvas.dimension.height/2-this.dimension.height/2};const n=this.path.pathSegList.numberOfItems,a=[],r={x:0,y:0};for(let t=0;t<n;t++){const i=this.path.pathSegList.getItem(t);switch(i.pathSegType){case window.SVGPathSeg.PATHSEG_MOVETO_ABS:case window.SVGPathSeg.PATHSEG_LINETO_ABS:case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:case window.SVGPathSeg.PATHSEG_ARC_ABS:case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:const t=i;r.x=t.x,r.y=t.y;break;case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:r.x=i.x;break;case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:r.y=i.y;break;case window.SVGPathSeg.PATHSEG_LINETO_REL:case window.SVGPathSeg.PATHSEG_MOVETO_REL:case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:case window.SVGPathSeg.PATHSEG_ARC_REL:case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:const e=i;r.x+=e.x,r.y+=e.y;break;case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:r.x+=i.x;break;case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:r.y+=i.y;break;case window.SVGPathSeg.PATHSEG_UNKNOWN:case window.SVGPathSeg.PATHSEG_CLOSEPATH:continue}a.push({x:r.x*s+this.offset.x,y:r.y*s+this.offset.y})}return a}))}drawPolygon(){this.container.canvas.drawPolygonMask()}drawPointsOnPolygonPath(){const t=this.container;if(this.raw)for(const i of this.raw){const e={x:i.x,y:i.y};t.particles.addParticle(new O(t,e))}}getRandomPointOnPolygonPath(){if(!this.raw||!this.raw.length)throw new Error("No polygon data loaded.");const t=m.itemFromArray(this.raw);return{x:t.x,y:t.y}}getRandomPointOnPolygonPathByLength(){var t,i;const e=this.container.options;if(!this.raw||!this.raw.length||!this.path)throw new Error("No polygon data loaded.");const o=Math.floor(Math.random()*this.polygonPathLength)+1,s=this.path.getPointAtLength(o);return{x:s.x*e.polygon.scale+((null===(t=this.offset)||void 0===t?void 0:t.x)||0),y:s.y*e.polygon.scale+((null===(i=this.offset)||void 0===i?void 0:i.y)||0)}}getEquidistantPointOnPolygonPathByIndex(t){var i,e;const o=this.container.options;if(!this.raw||!this.raw.length||!this.path)throw new Error("No polygon data loaded.");const s=this.polygonPathLength/o.particles.number.value*t,n=this.path.getPointAtLength(s);return{x:n.x*o.polygon.scale+((null===(i=this.offset)||void 0===i?void 0:i.x)||0),y:n.y*o.polygon.scale+((null===(e=this.offset)||void 0===e?void 0:e.y)||0)}}getPoingOnPolygonPathByIndex(t){if(!this.raw||!this.raw.length)throw new Error("No polygon data loaded.");const i=this.raw[t%this.raw.length];return{x:i.x,y:i.y}}createPath2D(){var t;if(!this.path2DSupported)return;const i=null===(t=this.path)||void 0===t?void 0:t.getAttribute("d");if(i){const t=new Path2D(i),e=document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGMatrix(),o=new Path2D,s=e.scale(this.container.options.polygon.scale);o.addPath?(o.addPath(t,s),this.polygonPath=o):delete this.polygonPath}else delete this.polygonPath;!this.polygonPath&&this.raw&&(this.polygonPath=new Path2D,this.polygonPath.moveTo(this.raw[0].x,this.raw[0].y),this.raw.forEach((t,i)=>{var e;i>0&&(null===(e=this.polygonPath)||void 0===e||e.lineTo(t.x,t.y))}),this.polygonPath.closePath())}}class D{constructor(t){this.container=t}nextFrame(t){const i=this.container,e=i.options,o=e.fpsLimit>0?e.fpsLimit:60;if(void 0!==i.lastFrameTime&&t<i.lastFrameTime+1e3/o)return void i.play();const s=t-i.lastFrameTime;i.lastFrameTime=t,i.particles.draw(s),e.particles.move.enable?i.play():i.pause()}}class B{constructor(){this.enable=!1,this.mode=[]}load(t){void 0!==t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.mode&&(this.mode=t.mode))}}class G{constructor(){this.elementId="repulse-div",this.enable=!1,this.mode=[]}get el(){return this.elementId}set el(t){this.elementId=t}load(t){var i;if(void 0!==t){const e=null!==(i=t.elementId)&&void 0!==i?i:t.el;void 0!==e&&(this.elementId=e),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.mode&&(this.mode=t.mode)}}}class q{constructor(){this.enable=!1,this.force=2,this.smooth=10}load(t){void 0!==t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.force&&(this.force=t.force),void 0!==t.smooth&&(this.smooth=t.smooth))}}class N{constructor(){this.enable=!1,this.mode=[],this.parallax=new q}load(t){void 0!==t&&(void 0!==t.enable&&(this.enable=t.enable),void 0!==t.mode&&(this.mode=t.mode),this.parallax.load(t.parallax))}}class W{constructor(){this.onClick=new B,this.onDiv=new G,this.onHover=new N,this.resize=!0}get onclick(){return this.onClick}set onclick(t){this.onClick=t}get ondiv(){return this.onDiv}set ondiv(t){this.onDiv=t}get onhover(){return this.onHover}set onhover(t){this.onHover=t}load(t){var i,e,o;void 0!==t&&(this.onClick.load(null!==(i=t.onClick)&&void 0!==i?i:t.onclick),this.onDiv.load(null!==(e=t.onDiv)&&void 0!==e?e:t.ondiv),this.onHover.load(null!==(o=t.onHover)&&void 0!==o?o:t.onhover),void 0!==t.resize&&(this.resize=t.resize))}}class U{constructor(){this.distance=200,this.duration=.4,this.opacity=1,this.size=80}load(t){void 0!==t&&(void 0!==t.distance&&(this.distance=t.distance),void 0!==t.duration&&(this.duration=t.duration),void 0!==t.opacity&&(this.opacity=t.opacity),void 0!==t.size&&(this.size=t.size))}}class j{constructor(){this.opacity=.5}load(t){void 0!==t&&void 0!==t.opacity&&(this.opacity=t.opacity)}}class ${constructor(){this.distance=80,this.lineLinked=new j,this.radius=60}get line_linked(){return this.lineLinked}set line_linked(t){this.lineLinked=t}load(t){var i;if(void 0!==t){void 0!==t.distance&&(this.distance=t.distance);const e=null!==(i=t.lineLinked)&&void 0!==i?i:t.line_linked;void 0!==e&&this.lineLinked.load(e),void 0!==t.radius&&(this.radius=t.radius)}}}class J{constructor(){this.opacity=1}load(t){void 0!==t&&void 0!==t.opacity&&(this.opacity=t.opacity)}}class X{constructor(){this.distance=100,this.lineLinked=new J}get line_linked(){return this.lineLinked}set line_linked(t){this.lineLinked=t}load(t){var i;if(void 0!==t){void 0!==t.distance&&(this.distance=t.distance);const e=null!==(i=t.lineLinked)&&void 0!==i?i:t.line_linked;void 0!==e&&this.lineLinked.load(e)}}}class Y{constructor(){this.quantity=2}get particles_nb(){return this.quantity}set particles_nb(t){this.quantity=t}load(t){var i;if(void 0!==t){const e=null!==(i=t.quantity)&&void 0!==i?i:t.particles_nb;void 0!==e&&(this.quantity=e)}}}class Q{constructor(){this.quantity=4}get particles_nb(){return this.quantity}set particles_nb(t){this.quantity=t}load(t){var i;if(void 0!==t){const e=null!==(i=t.quantity)&&void 0!==i?i:t.particles_nb;void 0!==e&&(this.quantity=e)}}}class Z{constructor(){this.distance=200,this.duration=.4}load(t){void 0!==t&&(void 0!==t.distance&&(this.distance=t.distance),void 0!==t.duration&&(this.duration=t.duration))}}class K{constructor(){this.factor=1,this.radius=0}get active(){return!1}set active(t){}load(t){void 0!==t&&(void 0!==t.factor&&(this.factor=t.factor),void 0!==t.radius&&(this.radius=t.radius))}}class tt{constructor(){this.bubble=new U,this.connect=new $,this.grab=new X,this.push=new Q,t