{"version":3,"mappings":"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","names":["generatedAttribute","mouseDownEvent","mouseUpEvent","mouseLeaveEvent","mouseOutEvent","mouseMoveEvent","touchStartEvent","touchEndEvent","touchMoveEvent","touchCancelEvent","resizeEvent","visibilityChangeEvent","errorPrefix","percentDenominator","halfRandom","millisecondsToSeconds","isBoolean","arg","isString","isNumber","isObject","isArray","origin","squareExp","inverseFactorNumerator","Vector3d","xOrCoords","y","z","angle","length","coords3d","source","x","v","n","c","v3d","Vector","_random","easings","double","doublePI","addEasing","name","easing","getEasing","value","getRandom","clamp","num","min","max","mix","comp1","comp2","weight1","weight2","randomInRange","r","getRangeMax","minOffset","getRangeMin","getRangeValue","setRangeValue","getDistances","pointA","pointB","dx","dy","getDistance","degToRad","degrees","getParticleDirectionAngle","direction","position","center","empty","half","quarter","threeQuarter","getParticleBaseVelocity","baseVelocity","collisionVelocity","v1","v2","m1","m2","calcExactPositionOrRandomFromSize","data","_a","_b","parseAlpha","input","_logger","getLogger","rectSideBounce","res","pSide","pOtherSide","rectSide","rectOtherSide","velocity","factor","minVelocity","checkSelector","element","selectors","executeOnSingleOrMultiple","selector","t","isSsr","hasMatchMedia","safeMatchMedia","query","safeIntersectionObserver","callback","safeMutationObserver","isInArray","array","loadFont","font","weight","arrayRandomIndex","itemFromArray","index","useIndex","isPointInside","point","size","offset","radius","areBoundsInside","calculateBounds","bounds","inside","deepExtend","destination","sources","sourceIsArray","key","sourceDict","destDict","isDivModeEnabled","mode","divs","findItemFromSingleOrMultiple","divModeExecute","div","divMode","singleDivModeExecute","circleBounceDataFromParticle","p","circleBounce","p1","p2","xVelocityDiff","yVelocityDiff","pos1","pos2","xDist","yDist","minimumDistance","u1","u2","vFinal1","vFinal2","rectBounce","particle","divBounds","pPos","bounceOptions","resH","resV","obj","item","itemFromSingleOrMultiple","initParticleNumericAnimationValue","options","pxRatio","valueRange","animationOptions","decayOffset","autoStatus","getPositionOrSize","positionOrSize","canvasSize","_","rest","getPosition","checkDestroy","destroyType","minValue","maxValue","updateAnimation","changeDirection","delta","decay","EventDispatcher","type","listener","arr","args","listeners","handler","idx","deleteCount","getItemsFromInitializer","container","map","initializers","force","getDataFromUrl","url","response","Engine","config","effect","drawer","refresh","interactorInitializer","moverInitializer","updaterInitializer","generator","plugin","preset","override","shape","dom","params","id","domContainer","currentOptions","oldIndex","minIndex","old","canvasEl","existingCanvases","Container","__vitePreload","Container$1","newItem","sourceOptions","updaters","updater","domItem","randomColorValue","midColorValue","colorManagers","addColorManager","manager","stringToRgba","shorthandRegex","hexFixed","g","b","a","regex","result","radix","defaultAlpha","alphaFactor","rangeColorToRgb","color","colorToRgb","getRandomRgbColor","stringToRgb","rangeColorToHsl","rgb","rgbToHsl","r1","g1","b1","hslToRgb","hsl","h","s","l","hNormalized","sNormalized","lNormalized","rgbFactor","triple","grayscaleValue","channel","temp1","temp2","temp3","temp3Offset","sNormalizedOffset","phaseNumerator","phaseThird","red","green","blue","hslaToRgba","hsla","rgbResult","fixedMin","rgbMax","getStyleFromRgb","opacity","getStyleFromHsl","colorMix","color1","color2","size1","size2","rgb1","rgb2","getLinkColor","linkColor","sourceColor","destColor","hslColor","getLinkRandomColor","optColor","blink","consent","getHslFromAnimation","animation","getHslAnimationFromHsl","reduceFactor","resColor","setColorAnimation","colorValue","colorAnimation","defaultVelocity","defaultLoops","defaultTime","updateColorValue","range","decrease","updateColor","ranges","HslColorManager","minLength","RgbColorManager","rgbColor","init","rgbColorManager","hslColorManager","engine","ExternalInteractorBase","ParticlesInteractorBase","Point","BaseRange","Circle","distPos","circleRange","rSum","dist","Rectangle","rectRange","width","height","w","pos","w2","h2","AnimationOptions","RangedAnimationOptions","ColorAnimation","HslAnimation","OptionsColor","AnimatableColor","Background","BackgroundMaskCover","BackgroundMask","cover","FullScreen","ClickEvent","DivEvent","Parallax","HoverEvent","ResizeEvent","Events","onDiv","tmp","Modes","interactors","interactor","Interactivity","detectsOn","defaultPosition","ManualParticle","Responsive","ThemeDefault","Theme","CollisionsAbsorb","CollisionsOverlap","ValueWithRandom","AnimationValueWithRandom","RangedAnimationValueWithRandom","ParticlesBounceFactor","ParticlesBounce","Collisions","Effect","MoveAngle","MoveAttract","rotateX","rotateY","MoveCenter","MoveGravity","MovePath","MoveTrailFill","MoveTrail","OutModes","Spin","Move","outModes","OpacityAnimation","Opacity","ParticlesDensity","ParticlesNumberLimit","ParticlesNumber","Shadow","Shape","SizeAnimation","Size","Stroke","ZIndex","ParticlesOptions","group","strokeToLoad","loadOptions","sourceOptionsArr","loadParticlesOptions","Options","theme","detectRetina","fpsLimit","fullScreen","responsive","optResponsive","existingTheme","optTheme","defaultOptions","responsiveOptions","chosenTheme","mediaMatch","clientDarkMode","defaultTheme","drawLine","context","begin","end","paintBase","dimension","baseColor","paintImage","image","clear","drawParticle","colorStyles","backgroundMask","composite","shadow","transform","defaultAngle","rotateData","defaultTransformFactor","transformData","shadowColor","minStrokeWidth","strokeWidth","drawData","drawShape","drawShapeAfterDraw","drawEffect","drawPlugin","drawParticlePlugin","alterHsl","tsParticles","f","i","m","e","d","loadSlim","loadParallaxMover","index$u","loadExternalAttractInteraction","index$t","loadExternalBounceInteraction","index$s","loadExternalBubbleInteraction","index$r","loadExternalConnectInteraction","index$q","loadExternalGrabInteraction","index$p","loadExternalPauseInteraction","index$o","loadExternalPushInteraction","index$n","loadExternalRemoveInteraction","loadExternalRepulseInteraction","index$l","loadExternalSlowInteraction","loadParticlesAttractInteraction","index$j","loadParticlesCollisionsInteraction","loadParticlesLinksInteraction","index$h","loadEasingQuadPlugin","index$g","loadEmojiShape","index$f","loadImageShape","index$e","loadLineShape","index$d","loadPolygonShape","index$c","loadSquareShape","index$b","loadStarShape","index$a","loadLifeUpdater","index$9","loadRotateUpdater","index$8","loadStrokeColorUpdater","loadBasic","index$6","setTransformValue","newFactor","newValue","defaultValue","setStyle","canvas","style","important","elementStyle","Canvas","ctx","zOpacity","fill","stroke","updaterTransform","fColor","sColor","coverRgb","coverColor","resolve","reject","img","evt","trail","trailFill","factorNumerator","fillColor","observer","originalStyle","minimumLength","cb","pfColor","psColor","zIndexOptions","zIndexFactorOffset","zIndexFactor","zOpacityFactor","defaultOpacity","strokeOpacity","zStrokeOpacity","obs","records","record","background","newSize","oldSize","needsRefresh","manageListener","event","add","addOptions","removeOptions","EventListeners","mouseInteractivity","mousePos","onClick","mediaEvent","defaultThemes","themeName","handleResize","mouseLeaveTmpEvent","handlers","interactivityEl","html","detectType","entries","interactivity","mouse","handled","mousePosition","mouseEvent","clientRect","target","sourceRect","targetRect","canvasRect","touchEvent","lengthOffset","lastTouch","defaultCoordinate","touches","touch","InteractionManager","defaultRetryCount","loadEffectData","effectOptions","reduceDuplicates","effectData","loadShapeData","shapeOptions","shapeData","fixOutMode","diameter","Particle","zIndex","tryCount","pluginPos","exactPosition","fixHorizontal","outMode","fixVertical","moveOptions","rad","radOffset","collisionsOptions","overlapOptions","retries","rollFactor","none","backFactor","backSum","zIndexValue","minZ","defaultRadius","pathGenerator","shapeDrawer","_c","overrideOptions","mainOptions","particlesOptions","effectType","shapeType","overrideEffectType","overrideShapeType","pathOptions","particles","effectDrawer","sideCountFunc","mover","_d","_e","_f","subdivideCount","QuadTree","rectangle","capacity","fixedIndex","sub","check","qTreeCapacity","defaultRemoveQuantity","qTreeRectangle","posOffset","sizeFactor","Particles","manualCount","numberOptions","densityFactor","optParticlesNumber","minLimit","optParticlesLimit","particlesNumber","particlesCount","densityOptions","defaultFactor","initializer","canAdd","zIdx","limitOptions","limit","currentCount","countToRemove","condition","groups","groupOptions","j","nb","quantity","deleted","particlesToDelete","resizeFactor","checkDelete","zArray","defaultRatio","defaultReduceFactor","Retina","ratio","moveDistance","props","maxDistance","guardCheck","defaultFps","initDelta","smooth","loadContainerOptions","entry","timestamp","el","clickOrTouchHandler","posRetina","clickHandler","touchStartHandler","touched","touchMoved","touchMoveHandler","touchEndHandler","minCoordinate","touchCancelHandler","mainArr","refreshTime","frame","effects","shapes","availablePlugins","defaultFpsLimit","minFpsLimit","needsUpdate","start","newMaxWidth","ParallaxMover","Attract","Attractor","Bounce","Bouncer","BubbleBase","BubbleDiv","Bubble","Bubbler","ConnectLinks","Connect","Connector","GrabLinks","Grab","Grabber","Pauser","Push","Pusher","Remove","Remover","RepulseBase","RepulseDiv","Repulse","Repulser","Slow","Slower","Collider","LinksShadow","LinksTriangle","Links","loadLinksInteraction","interaction","loadLinksPlugin","validTypes","EmojiDrawer","EmojiDrawer$1","stringStart","currentColorRegex","replaceColorSvg","imageShape","svgData","colorStyle","preFillIndex","loadImage","downloadSvgImage","replaceImageColor","imageData","svgColoredData","imageRes","svg","domUrl","errorHandler","img2","extLength","addLoadImageToEngine","imageFunc","loadGifImage","ImagePreloaderPlugin","ImagePreloader","ImageDrawer","ImageDrawer$1","preloader","LineDrawer","LineDrawer$1","loadGenericPolygonShape","PolygonDrawer","PolygonDrawer$1","loadTriangleShape","TriangleDrawer","TriangleDrawer$1","SquareDrawer","SquareDrawer$1","StarDrawer","StarDrawer$1","LifeUpdater","RotateUpdater","StrokeColorUpdater","loadBaseMover","index$5","loadCircleShape","index$4","loadColorUpdater","index$3","loadOpacityUpdater","index$2","loadOutModesUpdater","index$1","loadSizeUpdater","parallaxOptions","parallaxForce","canvasCenter","parallaxSmooth","centerDistance","minFactor","identity","minRadius","processAttract","attractRadius","area","queryCb","attractOptions","distance","attractFactor","normVec","clickAttract","enabledCb","attract","hoverAttract","attractMode","mouseMoveStatus","events","hoverEnabled","hoverMode","clickEnabled","clickMode","halfPI","toleranceFactor","processBounce","singleSelectorBounce","bounceCb","elem","tolerance","divBounce","bounceMode","mouseBounce","bounce","calculateBubbleValue","particleValue","modeValue","optionsValue","bubbleMode","minDistance","defaultClickTime","ratioOffset","defaultBubbleValue","minRatio","mouseClickPos","bubbleOptions","bubble","distMouse","timeSpent","sizeData","opacityData","pointDistance","divBubble","modeColor","bubbleColor","pColor","modeOpacity","optOpacity","pOpacity","modeSize","optSize","pSize","bubbleParam","bubbleDuration","bubbleDistance","particlesParam","pObjBubble","pObj","repulseRadius","onHover","gradientMin","gradientMax","defaultLinksWidth","gradient","gradStop","sourcePos","destPos","midRgb","grad","drawConnectLine","lineStyle","connectOptions","drawConnection","ls","connectMode","connect","connectModeDistance","connectModeRadius","indexOffset","distMax","xDiff","yDiff","defaultWidth","drawGrabLine","colorLine","drawGrab","lineColor","beginPos","grabMode","minOpacity","grab","grabLineOptions","lineOpacity","opacityLine","linksOptions","pauseMode","pushMode","minQuantity","pushOptions","removeMode","removeNb","repulseMode","repulseRadiusFactor","repulseRadiusPower","squarePower","minSpeed","easingOffset","repulseOptions","repulse","repulseDistance","vect","divRepulse","speed","maxSpeed","easingFunc","repulseFactor","repulseOpts","hover","click","slowMode","slow","slowOptions","particlePos","proximityFactor","slowFactor","rotate","ax","ay","p1Factor","p2Factor","absorbFactor","minAbsorbFactor","updateAbsorb","r2","pixelRatio","absorb","fixBounceSpeed","destroy","resolveCollision","radius1","radius2","distP","Linker","LinksPlugin","LinksPlugin$1","drawEmoji","emojiData","previousAlpha","defaultFont","promises","emoji","existingData","maxSize","InterlaceOffsets","InterlaceSteps","ByteStream","bytes","count","slice","acc","curr","blockString","minCount","emptySize","len","increment","blockData","noData","defaultFrame","initialTime","firstIndex","defaultLoopCount","parseColorTable","byteStream","colors","parseExtensionBlock","gif","getFrameIndex","getTransparencyIndex","packedByte","transparencyFlag","transparencyIndex","applicationExtension","parseImageBlock","avgAlpha","progressCallback","localColorTableFlag","interlacedFlag","localColorCount","getColor","error","minCodeSize","clearCode","readBits","bytePos","bitPos","code","dic","pass","pixelPos","lineIndex","exit","last","parseBlock","getGIFLoopAmount","extension","decodeGIF","gifURL","buffer","globalColorTableFlag","globalColorCount","backgroundColorIndex","backgroundImage","frameIndex","incrementFrameIndex","getframeIndex","drawGif","offscreenCanvas","offscreenContext","previousImageData","Preload","preloadOptions","existing","preload","sides","images","replaceColor","close","centerY","piDeg","sidesOffset","drawPolygon","side","sideCount","decimalSides","interiorAngleDegrees","interiorAngle","defaultSides","PolygonDrawerBase","polygon","sidesCenterFactor","yFactor","sidesFactor","fixFactorSquared","fixFactor","drawSquare","fixedRadius","fixedDiameter","defaultInset","drawStar","inset","star","LifeDelay","LifeDuration","Life","noTime","infiniteValue","noLife","minCanvasSize","updateLife","life","justSpawned","widthRange","heightRange","lifeOptions","RotateAnimation","Rotate","doublePIDeg","rotateOptions","rotateDirection","rotateAnimation","strokeHslColor","strokeColor","BaseMover","CircleDrawer","CircleDrawer$1","ColorUpdater","OpacityUpdater","OutOfCanvasUpdater","SizeUpdater","CircleWarp","rect","circle","newPos","biggerCircle","rectSW","opacityOffset","getLinkDistance","optDistance","warp","absDiffs","warpDistances","linkOpt1","linkOpt2","LinkInstance","moveSpeedFactor","minSpinRadius","spinFactor","applyDistance","initialPosition","dxFixed","dyFixed","hDistance","vDistance","hasHDistance","hasVDistance","vel","move","moveSpeed","moveDrift","applyPath","gravityOptions","gravityFactor","zVelocityFactor","spin","updateFunc","maxCanvasSize","halfMaxSize","path","getProximitySpeedFactor","initSpin","spinOptions","spinPos","spinCenter","spinAcceleration","diffFactor","defaultSizeFactor","defaultDeltaFactor","particleOptions","baseSpeed","deltaFactor","minAngle","drawCircle","maxAngle","hAnimation","sAnimation","lAnimation","opacityOptions","opacityAnimation","boundsMin","bounceHorizontal","bounced","newVelocity","minPos","bounceVertical","BounceOutMode","DestroyOutMode","_delta","vx","vy","NoneOutMode","pRadius","OutOutMode","circVec","newDx","newDy","sizeValue","nextBounds","checkOutMode","minLoops","sizeOptions","sizeAnimation","drawTriangle","p3","drawLinkLine","drawn","links","pi1","pi2","endNE","d1","yi","endSW","d2","xi","endSE","d3","drawLinkTriangle","pos3","colorTriangle","opacityTriangle","getLinkKey","ids","setLinkFrequency","dictionary","minWidth","maxFrequency","link","p1LinksOptions","twinkle","twinkleFreq","twinkleRgb","link1","link2","triangleOptions","linksDistance","p1Links","vertices","linkFreq","vertex","retina"],"sources":["../../node_modules/@tsparticles/engine/browser/Core/Utils/Constants.js","../../node_modules/@tsparticles/engine/browser/Utils/TypeUtils.js","../../node_modules/@tsparticles/engine/browser/Core/Utils/Vectors.js","../../node_modules/@tsparticles/engine/browser/Utils/NumberUtils.js","../../node_modules/@tsparticles/engine/browser/Utils/Utils.js","../../node_modules/@tsparticles/engine/browser/Utils/EventDispatcher.js","../../node_modules/@tsparticles/engine/browser/Core/Engine.js","../../node_modules/@tsparticles/engine/browser/Utils/ColorUtils.js","../../node_modules/@tsparticles/engine/browser/Utils/HslColorManager.js","../../node_modules/@tsparticles/engine/browser/Utils/RgbColorManager.js","../../node_modules/@tsparticles/engine/browser/init.js","../../node_modules/@tsparticles/engine/browser/Core/Utils/ExternalInteractorBase.js","../../node_modules/@tsparticles/engine/browser/Core/Utils/ParticlesInteractorBase.js","../../node_modules/@tsparticles/engine/browser/Core/Utils/Point.js","../../node_modules/@tsparticles/engine/browser/Core/Utils/Ranges.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/AnimationOptions.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/ColorAnimation.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/HslAnimation.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/OptionsColor.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/AnimatableColor.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Background/Background.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/BackgroundMask/BackgroundMaskCover.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/BackgroundMask/BackgroundMask.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/FullScreen/FullScreen.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/ClickEvent.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/DivEvent.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/Parallax.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/HoverEvent.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/ResizeEvent.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/Events.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Modes/Modes.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Interactivity.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/ManualParticle.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Responsive.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Theme/ThemeDefault.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Theme/Theme.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/CollisionsAbsorb.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/CollisionsOverlap.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/ValueWithRandom.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Bounce/ParticlesBounce.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/Collisions.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Effect/Effect.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveAngle.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveAttract.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveCenter.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveGravity.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Path/MovePath.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveTrailFill.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveTrail.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/OutModes.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Spin.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Move.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Opacity/Opacity.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesDensity.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesNumber.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Shadow.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Shape/Shape.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Size/SizeAnimation.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Size/Size.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Stroke.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/ZIndex/ZIndex.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/ParticlesOptions.js","../../node_modules/@tsparticles/engine/browser/Utils/OptionsUtils.js","../../node_modules/@tsparticles/engine/browser/Options/Classes/Options.js","../../node_modules/@tsparticles/engine/browser/Utils/CanvasUtils.js","../../node_modules/@tsparticles/engine/browser/index.js","../../node_modules/@tsparticles/react/dist/Particles.js","../../node_modules/@tsparticles/react/dist/index.js","../../node_modules/@tsparticles/slim/browser/index.js","../../node_modules/@tsparticles/engine/browser/Core/Canvas.js","../../node_modules/@tsparticles/engine/browser/Core/Utils/EventListeners.js","../../node_modules/@tsparticles/engine/browser/Core/Utils/InteractionManager.js","../../node_modules/@tsparticles/engine/browser/Core/Particle.js","../../node_modules/@tsparticles/engine/browser/Core/Utils/QuadTree.js","../../node_modules/@tsparticles/engine/browser/Core/Particles.js","../../node_modules/@tsparticles/engine/browser/Core/Retina.js","../../node_modules/@tsparticles/engine/browser/Core/Container.js","../../node_modules/@tsparticles/move-parallax/browser/index.js","../../node_modules/@tsparticles/interaction-external-attract/browser/Options/Classes/Attract.js","../../node_modules/@tsparticles/interaction-external-attract/browser/index.js","../../node_modules/@tsparticles/interaction-external-bounce/browser/Options/Classes/Bounce.js","../../node_modules/@tsparticles/interaction-external-bounce/browser/index.js","../../node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/BubbleBase.js","../../node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/BubbleDiv.js","../../node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/Bubble.js","../../node_modules/@tsparticles/interaction-external-bubble/browser/index.js","../../node_modules/@tsparticles/interaction-external-connect/browser/Options/Classes/ConnectLinks.js","../../node_modules/@tsparticles/interaction-external-connect/browser/Options/Classes/Connect.js","../../node_modules/@tsparticles/interaction-external-connect/browser/index.js","../../node_modules/@tsparticles/interaction-external-grab/browser/Options/Classes/GrabLinks.js","../../node_modules/@tsparticles/interaction-external-grab/browser/Options/Classes/Grab.js","../../node_modules/@tsparticles/interaction-external-grab/browser/index.js","../../node_modules/@tsparticles/interaction-external-pause/browser/index.js","../../node_modules/@tsparticles/interaction-external-push/browser/Options/Classes/Push.js","../../node_modules/@tsparticles/interaction-external-push/browser/index.js","../../node_modules/@tsparticles/interaction-external-remove/browser/Options/Classes/Remove.js","../../node_modules/@tsparticles/interaction-external-remove/browser/index.js","../../node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/RepulseBase.js","../../node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/RepulseDiv.js","../../node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/Repulse.js","../../node_modules/@tsparticles/interaction-external-repulse/browser/index.js","../../node_modules/@tsparticles/interaction-external-slow/browser/Options/Classes/Slow.js","../../node_modules/@tsparticles/interaction-external-slow/browser/index.js","../../node_modules/@tsparticles/interaction-particles-attract/browser/index.js","../../node_modules/@tsparticles/interaction-particles-collisions/browser/index.js","../../node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/LinksShadow.js","../../node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/LinksTriangle.js","../../node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/Links.js","../../node_modules/@tsparticles/interaction-particles-links/browser/index.js","../../node_modules/@tsparticles/plugin-easing-quad/browser/index.js","../../node_modules/@tsparticles/shape-emoji/browser/Constants.js","../../node_modules/@tsparticles/shape-emoji/browser/index.js","../../node_modules/@tsparticles/shape-image/browser/Utils.js","../../node_modules/@tsparticles/shape-image/browser/index.js","../../node_modules/@tsparticles/shape-line/browser/index.js","../../node_modules/@tsparticles/shape-polygon/browser/index.js","../../node_modules/@tsparticles/shape-square/browser/index.js","../../node_modules/@tsparticles/shape-star/browser/index.js","../../node_modules/@tsparticles/updater-life/browser/index.js","../../node_modules/@tsparticles/updater-rotate/browser/index.js","../../node_modules/@tsparticles/updater-stroke-color/browser/index.js","../../node_modules/@tsparticles/basic/browser/index.js","../../node_modules/@tsparticles/move-parallax/browser/ParallaxMover.js","../../node_modules/@tsparticles/interaction-external-attract/browser/Utils.js","../../node_modules/@tsparticles/interaction-external-attract/browser/Attractor.js","../../node_modules/@tsparticles/interaction-external-bounce/browser/Utils.js","../../node_modules/@tsparticles/interaction-external-bounce/browser/Bouncer.js","../../node_modules/@tsparticles/interaction-external-bubble/browser/Utils.js","../../node_modules/@tsparticles/interaction-external-bubble/browser/Bubbler.js","../../node_modules/@tsparticles/interaction-external-connect/browser/Utils.js","../../node_modules/@tsparticles/interaction-external-connect/browser/Connector.js","../../node_modules/@tsparticles/interaction-external-grab/browser/Utils.js","../../node_modules/@tsparticles/interaction-external-grab/browser/Grabber.js","../../node_modules/@tsparticles/interaction-external-pause/browser/Pauser.js","../../node_modules/@tsparticles/interaction-external-push/browser/Pusher.js","../../node_modules/@tsparticles/interaction-external-remove/browser/Remover.js","../../node_modules/@tsparticles/interaction-external-repulse/browser/Repulser.js","../../node_modules/@tsparticles/interaction-external-slow/browser/Slower.js","../../node_modules/@tsparticles/interaction-particles-attract/browser/Attractor.js","../../node_modules/@tsparticles/interaction-particles-collisions/browser/Absorb.js","../../node_modules/@tsparticles/interaction-particles-collisions/browser/Bounce.js","../../node_modules/@tsparticles/interaction-particles-collisions/browser/Destroy.js","../../node_modules/@tsparticles/interaction-particles-collisions/browser/ResolveCollision.js","../../node_modules/@tsparticles/interaction-particles-collisions/browser/Collider.js","../../node_modules/@tsparticles/interaction-particles-links/browser/interaction.js","../../node_modules/@tsparticles/interaction-particles-links/browser/plugin.js","../../node_modules/@tsparticles/shape-emoji/browser/Utils.js","../../node_modules/@tsparticles/shape-emoji/browser/EmojiDrawer.js","../../node_modules/@tsparticles/shape-image/browser/GifUtils/Constants.js","../../node_modules/@tsparticles/shape-image/browser/GifUtils/ByteStream.js","../../node_modules/@tsparticles/shape-image/browser/GifUtils/Utils.js","../../node_modules/@tsparticles/shape-image/browser/Options/Classes/Preload.js","../../node_modules/@tsparticles/shape-image/browser/ImagePreloader.js","../../node_modules/@tsparticles/shape-image/browser/ImageDrawer.js","../../node_modules/@tsparticles/shape-line/browser/Utils.js","../../node_modules/@tsparticles/shape-line/browser/LineDrawer.js","../../node_modules/@tsparticles/shape-polygon/browser/Utils.js","../../node_modules/@tsparticles/shape-polygon/browser/PolygonDrawerBase.js","../../node_modules/@tsparticles/shape-polygon/browser/PolygonDrawer.js","../../node_modules/@tsparticles/shape-polygon/browser/TriangleDrawer.js","../../node_modules/@tsparticles/shape-square/browser/Utils.js","../../node_modules/@tsparticles/shape-square/browser/SquareDrawer.js","../../node_modules/@tsparticles/shape-star/browser/Utils.js","../../node_modules/@tsparticles/shape-star/browser/StarDrawer.js","../../node_modules/@tsparticles/updater-life/browser/Options/Classes/LifeDelay.js","../../node_modules/@tsparticles/updater-life/browser/Options/Classes/LifeDuration.js","../../node_modules/@tsparticles/updater-life/browser/Options/Classes/Life.js","../../node_modules/@tsparticles/updater-life/browser/Utils.js","../../node_modules/@tsparticles/updater-life/browser/LifeUpdater.js","../../node_modules/@tsparticles/updater-rotate/browser/Options/Classes/RotateAnimation.js","../../node_modules/@tsparticles/updater-rotate/browser/Options/Classes/Rotate.js","../../node_modules/@tsparticles/updater-rotate/browser/RotateUpdater.js","../../node_modules/@tsparticles/updater-stroke-color/browser/StrokeColorUpdater.js","../../node_modules/@tsparticles/move-base/browser/index.js","../../node_modules/@tsparticles/shape-circle/browser/index.js","../../node_modules/@tsparticles/updater-color/browser/index.js","../../node_modules/@tsparticles/updater-opacity/browser/index.js","../../node_modules/@tsparticles/updater-out-modes/browser/index.js","../../node_modules/@tsparticles/updater-size/browser/index.js","../../node_modules/@tsparticles/interaction-particles-links/browser/CircleWarp.js","../../node_modules/@tsparticles/interaction-particles-links/browser/Linker.js","../../node_modules/@tsparticles/interaction-particles-links/browser/LinksPlugin.js","../../node_modules/@tsparticles/move-base/browser/Utils.js","../../node_modules/@tsparticles/move-base/browser/BaseMover.js","../../node_modules/@tsparticles/shape-circle/browser/Utils.js","../../node_modules/@tsparticles/shape-circle/browser/CircleDrawer.js","../../node_modules/@tsparticles/updater-color/browser/ColorUpdater.js","../../node_modules/@tsparticles/updater-opacity/browser/OpacityUpdater.js","../../node_modules/@tsparticles/updater-out-modes/browser/Utils.js","../../node_modules/@tsparticles/updater-out-modes/browser/BounceOutMode.js","../../node_modules/@tsparticles/updater-out-modes/browser/DestroyOutMode.js","../../node_modules/@tsparticles/updater-out-modes/browser/NoneOutMode.js","../../node_modules/@tsparticles/updater-out-modes/browser/OutOutMode.js","../../node_modules/@tsparticles/updater-out-modes/browser/OutOfCanvasUpdater.js","../../node_modules/@tsparticles/updater-size/browser/SizeUpdater.js","../../node_modules/@tsparticles/interaction-particles-links/browser/Utils.js","../../node_modules/@tsparticles/interaction-particles-links/browser/LinkInstance.js"],"sourcesContent":["export const generatedAttribute = \"generated\";\nexport const mouseDownEvent = \"pointerdown\";\nexport const mouseUpEvent = \"pointerup\";\nexport const mouseLeaveEvent = \"pointerleave\";\nexport const mouseOutEvent = \"pointerout\";\nexport const mouseMoveEvent = \"pointermove\";\nexport const touchStartEvent = \"touchstart\";\nexport const touchEndEvent = \"touchend\";\nexport const touchMoveEvent = \"touchmove\";\nexport const touchCancelEvent = \"touchcancel\";\nexport const resizeEvent = \"resize\";\nexport const visibilityChangeEvent = \"visibilitychange\";\nexport const errorPrefix = \"tsParticles - Error\";\nexport const percentDenominator = 100;\nexport const halfRandom = 0.5;\nexport const millisecondsToSeconds = 1000;\n","export function isBoolean(arg) {\n return typeof arg === \"boolean\";\n}\nexport function isString(arg) {\n return typeof arg === \"string\";\n}\nexport function isNumber(arg) {\n return typeof arg === \"number\";\n}\nexport function isFunction(arg) {\n return typeof arg === \"function\";\n}\nexport function isObject(arg) {\n return typeof arg === \"object\" && arg !== null;\n}\nexport function isArray(arg) {\n return Array.isArray(arg);\n}\n","import { errorPrefix } from \"./Constants.js\";\nimport { isNumber } from \"../../Utils/TypeUtils.js\";\nconst origin = {\n x: 0,\n y: 0,\n z: 0,\n}, squareExp = 2, inverseFactorNumerator = 1.0;\nexport class Vector3d {\n constructor(xOrCoords, y, z) {\n this._updateFromAngle = (angle, length) => {\n this.x = Math.cos(angle) * length;\n this.y = Math.sin(angle) * length;\n };\n if (!isNumber(xOrCoords) && xOrCoords) {\n this.x = xOrCoords.x;\n this.y = xOrCoords.y;\n const coords3d = xOrCoords;\n this.z = coords3d.z ? coords3d.z : origin.z;\n }\n else if (xOrCoords !== undefined && y !== undefined) {\n this.x = xOrCoords;\n this.y = y;\n this.z = z ?? origin.z;\n }\n else {\n throw new Error(`${errorPrefix} Vector3d not initialized correctly`);\n }\n }\n static get origin() {\n return Vector3d.create(origin.x, origin.y, origin.z);\n }\n get angle() {\n return Math.atan2(this.y, this.x);\n }\n set angle(angle) {\n this._updateFromAngle(angle, this.length);\n }\n get length() {\n return Math.sqrt(this.getLengthSq());\n }\n set length(length) {\n this._updateFromAngle(this.angle, length);\n }\n static clone(source) {\n return Vector3d.create(source.x, source.y, source.z);\n }\n static create(x, y, z) {\n return new Vector3d(x, y, z);\n }\n add(v) {\n return Vector3d.create(this.x + v.x, this.y + v.y, this.z + v.z);\n }\n addTo(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n }\n copy() {\n return Vector3d.clone(this);\n }\n distanceTo(v) {\n return this.sub(v).length;\n }\n distanceToSq(v) {\n return this.sub(v).getLengthSq();\n }\n div(n) {\n return Vector3d.create(this.x / n, this.y / n, this.z / n);\n }\n divTo(n) {\n this.x /= n;\n this.y /= n;\n this.z /= n;\n }\n getLengthSq() {\n return this.x ** squareExp + this.y ** squareExp;\n }\n mult(n) {\n return Vector3d.create(this.x * n, this.y * n, this.z * n);\n }\n multTo(n) {\n this.x *= n;\n this.y *= n;\n this.z *= n;\n }\n normalize() {\n const length = this.length, noLength = 0;\n if (length != noLength) {\n this.multTo(inverseFactorNumerator / length);\n }\n }\n rotate(angle) {\n return Vector3d.create(this.x * Math.cos(angle) - this.y * Math.sin(angle), this.x * Math.sin(angle) + this.y * Math.cos(angle), origin.z);\n }\n setTo(c) {\n this.x = c.x;\n this.y = c.y;\n const v3d = c;\n this.z = v3d.z ? v3d.z : origin.z;\n }\n sub(v) {\n return Vector3d.create(this.x - v.x, this.y - v.y, this.z - v.z);\n }\n subFrom(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n }\n}\nexport class Vector extends Vector3d {\n constructor(xOrCoords, y) {\n super(xOrCoords, y, origin.z);\n }\n static get origin() {\n return Vector.create(origin.x, origin.y);\n }\n static clone(source) {\n return Vector.create(source.x, source.y);\n }\n static create(x, y) {\n return new Vector(x, y);\n }\n}\n","import { Vector } from \"../Core/Utils/Vectors.js\";\nimport { isNumber } from \"./TypeUtils.js\";\nimport { percentDenominator } from \"../Core/Utils/Constants.js\";\nlet _random = Math.random;\nconst easings = new Map(), double = 2, doublePI = Math.PI * double;\nexport function addEasing(name, easing) {\n if (easings.get(name)) {\n return;\n }\n easings.set(name, easing);\n}\nexport function getEasing(name) {\n return easings.get(name) ?? ((value) => value);\n}\nexport function setRandom(rnd = Math.random) {\n _random = rnd;\n}\nexport function getRandom() {\n const min = 0, max = 1;\n return clamp(_random(), min, max - Number.EPSILON);\n}\nexport function clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\nexport function mix(comp1, comp2, weight1, weight2) {\n return Math.floor((comp1 * weight1 + comp2 * weight2) / (weight1 + weight2));\n}\nexport function randomInRange(r) {\n const max = getRangeMax(r), minOffset = 0;\n let min = getRangeMin(r);\n if (max === min) {\n min = minOffset;\n }\n return getRandom() * (max - min) + min;\n}\nexport function getRangeValue(value) {\n return isNumber(value) ? value : randomInRange(value);\n}\nexport function getRangeMin(value) {\n return isNumber(value) ? value : value.min;\n}\nexport function getRangeMax(value) {\n return isNumber(value) ? value : value.max;\n}\nexport function setRangeValue(source, value) {\n if (source === value || (value === undefined && isNumber(source))) {\n return source;\n }\n const min = getRangeMin(source), max = getRangeMax(source);\n return value !== undefined\n ? {\n min: Math.min(min, value),\n max: Math.max(max, value),\n }\n : setRangeValue(min, max);\n}\nexport function getDistances(pointA, pointB) {\n const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y, squareExp = 2;\n return { dx: dx, dy: dy, distance: Math.sqrt(dx ** squareExp + dy ** squareExp) };\n}\nexport function getDistance(pointA, pointB) {\n return getDistances(pointA, pointB).distance;\n}\nexport function degToRad(degrees) {\n const PIDeg = 180;\n return (degrees * Math.PI) / PIDeg;\n}\nexport function getParticleDirectionAngle(direction, position, center) {\n if (isNumber(direction)) {\n return degToRad(direction);\n }\n const empty = 0, half = 0.5, quarter = 0.25, threeQuarter = half + quarter;\n switch (direction) {\n case \"top\":\n return -Math.PI * half;\n case \"top-right\":\n return -Math.PI * quarter;\n case \"right\":\n return empty;\n case \"bottom-right\":\n return Math.PI * quarter;\n case \"bottom\":\n return Math.PI * half;\n case \"bottom-left\":\n return Math.PI * threeQuarter;\n case \"left\":\n return Math.PI;\n case \"top-left\":\n return -Math.PI * threeQuarter;\n case \"inside\":\n return Math.atan2(center.y - position.y, center.x - position.x);\n case \"outside\":\n return Math.atan2(position.y - center.y, position.x - center.x);\n default:\n return getRandom() * doublePI;\n }\n}\nexport function getParticleBaseVelocity(direction) {\n const baseVelocity = Vector.origin;\n baseVelocity.length = 1;\n baseVelocity.angle = direction;\n return baseVelocity;\n}\nexport function collisionVelocity(v1, v2, m1, m2) {\n const double = 2;\n return Vector.create((v1.x * (m1 - m2)) / (m1 + m2) + (v2.x * double * m2) / (m1 + m2), v1.y);\n}\nexport function calcPositionFromSize(data) {\n return data.position?.x !== undefined && data.position.y !== undefined\n ? {\n x: (data.position.x * data.size.width) / percentDenominator,\n y: (data.position.y * data.size.height) / percentDenominator,\n }\n : undefined;\n}\nexport function calcPositionOrRandomFromSize(data) {\n return {\n x: ((data.position?.x ?? getRandom() * percentDenominator) * data.size.width) / percentDenominator,\n y: ((data.position?.y ?? getRandom() * percentDenominator) * data.size.height) / percentDenominator,\n };\n}\nexport function calcPositionOrRandomFromSizeRanged(data) {\n const position = {\n x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,\n y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,\n };\n return calcPositionOrRandomFromSize({ size: data.size, position });\n}\nexport function calcExactPositionOrRandomFromSize(data) {\n return {\n x: data.position?.x ?? getRandom() * data.size.width,\n y: data.position?.y ?? getRandom() * data.size.height,\n };\n}\nexport function calcExactPositionOrRandomFromSizeRanged(data) {\n const position = {\n x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,\n y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,\n };\n return calcExactPositionOrRandomFromSize({ size: data.size, position });\n}\nexport function parseAlpha(input) {\n const defaultAlpha = 1;\n if (!input) {\n return defaultAlpha;\n }\n return input.endsWith(\"%\") ? parseFloat(input) / percentDenominator : parseFloat(input);\n}\n","import { clamp, collisionVelocity, getDistances, getRandom, getRangeMax, getRangeMin, getRangeValue, randomInRange, } from \"./NumberUtils.js\";\nimport { halfRandom, millisecondsToSeconds, percentDenominator } from \"../Core/Utils/Constants.js\";\nimport { isArray, isObject } from \"./TypeUtils.js\";\nimport { Vector } from \"../Core/Utils/Vectors.js\";\nconst _logger = {\n debug: console.debug,\n error: console.error,\n info: console.info,\n log: console.log,\n verbose: console.log,\n warning: console.warn,\n};\nexport function setLogger(logger) {\n _logger.debug = logger.debug || _logger.debug;\n _logger.error = logger.error || _logger.error;\n _logger.info = logger.info || _logger.info;\n _logger.log = logger.log || _logger.log;\n _logger.verbose = logger.verbose || _logger.verbose;\n _logger.warning = logger.warning || _logger.warning;\n}\nexport function getLogger() {\n return _logger;\n}\nfunction rectSideBounce(data) {\n const res = { bounced: false }, { pSide, pOtherSide, rectSide, rectOtherSide, velocity, factor } = data, half = 0.5, minVelocity = 0;\n if (pOtherSide.min < rectOtherSide.min ||\n pOtherSide.min > rectOtherSide.max ||\n pOtherSide.max < rectOtherSide.min ||\n pOtherSide.max > rectOtherSide.max) {\n return res;\n }\n if ((pSide.max >= rectSide.min && pSide.max <= (rectSide.max + rectSide.min) * half && velocity > minVelocity) ||\n (pSide.min <= rectSide.max && pSide.min > (rectSide.max + rectSide.min) * half && velocity < minVelocity)) {\n res.velocity = velocity * -factor;\n res.bounced = true;\n }\n return res;\n}\nfunction checkSelector(element, selectors) {\n const res = executeOnSingleOrMultiple(selectors, (selector) => {\n return element.matches(selector);\n });\n return isArray(res) ? res.some((t) => t) : res;\n}\nexport function isSsr() {\n return typeof window === \"undefined\" || !window || typeof window.document === \"undefined\" || !window.document;\n}\nexport function hasMatchMedia() {\n return !isSsr() && typeof matchMedia !== \"undefined\";\n}\nexport function safeMatchMedia(query) {\n if (!hasMatchMedia()) {\n return;\n }\n return matchMedia(query);\n}\nexport function safeIntersectionObserver(callback) {\n if (isSsr() || typeof IntersectionObserver === \"undefined\") {\n return;\n }\n return new IntersectionObserver(callback);\n}\nexport function safeMutationObserver(callback) {\n if (isSsr() || typeof MutationObserver === \"undefined\") {\n return;\n }\n return new MutationObserver(callback);\n}\nexport function isInArray(value, array) {\n const invalidIndex = -1;\n return value === array || (isArray(array) && array.indexOf(value) > invalidIndex);\n}\nexport async function loadFont(font, weight) {\n try {\n await document.fonts.load(`${weight ?? \"400\"} 36px '${font ?? \"Verdana\"}'`);\n }\n catch {\n }\n}\nexport function arrayRandomIndex(array) {\n return Math.floor(getRandom() * array.length);\n}\nexport function itemFromArray(array, index, useIndex = true) {\n return array[index !== undefined && useIndex ? index % array.length : arrayRandomIndex(array)];\n}\nexport function isPointInside(point, size, offset, radius, direction) {\n const minRadius = 0;\n return areBoundsInside(calculateBounds(point, radius ?? minRadius), size, offset, direction);\n}\nexport function areBoundsInside(bounds, size, offset, direction) {\n let inside = true;\n if (!direction || direction === \"bottom\") {\n inside = bounds.top < size.height + offset.x;\n }\n if (inside && (!direction || direction === \"left\")) {\n inside = bounds.right > offset.x;\n }\n if (inside && (!direction || direction === \"right\")) {\n inside = bounds.left < size.width + offset.y;\n }\n if (inside && (!direction || direction === \"top\")) {\n inside = bounds.bottom > offset.y;\n }\n return inside;\n}\nexport function calculateBounds(point, radius) {\n return {\n bottom: point.y + radius,\n left: point.x - radius,\n right: point.x + radius,\n top: point.y - radius,\n };\n}\nexport function deepExtend(destination, ...sources) {\n for (const source of sources) {\n if (source === undefined || source === null) {\n continue;\n }\n if (!isObject(source)) {\n destination = source;\n continue;\n }\n const sourceIsArray = Array.isArray(source);\n if (sourceIsArray && (isObject(destination) || !destination || !Array.isArray(destination))) {\n destination = [];\n }\n else if (!sourceIsArray && (isObject(destination) || !destination || Array.isArray(destination))) {\n destination = {};\n }\n for (const key in source) {\n if (key === \"__proto__\") {\n continue;\n }\n const sourceDict = source, value = sourceDict[key], destDict = destination;\n destDict[key] =\n isObject(value) && Array.isArray(value)\n ? value.map((v) => deepExtend(destDict[key], v))\n : deepExtend(destDict[key], value);\n }\n }\n return destination;\n}\nexport function isDivModeEnabled(mode, divs) {\n return !!findItemFromSingleOrMultiple(divs, (t) => t.enable && isInArray(mode, t.mode));\n}\nexport function divModeExecute(mode, divs, callback) {\n executeOnSingleOrMultiple(divs, (div) => {\n const divMode = div.mode, divEnabled = div.enable;\n if (divEnabled && isInArray(mode, divMode)) {\n singleDivModeExecute(div, callback);\n }\n });\n}\nexport function singleDivModeExecute(div, callback) {\n const selectors = div.selectors;\n executeOnSingleOrMultiple(selectors, (selector) => {\n callback(selector, div);\n });\n}\nexport function divMode(divs, element) {\n if (!element || !divs) {\n return;\n }\n return findItemFromSingleOrMultiple(divs, (div) => {\n return checkSelector(element, div.selectors);\n });\n}\nexport function circleBounceDataFromParticle(p) {\n return {\n position: p.getPosition(),\n radius: p.getRadius(),\n mass: p.getMass(),\n velocity: p.velocity,\n factor: Vector.create(getRangeValue(p.options.bounce.horizontal.value), getRangeValue(p.options.bounce.vertical.value)),\n };\n}\nexport function circleBounce(p1, p2) {\n const { x: xVelocityDiff, y: yVelocityDiff } = p1.velocity.sub(p2.velocity), [pos1, pos2] = [p1.position, p2.position], { dx: xDist, dy: yDist } = getDistances(pos2, pos1), minimumDistance = 0;\n if (xVelocityDiff * xDist + yVelocityDiff * yDist < minimumDistance) {\n return;\n }\n const angle = -Math.atan2(yDist, xDist), m1 = p1.mass, m2 = p2.mass, u1 = p1.velocity.rotate(angle), u2 = p2.velocity.rotate(angle), v1 = collisionVelocity(u1, u2, m1, m2), v2 = collisionVelocity(u2, u1, m1, m2), vFinal1 = v1.rotate(-angle), vFinal2 = v2.rotate(-angle);\n p1.velocity.x = vFinal1.x * p1.factor.x;\n p1.velocity.y = vFinal1.y * p1.factor.y;\n p2.velocity.x = vFinal2.x * p2.factor.x;\n p2.velocity.y = vFinal2.y * p2.factor.y;\n}\nexport function rectBounce(particle, divBounds) {\n const pPos = particle.getPosition(), size = particle.getRadius(), bounds = calculateBounds(pPos, size), bounceOptions = particle.options.bounce, resH = rectSideBounce({\n pSide: {\n min: bounds.left,\n max: bounds.right,\n },\n pOtherSide: {\n min: bounds.top,\n max: bounds.bottom,\n },\n rectSide: {\n min: divBounds.left,\n max: divBounds.right,\n },\n rectOtherSide: {\n min: divBounds.top,\n max: divBounds.bottom,\n },\n velocity: particle.velocity.x,\n factor: getRangeValue(bounceOptions.horizontal.value),\n });\n if (resH.bounced) {\n if (resH.velocity !== undefined) {\n particle.velocity.x = resH.velocity;\n }\n if (resH.position !== undefined) {\n particle.position.x = resH.position;\n }\n }\n const resV = rectSideBounce({\n pSide: {\n min: bounds.top,\n max: bounds.bottom,\n },\n pOtherSide: {\n min: bounds.left,\n max: bounds.right,\n },\n rectSide: {\n min: divBounds.top,\n max: divBounds.bottom,\n },\n rectOtherSide: {\n min: divBounds.left,\n max: divBounds.right,\n },\n velocity: particle.velocity.y,\n factor: getRangeValue(bounceOptions.vertical.value),\n });\n if (resV.bounced) {\n if (resV.velocity !== undefined) {\n particle.velocity.y = resV.velocity;\n }\n if (resV.position !== undefined) {\n particle.position.y = resV.position;\n }\n }\n}\nexport function executeOnSingleOrMultiple(obj, callback) {\n const defaultIndex = 0;\n return isArray(obj) ? obj.map((item, index) => callback(item, index)) : callback(obj, defaultIndex);\n}\nexport function itemFromSingleOrMultiple(obj, index, useIndex) {\n return isArray(obj) ? itemFromArray(obj, index, useIndex) : obj;\n}\nexport function findItemFromSingleOrMultiple(obj, callback) {\n if (isArray(obj)) {\n return obj.find((t, index) => callback(t, index));\n }\n const defaultIndex = 0;\n return callback(obj, defaultIndex) ? obj : undefined;\n}\nexport function initParticleNumericAnimationValue(options, pxRatio) {\n const valueRange = options.value, animationOptions = options.animation, res = {\n delayTime: getRangeValue(animationOptions.delay) * millisecondsToSeconds,\n enable: animationOptions.enable,\n value: getRangeValue(options.value) * pxRatio,\n max: getRangeMax(valueRange) * pxRatio,\n min: getRangeMin(valueRange) * pxRatio,\n loops: 0,\n maxLoops: getRangeValue(animationOptions.count),\n time: 0,\n }, decayOffset = 1;\n if (animationOptions.enable) {\n res.decay = decayOffset - getRangeValue(animationOptions.decay);\n switch (animationOptions.mode) {\n case \"increase\":\n res.status = \"increasing\";\n break;\n case \"decrease\":\n res.status = \"decreasing\";\n break;\n case \"random\":\n res.status = getRandom() >= halfRandom ? \"increasing\" : \"decreasing\";\n break;\n }\n const autoStatus = animationOptions.mode === \"auto\";\n switch (animationOptions.startValue) {\n case \"min\":\n res.value = res.min;\n if (autoStatus) {\n res.status = \"increasing\";\n }\n break;\n case \"max\":\n res.value = res.max;\n if (autoStatus) {\n res.status = \"decreasing\";\n }\n break;\n case \"random\":\n default:\n res.value = randomInRange(res);\n if (autoStatus) {\n res.status = getRandom() >= halfRandom ? \"increasing\" : \"decreasing\";\n }\n break;\n }\n }\n res.initialValue = res.value;\n return res;\n}\nfunction getPositionOrSize(positionOrSize, canvasSize) {\n const isPercent = positionOrSize.mode === \"percent\";\n if (!isPercent) {\n const { mode: _, ...rest } = positionOrSize;\n return rest;\n }\n const isPosition = \"x\" in positionOrSize;\n if (isPosition) {\n return {\n x: (positionOrSize.x / percentDenominator) * canvasSize.width,\n y: (positionOrSize.y / percentDenominator) * canvasSize.height,\n };\n }\n else {\n return {\n width: (positionOrSize.width / percentDenominator) * canvasSize.width,\n height: (positionOrSize.height / percentDenominator) * canvasSize.height,\n };\n }\n}\nexport function getPosition(position, canvasSize) {\n return getPositionOrSize(position, canvasSize);\n}\nexport function getSize(size, canvasSize) {\n return getPositionOrSize(size, canvasSize);\n}\nfunction checkDestroy(particle, destroyType, value, minValue, maxValue) {\n switch (destroyType) {\n case \"max\":\n if (value >= maxValue) {\n particle.destroy();\n }\n break;\n case \"min\":\n if (value <= minValue) {\n particle.destroy();\n }\n break;\n }\n}\nexport function updateAnimation(particle, data, changeDirection, destroyType, delta) {\n const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minDecay = 1;\n if (particle.destroyed ||\n !data ||\n !data.enable ||\n ((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {\n return;\n }\n const velocity = (data.velocity ?? minVelocity) * delta.factor, minValue = data.min, maxValue = data.max, decay = data.decay ?? minDecay;\n if (!data.time) {\n data.time = 0;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n data.time += delta.value;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n return;\n }\n switch (data.status) {\n case \"increasing\":\n if (data.value >= maxValue) {\n if (changeDirection) {\n data.status = \"decreasing\";\n }\n else {\n data.value -= maxValue;\n }\n if (!data.loops) {\n data.loops = minLoops;\n }\n data.loops++;\n }\n else {\n data.value += velocity;\n }\n break;\n case \"decreasing\":\n if (data.value <= minValue) {\n if (changeDirection) {\n data.status = \"increasing\";\n }\n else {\n data.value += maxValue;\n }\n if (!data.loops) {\n data.loops = minLoops;\n }\n data.loops++;\n }\n else {\n data.value -= velocity;\n }\n }\n if (data.velocity && decay !== identity) {\n data.velocity *= decay;\n }\n checkDestroy(particle, destroyType, data.value, minValue, maxValue);\n if (!particle.destroyed) {\n data.value = clamp(data.value, minValue, maxValue);\n }\n}\n","export class EventDispatcher {\n constructor() {\n this._listeners = new Map();\n }\n addEventListener(type, listener) {\n this.removeEventListener(type, listener);\n let arr = this._listeners.get(type);\n if (!arr) {\n arr = [];\n this._listeners.set(type, arr);\n }\n arr.push(listener);\n }\n dispatchEvent(type, args) {\n const listeners = this._listeners.get(type);\n listeners?.forEach((handler) => handler(args));\n }\n hasEventListener(type) {\n return !!this._listeners.get(type);\n }\n removeAllEventListeners(type) {\n if (!type) {\n this._listeners = new Map();\n }\n else {\n this._listeners.delete(type);\n }\n }\n removeEventListener(type, listener) {\n const arr = this._listeners.get(type);\n if (!arr) {\n return;\n }\n const length = arr.length, idx = arr.indexOf(listener), minIndex = 0;\n if (idx < minIndex) {\n return;\n }\n const deleteCount = 1;\n if (length === deleteCount) {\n this._listeners.delete(type);\n }\n else {\n arr.splice(idx, deleteCount);\n }\n }\n}\n","import { errorPrefix, generatedAttribute } from \"./Utils/Constants.js\";\nimport { executeOnSingleOrMultiple, getLogger, itemFromSingleOrMultiple } from \"../Utils/Utils.js\";\nimport { EventDispatcher } from \"../Utils/EventDispatcher.js\";\nimport { getRandom } from \"../Utils/NumberUtils.js\";\nasync function getItemsFromInitializer(container, map, initializers, force = false) {\n let res = map.get(container);\n if (!res || force) {\n res = await Promise.all([...initializers.values()].map((t) => t(container)));\n map.set(container, res);\n }\n return res;\n}\nasync function getDataFromUrl(data) {\n const url = itemFromSingleOrMultiple(data.url, data.index);\n if (!url) {\n return data.fallback;\n }\n const response = await fetch(url);\n if (response.ok) {\n return (await response.json());\n }\n getLogger().error(`${errorPrefix} ${response.status} while retrieving config file`);\n return data.fallback;\n}\nexport class Engine {\n constructor() {\n this._configs = new Map();\n this._domArray = [];\n this._eventDispatcher = new EventDispatcher();\n this._initialized = false;\n this.plugins = [];\n this._initializers = {\n interactors: new Map(),\n movers: new Map(),\n updaters: new Map(),\n };\n this.interactors = new Map();\n this.movers = new Map();\n this.updaters = new Map();\n this.presets = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this.pathGenerators = new Map();\n }\n get configs() {\n const res = {};\n for (const [name, config] of this._configs) {\n res[name] = config;\n }\n return res;\n }\n get version() {\n return \"3.3.0\";\n }\n addConfig(config) {\n const key = config.key ?? config.name ?? \"default\";\n this._configs.set(key, config);\n this._eventDispatcher.dispatchEvent(\"configAdded\", { data: { name: key, config } });\n }\n async addEffect(effect, drawer, refresh = true) {\n executeOnSingleOrMultiple(effect, (type) => {\n if (!this.getEffectDrawer(type)) {\n this.effectDrawers.set(type, drawer);\n }\n });\n await this.refresh(refresh);\n }\n addEventListener(type, listener) {\n this._eventDispatcher.addEventListener(type, listener);\n }\n async addInteractor(name, interactorInitializer, refresh = true) {\n this._initializers.interactors.set(name, interactorInitializer);\n await this.refresh(refresh);\n }\n async addMover(name, moverInitializer, refresh = true) {\n this._initializers.movers.set(name, moverInitializer);\n await this.refresh(refresh);\n }\n async addParticleUpdater(name, updaterInitializer, refresh = true) {\n this._initializers.updaters.set(name, updaterInitializer);\n await this.refresh(refresh);\n }\n async addPathGenerator(name, generator, refresh = true) {\n if (!this.getPathGenerator(name)) {\n this.pathGenerators.set(name, generator);\n }\n await this.refresh(refresh);\n }\n async addPlugin(plugin, refresh = true) {\n if (!this.getPlugin(plugin.id)) {\n this.plugins.push(plugin);\n }\n await this.refresh(refresh);\n }\n async addPreset(preset, options, override = false, refresh = true) {\n if (override || !this.getPreset(preset)) {\n this.presets.set(preset, options);\n }\n await this.refresh(refresh);\n }\n async addShape(shape, drawer, refresh = true) {\n executeOnSingleOrMultiple(shape, (type) => {\n if (!this.getShapeDrawer(type)) {\n this.shapeDrawers.set(type, drawer);\n }\n });\n await this.refresh(refresh);\n }\n clearPlugins(container) {\n this.updaters.delete(container);\n this.movers.delete(container);\n this.interactors.delete(container);\n }\n dispatchEvent(type, args) {\n this._eventDispatcher.dispatchEvent(type, args);\n }\n dom() {\n return this._domArray;\n }\n domItem(index) {\n const dom = this.dom(), item = dom[index];\n if (!item || item.destroyed) {\n const deleteCount = 1;\n dom.splice(index, deleteCount);\n return;\n }\n return item;\n }\n async getAvailablePlugins(container) {\n const res = new Map();\n for (const plugin of this.plugins) {\n if (plugin.needsPlugin(container.actualOptions)) {\n res.set(plugin.id, await plugin.getPlugin(container));\n }\n }\n return res;\n }\n getEffectDrawer(type) {\n return this.effectDrawers.get(type);\n }\n async getInteractors(container, force = false) {\n return await getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);\n }\n async getMovers(container, force = false) {\n return await getItemsFromInitializer(container, this.movers, this._initializers.movers, force);\n }\n getPathGenerator(type) {\n return this.pathGenerators.get(type);\n }\n getPlugin(plugin) {\n return this.plugins.find((t) => t.id === plugin);\n }\n getPreset(preset) {\n return this.presets.get(preset);\n }\n getShapeDrawer(type) {\n return this.shapeDrawers.get(type);\n }\n getSupportedEffects() {\n return this.effectDrawers.keys();\n }\n getSupportedShapes() {\n return this.shapeDrawers.keys();\n }\n async getUpdaters(container, force = false) {\n return await getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);\n }\n init() {\n if (this._initialized) {\n return;\n }\n this._initialized = true;\n }\n async load(params) {\n const randomFactor = 10000, id = params.id ?? params.element?.id ?? `tsparticles${Math.floor(getRandom() * randomFactor)}`, { index, url } = params, options = url ? await getDataFromUrl({ fallback: params.options, url, index }) : params.options;\n let domContainer = params.element ?? document.getElementById(id);\n if (!domContainer) {\n domContainer = document.createElement(\"div\");\n domContainer.id = id;\n document.body.append(domContainer);\n }\n const currentOptions = itemFromSingleOrMultiple(options, index), dom = this.dom(), oldIndex = dom.findIndex((v) => v.id.description === id), minIndex = 0;\n if (oldIndex >= minIndex) {\n const old = this.domItem(oldIndex);\n if (old && !old.destroyed) {\n old.destroy();\n const deleteCount = 1;\n dom.splice(oldIndex, deleteCount);\n }\n }\n let canvasEl;\n if (domContainer.tagName.toLowerCase() === \"canvas\") {\n canvasEl = domContainer;\n canvasEl.dataset[generatedAttribute] = \"false\";\n }\n else {\n const existingCanvases = domContainer.getElementsByTagName(\"canvas\");\n if (existingCanvases.length) {\n const firstIndex = 0;\n canvasEl = existingCanvases[firstIndex];\n canvasEl.dataset[generatedAttribute] = \"false\";\n }\n else {\n canvasEl = document.createElement(\"canvas\");\n canvasEl.dataset[generatedAttribute] = \"true\";\n domContainer.appendChild(canvasEl);\n }\n }\n if (!canvasEl.style.width) {\n canvasEl.style.width = \"100%\";\n }\n if (!canvasEl.style.height) {\n canvasEl.style.height = \"100%\";\n }\n const { Container } = await import(\"./Container.js\"), newItem = new Container(this, id, currentOptions);\n if (oldIndex >= minIndex) {\n const deleteCount = 0;\n dom.splice(oldIndex, deleteCount, newItem);\n }\n else {\n dom.push(newItem);\n }\n newItem.canvas.loadCanvas(canvasEl);\n await newItem.start();\n return newItem;\n }\n loadOptions(options, sourceOptions) {\n for (const plugin of this.plugins) {\n plugin.loadOptions(options, sourceOptions);\n }\n }\n loadParticlesOptions(container, options, ...sourceOptions) {\n const updaters = this.updaters.get(container);\n if (!updaters) {\n return;\n }\n for (const updater of updaters) {\n updater.loadOptions?.(options, ...sourceOptions);\n }\n }\n async refresh(refresh = true) {\n if (!refresh) {\n return;\n }\n await Promise.all(this.dom().map((t) => t.refresh()));\n }\n removeEventListener(type, listener) {\n this._eventDispatcher.removeEventListener(type, listener);\n }\n setOnClickHandler(callback) {\n const dom = this.dom();\n if (!dom.length) {\n throw new Error(`${errorPrefix} can only set click handlers after calling tsParticles.load()`);\n }\n for (const domItem of dom) {\n domItem.addClickHandler(callback);\n }\n }\n}\n","import { clamp, getRandom, getRangeMax, getRangeMin, getRangeValue, mix, randomInRange, setRangeValue, } from \"./NumberUtils.js\";\nimport { isArray, isString } from \"./TypeUtils.js\";\nimport { millisecondsToSeconds, percentDenominator } from \"../Core/Utils/Constants.js\";\nimport { itemFromArray } from \"./Utils.js\";\nconst randomColorValue = \"random\", midColorValue = \"mid\", colorManagers = new Map();\nexport function addColorManager(manager) {\n colorManagers.set(manager.key, manager);\n}\nfunction stringToRgba(input) {\n for (const [, manager] of colorManagers) {\n if (input.startsWith(manager.stringPrefix)) {\n return manager.parseString(input);\n }\n }\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i, hexFixed = input.replace(shorthandRegex, (_, r, g, b, a) => {\n return r + r + g + g + b + b + (a !== undefined ? a + a : \"\");\n }), regex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i, result = regex.exec(hexFixed), radix = 16, defaultAlpha = 1, alphaFactor = 0xff;\n return result\n ? {\n a: result[4] !== undefined\n ? parseInt(result[4], radix) / alphaFactor\n : defaultAlpha,\n b: parseInt(result[3], radix),\n g: parseInt(result[2], radix),\n r: parseInt(result[1], radix),\n }\n : undefined;\n}\nexport function rangeColorToRgb(input, index, useIndex = true) {\n if (!input) {\n return;\n }\n const color = isString(input) ? { value: input } : input;\n if (isString(color.value)) {\n return colorToRgb(color.value, index, useIndex);\n }\n if (isArray(color.value)) {\n return rangeColorToRgb({\n value: itemFromArray(color.value, index, useIndex),\n });\n }\n for (const [, manager] of colorManagers) {\n const res = manager.handleRangeColor(color);\n if (res) {\n return res;\n }\n }\n}\nexport function colorToRgb(input, index, useIndex = true) {\n if (!input) {\n return;\n }\n const color = isString(input) ? { value: input } : input;\n if (isString(color.value)) {\n return color.value === randomColorValue ? getRandomRgbColor() : stringToRgb(color.value);\n }\n if (isArray(color.value)) {\n return colorToRgb({\n value: itemFromArray(color.value, index, useIndex),\n });\n }\n for (const [, manager] of colorManagers) {\n const res = manager.handleColor(color);\n if (res) {\n return res;\n }\n }\n}\nexport function colorToHsl(color, index, useIndex = true) {\n const rgb = colorToRgb(color, index, useIndex);\n return rgb ? rgbToHsl(rgb) : undefined;\n}\nexport function rangeColorToHsl(color, index, useIndex = true) {\n const rgb = rangeColorToRgb(color, index, useIndex);\n return rgb ? rgbToHsl(rgb) : undefined;\n}\nexport function rgbToHsl(color) {\n const rgbMax = 255, hMax = 360, sMax = 100, lMax = 100, hMin = 0, sMin = 0, hPhase = 60, half = 0.5, double = 2, r1 = color.r / rgbMax, g1 = color.g / rgbMax, b1 = color.b / rgbMax, max = Math.max(r1, g1, b1), min = Math.min(r1, g1, b1), res = {\n h: hMin,\n l: (max + min) * half,\n s: sMin,\n };\n if (max !== min) {\n res.s = res.l < half ? (max - min) / (max + min) : (max - min) / (double - max - min);\n res.h =\n r1 === max\n ? (g1 - b1) / (max - min)\n : (res.h = g1 === max ? double + (b1 - r1) / (max - min) : double * double + (r1 - g1) / (max - min));\n }\n res.l *= lMax;\n res.s *= sMax;\n res.h *= hPhase;\n if (res.h < hMin) {\n res.h += hMax;\n }\n if (res.h >= hMax) {\n res.h -= hMax;\n }\n return res;\n}\nexport function stringToAlpha(input) {\n return stringToRgba(input)?.a;\n}\nexport function stringToRgb(input) {\n return stringToRgba(input);\n}\nexport function hslToRgb(hsl) {\n const hMax = 360, sMax = 100, lMax = 100, sMin = 0, lMin = 0, h = ((hsl.h % hMax) + hMax) % hMax, s = Math.max(sMin, Math.min(sMax, hsl.s)), l = Math.max(lMin, Math.min(lMax, hsl.l)), hNormalized = h / hMax, sNormalized = s / sMax, lNormalized = l / lMax, rgbFactor = 255, triple = 3;\n if (s === sMin) {\n const grayscaleValue = Math.round(lNormalized * rgbFactor);\n return { r: grayscaleValue, g: grayscaleValue, b: grayscaleValue };\n }\n const half = 0.5, double = 2, channel = (temp1, temp2, temp3) => {\n const temp3Min = 0, temp3Max = 1, sextuple = 6;\n if (temp3 < temp3Min) {\n temp3++;\n }\n if (temp3 > temp3Max) {\n temp3--;\n }\n if (temp3 * sextuple < temp3Max) {\n return temp1 + (temp2 - temp1) * sextuple * temp3;\n }\n if (temp3 * double < temp3Max) {\n return temp2;\n }\n if (temp3 * triple < temp3Max * double) {\n const temp3Offset = double / triple;\n return temp1 + (temp2 - temp1) * (temp3Offset - temp3) * sextuple;\n }\n return temp1;\n }, sNormalizedOffset = 1, temp1 = lNormalized < half\n ? lNormalized * (sNormalizedOffset + sNormalized)\n : lNormalized + sNormalized - lNormalized * sNormalized, temp2 = double * lNormalized - temp1, phaseNumerator = 1, phaseThird = phaseNumerator / triple, red = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized + phaseThird)), green = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized)), blue = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized - phaseThird));\n return { r: Math.round(red), g: Math.round(green), b: Math.round(blue) };\n}\nexport function hslaToRgba(hsla) {\n const rgbResult = hslToRgb(hsla);\n return {\n a: hsla.a,\n b: rgbResult.b,\n g: rgbResult.g,\n r: rgbResult.r,\n };\n}\nexport function getRandomRgbColor(min) {\n const defaultMin = 0, fixedMin = min ?? defaultMin, rgbMax = 256;\n return {\n b: Math.floor(randomInRange(setRangeValue(fixedMin, rgbMax))),\n g: Math.floor(randomInRange(setRangeValue(fixedMin, rgbMax))),\n r: Math.floor(randomInRange(setRangeValue(fixedMin, rgbMax))),\n };\n}\nexport function getStyleFromRgb(color, opacity) {\n const defaultOpacity = 1;\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${opacity ?? defaultOpacity})`;\n}\nexport function getStyleFromHsl(color, opacity) {\n const defaultOpacity = 1;\n return `hsla(${color.h}, ${color.s}%, ${color.l}%, ${opacity ?? defaultOpacity})`;\n}\nexport function colorMix(color1, color2, size1, size2) {\n let rgb1 = color1, rgb2 = color2;\n if (rgb1.r === undefined) {\n rgb1 = hslToRgb(color1);\n }\n if (rgb2.r === undefined) {\n rgb2 = hslToRgb(color2);\n }\n return {\n b: mix(rgb1.b, rgb2.b, size1, size2),\n g: mix(rgb1.g, rgb2.g, size1, size2),\n r: mix(rgb1.r, rgb2.r, size1, size2),\n };\n}\nexport function getLinkColor(p1, p2, linkColor) {\n if (linkColor === randomColorValue) {\n return getRandomRgbColor();\n }\n else if (linkColor === midColorValue) {\n const sourceColor = p1.getFillColor() ?? p1.getStrokeColor(), destColor = p2?.getFillColor() ?? p2?.getStrokeColor();\n if (sourceColor && destColor && p2) {\n return colorMix(sourceColor, destColor, p1.getRadius(), p2.getRadius());\n }\n else {\n const hslColor = sourceColor ?? destColor;\n if (hslColor) {\n return hslToRgb(hslColor);\n }\n }\n }\n else {\n return linkColor;\n }\n}\nexport function getLinkRandomColor(optColor, blink, consent) {\n const color = isString(optColor) ? optColor : optColor.value;\n if (color === randomColorValue) {\n if (consent) {\n return rangeColorToRgb({\n value: color,\n });\n }\n if (blink) {\n return randomColorValue;\n }\n return midColorValue;\n }\n else if (color === midColorValue) {\n return midColorValue;\n }\n else {\n return rangeColorToRgb({\n value: color,\n });\n }\n}\nexport function getHslFromAnimation(animation) {\n return animation !== undefined\n ? {\n h: animation.h.value,\n s: animation.s.value,\n l: animation.l.value,\n }\n : undefined;\n}\nexport function getHslAnimationFromHsl(hsl, animationOptions, reduceFactor) {\n const resColor = {\n h: {\n enable: false,\n value: hsl.h,\n },\n s: {\n enable: false,\n value: hsl.s,\n },\n l: {\n enable: false,\n value: hsl.l,\n },\n };\n if (animationOptions) {\n setColorAnimation(resColor.h, animationOptions.h, reduceFactor);\n setColorAnimation(resColor.s, animationOptions.s, reduceFactor);\n setColorAnimation(resColor.l, animationOptions.l, reduceFactor);\n }\n return resColor;\n}\nfunction setColorAnimation(colorValue, colorAnimation, reduceFactor) {\n colorValue.enable = colorAnimation.enable;\n const defaultVelocity = 0, decayOffset = 1, defaultLoops = 0, defaultTime = 0;\n if (colorValue.enable) {\n colorValue.velocity = (getRangeValue(colorAnimation.speed) / percentDenominator) * reduceFactor;\n colorValue.decay = decayOffset - getRangeValue(colorAnimation.decay);\n colorValue.status = \"increasing\";\n colorValue.loops = defaultLoops;\n colorValue.maxLoops = getRangeValue(colorAnimation.count);\n colorValue.time = defaultTime;\n colorValue.delayTime = getRangeValue(colorAnimation.delay) * millisecondsToSeconds;\n if (!colorAnimation.sync) {\n colorValue.velocity *= getRandom();\n colorValue.value *= getRandom();\n }\n colorValue.initialValue = colorValue.value;\n colorValue.offset = setRangeValue(colorAnimation.offset);\n }\n else {\n colorValue.velocity = defaultVelocity;\n }\n}\nexport function updateColorValue(data, range, decrease, delta) {\n const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minOffset = 0, velocityFactor = 3.6;\n if (!data ||\n !data.enable ||\n ((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {\n return;\n }\n if (!data.time) {\n data.time = 0;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n data.time += delta.value;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n return;\n }\n const offset = data.offset ? randomInRange(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = getRangeMax(range), min = getRangeMin(range);\n if (!decrease || data.status === \"increasing\") {\n data.value += velocity;\n if (data.value > max) {\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n if (decrease) {\n data.status = \"decreasing\";\n }\n else {\n data.value -= max;\n }\n }\n }\n else {\n data.value -= velocity;\n const minValue = 0;\n if (data.value < minValue) {\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n data.status = \"increasing\";\n }\n }\n if (data.velocity && decay !== identity) {\n data.velocity *= decay;\n }\n data.value = clamp(data.value, min, max);\n}\nexport function updateColor(color, delta) {\n if (!color) {\n return;\n }\n const { h, s, l } = color;\n const ranges = {\n h: { min: 0, max: 360 },\n s: { min: 0, max: 100 },\n l: { min: 0, max: 100 },\n };\n if (h) {\n updateColorValue(h, ranges.h, false, delta);\n }\n if (s) {\n updateColorValue(s, ranges.s, true, delta);\n }\n if (l) {\n updateColorValue(l, ranges.l, true, delta);\n }\n}\n","import { getRangeValue, parseAlpha } from \"./NumberUtils.js\";\nimport { hslToRgb, hslaToRgba } from \"./ColorUtils.js\";\nexport class HslColorManager {\n constructor() {\n this.key = \"hsl\";\n this.stringPrefix = \"hsl\";\n }\n handleColor(color) {\n const colorValue = color.value, hslColor = colorValue.hsl ?? color.value;\n if (hslColor.h !== undefined && hslColor.s !== undefined && hslColor.l !== undefined) {\n return hslToRgb(hslColor);\n }\n }\n handleRangeColor(color) {\n const colorValue = color.value, hslColor = colorValue.hsl ?? color.value;\n if (hslColor.h !== undefined && hslColor.l !== undefined) {\n return hslToRgb({\n h: getRangeValue(hslColor.h),\n l: getRangeValue(hslColor.l),\n s: getRangeValue(hslColor.s),\n });\n }\n }\n parseString(input) {\n if (!input.startsWith(\"hsl\")) {\n return;\n }\n const regex = /hsla?\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*(,\\s*([\\d.%]+)\\s*)?\\)/i, result = regex.exec(input), minLength = 4, defaultAlpha = 1, radix = 10;\n return result\n ? hslaToRgba({\n a: result.length > minLength ? parseAlpha(result[5]) : defaultAlpha,\n h: parseInt(result[1], radix),\n l: parseInt(result[3], radix),\n s: parseInt(result[2], radix),\n })\n : undefined;\n }\n}\n","import { getRangeValue, parseAlpha } from \"./NumberUtils.js\";\nexport class RgbColorManager {\n constructor() {\n this.key = \"rgb\";\n this.stringPrefix = \"rgb\";\n }\n handleColor(color) {\n const colorValue = color.value, rgbColor = colorValue.rgb ?? color.value;\n if (rgbColor.r !== undefined) {\n return rgbColor;\n }\n }\n handleRangeColor(color) {\n const colorValue = color.value, rgbColor = colorValue.rgb ?? color.value;\n if (rgbColor.r !== undefined) {\n return {\n r: getRangeValue(rgbColor.r),\n g: getRangeValue(rgbColor.g),\n b: getRangeValue(rgbColor.b),\n };\n }\n }\n parseString(input) {\n if (!input.startsWith(this.stringPrefix)) {\n return;\n }\n const regex = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([\\d.%]+)\\s*)?\\)/i, result = regex.exec(input), radix = 10, minLength = 4, defaultAlpha = 1;\n return result\n ? {\n a: result.length > minLength ? parseAlpha(result[5]) : defaultAlpha,\n b: parseInt(result[3], radix),\n g: parseInt(result[2], radix),\n r: parseInt(result[1], radix),\n }\n : undefined;\n }\n}\n","import { Engine } from \"./Core/Engine.js\";\nimport { HslColorManager } from \"./Utils/HslColorManager.js\";\nimport { RgbColorManager } from \"./Utils/RgbColorManager.js\";\nimport { addColorManager } from \"./Utils/ColorUtils.js\";\nexport function init() {\n const rgbColorManager = new RgbColorManager(), hslColorManager = new HslColorManager();\n addColorManager(rgbColorManager);\n addColorManager(hslColorManager);\n const engine = new Engine();\n engine.init();\n return engine;\n}\n","export class ExternalInteractorBase {\n constructor(container) {\n this.type = \"external\";\n this.container = container;\n }\n}\n","export class ParticlesInteractorBase {\n constructor(container) {\n this.type = \"particles\";\n this.container = container;\n }\n}\n","export class Point {\n constructor(position, particle) {\n this.position = position;\n this.particle = particle;\n }\n}\n","import { getDistance } from \"../../Utils/NumberUtils.js\";\nconst squareExp = 2;\nexport class BaseRange {\n constructor(x, y, type) {\n this.position = {\n x: x,\n y: y,\n };\n this.type = type;\n }\n}\nexport class Circle extends BaseRange {\n constructor(x, y, radius) {\n super(x, y, \"circle\");\n this.radius = radius;\n }\n contains(point) {\n return getDistance(point, this.position) <= this.radius;\n }\n intersects(range) {\n const pos1 = this.position, pos2 = range.position, distPos = { x: Math.abs(pos2.x - pos1.x), y: Math.abs(pos2.y - pos1.y) }, r = this.radius;\n if (range instanceof Circle || range.type === \"circle\") {\n const circleRange = range, rSum = r + circleRange.radius, dist = Math.sqrt(distPos.x ** squareExp + distPos.y ** squareExp);\n return rSum > dist;\n }\n else if (range instanceof Rectangle || range.type === \"rectangle\") {\n const rectRange = range, { width, height } = rectRange.size, edges = Math.pow(distPos.x - width, squareExp) + Math.pow(distPos.y - height, squareExp);\n return (edges <= r ** squareExp ||\n (distPos.x <= r + width && distPos.y <= r + height) ||\n distPos.x <= width ||\n distPos.y <= height);\n }\n return false;\n }\n}\nexport class Rectangle extends BaseRange {\n constructor(x, y, width, height) {\n super(x, y, \"rectangle\");\n this.size = {\n height: height,\n width: width,\n };\n }\n contains(point) {\n const w = this.size.width, h = this.size.height, pos = this.position;\n return point.x >= pos.x && point.x <= pos.x + w && point.y >= pos.y && point.y <= pos.y + h;\n }\n intersects(range) {\n if (range instanceof Circle) {\n return range.intersects(this);\n }\n const w = this.size.width, h = this.size.height, pos1 = this.position, pos2 = range.position, size2 = range instanceof Rectangle ? range.size : { width: 0, height: 0 }, w2 = size2.width, h2 = size2.height;\n return pos2.x < pos1.x + w && pos2.x + w2 > pos1.x && pos2.y < pos1.y + h && pos2.y + h2 > pos1.y;\n }\n}\n","import { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class AnimationOptions {\n constructor() {\n this.count = 0;\n this.enable = false;\n this.speed = 1;\n this.decay = 0;\n this.delay = 0;\n this.sync = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.count !== undefined) {\n this.count = setRangeValue(data.count);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.speed !== undefined) {\n this.speed = setRangeValue(data.speed);\n }\n if (data.decay !== undefined) {\n this.decay = setRangeValue(data.decay);\n }\n if (data.delay !== undefined) {\n this.delay = setRangeValue(data.delay);\n }\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\nexport class RangedAnimationOptions extends AnimationOptions {\n constructor() {\n super();\n this.mode = \"auto\";\n this.startValue = \"random\";\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.startValue !== undefined) {\n this.startValue = data.startValue;\n }\n }\n}\n","import { AnimationOptions } from \"./AnimationOptions.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class ColorAnimation extends AnimationOptions {\n constructor() {\n super();\n this.offset = 0;\n this.sync = true;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.offset !== undefined) {\n this.offset = setRangeValue(data.offset);\n }\n }\n}\n","import { ColorAnimation } from \"./ColorAnimation.js\";\nexport class HslAnimation {\n constructor() {\n this.h = new ColorAnimation();\n this.s = new ColorAnimation();\n this.l = new ColorAnimation();\n }\n load(data) {\n if (!data) {\n return;\n }\n this.h.load(data.h);\n this.s.load(data.s);\n this.l.load(data.l);\n }\n}\n","import { isArray, isString } from \"../../Utils/TypeUtils.js\";\nexport class OptionsColor {\n constructor() {\n this.value = \"\";\n }\n static create(source, data) {\n const color = new OptionsColor();\n color.load(source);\n if (data !== undefined) {\n if (isString(data) || isArray(data)) {\n color.load({ value: data });\n }\n else {\n color.load(data);\n }\n }\n return color;\n }\n load(data) {\n if (data?.value === undefined) {\n return;\n }\n this.value = data.value;\n }\n}\n","import { isArray, isString } from \"../../Utils/TypeUtils.js\";\nimport { HslAnimation } from \"./HslAnimation.js\";\nimport { OptionsColor } from \"./OptionsColor.js\";\nexport class AnimatableColor extends OptionsColor {\n constructor() {\n super();\n this.animation = new HslAnimation();\n }\n static create(source, data) {\n const color = new AnimatableColor();\n color.load(source);\n if (data !== undefined) {\n if (isString(data) || isArray(data)) {\n color.load({ value: data });\n }\n else {\n color.load(data);\n }\n }\n return color;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n const colorAnimation = data.animation;\n if (colorAnimation !== undefined) {\n if (colorAnimation.enable !== undefined) {\n this.animation.h.load(colorAnimation);\n }\n else {\n this.animation.load(data.animation);\n }\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nexport class Background {\n constructor() {\n this.color = new OptionsColor();\n this.color.value = \"\";\n this.image = \"\";\n this.position = \"\";\n this.repeat = \"\";\n this.size = \"\";\n this.opacity = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n if (data.position !== undefined) {\n this.position = data.position;\n }\n if (data.repeat !== undefined) {\n this.repeat = data.repeat;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nexport class BackgroundMaskCover {\n constructor() {\n this.opacity = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { BackgroundMaskCover } from \"./BackgroundMaskCover.js\";\nimport { isString } from \"../../../Utils/TypeUtils.js\";\nexport class BackgroundMask {\n constructor() {\n this.composite = \"destination-out\";\n this.cover = new BackgroundMaskCover();\n this.enable = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.composite !== undefined) {\n this.composite = data.composite;\n }\n if (data.cover !== undefined) {\n const cover = data.cover, color = (isString(data.cover) ? { color: data.cover } : data.cover);\n this.cover.load(cover.color !== undefined || cover.image !== undefined ? cover : { color: color });\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n","export class FullScreen {\n constructor() {\n this.enable = true;\n this.zIndex = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.zIndex !== undefined) {\n this.zIndex = data.zIndex;\n }\n }\n}\n","export class ClickEvent {\n constructor() {\n this.enable = false;\n this.mode = [];\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n }\n}\n","export class DivEvent {\n constructor() {\n this.selectors = [];\n this.enable = false;\n this.mode = [];\n this.type = \"circle\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","export class Parallax {\n constructor() {\n this.enable = false;\n this.force = 2;\n this.smooth = 10;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.force !== undefined) {\n this.force = data.force;\n }\n if (data.smooth !== undefined) {\n this.smooth = data.smooth;\n }\n }\n}\n","import { Parallax } from \"./Parallax.js\";\nexport class HoverEvent {\n constructor() {\n this.enable = false;\n this.mode = [];\n this.parallax = new Parallax();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n this.parallax.load(data.parallax);\n }\n}\n","export class ResizeEvent {\n constructor() {\n this.delay = 0.5;\n this.enable = true;\n }\n load(data) {\n if (data === undefined) {\n return;\n }\n if (data.delay !== undefined) {\n this.delay = data.delay;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n","import { ClickEvent } from \"./ClickEvent.js\";\nimport { DivEvent } from \"./DivEvent.js\";\nimport { HoverEvent } from \"./HoverEvent.js\";\nimport { ResizeEvent } from \"./ResizeEvent.js\";\nimport { executeOnSingleOrMultiple } from \"../../../../Utils/Utils.js\";\nexport class Events {\n constructor() {\n this.onClick = new ClickEvent();\n this.onDiv = new DivEvent();\n this.onHover = new HoverEvent();\n this.resize = new ResizeEvent();\n }\n load(data) {\n if (!data) {\n return;\n }\n this.onClick.load(data.onClick);\n const onDiv = data.onDiv;\n if (onDiv !== undefined) {\n this.onDiv = executeOnSingleOrMultiple(onDiv, (t) => {\n const tmp = new DivEvent();\n tmp.load(t);\n return tmp;\n });\n }\n this.onHover.load(data.onHover);\n this.resize.load(data.resize);\n }\n}\n","export class Modes {\n constructor(engine, container) {\n this._engine = engine;\n this._container = container;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (!this._container) {\n return;\n }\n const interactors = this._engine.interactors.get(this._container);\n if (!interactors) {\n return;\n }\n for (const interactor of interactors) {\n if (!interactor.loadModeOptions) {\n continue;\n }\n interactor.loadModeOptions(this, data);\n }\n }\n}\n","import { Events } from \"./Events/Events.js\";\nimport { Modes } from \"./Modes/Modes.js\";\nexport class Interactivity {\n constructor(engine, container) {\n this.detectsOn = \"window\";\n this.events = new Events();\n this.modes = new Modes(engine, container);\n }\n load(data) {\n if (!data) {\n return;\n }\n const detectsOn = data.detectsOn;\n if (detectsOn !== undefined) {\n this.detectsOn = detectsOn;\n }\n this.events.load(data.events);\n this.modes.load(data.modes);\n }\n}\n","import { deepExtend } from \"../../Utils/Utils.js\";\nconst defaultPosition = 50;\nexport class ManualParticle {\n load(data) {\n if (!data) {\n return;\n }\n if (data.position) {\n this.position = {\n x: data.position.x ?? defaultPosition,\n y: data.position.y ?? defaultPosition,\n mode: data.position.mode ?? \"percent\",\n };\n }\n if (data.options) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n","import { deepExtend } from \"../../Utils/Utils.js\";\nexport class Responsive {\n constructor() {\n this.maxWidth = Infinity;\n this.options = {};\n this.mode = \"canvas\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.maxWidth !== undefined) {\n this.maxWidth = data.maxWidth;\n }\n if (data.mode !== undefined) {\n if (data.mode === \"screen\") {\n this.mode = \"screen\";\n }\n else {\n this.mode = \"canvas\";\n }\n }\n if (data.options !== undefined) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n","export class ThemeDefault {\n constructor() {\n this.auto = false;\n this.mode = \"any\";\n this.value = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.auto !== undefined) {\n this.auto = data.auto;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { ThemeDefault } from \"./ThemeDefault.js\";\nimport { deepExtend } from \"../../../Utils/Utils.js\";\nexport class Theme {\n constructor() {\n this.name = \"\";\n this.default = new ThemeDefault();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n this.default.load(data.default);\n if (data.options !== undefined) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n","export class CollisionsAbsorb {\n constructor() {\n this.speed = 2;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.speed !== undefined) {\n this.speed = data.speed;\n }\n }\n}\n","export class CollisionsOverlap {\n constructor() {\n this.enable = true;\n this.retries = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.retries !== undefined) {\n this.retries = data.retries;\n }\n }\n}\n","import { AnimationOptions, RangedAnimationOptions } from \"./AnimationOptions.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class ValueWithRandom {\n constructor() {\n this.value = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.value !== undefined) {\n this.value = setRangeValue(data.value);\n }\n }\n}\nexport class AnimationValueWithRandom extends ValueWithRandom {\n constructor() {\n super();\n this.animation = new AnimationOptions();\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\nexport class RangedAnimationValueWithRandom extends AnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new RangedAnimationOptions();\n }\n load(data) {\n super.load(data);\n }\n}\n","import { ValueWithRandom } from \"../../ValueWithRandom.js\";\nexport class ParticlesBounceFactor extends ValueWithRandom {\n constructor() {\n super();\n this.value = 1;\n }\n}\n","import { ParticlesBounceFactor } from \"./ParticlesBounceFactor.js\";\nexport class ParticlesBounce {\n constructor() {\n this.horizontal = new ParticlesBounceFactor();\n this.vertical = new ParticlesBounceFactor();\n }\n load(data) {\n if (!data) {\n return;\n }\n this.horizontal.load(data.horizontal);\n this.vertical.load(data.vertical);\n }\n}\n","import { CollisionsAbsorb } from \"./CollisionsAbsorb.js\";\nimport { CollisionsOverlap } from \"./CollisionsOverlap.js\";\nimport { ParticlesBounce } from \"../Bounce/ParticlesBounce.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Collisions {\n constructor() {\n this.absorb = new CollisionsAbsorb();\n this.bounce = new ParticlesBounce();\n this.enable = false;\n this.maxSpeed = 50;\n this.mode = \"bounce\";\n this.overlap = new CollisionsOverlap();\n }\n load(data) {\n if (!data) {\n return;\n }\n this.absorb.load(data.absorb);\n this.bounce.load(data.bounce);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = setRangeValue(data.maxSpeed);\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n this.overlap.load(data.overlap);\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nexport class Effect {\n constructor() {\n this.close = true;\n this.fill = true;\n this.options = {};\n this.type = [];\n }\n load(data) {\n if (!data) {\n return;\n }\n const options = data.options;\n if (options !== undefined) {\n for (const effect in options) {\n const item = options[effect];\n if (item) {\n this.options[effect] = deepExtend(this.options[effect] ?? {}, item);\n }\n }\n }\n if (data.close !== undefined) {\n this.close = data.close;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","import { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveAngle {\n constructor() {\n this.offset = 0;\n this.value = 90;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.offset !== undefined) {\n this.offset = setRangeValue(data.offset);\n }\n if (data.value !== undefined) {\n this.value = setRangeValue(data.value);\n }\n }\n}\n","import { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveAttract {\n constructor() {\n this.distance = 200;\n this.enable = false;\n this.rotate = {\n x: 3000,\n y: 3000,\n };\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = setRangeValue(data.distance);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.rotate) {\n const rotateX = data.rotate.x;\n if (rotateX !== undefined) {\n this.rotate.x = rotateX;\n }\n const rotateY = data.rotate.y;\n if (rotateY !== undefined) {\n this.rotate.y = rotateY;\n }\n }\n }\n}\n","export class MoveCenter {\n constructor() {\n this.x = 50;\n this.y = 50;\n this.mode = \"percent\";\n this.radius = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.x !== undefined) {\n this.x = data.x;\n }\n if (data.y !== undefined) {\n this.y = data.y;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.radius !== undefined) {\n this.radius = data.radius;\n }\n }\n}\n","import { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveGravity {\n constructor() {\n this.acceleration = 9.81;\n this.enable = false;\n this.inverse = false;\n this.maxSpeed = 50;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.acceleration !== undefined) {\n this.acceleration = setRangeValue(data.acceleration);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.inverse !== undefined) {\n this.inverse = data.inverse;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = setRangeValue(data.maxSpeed);\n }\n }\n}\n","import { ValueWithRandom } from \"../../../ValueWithRandom.js\";\nimport { deepExtend } from \"../../../../../Utils/Utils.js\";\nexport class MovePath {\n constructor() {\n this.clamp = true;\n this.delay = new ValueWithRandom();\n this.enable = false;\n this.options = {};\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.clamp !== undefined) {\n this.clamp = data.clamp;\n }\n this.delay.load(data.delay);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n this.generator = data.generator;\n if (data.options) {\n this.options = deepExtend(this.options, data.options);\n }\n }\n}\n","import { OptionsColor } from \"../../OptionsColor.js\";\nexport class MoveTrailFill {\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n }\n}\n","import { MoveTrailFill } from \"./MoveTrailFill.js\";\nexport class MoveTrail {\n constructor() {\n this.enable = false;\n this.length = 10;\n this.fill = new MoveTrailFill();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.fill !== undefined) {\n this.fill.load(data.fill);\n }\n if (data.length !== undefined) {\n this.length = data.length;\n }\n }\n}\n","export class OutModes {\n constructor() {\n this.default = \"out\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.default !== undefined) {\n this.default = data.default;\n }\n this.bottom = data.bottom ?? data.default;\n this.left = data.left ?? data.default;\n this.right = data.right ?? data.default;\n this.top = data.top ?? data.default;\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Spin {\n constructor() {\n this.acceleration = 0;\n this.enable = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.acceleration !== undefined) {\n this.acceleration = setRangeValue(data.acceleration);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.position) {\n this.position = deepExtend({}, data.position);\n }\n }\n}\n","import { isNumber, isObject } from \"../../../../Utils/TypeUtils.js\";\nimport { MoveAngle } from \"./MoveAngle.js\";\nimport { MoveAttract } from \"./MoveAttract.js\";\nimport { MoveCenter } from \"./MoveCenter.js\";\nimport { MoveGravity } from \"./MoveGravity.js\";\nimport { MovePath } from \"./Path/MovePath.js\";\nimport { MoveTrail } from \"./MoveTrail.js\";\nimport { OutModes } from \"./OutModes.js\";\nimport { Spin } from \"./Spin.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Move {\n constructor() {\n this.angle = new MoveAngle();\n this.attract = new MoveAttract();\n this.center = new MoveCenter();\n this.decay = 0;\n this.distance = {};\n this.direction = \"none\";\n this.drift = 0;\n this.enable = false;\n this.gravity = new MoveGravity();\n this.path = new MovePath();\n this.outModes = new OutModes();\n this.random = false;\n this.size = false;\n this.speed = 2;\n this.spin = new Spin();\n this.straight = false;\n this.trail = new MoveTrail();\n this.vibrate = false;\n this.warp = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n this.angle.load(isNumber(data.angle) ? { value: data.angle } : data.angle);\n this.attract.load(data.attract);\n this.center.load(data.center);\n if (data.decay !== undefined) {\n this.decay = setRangeValue(data.decay);\n }\n if (data.direction !== undefined) {\n this.direction = data.direction;\n }\n if (data.distance !== undefined) {\n this.distance = isNumber(data.distance)\n ? {\n horizontal: data.distance,\n vertical: data.distance,\n }\n : { ...data.distance };\n }\n if (data.drift !== undefined) {\n this.drift = setRangeValue(data.drift);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n this.gravity.load(data.gravity);\n const outModes = data.outModes;\n if (outModes !== undefined) {\n if (isObject(outModes)) {\n this.outModes.load(outModes);\n }\n else {\n this.outModes.load({\n default: outModes,\n });\n }\n }\n this.path.load(data.path);\n if (data.random !== undefined) {\n this.random = data.random;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.speed !== undefined) {\n this.speed = setRangeValue(data.speed);\n }\n this.spin.load(data.spin);\n if (data.straight !== undefined) {\n this.straight = data.straight;\n }\n this.trail.load(data.trail);\n if (data.vibrate !== undefined) {\n this.vibrate = data.vibrate;\n }\n if (data.warp !== undefined) {\n this.warp = data.warp;\n }\n }\n}\n","import { RangedAnimationOptions } from \"../../AnimationOptions.js\";\nexport class OpacityAnimation extends RangedAnimationOptions {\n constructor() {\n super();\n this.destroy = \"none\";\n this.speed = 2;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.destroy !== undefined) {\n this.destroy = data.destroy;\n }\n }\n}\n","import { OpacityAnimation } from \"./OpacityAnimation.js\";\nimport { RangedAnimationValueWithRandom } from \"../../ValueWithRandom.js\";\nexport class Opacity extends RangedAnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new OpacityAnimation();\n this.value = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n super.load(data);\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\n","export class ParticlesDensity {\n constructor() {\n this.enable = false;\n this.width = 1920;\n this.height = 1080;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n const width = data.width;\n if (width !== undefined) {\n this.width = width;\n }\n const height = data.height;\n if (height !== undefined) {\n this.height = height;\n }\n }\n}\n","export class ParticlesNumberLimit {\n constructor() {\n this.mode = \"delete\";\n this.value = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { ParticlesDensity } from \"./ParticlesDensity.js\";\nimport { ParticlesNumberLimit } from \"./ParticlesNumberLimit.js\";\nexport class ParticlesNumber {\n constructor() {\n this.density = new ParticlesDensity();\n this.limit = new ParticlesNumberLimit();\n this.value = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n this.density.load(data.density);\n this.limit.load(data.limit);\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nexport class Shadow {\n constructor() {\n this.blur = 0;\n this.color = new OptionsColor();\n this.enable = false;\n this.offset = {\n x: 0,\n y: 0,\n };\n this.color.value = \"#000\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.blur !== undefined) {\n this.blur = data.blur;\n }\n this.color = OptionsColor.create(this.color, data.color);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.offset === undefined) {\n return;\n }\n if (data.offset.x !== undefined) {\n this.offset.x = data.offset.x;\n }\n if (data.offset.y !== undefined) {\n this.offset.y = data.offset.y;\n }\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nexport class Shape {\n constructor() {\n this.close = true;\n this.fill = true;\n this.options = {};\n this.type = \"circle\";\n }\n load(data) {\n if (!data) {\n return;\n }\n const options = data.options;\n if (options !== undefined) {\n for (const shape in options) {\n const item = options[shape];\n if (item) {\n this.options[shape] = deepExtend(this.options[shape] ?? {}, item);\n }\n }\n }\n if (data.close !== undefined) {\n this.close = data.close;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","import { RangedAnimationOptions } from \"../../AnimationOptions.js\";\nexport class SizeAnimation extends RangedAnimationOptions {\n constructor() {\n super();\n this.destroy = \"none\";\n this.speed = 5;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.destroy !== undefined) {\n this.destroy = data.destroy;\n }\n }\n}\n","import { RangedAnimationValueWithRandom } from \"../../ValueWithRandom.js\";\nimport { SizeAnimation } from \"./SizeAnimation.js\";\nexport class Size extends RangedAnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new SizeAnimation();\n this.value = 3;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\n","import { AnimatableColor } from \"../AnimatableColor.js\";\nimport { setRangeValue } from \"../../../Utils/NumberUtils.js\";\nexport class Stroke {\n constructor() {\n this.width = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = AnimatableColor.create(this.color, data.color);\n }\n if (data.width !== undefined) {\n this.width = setRangeValue(data.width);\n }\n if (data.opacity !== undefined) {\n this.opacity = setRangeValue(data.opacity);\n }\n }\n}\n","import { ValueWithRandom } from \"../../ValueWithRandom.js\";\nexport class ZIndex extends ValueWithRandom {\n constructor() {\n super();\n this.opacityRate = 1;\n this.sizeRate = 1;\n this.velocityRate = 1;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.opacityRate !== undefined) {\n this.opacityRate = data.opacityRate;\n }\n if (data.sizeRate !== undefined) {\n this.sizeRate = data.sizeRate;\n }\n if (data.velocityRate !== undefined) {\n this.velocityRate = data.velocityRate;\n }\n }\n}\n","import { deepExtend, executeOnSingleOrMultiple } from \"../../../Utils/Utils.js\";\nimport { AnimatableColor } from \"../AnimatableColor.js\";\nimport { Collisions } from \"./Collisions/Collisions.js\";\nimport { Effect } from \"./Effect/Effect.js\";\nimport { Move } from \"./Move/Move.js\";\nimport { Opacity } from \"./Opacity/Opacity.js\";\nimport { ParticlesBounce } from \"./Bounce/ParticlesBounce.js\";\nimport { ParticlesNumber } from \"./Number/ParticlesNumber.js\";\nimport { Shadow } from \"./Shadow.js\";\nimport { Shape } from \"./Shape/Shape.js\";\nimport { Size } from \"./Size/Size.js\";\nimport { Stroke } from \"./Stroke.js\";\nimport { ZIndex } from \"./ZIndex/ZIndex.js\";\nexport class ParticlesOptions {\n constructor(engine, container) {\n this._engine = engine;\n this._container = container;\n this.bounce = new ParticlesBounce();\n this.collisions = new Collisions();\n this.color = new AnimatableColor();\n this.color.value = \"#fff\";\n this.effect = new Effect();\n this.groups = {};\n this.move = new Move();\n this.number = new ParticlesNumber();\n this.opacity = new Opacity();\n this.reduceDuplicates = false;\n this.shadow = new Shadow();\n this.shape = new Shape();\n this.size = new Size();\n this.stroke = new Stroke();\n this.zIndex = new ZIndex();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.groups !== undefined) {\n for (const group of Object.keys(data.groups)) {\n if (!Object.hasOwn(data.groups, group)) {\n continue;\n }\n const item = data.groups[group];\n if (item !== undefined) {\n this.groups[group] = deepExtend(this.groups[group] ?? {}, item);\n }\n }\n }\n if (data.reduceDuplicates !== undefined) {\n this.reduceDuplicates = data.reduceDuplicates;\n }\n this.bounce.load(data.bounce);\n this.color.load(AnimatableColor.create(this.color, data.color));\n this.effect.load(data.effect);\n this.move.load(data.move);\n this.number.load(data.number);\n this.opacity.load(data.opacity);\n this.shape.load(data.shape);\n this.size.load(data.size);\n this.shadow.load(data.shadow);\n this.zIndex.load(data.zIndex);\n this.collisions.load(data.collisions);\n if (data.interactivity !== undefined) {\n this.interactivity = deepExtend({}, data.interactivity);\n }\n const strokeToLoad = data.stroke;\n if (strokeToLoad) {\n this.stroke = executeOnSingleOrMultiple(strokeToLoad, (t) => {\n const tmp = new Stroke();\n tmp.load(t);\n return tmp;\n });\n }\n if (this._container) {\n const updaters = this._engine.updaters.get(this._container);\n if (updaters) {\n for (const updater of updaters) {\n if (updater.loadOptions) {\n updater.loadOptions(this, data);\n }\n }\n }\n const interactors = this._engine.interactors.get(this._container);\n if (interactors) {\n for (const interactor of interactors) {\n if (interactor.loadParticlesOptions) {\n interactor.loadParticlesOptions(this, data);\n }\n }\n }\n }\n }\n}\n","import { ParticlesOptions } from \"../Options/Classes/Particles/ParticlesOptions.js\";\nexport function loadOptions(options, ...sourceOptionsArr) {\n for (const sourceOptions of sourceOptionsArr) {\n options.load(sourceOptions);\n }\n}\nexport function loadParticlesOptions(engine, container, ...sourceOptionsArr) {\n const options = new ParticlesOptions(engine, container);\n loadOptions(options, ...sourceOptionsArr);\n return options;\n}\n","import { deepExtend, executeOnSingleOrMultiple, safeMatchMedia } from \"../../Utils/Utils.js\";\nimport { Background } from \"./Background/Background.js\";\nimport { BackgroundMask } from \"./BackgroundMask/BackgroundMask.js\";\nimport { FullScreen } from \"./FullScreen/FullScreen.js\";\nimport { Interactivity } from \"./Interactivity/Interactivity.js\";\nimport { ManualParticle } from \"./ManualParticle.js\";\nimport { Responsive } from \"./Responsive.js\";\nimport { Theme } from \"./Theme/Theme.js\";\nimport { isBoolean } from \"../../Utils/TypeUtils.js\";\nimport { loadParticlesOptions } from \"../../Utils/OptionsUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class Options {\n constructor(engine, container) {\n this._findDefaultTheme = (mode) => {\n return (this.themes.find((theme) => theme.default.value && theme.default.mode === mode) ??\n this.themes.find((theme) => theme.default.value && theme.default.mode === \"any\"));\n };\n this._importPreset = (preset) => {\n this.load(this._engine.getPreset(preset));\n };\n this._engine = engine;\n this._container = container;\n this.autoPlay = true;\n this.background = new Background();\n this.backgroundMask = new BackgroundMask();\n this.clear = true;\n this.defaultThemes = {};\n this.delay = 0;\n this.fullScreen = new FullScreen();\n this.detectRetina = true;\n this.duration = 0;\n this.fpsLimit = 120;\n this.interactivity = new Interactivity(engine, container);\n this.manualParticles = [];\n this.particles = loadParticlesOptions(this._engine, this._container);\n this.pauseOnBlur = true;\n this.pauseOnOutsideViewport = true;\n this.responsive = [];\n this.smooth = false;\n this.style = {};\n this.themes = [];\n this.zLayers = 100;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.preset !== undefined) {\n executeOnSingleOrMultiple(data.preset, (preset) => this._importPreset(preset));\n }\n if (data.autoPlay !== undefined) {\n this.autoPlay = data.autoPlay;\n }\n if (data.clear !== undefined) {\n this.clear = data.clear;\n }\n if (data.key !== undefined) {\n this.key = data.key;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n if (data.delay !== undefined) {\n this.delay = setRangeValue(data.delay);\n }\n const detectRetina = data.detectRetina;\n if (detectRetina !== undefined) {\n this.detectRetina = detectRetina;\n }\n if (data.duration !== undefined) {\n this.duration = setRangeValue(data.duration);\n }\n const fpsLimit = data.fpsLimit;\n if (fpsLimit !== undefined) {\n this.fpsLimit = fpsLimit;\n }\n if (data.pauseOnBlur !== undefined) {\n this.pauseOnBlur = data.pauseOnBlur;\n }\n if (data.pauseOnOutsideViewport !== undefined) {\n this.pauseOnOutsideViewport = data.pauseOnOutsideViewport;\n }\n if (data.zLayers !== undefined) {\n this.zLayers = data.zLayers;\n }\n this.background.load(data.background);\n const fullScreen = data.fullScreen;\n if (isBoolean(fullScreen)) {\n this.fullScreen.enable = fullScreen;\n }\n else {\n this.fullScreen.load(fullScreen);\n }\n this.backgroundMask.load(data.backgroundMask);\n this.interactivity.load(data.interactivity);\n if (data.manualParticles) {\n this.manualParticles = data.manualParticles.map((t) => {\n const tmp = new ManualParticle();\n tmp.load(t);\n return tmp;\n });\n }\n this.particles.load(data.particles);\n this.style = deepExtend(this.style, data.style);\n this._engine.loadOptions(this, data);\n if (data.smooth !== undefined) {\n this.smooth = data.smooth;\n }\n const interactors = this._engine.interactors.get(this._container);\n if (interactors) {\n for (const interactor of interactors) {\n if (interactor.loadOptions) {\n interactor.loadOptions(this, data);\n }\n }\n }\n if (data.responsive !== undefined) {\n for (const responsive of data.responsive) {\n const optResponsive = new Responsive();\n optResponsive.load(responsive);\n this.responsive.push(optResponsive);\n }\n }\n this.responsive.sort((a, b) => a.maxWidth - b.maxWidth);\n if (data.themes !== undefined) {\n for (const theme of data.themes) {\n const existingTheme = this.themes.find((t) => t.name === theme.name);\n if (!existingTheme) {\n const optTheme = new Theme();\n optTheme.load(theme);\n this.themes.push(optTheme);\n }\n else {\n existingTheme.load(theme);\n }\n }\n }\n this.defaultThemes.dark = this._findDefaultTheme(\"dark\")?.name;\n this.defaultThemes.light = this._findDefaultTheme(\"light\")?.name;\n }\n setResponsive(width, pxRatio, defaultOptions) {\n this.load(defaultOptions);\n const responsiveOptions = this.responsive.find((t) => t.mode === \"screen\" && screen ? t.maxWidth > screen.availWidth : t.maxWidth * pxRatio > width);\n this.load(responsiveOptions?.options);\n return responsiveOptions?.maxWidth;\n }\n setTheme(name) {\n if (name) {\n const chosenTheme = this.themes.find((theme) => theme.name === name);\n if (chosenTheme) {\n this.load(chosenTheme.options);\n }\n }\n else {\n const mediaMatch = safeMatchMedia(\"(prefers-color-scheme: dark)\"), clientDarkMode = mediaMatch && mediaMatch.matches, defaultTheme = this._findDefaultTheme(clientDarkMode ? \"dark\" : \"light\");\n if (defaultTheme) {\n this.load(defaultTheme.options);\n }\n }\n }\n}\n","import { getStyleFromRgb } from \"./ColorUtils.js\";\nconst origin = { x: 0, y: 0 };\nexport function drawLine(context, begin, end) {\n context.beginPath();\n context.moveTo(begin.x, begin.y);\n context.lineTo(end.x, end.y);\n context.closePath();\n}\nexport function paintBase(context, dimension, baseColor) {\n context.fillStyle = baseColor ?? \"rgba(0,0,0,0)\";\n context.fillRect(origin.x, origin.y, dimension.width, dimension.height);\n}\nexport function paintImage(context, dimension, image, opacity) {\n if (!image) {\n return;\n }\n context.globalAlpha = opacity;\n context.drawImage(image, origin.x, origin.y, dimension.width, dimension.height);\n context.globalAlpha = 1;\n}\nexport function clear(context, dimension) {\n context.clearRect(origin.x, origin.y, dimension.width, dimension.height);\n}\nexport function drawParticle(data) {\n const { container, context, particle, delta, colorStyles, backgroundMask, composite, radius, opacity, shadow, transform, } = data, pos = particle.getPosition(), defaultAngle = 0, angle = particle.rotation + (particle.pathRotation ? particle.velocity.angle : defaultAngle), rotateData = {\n sin: Math.sin(angle),\n cos: Math.cos(angle),\n }, defaultTransformFactor = 1, transformData = {\n a: rotateData.cos * (transform.a ?? defaultTransformFactor),\n b: rotateData.sin * (transform.b ?? defaultTransformFactor),\n c: -rotateData.sin * (transform.c ?? defaultTransformFactor),\n d: rotateData.cos * (transform.d ?? defaultTransformFactor),\n };\n context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);\n if (backgroundMask) {\n context.globalCompositeOperation = composite;\n }\n const shadowColor = particle.shadowColor;\n if (shadow.enable && shadowColor) {\n context.shadowBlur = shadow.blur;\n context.shadowColor = getStyleFromRgb(shadowColor);\n context.shadowOffsetX = shadow.offset.x;\n context.shadowOffsetY = shadow.offset.y;\n }\n if (colorStyles.fill) {\n context.fillStyle = colorStyles.fill;\n }\n const minStrokeWidth = 0, strokeWidth = particle.strokeWidth ?? minStrokeWidth;\n context.lineWidth = strokeWidth;\n if (colorStyles.stroke) {\n context.strokeStyle = colorStyles.stroke;\n }\n const drawData = {\n container,\n context,\n particle,\n radius,\n opacity,\n delta,\n transformData,\n strokeWidth,\n };\n drawShape(drawData);\n drawShapeAfterDraw(drawData);\n drawEffect(drawData);\n context.globalCompositeOperation = \"source-over\";\n context.resetTransform();\n}\nexport function drawEffect(data) {\n const { container, context, particle, radius, opacity, delta, transformData } = data;\n if (!particle.effect) {\n return;\n }\n const drawer = container.effectDrawers.get(particle.effect);\n if (!drawer) {\n return;\n }\n drawer.draw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n}\nexport function drawShape(data) {\n const { container, context, particle, radius, opacity, delta, strokeWidth, transformData } = data, minStrokeWidth = 0;\n if (!particle.shape) {\n return;\n }\n const drawer = container.shapeDrawers.get(particle.shape);\n if (!drawer) {\n return;\n }\n context.beginPath();\n drawer.draw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n if (particle.shapeClose) {\n context.closePath();\n }\n if (strokeWidth > minStrokeWidth) {\n context.stroke();\n }\n if (particle.shapeFill) {\n context.fill();\n }\n}\nexport function drawShapeAfterDraw(data) {\n const { container, context, particle, radius, opacity, delta, transformData } = data;\n if (!particle.shape) {\n return;\n }\n const drawer = container.shapeDrawers.get(particle.shape);\n if (!drawer?.afterDraw) {\n return;\n }\n drawer.afterDraw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n}\nexport function drawPlugin(context, plugin, delta) {\n if (!plugin.draw) {\n return;\n }\n plugin.draw(context, delta);\n}\nexport function drawParticlePlugin(context, plugin, particle, delta) {\n if (!plugin.drawParticle) {\n return;\n }\n plugin.drawParticle(context, particle, delta);\n}\nexport function alterHsl(color, type, value) {\n const lFactor = 1;\n return {\n h: color.h,\n s: color.s,\n l: color.l + (type === \"darken\" ? -lFactor : lFactor) * value,\n };\n}\n","import { init } from \"./init.js\";\nimport { isSsr } from \"./Utils/Utils.js\";\nconst tsParticles = init();\nif (!isSsr()) {\n window.tsParticles = tsParticles;\n}\nexport * from \"./exports.js\";\nexport * from \"./export-types.js\";\nexport { tsParticles };\n","import { jsx as d } from \"react/jsx-runtime\";\nimport { useEffect as m } from \"react\";\nimport { tsParticles as s } from \"@tsparticles/engine\";\nconst f = (t) => {\n const i = t.id ?? \"tsparticles\";\n return m(() => {\n let e;\n return s.load({ id: i, url: t.url, options: t.options }).then((l) => {\n var a;\n e = l, (a = t.particlesLoaded) == null || a.call(t, l);\n }), () => {\n e == null || e.destroy();\n };\n }, [i, t, t.url, t.options]), /* @__PURE__ */ d(\"div\", { id: i, className: t.className });\n};\nexport {\n f as default\n};\n","import { tsParticles as i } from \"@tsparticles/engine\";\nimport o from \"./Particles.js\";\nimport \"react/jsx-runtime\";\nimport \"react\";\nasync function n(t) {\n await t(i);\n}\nexport {\n o as Particles,\n o as default,\n n as initParticlesEngine\n};\n","export async function loadSlim(engine, refresh = true) {\n const { loadParallaxMover } = await import(\"@tsparticles/move-parallax\"), { loadExternalAttractInteraction } = await import(\"@tsparticles/interaction-external-attract\"), { loadExternalBounceInteraction } = await import(\"@tsparticles/interaction-external-bounce\"), { loadExternalBubbleInteraction } = await import(\"@tsparticles/interaction-external-bubble\"), { loadExternalConnectInteraction } = await import(\"@tsparticles/interaction-external-connect\"), { loadExternalGrabInteraction } = await import(\"@tsparticles/interaction-external-grab\"), { loadExternalPauseInteraction } = await import(\"@tsparticles/interaction-external-pause\"), { loadExternalPushInteraction } = await import(\"@tsparticles/interaction-external-push\"), { loadExternalRemoveInteraction } = await import(\"@tsparticles/interaction-external-remove\"), { loadExternalRepulseInteraction } = await import(\"@tsparticles/interaction-external-repulse\"), { loadExternalSlowInteraction } = await import(\"@tsparticles/interaction-external-slow\"), { loadParticlesAttractInteraction } = await import(\"@tsparticles/interaction-particles-attract\"), { loadParticlesCollisionsInteraction } = await import(\"@tsparticles/interaction-particles-collisions\"), { loadParticlesLinksInteraction } = await import(\"@tsparticles/interaction-particles-links\"), { loadEasingQuadPlugin } = await import(\"@tsparticles/plugin-easing-quad\"), { loadEmojiShape } = await import(\"@tsparticles/shape-emoji\"), { loadImageShape } = await import(\"@tsparticles/shape-image\"), { loadLineShape } = await import(\"@tsparticles/shape-line\"), { loadPolygonShape } = await import(\"@tsparticles/shape-polygon\"), { loadSquareShape } = await import(\"@tsparticles/shape-square\"), { loadStarShape } = await import(\"@tsparticles/shape-star\"), { loadLifeUpdater } = await import(\"@tsparticles/updater-life\"), { loadRotateUpdater } = await import(\"@tsparticles/updater-rotate\"), { loadStrokeColorUpdater } = await import(\"@tsparticles/updater-stroke-color\"), { loadBasic } = await import(\"@tsparticles/basic\");\n await loadParallaxMover(engine, false);\n await loadExternalAttractInteraction(engine, false);\n await loadExternalBounceInteraction(engine, false);\n await loadExternalBubbleInteraction(engine, false);\n await loadExternalConnectInteraction(engine, false);\n await loadExternalGrabInteraction(engine, false);\n await loadExternalPauseInteraction(engine, false);\n await loadExternalPushInteraction(engine, false);\n await loadExternalRemoveInteraction(engine, false);\n await loadExternalRepulseInteraction(engine, false);\n await loadExternalSlowInteraction(engine, false);\n await loadParticlesAttractInteraction(engine, false);\n await loadParticlesCollisionsInteraction(engine, false);\n await loadParticlesLinksInteraction(engine, false);\n await loadEasingQuadPlugin();\n await loadEmojiShape(engine, false);\n await loadImageShape(engine, false);\n await loadLineShape(engine, false);\n await loadPolygonShape(engine, false);\n await loadSquareShape(engine, false);\n await loadStarShape(engine, false);\n await loadLifeUpdater(engine, false);\n await loadRotateUpdater(engine, false);\n await loadStrokeColorUpdater(engine, false);\n await loadBasic(engine, refresh);\n}\n","import { clear, drawParticle, drawParticlePlugin, drawPlugin, paintBase, paintImage } from \"../Utils/CanvasUtils.js\";\nimport { deepExtend, getLogger, safeMutationObserver } from \"../Utils/Utils.js\";\nimport { getStyleFromHsl, getStyleFromRgb, rangeColorToHsl, rangeColorToRgb } from \"../Utils/ColorUtils.js\";\nimport { generatedAttribute } from \"./Utils/Constants.js\";\nfunction setTransformValue(factor, newFactor, key) {\n const newValue = newFactor[key], defaultValue = 1;\n if (newValue !== undefined) {\n factor[key] = (factor[key] ?? defaultValue) * newValue;\n }\n}\nfunction setStyle(canvas, style, important = false) {\n if (!style) {\n return;\n }\n const element = canvas;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n for (const key in style) {\n const value = style[key];\n if (!value) {\n continue;\n }\n elementStyle.setProperty(key, value, important ? \"important\" : \"\");\n }\n}\nexport class Canvas {\n constructor(container) {\n this.container = container;\n this._applyPostDrawUpdaters = (particle) => {\n for (const updater of this._postDrawUpdaters) {\n updater.afterDraw?.(particle);\n }\n };\n this._applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform) => {\n for (const updater of this._preDrawUpdaters) {\n if (updater.getColorStyles) {\n const { fill, stroke } = updater.getColorStyles(particle, ctx, radius, zOpacity);\n if (fill) {\n colorStyles.fill = fill;\n }\n if (stroke) {\n colorStyles.stroke = stroke;\n }\n }\n if (updater.getTransformValues) {\n const updaterTransform = updater.getTransformValues(particle);\n for (const key in updaterTransform) {\n setTransformValue(transform, updaterTransform, key);\n }\n }\n updater.beforeDraw?.(particle);\n }\n };\n this._applyResizePlugins = () => {\n for (const plugin of this._resizePlugins) {\n plugin.resize?.();\n }\n };\n this._getPluginParticleColors = (particle) => {\n let fColor, sColor;\n for (const plugin of this._colorPlugins) {\n if (!fColor && plugin.particleFillColor) {\n fColor = rangeColorToHsl(plugin.particleFillColor(particle));\n }\n if (!sColor && plugin.particleStrokeColor) {\n sColor = rangeColorToHsl(plugin.particleStrokeColor(particle));\n }\n if (fColor && sColor) {\n break;\n }\n }\n return [fColor, sColor];\n };\n this._initCover = async () => {\n const options = this.container.actualOptions, cover = options.backgroundMask.cover, color = cover.color;\n if (color) {\n const coverRgb = rangeColorToRgb(color);\n if (coverRgb) {\n const coverColor = {\n ...coverRgb,\n a: cover.opacity,\n };\n this._coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);\n }\n }\n else {\n await new Promise((resolve, reject) => {\n if (!cover.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._coverImage = {\n image: img,\n opacity: cover.opacity,\n };\n resolve();\n });\n img.addEventListener(\"error\", (evt) => {\n reject(evt.error);\n });\n img.src = cover.image;\n });\n }\n };\n this._initStyle = () => {\n const element = this.element, options = this.container.actualOptions;\n if (!element) {\n return;\n }\n if (this._fullScreen) {\n this._originalStyle = deepExtend({}, element.style);\n this._setFullScreenStyle();\n }\n else {\n this._resetOriginalStyle();\n }\n for (const key in options.style) {\n if (!key || !options.style) {\n continue;\n }\n const value = options.style[key];\n if (!value) {\n continue;\n }\n element.style.setProperty(key, value, \"important\");\n }\n };\n this._initTrail = async () => {\n const options = this.container.actualOptions, trail = options.particles.move.trail, trailFill = trail.fill;\n if (!trail.enable) {\n return;\n }\n const factorNumerator = 1, opacity = factorNumerator / trail.length;\n if (trailFill.color) {\n const fillColor = rangeColorToRgb(trailFill.color);\n if (!fillColor) {\n return;\n }\n this._trailFill = {\n color: {\n ...fillColor,\n },\n opacity,\n };\n }\n else {\n await new Promise((resolve, reject) => {\n if (!trailFill.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._trailFill = {\n image: img,\n opacity,\n };\n resolve();\n });\n img.addEventListener(\"error\", (evt) => {\n reject(evt.error);\n });\n img.src = trailFill.image;\n });\n }\n };\n this._paintBase = (baseColor) => {\n this.draw((ctx) => paintBase(ctx, this.size, baseColor));\n };\n this._paintImage = (image, opacity) => {\n this.draw((ctx) => paintImage(ctx, this.size, image, opacity));\n };\n this._repairStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n this._safeMutationObserver((observer) => observer.disconnect());\n this._initStyle();\n this.initBackground();\n this._safeMutationObserver((observer) => observer.observe(element, { attributes: true }));\n };\n this._resetOriginalStyle = () => {\n const element = this.element, originalStyle = this._originalStyle;\n if (!(element && originalStyle)) {\n return;\n }\n setStyle(element, originalStyle);\n };\n this._safeMutationObserver = (callback) => {\n if (!this._mutationObserver) {\n return;\n }\n callback(this._mutationObserver);\n };\n this._setFullScreenStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n const radix = 10;\n setStyle(element, {\n position: \"fixed\",\n zIndex: this.container.actualOptions.fullScreen.zIndex.toString(radix),\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\",\n }, true);\n };\n this.size = {\n height: 0,\n width: 0,\n };\n this._context = null;\n this._generated = false;\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n get _fullScreen() {\n return this.container.actualOptions.fullScreen.enable;\n }\n clear() {\n const options = this.container.actualOptions, trail = options.particles.move.trail, trailFill = this._trailFill, minimumLength = 0;\n if (options.backgroundMask.enable) {\n this.paint();\n }\n else if (trail.enable && trail.length > minimumLength && trailFill) {\n if (trailFill.color) {\n this._paintBase(getStyleFromRgb(trailFill.color, trailFill.opacity));\n }\n else if (trailFill.image) {\n this._paintImage(trailFill.image, trailFill.opacity);\n }\n }\n else if (options.clear) {\n this.draw((ctx) => {\n clear(ctx, this.size);\n });\n }\n }\n destroy() {\n this.stop();\n if (this._generated) {\n const element = this.element;\n element?.remove();\n }\n else {\n this._resetOriginalStyle();\n }\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n draw(cb) {\n const ctx = this._context;\n if (!ctx) {\n return;\n }\n return cb(ctx);\n }\n drawAsync(cb) {\n const ctx = this._context;\n if (!ctx) {\n return undefined;\n }\n return cb(ctx);\n }\n drawParticle(particle, delta) {\n if (particle.spawning || particle.destroyed) {\n return;\n }\n const radius = particle.getRadius(), minimumSize = 0;\n if (radius <= minimumSize) {\n return;\n }\n const pfColor = particle.getFillColor(), psColor = particle.getStrokeColor() ?? pfColor;\n let [fColor, sColor] = this._getPluginParticleColors(particle);\n if (!fColor) {\n fColor = pfColor;\n }\n if (!sColor) {\n sColor = psColor;\n }\n if (!fColor && !sColor) {\n return;\n }\n this.draw((ctx) => {\n const container = this.container, options = container.actualOptions, zIndexOptions = particle.options.zIndex, zIndexFactorOffset = 1, zIndexFactor = zIndexFactorOffset - particle.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, defaultOpacity = 1, opacity = particle.bubble.opacity ?? particle.opacity?.value ?? defaultOpacity, strokeOpacity = particle.strokeOpacity ?? opacity, zOpacity = opacity * zOpacityFactor, zStrokeOpacity = strokeOpacity * zOpacityFactor, transform = {}, colorStyles = {\n fill: fColor ? getStyleFromHsl(fColor, zOpacity) : undefined,\n };\n colorStyles.stroke = sColor ? getStyleFromHsl(sColor, zStrokeOpacity) : colorStyles.fill;\n this._applyPreDrawUpdaters(ctx, particle, radius, zOpacity, colorStyles, transform);\n drawParticle({\n container,\n context: ctx,\n particle,\n delta,\n colorStyles,\n backgroundMask: options.backgroundMask.enable,\n composite: options.backgroundMask.composite,\n radius: radius * zIndexFactor ** zIndexOptions.sizeRate,\n opacity: zOpacity,\n shadow: particle.options.shadow,\n transform,\n });\n this._applyPostDrawUpdaters(particle);\n });\n }\n drawParticlePlugin(plugin, particle, delta) {\n this.draw((ctx) => drawParticlePlugin(ctx, plugin, particle, delta));\n }\n drawPlugin(plugin, delta) {\n this.draw((ctx) => drawPlugin(ctx, plugin, delta));\n }\n async init() {\n this._safeMutationObserver((obs) => obs.disconnect());\n this._mutationObserver = safeMutationObserver((records) => {\n for (const record of records) {\n if (record.type === \"attributes\" && record.attributeName === \"style\") {\n this._repairStyle();\n }\n }\n });\n this.resize();\n this._initStyle();\n await this._initCover();\n try {\n await this._initTrail();\n }\n catch (e) {\n getLogger().error(e);\n }\n this.initBackground();\n this._safeMutationObserver((obs) => {\n if (!this.element) {\n return;\n }\n obs.observe(this.element, { attributes: true });\n });\n this.initUpdaters();\n this.initPlugins();\n this.paint();\n }\n initBackground() {\n const options = this.container.actualOptions, background = options.background, element = this.element;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n if (background.color) {\n const color = rangeColorToRgb(background.color);\n elementStyle.backgroundColor = color ? getStyleFromRgb(color, background.opacity) : \"\";\n }\n else {\n elementStyle.backgroundColor = \"\";\n }\n elementStyle.backgroundImage = background.image || \"\";\n elementStyle.backgroundPosition = background.position || \"\";\n elementStyle.backgroundRepeat = background.repeat || \"\";\n elementStyle.backgroundSize = background.size || \"\";\n }\n initPlugins() {\n this._resizePlugins = [];\n for (const [, plugin] of this.container.plugins) {\n if (plugin.resize) {\n this._resizePlugins.push(plugin);\n }\n if (plugin.particleFillColor ?? plugin.particleStrokeColor) {\n this._colorPlugins.push(plugin);\n }\n }\n }\n initUpdaters() {\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n for (const updater of this.container.particles.updaters) {\n if (updater.afterDraw) {\n this._postDrawUpdaters.push(updater);\n }\n if (updater.getColorStyles ?? updater.getTransformValues ?? updater.beforeDraw) {\n this._preDrawUpdaters.push(updater);\n }\n }\n }\n loadCanvas(canvas) {\n if (this._generated && this.element) {\n this.element.remove();\n }\n this._generated =\n canvas.dataset && generatedAttribute in canvas.dataset\n ? canvas.dataset[generatedAttribute] === \"true\"\n : this._generated;\n this.element = canvas;\n this.element.ariaHidden = \"true\";\n this._originalStyle = deepExtend({}, this.element.style);\n this.size.height = canvas.offsetHeight;\n this.size.width = canvas.offsetWidth;\n this._context = this.element.getContext(\"2d\");\n this._safeMutationObserver((obs) => {\n if (!this.element) {\n return;\n }\n obs.observe(this.element, { attributes: true });\n });\n this.container.retina.init();\n this.initBackground();\n }\n paint() {\n const options = this.container.actualOptions;\n this.draw((ctx) => {\n if (options.backgroundMask.enable && options.backgroundMask.cover) {\n clear(ctx, this.size);\n if (this._coverImage) {\n this._paintImage(this._coverImage.image, this._coverImage.opacity);\n }\n else if (this._coverColorStyle) {\n this._paintBase(this._coverColorStyle);\n }\n else {\n this._paintBase();\n }\n }\n else {\n this._paintBase();\n }\n });\n }\n resize() {\n if (!this.element) {\n return false;\n }\n const container = this.container, pxRatio = container.retina.pixelRatio, size = container.canvas.size, newSize = {\n width: this.element.offsetWidth * pxRatio,\n height: this.element.offsetHeight * pxRatio,\n };\n if (newSize.height === size.height &&\n newSize.width === size.width &&\n newSize.height === this.element.height &&\n newSize.width === this.element.width) {\n return false;\n }\n const oldSize = { ...size };\n this.element.width = size.width = this.element.offsetWidth * pxRatio;\n this.element.height = size.height = this.element.offsetHeight * pxRatio;\n if (this.container.started) {\n container.particles.setResizeFactor({\n width: size.width / oldSize.width,\n height: size.height / oldSize.height,\n });\n }\n return true;\n }\n stop() {\n this._safeMutationObserver((obs) => obs.disconnect());\n this._mutationObserver = undefined;\n this.draw((ctx) => clear(ctx, this.size));\n }\n async windowResize() {\n if (!this.element || !this.resize()) {\n return;\n }\n const container = this.container, needsRefresh = container.updateActualOptions();\n container.particles.setDensity();\n this._applyResizePlugins();\n if (needsRefresh) {\n await container.refresh();\n }\n }\n}\n","import { executeOnSingleOrMultiple, safeMatchMedia } from \"../../Utils/Utils.js\";\nimport { millisecondsToSeconds, mouseDownEvent, mouseLeaveEvent, mouseMoveEvent, mouseOutEvent, mouseUpEvent, resizeEvent, touchCancelEvent, touchEndEvent, touchMoveEvent, touchStartEvent, visibilityChangeEvent, } from \"./Constants.js\";\nimport { isBoolean } from \"../../Utils/TypeUtils.js\";\nconst double = 2;\nfunction manageListener(element, event, handler, add, options) {\n if (add) {\n let addOptions = { passive: true };\n if (isBoolean(options)) {\n addOptions.capture = options;\n }\n else if (options !== undefined) {\n addOptions = options;\n }\n element.addEventListener(event, handler, addOptions);\n }\n else {\n const removeOptions = options;\n element.removeEventListener(event, handler, removeOptions);\n }\n}\nexport class EventListeners {\n constructor(container) {\n this.container = container;\n this._doMouseTouchClick = (e) => {\n const container = this.container, options = container.actualOptions;\n if (this._canPush) {\n const mouseInteractivity = container.interactivity.mouse, mousePos = mouseInteractivity.position;\n if (!mousePos) {\n return;\n }\n mouseInteractivity.clickPosition = { ...mousePos };\n mouseInteractivity.clickTime = new Date().getTime();\n const onClick = options.interactivity.events.onClick;\n executeOnSingleOrMultiple(onClick.mode, (mode) => this.container.handleClickMode(mode));\n }\n if (e.type === \"touchend\") {\n const touchDelay = 500;\n setTimeout(() => this._mouseTouchFinish(), touchDelay);\n }\n };\n this._handleThemeChange = (e) => {\n const mediaEvent = e, container = this.container, options = container.options, defaultThemes = options.defaultThemes, themeName = mediaEvent.matches ? defaultThemes.dark : defaultThemes.light, theme = options.themes.find((theme) => theme.name === themeName);\n if (theme && theme.default.auto) {\n void container.loadTheme(themeName);\n }\n };\n this._handleVisibilityChange = () => {\n const container = this.container, options = container.actualOptions;\n this._mouseTouchFinish();\n if (!options.pauseOnBlur) {\n return;\n }\n if (document && document.hidden) {\n container.pageHidden = true;\n container.pause();\n }\n else {\n container.pageHidden = false;\n if (container.animationStatus) {\n void container.play(true);\n }\n else {\n void container.draw(true);\n }\n }\n };\n this._handleWindowResize = () => {\n if (this._resizeTimeout) {\n clearTimeout(this._resizeTimeout);\n delete this._resizeTimeout;\n }\n const handleResize = async () => {\n const canvas = this.container.canvas;\n await canvas?.windowResize();\n };\n this._resizeTimeout = setTimeout(() => void handleResize(), this.container.actualOptions.interactivity.events.resize.delay * millisecondsToSeconds);\n };\n this._manageInteractivityListeners = (mouseLeaveTmpEvent, add) => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions;\n const interactivityEl = container.interactivity.element;\n if (!interactivityEl) {\n return;\n }\n const html = interactivityEl, canvasEl = container.canvas.element;\n if (canvasEl) {\n canvasEl.style.pointerEvents = html === canvasEl ? \"initial\" : \"none\";\n }\n if (!(options.interactivity.events.onHover.enable || options.interactivity.events.onClick.enable)) {\n return;\n }\n manageListener(interactivityEl, mouseMoveEvent, handlers.mouseMove, add);\n manageListener(interactivityEl, touchStartEvent, handlers.touchStart, add);\n manageListener(interactivityEl, touchMoveEvent, handlers.touchMove, add);\n if (!options.interactivity.events.onClick.enable) {\n manageListener(interactivityEl, touchEndEvent, handlers.touchEnd, add);\n }\n else {\n manageListener(interactivityEl, touchEndEvent, handlers.touchEndClick, add);\n manageListener(interactivityEl, mouseUpEvent, handlers.mouseUp, add);\n manageListener(interactivityEl, mouseDownEvent, handlers.mouseDown, add);\n }\n manageListener(interactivityEl, mouseLeaveTmpEvent, handlers.mouseLeave, add);\n manageListener(interactivityEl, touchCancelEvent, handlers.touchCancel, add);\n };\n this._manageListeners = (add) => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions, detectType = options.interactivity.detectsOn, canvasEl = container.canvas.element;\n let mouseLeaveTmpEvent = mouseLeaveEvent;\n if (detectType === \"window\") {\n container.interactivity.element = window;\n mouseLeaveTmpEvent = mouseOutEvent;\n }\n else if (detectType === \"parent\" && canvasEl) {\n container.interactivity.element = canvasEl.parentElement ?? canvasEl.parentNode;\n }\n else {\n container.interactivity.element = canvasEl;\n }\n this._manageMediaMatch(add);\n this._manageResize(add);\n this._manageInteractivityListeners(mouseLeaveTmpEvent, add);\n if (document) {\n manageListener(document, visibilityChangeEvent, handlers.visibilityChange, add, false);\n }\n };\n this._manageMediaMatch = (add) => {\n const handlers = this._handlers, mediaMatch = safeMatchMedia(\"(prefers-color-scheme: dark)\");\n if (!mediaMatch) {\n return;\n }\n if (mediaMatch.addEventListener !== undefined) {\n manageListener(mediaMatch, \"change\", handlers.themeChange, add);\n return;\n }\n if (mediaMatch.addListener === undefined) {\n return;\n }\n if (add) {\n mediaMatch.addListener(handlers.oldThemeChange);\n }\n else {\n mediaMatch.removeListener(handlers.oldThemeChange);\n }\n };\n this._manageResize = (add) => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions;\n if (!options.interactivity.events.resize) {\n return;\n }\n if (typeof ResizeObserver === \"undefined\") {\n manageListener(window, resizeEvent, handlers.resize, add);\n return;\n }\n const canvasEl = container.canvas.element;\n if (this._resizeObserver && !add) {\n if (canvasEl) {\n this._resizeObserver.unobserve(canvasEl);\n }\n this._resizeObserver.disconnect();\n delete this._resizeObserver;\n }\n else if (!this._resizeObserver && add && canvasEl) {\n this._resizeObserver = new ResizeObserver((entries) => {\n const entry = entries.find((e) => e.target === canvasEl);\n if (!entry) {\n return;\n }\n this._handleWindowResize();\n });\n this._resizeObserver.observe(canvasEl);\n }\n };\n this._mouseDown = () => {\n const { interactivity } = this.container;\n if (!interactivity) {\n return;\n }\n const { mouse } = interactivity;\n mouse.clicking = true;\n mouse.downPosition = mouse.position;\n };\n this._mouseTouchClick = (e) => {\n const container = this.container, options = container.actualOptions, { mouse } = container.interactivity;\n mouse.inside = true;\n let handled = false;\n const mousePosition = mouse.position;\n if (!mousePosition || !options.interactivity.events.onClick.enable) {\n return;\n }\n for (const [, plugin] of container.plugins) {\n if (!plugin.clickPositionValid) {\n continue;\n }\n handled = plugin.clickPositionValid(mousePosition);\n if (handled) {\n break;\n }\n }\n if (!handled) {\n this._doMouseTouchClick(e);\n }\n mouse.clicking = false;\n };\n this._mouseTouchFinish = () => {\n const interactivity = this.container.interactivity;\n if (!interactivity) {\n return;\n }\n const mouse = interactivity.mouse;\n delete mouse.position;\n delete mouse.clickPosition;\n delete mouse.downPosition;\n interactivity.status = mouseLeaveEvent;\n mouse.inside = false;\n mouse.clicking = false;\n };\n this._mouseTouchMove = (e) => {\n const container = this.container, options = container.actualOptions, interactivity = container.interactivity, canvasEl = container.canvas.element;\n if (!interactivity?.element) {\n return;\n }\n interactivity.mouse.inside = true;\n let pos;\n if (e.type.startsWith(\"pointer\")) {\n this._canPush = true;\n const mouseEvent = e;\n if (interactivity.element === window) {\n if (canvasEl) {\n const clientRect = canvasEl.getBoundingClientRect();\n pos = {\n x: mouseEvent.clientX - clientRect.left,\n y: mouseEvent.clientY - clientRect.top,\n };\n }\n }\n else if (options.interactivity.detectsOn === \"parent\") {\n const source = mouseEvent.target, target = mouseEvent.currentTarget;\n if (source && target && canvasEl) {\n const sourceRect = source.getBoundingClientRect(), targetRect = target.getBoundingClientRect(), canvasRect = canvasEl.getBoundingClientRect();\n pos = {\n x: mouseEvent.offsetX + double * sourceRect.left - (targetRect.left + canvasRect.left),\n y: mouseEvent.offsetY + double * sourceRect.top - (targetRect.top + canvasRect.top),\n };\n }\n else {\n pos = {\n x: mouseEvent.offsetX ?? mouseEvent.clientX,\n y: mouseEvent.offsetY ?? mouseEvent.clientY,\n };\n }\n }\n else if (mouseEvent.target === canvasEl) {\n pos = {\n x: mouseEvent.offsetX ?? mouseEvent.clientX,\n y: mouseEvent.offsetY ?? mouseEvent.clientY,\n };\n }\n }\n else {\n this._canPush = e.type !== \"touchmove\";\n if (canvasEl) {\n const touchEvent = e, lengthOffset = 1, lastTouch = touchEvent.touches[touchEvent.touches.length - lengthOffset], canvasRect = canvasEl.getBoundingClientRect(), defaultCoordinate = 0;\n pos = {\n x: lastTouch.clientX - (canvasRect.left ?? defaultCoordinate),\n y: lastTouch.clientY - (canvasRect.top ?? defaultCoordinate),\n };\n }\n }\n const pxRatio = container.retina.pixelRatio;\n if (pos) {\n pos.x *= pxRatio;\n pos.y *= pxRatio;\n }\n interactivity.mouse.position = pos;\n interactivity.status = mouseMoveEvent;\n };\n this._touchEnd = (e) => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.delete(touch.identifier);\n }\n this._mouseTouchFinish();\n };\n this._touchEndClick = (e) => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.delete(touch.identifier);\n }\n this._mouseTouchClick(e);\n };\n this._touchStart = (e) => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.set(touch.identifier, performance.now());\n }\n this._mouseTouchMove(e);\n };\n this._canPush = true;\n this._touches = new Map();\n this._handlers = {\n mouseDown: () => this._mouseDown(),\n mouseLeave: () => this._mouseTouchFinish(),\n mouseMove: (e) => this._mouseTouchMove(e),\n mouseUp: (e) => this._mouseTouchClick(e),\n touchStart: (e) => this._touchStart(e),\n touchMove: (e) => this._mouseTouchMove(e),\n touchEnd: (e) => this._touchEnd(e),\n touchCancel: (e) => this._touchEnd(e),\n touchEndClick: (e) => this._touchEndClick(e),\n visibilityChange: () => this._handleVisibilityChange(),\n themeChange: (e) => this._handleThemeChange(e),\n oldThemeChange: (e) => this._handleThemeChange(e),\n resize: () => {\n this._handleWindowResize();\n },\n };\n }\n addListeners() {\n this._manageListeners(true);\n }\n removeListeners() {\n this._manageListeners(false);\n }\n}\n","export class InteractionManager {\n constructor(engine, container) {\n this.container = container;\n this._engine = engine;\n this._interactors = [];\n this._externalInteractors = [];\n this._particleInteractors = [];\n }\n externalInteract(delta) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.interact(delta);\n }\n }\n }\n handleClickMode(mode) {\n for (const interactor of this._externalInteractors) {\n interactor.handleClickMode?.(mode);\n }\n }\n async init() {\n this._interactors = await this._engine.getInteractors(this.container, true);\n this._externalInteractors = [];\n this._particleInteractors = [];\n for (const interactor of this._interactors) {\n switch (interactor.type) {\n case \"external\":\n this._externalInteractors.push(interactor);\n break;\n case \"particles\":\n this._particleInteractors.push(interactor);\n break;\n }\n interactor.init();\n }\n }\n particlesInteract(particle, delta) {\n for (const interactor of this._externalInteractors) {\n interactor.clear(particle, delta);\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.interact(particle, delta);\n }\n }\n }\n reset(particle) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.reset(particle);\n }\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.reset(particle);\n }\n }\n }\n}\n","import { Vector, Vector3d } from \"./Utils/Vectors.js\";\nimport { calcExactPositionOrRandomFromSize, clamp, degToRad, getDistance, getParticleBaseVelocity, getParticleDirectionAngle, getRandom, getRangeValue, randomInRange, setRangeValue, } from \"../Utils/NumberUtils.js\";\nimport { deepExtend, getPosition, initParticleNumericAnimationValue, isInArray, itemFromSingleOrMultiple, } from \"../Utils/Utils.js\";\nimport { errorPrefix, millisecondsToSeconds } from \"./Utils/Constants.js\";\nimport { getHslFromAnimation, rangeColorToRgb } from \"../Utils/ColorUtils.js\";\nimport { Interactivity } from \"../Options/Classes/Interactivity/Interactivity.js\";\nimport { alterHsl } from \"../Utils/CanvasUtils.js\";\nimport { loadParticlesOptions } from \"../Utils/OptionsUtils.js\";\nconst defaultRetryCount = 0, double = 2, half = 0.5, squareExp = 2;\nfunction loadEffectData(effect, effectOptions, id, reduceDuplicates) {\n const effectData = effectOptions.options[effect];\n if (!effectData) {\n return;\n }\n return deepExtend({\n close: effectOptions.close,\n fill: effectOptions.fill,\n }, itemFromSingleOrMultiple(effectData, id, reduceDuplicates));\n}\nfunction loadShapeData(shape, shapeOptions, id, reduceDuplicates) {\n const shapeData = shapeOptions.options[shape];\n if (!shapeData) {\n return;\n }\n return deepExtend({\n close: shapeOptions.close,\n fill: shapeOptions.fill,\n }, itemFromSingleOrMultiple(shapeData, id, reduceDuplicates));\n}\nfunction fixOutMode(data) {\n if (!isInArray(data.outMode, data.checkModes)) {\n return;\n }\n const diameter = data.radius * double;\n if (data.coord > data.maxCoord - diameter) {\n data.setCb(-data.radius);\n }\n else if (data.coord < diameter) {\n data.setCb(data.radius);\n }\n}\nexport class Particle {\n constructor(engine, container) {\n this.container = container;\n this._calcPosition = (container, position, zIndex, tryCount = defaultRetryCount) => {\n for (const [, plugin] of container.plugins) {\n const pluginPos = plugin.particlePosition !== undefined ? plugin.particlePosition(position, this) : undefined;\n if (pluginPos) {\n return Vector3d.create(pluginPos.x, pluginPos.y, zIndex);\n }\n }\n const canvasSize = container.canvas.size, exactPosition = calcExactPositionOrRandomFromSize({\n size: canvasSize,\n position: position,\n }), pos = Vector3d.create(exactPosition.x, exactPosition.y, zIndex), radius = this.getRadius(), outModes = this.options.move.outModes, fixHorizontal = (outMode) => {\n fixOutMode({\n outMode,\n checkModes: [\"bounce\"],\n coord: pos.x,\n maxCoord: container.canvas.size.width,\n setCb: (value) => (pos.x += value),\n radius,\n });\n }, fixVertical = (outMode) => {\n fixOutMode({\n outMode,\n checkModes: [\"bounce\"],\n coord: pos.y,\n maxCoord: container.canvas.size.height,\n setCb: (value) => (pos.y += value),\n radius,\n });\n };\n fixHorizontal(outModes.left ?? outModes.default);\n fixHorizontal(outModes.right ?? outModes.default);\n fixVertical(outModes.top ?? outModes.default);\n fixVertical(outModes.bottom ?? outModes.default);\n if (this._checkOverlap(pos, tryCount)) {\n const increment = 1;\n return this._calcPosition(container, undefined, zIndex, tryCount + increment);\n }\n return pos;\n };\n this._calculateVelocity = () => {\n const baseVelocity = getParticleBaseVelocity(this.direction), res = baseVelocity.copy(), moveOptions = this.options.move;\n if (moveOptions.direction === \"inside\" || moveOptions.direction === \"outside\") {\n return res;\n }\n const rad = degToRad(getRangeValue(moveOptions.angle.value)), radOffset = degToRad(getRangeValue(moveOptions.angle.offset)), range = {\n left: radOffset - rad * half,\n right: radOffset + rad * half,\n };\n if (!moveOptions.straight) {\n res.angle += randomInRange(setRangeValue(range.left, range.right));\n }\n if (moveOptions.random && typeof moveOptions.speed === \"number\") {\n res.length *= getRandom();\n }\n return res;\n };\n this._checkOverlap = (pos, tryCount = defaultRetryCount) => {\n const collisionsOptions = this.options.collisions, radius = this.getRadius();\n if (!collisionsOptions.enable) {\n return false;\n }\n const overlapOptions = collisionsOptions.overlap;\n if (overlapOptions.enable) {\n return false;\n }\n const retries = overlapOptions.retries, minRetries = 0;\n if (retries >= minRetries && tryCount > retries) {\n throw new Error(`${errorPrefix} particle is overlapping and can't be placed`);\n }\n return !!this.container.particles.find((particle) => getDistance(pos, particle.position) < radius + particle.getRadius());\n };\n this._getRollColor = (color) => {\n if (!color || !this.roll || (!this.backColor && !this.roll.alter)) {\n return color;\n }\n const rollFactor = 1, none = 0, backFactor = this.roll.horizontal && this.roll.vertical ? double * rollFactor : rollFactor, backSum = this.roll.horizontal ? Math.PI * half : none, rolled = Math.floor(((this.roll.angle ?? none) + backSum) / (Math.PI / backFactor)) % double;\n if (!rolled) {\n return color;\n }\n if (this.backColor) {\n return this.backColor;\n }\n if (this.roll.alter) {\n return alterHsl(color, this.roll.alter.type, this.roll.alter.value);\n }\n return color;\n };\n this._initPosition = (position) => {\n const container = this.container, zIndexValue = getRangeValue(this.options.zIndex.value), minZ = 0;\n this.position = this._calcPosition(container, position, clamp(zIndexValue, minZ, container.zLayers));\n this.initialPosition = this.position.copy();\n const canvasSize = container.canvas.size, defaultRadius = 0;\n this.moveCenter = {\n ...getPosition(this.options.move.center, canvasSize),\n radius: this.options.move.center.radius ?? defaultRadius,\n mode: this.options.move.center.mode ?? \"percent\",\n };\n this.direction = getParticleDirectionAngle(this.options.move.direction, this.position, this.moveCenter);\n switch (this.options.move.direction) {\n case \"inside\":\n this.outType = \"inside\";\n break;\n case \"outside\":\n this.outType = \"outside\";\n break;\n }\n this.offset = Vector.origin;\n };\n this._engine = engine;\n }\n destroy(override) {\n if (this.unbreakable || this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.bubble.inRange = false;\n this.slow.inRange = false;\n const container = this.container, pathGenerator = this.pathGenerator, shapeDrawer = container.shapeDrawers.get(this.shape);\n shapeDrawer?.particleDestroy?.(this);\n for (const [, plugin] of container.plugins) {\n plugin.particleDestroyed?.(this, override);\n }\n for (const updater of container.particles.updaters) {\n updater.particleDestroyed?.(this, override);\n }\n pathGenerator?.reset(this);\n this._engine.dispatchEvent(\"particleDestroyed\", {\n container: this.container,\n data: {\n particle: this,\n },\n });\n }\n draw(delta) {\n const container = this.container, canvas = container.canvas;\n for (const [, plugin] of container.plugins) {\n canvas.drawParticlePlugin(plugin, this, delta);\n }\n canvas.drawParticle(this, delta);\n }\n getFillColor() {\n return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.color));\n }\n getMass() {\n return this.getRadius() ** squareExp * Math.PI * half;\n }\n getPosition() {\n return {\n x: this.position.x + this.offset.x,\n y: this.position.y + this.offset.y,\n z: this.position.z,\n };\n }\n getRadius() {\n return this.bubble.radius ?? this.size.value;\n }\n getStrokeColor() {\n return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.strokeColor));\n }\n init(id, position, overrideOptions, group) {\n const container = this.container, engine = this._engine;\n this.id = id;\n this.group = group;\n this.effectClose = true;\n this.effectFill = true;\n this.shapeClose = true;\n this.shapeFill = true;\n this.pathRotation = false;\n this.lastPathTime = 0;\n this.destroyed = false;\n this.unbreakable = false;\n this.rotation = 0;\n this.misplaced = false;\n this.retina = {\n maxDistance: {},\n };\n this.outType = \"normal\";\n this.ignoresResizeRatio = true;\n const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = loadParticlesOptions(this._engine, container, mainOptions.particles), effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type, { reduceDuplicates } = particlesOptions;\n this.effect = itemFromSingleOrMultiple(effectType, this.id, reduceDuplicates);\n this.shape = itemFromSingleOrMultiple(shapeType, this.id, reduceDuplicates);\n const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;\n if (overrideOptions) {\n if (overrideOptions.effect?.type) {\n const overrideEffectType = overrideOptions.effect.type, effect = itemFromSingleOrMultiple(overrideEffectType, this.id, reduceDuplicates);\n if (effect) {\n this.effect = effect;\n effectOptions.load(overrideOptions.effect);\n }\n }\n if (overrideOptions.shape?.type) {\n const overrideShapeType = overrideOptions.shape.type, shape = itemFromSingleOrMultiple(overrideShapeType, this.id, reduceDuplicates);\n if (shape) {\n this.shape = shape;\n shapeOptions.load(overrideOptions.shape);\n }\n }\n }\n this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);\n this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);\n particlesOptions.load(overrideOptions);\n const effectData = this.effectData;\n if (effectData) {\n particlesOptions.load(effectData.particles);\n }\n const shapeData = this.shapeData;\n if (shapeData) {\n particlesOptions.load(shapeData.particles);\n }\n const interactivity = new Interactivity(engine, container);\n interactivity.load(container.actualOptions.interactivity);\n interactivity.load(particlesOptions.interactivity);\n this.interactivity = interactivity;\n this.effectFill = effectData?.fill ?? particlesOptions.effect.fill;\n this.effectClose = effectData?.close ?? particlesOptions.effect.close;\n this.shapeFill = shapeData?.fill ?? particlesOptions.shape.fill;\n this.shapeClose = shapeData?.close ?? particlesOptions.shape.close;\n this.options = particlesOptions;\n const pathOptions = this.options.move.path;\n this.pathDelay = getRangeValue(pathOptions.delay.value) * millisecondsToSeconds;\n if (pathOptions.generator) {\n this.pathGenerator = this._engine.getPathGenerator(pathOptions.generator);\n if (this.pathGenerator && container.addPath(pathOptions.generator, this.pathGenerator)) {\n this.pathGenerator.init(container);\n }\n }\n container.retina.initParticle(this);\n this.size = initParticleNumericAnimationValue(this.options.size, pxRatio);\n this.bubble = {\n inRange: false,\n };\n this.slow = {\n inRange: false,\n factor: 1,\n };\n this._initPosition(position);\n this.initialVelocity = this._calculateVelocity();\n this.velocity = this.initialVelocity.copy();\n const decayOffset = 1;\n this.moveDecay = decayOffset - getRangeValue(this.options.move.decay);\n const particles = container.particles;\n particles.setLastZIndex(this.position.z);\n this.zIndexFactor = this.position.z / container.zLayers;\n this.sides = 24;\n let effectDrawer = container.effectDrawers.get(this.effect);\n if (!effectDrawer) {\n effectDrawer = this._engine.getEffectDrawer(this.effect);\n if (effectDrawer) {\n container.effectDrawers.set(this.effect, effectDrawer);\n }\n }\n if (effectDrawer?.loadEffect) {\n effectDrawer.loadEffect(this);\n }\n let shapeDrawer = container.shapeDrawers.get(this.shape);\n if (!shapeDrawer) {\n shapeDrawer = this._engine.getShapeDrawer(this.shape);\n if (shapeDrawer) {\n container.shapeDrawers.set(this.shape, shapeDrawer);\n }\n }\n if (shapeDrawer?.loadShape) {\n shapeDrawer.loadShape(this);\n }\n const sideCountFunc = shapeDrawer?.getSidesCount;\n if (sideCountFunc) {\n this.sides = sideCountFunc(this);\n }\n this.spawning = false;\n this.shadowColor = rangeColorToRgb(this.options.shadow.color);\n for (const updater of particles.updaters) {\n updater.init(this);\n }\n for (const mover of particles.movers) {\n mover.init?.(this);\n }\n effectDrawer?.particleInit?.(container, this);\n shapeDrawer?.particleInit?.(container, this);\n for (const [, plugin] of container.plugins) {\n plugin.particleCreated?.(this);\n }\n }\n isInsideCanvas() {\n const radius = this.getRadius(), canvasSize = this.container.canvas.size, position = this.position;\n return (position.x >= -radius &&\n position.y >= -radius &&\n position.y <= canvasSize.height + radius &&\n position.x <= canvasSize.width + radius);\n }\n isVisible() {\n return !this.destroyed && !this.spawning && this.isInsideCanvas();\n }\n reset() {\n for (const updater of this.container.particles.updaters) {\n updater.reset?.(this);\n }\n }\n}\n","import { Circle, Rectangle } from \"./Ranges.js\";\nimport { getDistance } from \"../../Utils/NumberUtils.js\";\nconst half = 0.5, double = 2, subdivideCount = 4;\nexport class QuadTree {\n constructor(rectangle, capacity) {\n this.rectangle = rectangle;\n this.capacity = capacity;\n this._subdivide = () => {\n const { x, y } = this.rectangle.position, { width, height } = this.rectangle.size, { capacity } = this;\n for (let i = 0; i < subdivideCount; i++) {\n const fixedIndex = i % double;\n this._subs.push(new QuadTree(new Rectangle(x + width * half * fixedIndex, y + height * half * (Math.round(i * half) - fixedIndex), width * half, height * half), capacity));\n }\n this._divided = true;\n };\n this._points = [];\n this._divided = false;\n this._subs = [];\n }\n insert(point) {\n if (!this.rectangle.contains(point.position)) {\n return false;\n }\n if (this._points.length < this.capacity) {\n this._points.push(point);\n return true;\n }\n if (!this._divided) {\n this._subdivide();\n }\n return this._subs.some((sub) => sub.insert(point));\n }\n query(range, check) {\n const res = [];\n if (!range.intersects(this.rectangle)) {\n return [];\n }\n for (const p of this._points) {\n if (!range.contains(p.position) &&\n getDistance(range.position, p.position) > p.particle.getRadius() &&\n (!check || check(p.particle))) {\n continue;\n }\n res.push(p.particle);\n }\n if (this._divided) {\n for (const sub of this._subs) {\n res.push(...sub.query(range, check));\n }\n }\n return res;\n }\n queryCircle(position, radius, check) {\n return this.query(new Circle(position.x, position.y, radius), check);\n }\n queryRectangle(position, size, check) {\n return this.query(new Rectangle(position.x, position.y, size.width, size.height), check);\n }\n}\n","import { getLogger, getPosition } from \"../Utils/Utils.js\";\nimport { InteractionManager } from \"./Utils/InteractionManager.js\";\nimport { Particle } from \"./Particle.js\";\nimport { Point } from \"./Utils/Point.js\";\nimport { QuadTree } from \"./Utils/QuadTree.js\";\nimport { Rectangle } from \"./Utils/Ranges.js\";\nimport { errorPrefix } from \"./Utils/Constants.js\";\nconst qTreeCapacity = 4, squareExp = 2, defaultRemoveQuantity = 1;\nconst qTreeRectangle = (canvasSize) => {\n const { height, width } = canvasSize, posOffset = -0.25, sizeFactor = 1.5;\n return new Rectangle(posOffset * width, posOffset * height, sizeFactor * width, sizeFactor * height);\n};\nexport class Particles {\n constructor(engine, container) {\n this._addToPool = (...particles) => {\n for (const particle of particles) {\n this._pool.push(particle);\n }\n };\n this._applyDensity = (options, manualCount, group) => {\n const numberOptions = options.number;\n if (!options.number.density?.enable) {\n if (group === undefined) {\n this._limit = numberOptions.limit.value;\n }\n else if (numberOptions.limit) {\n this._groupLimits.set(group, numberOptions.limit.value);\n }\n return;\n }\n const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, minLimit = 0, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter((t) => t.group === group).length);\n if (group === undefined) {\n this._limit = numberOptions.limit.value * densityFactor;\n }\n else {\n this._groupLimits.set(group, numberOptions.limit.value * densityFactor);\n }\n if (particlesCount < particlesNumber) {\n this.push(Math.abs(particlesNumber - particlesCount), undefined, options, group);\n }\n else if (particlesCount > particlesNumber) {\n this.removeQuantity(particlesCount - particlesNumber, group);\n }\n };\n this._initDensityFactor = (densityOptions) => {\n const container = this._container, defaultFactor = 1;\n if (!container.canvas.element || !densityOptions.enable) {\n return defaultFactor;\n }\n const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;\n return (canvas.width * canvas.height) / (densityOptions.height * densityOptions.width * pxRatio ** squareExp);\n };\n this._pushParticle = (position, overrideOptions, group, initializer) => {\n try {\n let particle = this._pool.pop();\n if (!particle) {\n particle = new Particle(this._engine, this._container);\n }\n particle.init(this._nextId, position, overrideOptions, group);\n let canAdd = true;\n if (initializer) {\n canAdd = initializer(particle);\n }\n if (!canAdd) {\n return;\n }\n this._array.push(particle);\n this._zArray.push(particle);\n this._nextId++;\n this._engine.dispatchEvent(\"particleAdded\", {\n container: this._container,\n data: {\n particle,\n },\n });\n return particle;\n }\n catch (e) {\n getLogger().warning(`${errorPrefix} adding particle: ${e}`);\n }\n };\n this._removeParticle = (index, group, override) => {\n const particle = this._array[index];\n if (!particle || particle.group !== group) {\n return false;\n }\n const zIdx = this._zArray.indexOf(particle), deleteCount = 1;\n this._array.splice(index, deleteCount);\n this._zArray.splice(zIdx, deleteCount);\n particle.destroy(override);\n this._engine.dispatchEvent(\"particleRemoved\", {\n container: this._container,\n data: {\n particle,\n },\n });\n this._addToPool(particle);\n return true;\n };\n this._engine = engine;\n this._container = container;\n this._nextId = 0;\n this._array = [];\n this._zArray = [];\n this._pool = [];\n this._limit = 0;\n this._groupLimits = new Map();\n this._needsSort = false;\n this._lastZIndex = 0;\n this._interactionManager = new InteractionManager(engine, container);\n this._pluginsInitialized = false;\n const canvasSize = container.canvas.size;\n this.quadTree = new QuadTree(qTreeRectangle(canvasSize), qTreeCapacity);\n this.movers = [];\n this.updaters = [];\n }\n get count() {\n return this._array.length;\n }\n addManualParticles() {\n const container = this._container, options = container.actualOptions;\n for (const particle of options.manualParticles) {\n this.addParticle(particle.position ? getPosition(particle.position, container.canvas.size) : undefined, particle.options);\n }\n }\n addParticle(position, overrideOptions, group, initializer) {\n const limitOptions = this._container.actualOptions.particles.number.limit, limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit, currentCount = this.count, minLimit = 0;\n if (limit > minLimit) {\n if (limitOptions.mode === \"delete\") {\n const countOffset = 1, minCount = 0, countToRemove = currentCount + countOffset - limit;\n if (countToRemove > minCount) {\n this.removeQuantity(countToRemove);\n }\n }\n else if (limitOptions.mode === \"wait\") {\n if (currentCount >= limit) {\n return;\n }\n }\n }\n return this._pushParticle(position, overrideOptions, group, initializer);\n }\n clear() {\n this._array = [];\n this._zArray = [];\n this._pluginsInitialized = false;\n }\n destroy() {\n this._array = [];\n this._zArray = [];\n this.movers = [];\n this.updaters = [];\n }\n draw(delta) {\n const container = this._container, canvas = container.canvas;\n canvas.clear();\n this.update(delta);\n for (const [, plugin] of container.plugins) {\n canvas.drawPlugin(plugin, delta);\n }\n for (const p of this._zArray) {\n p.draw(delta);\n }\n }\n filter(condition) {\n return this._array.filter(condition);\n }\n find(condition) {\n return this._array.find(condition);\n }\n get(index) {\n return this._array[index];\n }\n handleClickMode(mode) {\n this._interactionManager.handleClickMode(mode);\n }\n async init() {\n const container = this._container, options = container.actualOptions;\n this._lastZIndex = 0;\n this._needsSort = false;\n await this.initPlugins();\n let handled = false;\n for (const [, plugin] of container.plugins) {\n if (plugin.particlesInitialization !== undefined) {\n handled = plugin.particlesInitialization();\n }\n if (handled) {\n break;\n }\n }\n this.addManualParticles();\n if (!handled) {\n const particlesOptions = options.particles, groups = particlesOptions.groups;\n for (const group in groups) {\n const groupOptions = groups[group];\n for (let i = this.count, j = 0; j < groupOptions.number?.value && i < particlesOptions.number.value; i++, j++) {\n this.addParticle(undefined, groupOptions, group);\n }\n }\n for (let i = this.count; i < particlesOptions.number.value; i++) {\n this.addParticle();\n }\n }\n }\n async initPlugins() {\n if (this._pluginsInitialized) {\n return;\n }\n const container = this._container;\n this.movers = await this._engine.getMovers(container, true);\n this.updaters = await this._engine.getUpdaters(container, true);\n await this._interactionManager.init();\n for (const [, pathGenerator] of container.pathGenerators) {\n pathGenerator.init(container);\n }\n }\n push(nb, mouse, overrideOptions, group) {\n for (let i = 0; i < nb; i++) {\n this.addParticle(mouse?.position, overrideOptions, group);\n }\n }\n async redraw() {\n this.clear();\n await this.init();\n this.draw({ value: 0, factor: 0 });\n }\n remove(particle, group, override) {\n this.removeAt(this._array.indexOf(particle), undefined, group, override);\n }\n removeAt(index, quantity = defaultRemoveQuantity, group, override) {\n const minIndex = 0;\n if (index < minIndex || index > this.count) {\n return;\n }\n let deleted = 0;\n for (let i = index; deleted < quantity && i < this.count; i++) {\n if (this._removeParticle(i--, group, override)) {\n deleted++;\n }\n }\n }\n removeQuantity(quantity, group) {\n const defaultIndex = 0;\n this.removeAt(defaultIndex, quantity, group);\n }\n setDensity() {\n const options = this._container.actualOptions, groups = options.particles.groups, manualCount = 0;\n for (const group in groups) {\n this._applyDensity(groups[group], manualCount, group);\n }\n this._applyDensity(options.particles, options.manualParticles.length);\n }\n setLastZIndex(zIndex) {\n this._lastZIndex = zIndex;\n this._needsSort = this._needsSort || this._lastZIndex < zIndex;\n }\n setResizeFactor(factor) {\n this._resizeFactor = factor;\n }\n update(delta) {\n const container = this._container, particlesToDelete = new Set();\n this.quadTree = new QuadTree(qTreeRectangle(container.canvas.size), qTreeCapacity);\n for (const [, pathGenerator] of container.pathGenerators) {\n pathGenerator.update();\n }\n for (const [, plugin] of container.plugins) {\n plugin.update?.(delta);\n }\n const resizeFactor = this._resizeFactor;\n for (const particle of this._array) {\n if (resizeFactor && !particle.ignoresResizeRatio) {\n particle.position.x *= resizeFactor.width;\n particle.position.y *= resizeFactor.height;\n particle.initialPosition.x *= resizeFactor.width;\n particle.initialPosition.y *= resizeFactor.height;\n }\n particle.ignoresResizeRatio = false;\n this._interactionManager.reset(particle);\n for (const [, plugin] of this._container.plugins) {\n if (particle.destroyed) {\n break;\n }\n plugin.particleUpdate?.(particle, delta);\n }\n for (const mover of this.movers) {\n if (mover.isEnabled(particle)) {\n mover.move(particle, delta);\n }\n }\n if (particle.destroyed) {\n particlesToDelete.add(particle);\n continue;\n }\n this.quadTree.insert(new Point(particle.getPosition(), particle));\n }\n if (particlesToDelete.size) {\n const checkDelete = (p) => !particlesToDelete.has(p);\n this._array = this.filter(checkDelete);\n this._zArray = this._zArray.filter(checkDelete);\n for (const particle of particlesToDelete) {\n this._engine.dispatchEvent(\"particleRemoved\", {\n container: this._container,\n data: {\n particle,\n },\n });\n }\n this._addToPool(...particlesToDelete);\n }\n this._interactionManager.externalInteract(delta);\n for (const particle of this._array) {\n for (const updater of this.updaters) {\n updater.update(particle, delta);\n }\n if (!particle.destroyed && !particle.spawning) {\n this._interactionManager.particlesInteract(particle, delta);\n }\n }\n delete this._resizeFactor;\n if (this._needsSort) {\n const zArray = this._zArray;\n zArray.sort((a, b) => b.position.z - a.position.z || a.id - b.id);\n const lengthOffset = 1;\n this._lastZIndex = zArray[zArray.length - lengthOffset].position.z;\n this._needsSort = false;\n }\n }\n}\n","import { getRangeValue } from \"../Utils/NumberUtils.js\";\nimport { isSsr } from \"../Utils/Utils.js\";\nconst defaultRatio = 1, defaultReduceFactor = 1;\nexport class Retina {\n constructor(container) {\n this.container = container;\n this.pixelRatio = defaultRatio;\n this.reduceFactor = defaultReduceFactor;\n }\n init() {\n const container = this.container, options = container.actualOptions;\n this.pixelRatio = !options.detectRetina || isSsr() ? defaultRatio : window.devicePixelRatio;\n this.reduceFactor = defaultReduceFactor;\n const ratio = this.pixelRatio, canvas = container.canvas;\n if (canvas.element) {\n const element = canvas.element;\n canvas.size.width = element.offsetWidth * ratio;\n canvas.size.height = element.offsetHeight * ratio;\n }\n const particles = options.particles, moveOptions = particles.move;\n this.maxSpeed = getRangeValue(moveOptions.gravity.maxSpeed) * ratio;\n this.sizeAnimationSpeed = getRangeValue(particles.size.animation.speed) * ratio;\n }\n initParticle(particle) {\n const options = particle.options, ratio = this.pixelRatio, moveOptions = options.move, moveDistance = moveOptions.distance, props = particle.retina;\n props.moveDrift = getRangeValue(moveOptions.drift) * ratio;\n props.moveSpeed = getRangeValue(moveOptions.speed) * ratio;\n props.sizeAnimationSpeed = getRangeValue(options.size.animation.speed) * ratio;\n const maxDistance = props.maxDistance;\n maxDistance.horizontal = moveDistance.horizontal !== undefined ? moveDistance.horizontal * ratio : undefined;\n maxDistance.vertical = moveDistance.vertical !== undefined ? moveDistance.vertical * ratio : undefined;\n props.maxSpeed = getRangeValue(moveOptions.gravity.maxSpeed) * ratio;\n }\n}\n","import { errorPrefix, millisecondsToSeconds } from \"./Utils/Constants.js\";\nimport { getLogger, safeIntersectionObserver } from \"../Utils/Utils.js\";\nimport { Canvas } from \"./Canvas.js\";\nimport { EventListeners } from \"./Utils/EventListeners.js\";\nimport { Options } from \"../Options/Classes/Options.js\";\nimport { Particles } from \"./Particles.js\";\nimport { Retina } from \"./Retina.js\";\nimport { getRangeValue } from \"../Utils/NumberUtils.js\";\nimport { loadOptions } from \"../Utils/OptionsUtils.js\";\nfunction guardCheck(container) {\n return container && !container.destroyed;\n}\nconst defaultFps = 60;\nfunction initDelta(value, fpsLimit = defaultFps, smooth = false) {\n return {\n value,\n factor: smooth ? defaultFps / fpsLimit : (defaultFps * value) / millisecondsToSeconds,\n };\n}\nfunction loadContainerOptions(engine, container, ...sourceOptionsArr) {\n const options = new Options(engine, container);\n loadOptions(options, ...sourceOptionsArr);\n return options;\n}\nexport class Container {\n constructor(engine, id, sourceOptions) {\n this._intersectionManager = (entries) => {\n if (!guardCheck(this) || !this.actualOptions.pauseOnOutsideViewport) {\n return;\n }\n for (const entry of entries) {\n if (entry.target !== this.interactivity.element) {\n continue;\n }\n if (entry.isIntersecting) {\n void this.play();\n }\n else {\n this.pause();\n }\n }\n };\n this._nextFrame = (timestamp) => {\n try {\n if (!this._smooth &&\n this._lastFrameTime !== undefined &&\n timestamp < this._lastFrameTime + millisecondsToSeconds / this.fpsLimit) {\n this.draw(false);\n return;\n }\n this._lastFrameTime ??= timestamp;\n const delta = initDelta(timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);\n this.addLifeTime(delta.value);\n this._lastFrameTime = timestamp;\n if (delta.value > millisecondsToSeconds) {\n this.draw(false);\n return;\n }\n this.particles.draw(delta);\n if (!this.alive()) {\n this.destroy();\n return;\n }\n if (this.animationStatus) {\n this.draw(false);\n }\n }\n catch (e) {\n getLogger().error(`${errorPrefix} in animation loop`, e);\n }\n };\n this._engine = engine;\n this.id = Symbol(id);\n this.fpsLimit = 120;\n this._smooth = false;\n this._delay = 0;\n this._duration = 0;\n this._lifeTime = 0;\n this._firstStart = true;\n this.started = false;\n this.destroyed = false;\n this._paused = true;\n this._lastFrameTime = 0;\n this.zLayers = 100;\n this.pageHidden = false;\n this._sourceOptions = sourceOptions;\n this._initialSourceOptions = sourceOptions;\n this.retina = new Retina(this);\n this.canvas = new Canvas(this);\n this.particles = new Particles(this._engine, this);\n this.pathGenerators = new Map();\n this.interactivity = {\n mouse: {\n clicking: false,\n inside: false,\n },\n };\n this.plugins = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this);\n this._eventListeners = new EventListeners(this);\n this._intersectionObserver = safeIntersectionObserver((entries) => this._intersectionManager(entries));\n this._engine.dispatchEvent(\"containerBuilt\", { container: this });\n }\n get animationStatus() {\n return !this._paused && !this.pageHidden && guardCheck(this);\n }\n get options() {\n return this._options;\n }\n get sourceOptions() {\n return this._sourceOptions;\n }\n addClickHandler(callback) {\n if (!guardCheck(this)) {\n return;\n }\n const el = this.interactivity.element;\n if (!el) {\n return;\n }\n const clickOrTouchHandler = (e, pos, radius) => {\n if (!guardCheck(this)) {\n return;\n }\n const pxRatio = this.retina.pixelRatio, posRetina = {\n x: pos.x * pxRatio,\n y: pos.y * pxRatio,\n }, particles = this.particles.quadTree.queryCircle(posRetina, radius * pxRatio);\n callback(e, particles);\n };\n const clickHandler = (e) => {\n if (!guardCheck(this)) {\n return;\n }\n const mouseEvent = e, pos = {\n x: mouseEvent.offsetX || mouseEvent.clientX,\n y: mouseEvent.offsetY || mouseEvent.clientY,\n }, radius = 1;\n clickOrTouchHandler(e, pos, radius);\n };\n const touchStartHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = true;\n touchMoved = false;\n };\n const touchMoveHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touchMoved = true;\n };\n const touchEndHandler = (e) => {\n if (!guardCheck(this)) {\n return;\n }\n if (touched && !touchMoved) {\n const touchEvent = e;\n const lengthOffset = 1;\n let lastTouch = touchEvent.touches[touchEvent.touches.length - lengthOffset];\n if (!lastTouch) {\n lastTouch = touchEvent.changedTouches[touchEvent.changedTouches.length - lengthOffset];\n if (!lastTouch) {\n return;\n }\n }\n const element = this.canvas.element, canvasRect = element ? element.getBoundingClientRect() : undefined, minCoordinate = 0, pos = {\n x: lastTouch.clientX - (canvasRect ? canvasRect.left : minCoordinate),\n y: lastTouch.clientY - (canvasRect ? canvasRect.top : minCoordinate),\n };\n clickOrTouchHandler(e, pos, Math.max(lastTouch.radiusX, lastTouch.radiusY));\n }\n touched = false;\n touchMoved = false;\n };\n const touchCancelHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = false;\n touchMoved = false;\n };\n let touched = false, touchMoved = false;\n el.addEventListener(\"click\", clickHandler);\n el.addEventListener(\"touchstart\", touchStartHandler);\n el.addEventListener(\"touchmove\", touchMoveHandler);\n el.addEventListener(\"touchend\", touchEndHandler);\n el.addEventListener(\"touchcancel\", touchCancelHandler);\n }\n addLifeTime(value) {\n this._lifeTime += value;\n }\n addPath(key, generator, override = false) {\n if (!guardCheck(this) || (!override && this.pathGenerators.has(key))) {\n return false;\n }\n this.pathGenerators.set(key, generator);\n return true;\n }\n alive() {\n return !this._duration || this._lifeTime <= this._duration;\n }\n destroy() {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n this.particles.destroy();\n this.canvas.destroy();\n for (const [, effectDrawer] of this.effectDrawers) {\n effectDrawer.destroy?.(this);\n }\n for (const [, shapeDrawer] of this.shapeDrawers) {\n shapeDrawer.destroy?.(this);\n }\n for (const key of this.effectDrawers.keys()) {\n this.effectDrawers.delete(key);\n }\n for (const key of this.shapeDrawers.keys()) {\n this.shapeDrawers.delete(key);\n }\n this._engine.clearPlugins(this);\n this.destroyed = true;\n const mainArr = this._engine.dom(), idx = mainArr.findIndex((t) => t === this), minIndex = 0;\n if (idx >= minIndex) {\n const deleteCount = 1;\n mainArr.splice(idx, deleteCount);\n }\n this._engine.dispatchEvent(\"containerDestroyed\", { container: this });\n }\n draw(force) {\n if (!guardCheck(this)) {\n return;\n }\n let refreshTime = force;\n const frame = (timestamp) => {\n if (refreshTime) {\n this._lastFrameTime = undefined;\n refreshTime = false;\n }\n this._nextFrame(timestamp);\n };\n this._drawAnimationFrame = requestAnimationFrame((timestamp) => frame(timestamp));\n }\n async export(type, options = {}) {\n for (const [, plugin] of this.plugins) {\n if (!plugin.export) {\n continue;\n }\n const res = await plugin.export(type, options);\n if (!res.supported) {\n continue;\n }\n return res.blob;\n }\n getLogger().error(`${errorPrefix} - Export plugin with type ${type} not found`);\n }\n handleClickMode(mode) {\n if (!guardCheck(this)) {\n return;\n }\n this.particles.handleClickMode(mode);\n for (const [, plugin] of this.plugins) {\n plugin.handleClickMode?.(mode);\n }\n }\n async init() {\n if (!guardCheck(this)) {\n return;\n }\n const effects = this._engine.getSupportedEffects();\n for (const type of effects) {\n const drawer = this._engine.getEffectDrawer(type);\n if (drawer) {\n this.effectDrawers.set(type, drawer);\n }\n }\n const shapes = this._engine.getSupportedShapes();\n for (const type of shapes) {\n const drawer = this._engine.getShapeDrawer(type);\n if (drawer) {\n this.shapeDrawers.set(type, drawer);\n }\n }\n await this.particles.initPlugins();\n this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n const availablePlugins = await this._engine.getAvailablePlugins(this);\n for (const [id, plugin] of availablePlugins) {\n this.plugins.set(id, plugin);\n }\n this.retina.init();\n await this.canvas.init();\n this.updateActualOptions();\n this.canvas.initBackground();\n this.canvas.resize();\n this.zLayers = this.actualOptions.zLayers;\n this._duration = getRangeValue(this.actualOptions.duration) * millisecondsToSeconds;\n this._delay = getRangeValue(this.actualOptions.delay) * millisecondsToSeconds;\n this._lifeTime = 0;\n const defaultFpsLimit = 120, minFpsLimit = 0;\n this.fpsLimit = this.actualOptions.fpsLimit > minFpsLimit ? this.actualOptions.fpsLimit : defaultFpsLimit;\n this._smooth = this.actualOptions.smooth;\n for (const [, drawer] of this.effectDrawers) {\n await drawer.init?.(this);\n }\n for (const [, drawer] of this.shapeDrawers) {\n await drawer.init?.(this);\n }\n for (const [, plugin] of this.plugins) {\n await plugin.init?.();\n }\n this._engine.dispatchEvent(\"containerInit\", { container: this });\n await this.particles.init();\n this.particles.setDensity();\n for (const [, plugin] of this.plugins) {\n plugin.particlesSetup?.();\n }\n this._engine.dispatchEvent(\"particlesSetup\", { container: this });\n }\n async loadTheme(name) {\n if (!guardCheck(this)) {\n return;\n }\n this._currentTheme = name;\n await this.refresh();\n }\n pause() {\n if (!guardCheck(this)) {\n return;\n }\n if (this._drawAnimationFrame !== undefined) {\n cancelAnimationFrame(this._drawAnimationFrame);\n delete this._drawAnimationFrame;\n }\n if (this._paused) {\n return;\n }\n for (const [, plugin] of this.plugins) {\n plugin.pause?.();\n }\n if (!this.pageHidden) {\n this._paused = true;\n }\n this._engine.dispatchEvent(\"containerPaused\", { container: this });\n }\n play(force) {\n if (!guardCheck(this)) {\n return;\n }\n const needsUpdate = this._paused || force;\n if (this._firstStart && !this.actualOptions.autoPlay) {\n this._firstStart = false;\n return;\n }\n if (this._paused) {\n this._paused = false;\n }\n if (needsUpdate) {\n for (const [, plugin] of this.plugins) {\n if (plugin.play) {\n plugin.play();\n }\n }\n }\n this._engine.dispatchEvent(\"containerPlay\", { container: this });\n this.draw(needsUpdate ?? false);\n }\n async refresh() {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n return this.start();\n }\n async reset() {\n if (!guardCheck(this)) {\n return;\n }\n this._initialSourceOptions = undefined;\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n return this.refresh();\n }\n async start() {\n if (!guardCheck(this) || this.started) {\n return;\n }\n await this.init();\n this.started = true;\n await new Promise((resolve) => {\n const start = async () => {\n this._eventListeners.addListeners();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.observe(this.interactivity.element);\n }\n for (const [, plugin] of this.plugins) {\n await plugin.start?.();\n }\n this._engine.dispatchEvent(\"containerStarted\", { container: this });\n this.play();\n resolve();\n };\n this._delayTimeout = setTimeout(() => void start(), this._delay);\n });\n }\n stop() {\n if (!guardCheck(this) || !this.started) {\n return;\n }\n if (this._delayTimeout) {\n clearTimeout(this._delayTimeout);\n delete this._delayTimeout;\n }\n this._firstStart = true;\n this.started = false;\n this._eventListeners.removeListeners();\n this.pause();\n this.particles.clear();\n this.canvas.stop();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.unobserve(this.interactivity.element);\n }\n for (const [, plugin] of this.plugins) {\n plugin.stop?.();\n }\n for (const key of this.plugins.keys()) {\n this.plugins.delete(key);\n }\n this._sourceOptions = this._options;\n this._engine.dispatchEvent(\"containerStopped\", { container: this });\n }\n updateActualOptions() {\n this.actualOptions.responsive = [];\n const newMaxWidth = this.actualOptions.setResponsive(this.canvas.size.width, this.retina.pixelRatio, this._options);\n this.actualOptions.setTheme(this._currentTheme);\n if (this._responsiveMaxWidth === newMaxWidth) {\n return false;\n }\n this._responsiveMaxWidth = newMaxWidth;\n return true;\n }\n}\n","export async function loadParallaxMover(engine, refresh = true) {\n await engine.addMover(\"parallax\", async () => {\n const { ParallaxMover } = await import(\"./ParallaxMover.js\");\n return new ParallaxMover();\n }, refresh);\n}\n","export class Attract {\n constructor() {\n this.distance = 200;\n this.duration = 0.4;\n this.easing = \"ease-out-quad\";\n this.factor = 1;\n this.maxSpeed = 50;\n this.speed = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n if (data.duration !== undefined) {\n this.duration = data.duration;\n }\n if (data.easing !== undefined) {\n this.easing = data.easing;\n }\n if (data.factor !== undefined) {\n this.factor = data.factor;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = data.maxSpeed;\n }\n if (data.speed !== undefined) {\n this.speed = data.speed;\n }\n }\n}\n","export async function loadExternalAttractInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalAttract\", async (container) => {\n const { Attractor } = await import(\"./Attractor.js\");\n return new Attractor(engine, container);\n }, refresh);\n}\nexport * from \"./Options/Classes/Attract.js\";\nexport * from \"./Options/Interfaces/IAttract.js\";\n","export class Bounce {\n constructor() {\n this.distance = 200;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n }\n}\n","export async function loadExternalBounceInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalBounce\", async (container) => {\n const { Bouncer } = await import(\"./Bouncer.js\");\n return new Bouncer(container);\n }, refresh);\n}\nexport * from \"./Options/Classes/Bounce.js\";\nexport * from \"./Options/Interfaces/IBounce.js\";\n","import { OptionsColor, executeOnSingleOrMultiple, isArray, } from \"@tsparticles/engine\";\nexport class BubbleBase {\n constructor() {\n this.distance = 200;\n this.duration = 0.4;\n this.mix = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n if (data.duration !== undefined) {\n this.duration = data.duration;\n }\n if (data.mix !== undefined) {\n this.mix = data.mix;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n if (data.color !== undefined) {\n const sourceColor = isArray(this.color) ? undefined : this.color;\n this.color = executeOnSingleOrMultiple(data.color, (color) => {\n return OptionsColor.create(sourceColor, color);\n });\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n }\n}\n","import { BubbleBase } from \"./BubbleBase.js\";\nexport class BubbleDiv extends BubbleBase {\n constructor() {\n super();\n this.selectors = [];\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n }\n}\n","import { executeOnSingleOrMultiple, } from \"@tsparticles/engine\";\nimport { BubbleBase } from \"./BubbleBase.js\";\nimport { BubbleDiv } from \"./BubbleDiv.js\";\nexport class Bubble extends BubbleBase {\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n this.divs = executeOnSingleOrMultiple(data.divs, (div) => {\n const tmp = new BubbleDiv();\n tmp.load(div);\n return tmp;\n });\n }\n}\n","export async function loadExternalBubbleInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalBubble\", async (container) => {\n const { Bubbler } = await import(\"./Bubbler.js\");\n return new Bubbler(container);\n }, refresh);\n}\nexport * from \"./Options/Classes/BubbleBase.js\";\nexport * from \"./Options/Classes/BubbleDiv.js\";\nexport * from \"./Options/Classes/Bubble.js\";\nexport * from \"./Options/Interfaces/IBubbleBase.js\";\nexport * from \"./Options/Interfaces/IBubbleDiv.js\";\nexport * from \"./Options/Interfaces/IBubble.js\";\n","export class ConnectLinks {\n constructor() {\n this.opacity = 0.5;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { ConnectLinks } from \"./ConnectLinks.js\";\nexport class Connect {\n constructor() {\n this.distance = 80;\n this.links = new ConnectLinks();\n this.radius = 60;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n this.links.load(data.links);\n if (data.radius !== undefined) {\n this.radius = data.radius;\n }\n }\n}\n","export async function loadExternalConnectInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalConnect\", async (container) => {\n const { Connector } = await import(\"./Connector.js\");\n return new Connector(container);\n }, refresh);\n}\nexport * from \"./Options/Classes/Connect.js\";\nexport * from \"./Options/Classes/ConnectLinks.js\";\nexport * from \"./Options/Interfaces/IConnect.js\";\nexport * from \"./Options/Interfaces/IConnectLinks.js\";\n","import { OptionsColor } from \"@tsparticles/engine\";\nexport class GrabLinks {\n constructor() {\n this.blink = false;\n this.consent = false;\n this.opacity = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.blink !== undefined) {\n this.blink = data.blink;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.consent !== undefined) {\n this.consent = data.consent;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { GrabLinks } from \"./GrabLinks.js\";\nexport class Grab {\n constructor() {\n this.distance = 100;\n this.links = new GrabLinks();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n this.links.load(data.links);\n }\n}\n","export async function loadExternalGrabInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalGrab\", async (container) => {\n const { Grabber } = await import(\"./Grabber.js\");\n return new Grabber(container);\n }, refresh);\n}\nexport * from \"./Options/Classes/Grab.js\";\nexport * from \"./Options/Classes/GrabLinks.js\";\nexport * from \"./Options/Interfaces/IGrab.js\";\nexport * from \"./Options/Interfaces/IGrabLinks.js\";\n","export async function loadExternalPauseInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalPause\", async (container) => {\n const { Pauser } = await import(\"./Pauser.js\");\n return new Pauser(container);\n }, refresh);\n}\n","import { setRangeValue } from \"@tsparticles/engine\";\nexport class Push {\n constructor() {\n this.default = true;\n this.groups = [];\n this.quantity = 4;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.default !== undefined) {\n this.default = data.default;\n }\n if (data.groups !== undefined) {\n this.groups = data.groups.map((t) => t);\n }\n if (!this.groups.length) {\n this.default = true;\n }\n const quantity = data.quantity;\n if (quantity !== undefined) {\n this.quantity = setRangeValue(quantity);\n }\n }\n}\n","export async function loadExternalPushInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalPush\", async (container) => {\n const { Pusher } = await import(\"./Pusher.js\");\n return new Pusher(container);\n }, refresh);\n}\nexport * from \"./Options/Classes/Push.js\";\nexport * from \"./Options/Interfaces/IPush.js\";\n","import { setRangeValue } from \"@tsparticles/engine\";\nexport class Remove {\n constructor() {\n this.quantity = 2;\n }\n load(data) {\n if (!data) {\n return;\n }\n const quantity = data.quantity;\n if (quantity !== undefined) {\n this.quantity = setRangeValue(quantity);\n }\n }\n}\n","export async function loadExternalRemoveInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalRemove\", async (container) => {\n const { Remover } = await import(\"./Remover.js\");\n return new Remover(container);\n }, refresh);\n}\nexport * from \"./Options/Classes/Remove.js\";\nexport * from \"./Options/Interfaces/IRemove.js\";\n","export class RepulseBase {\n constructor() {\n this.distance = 200;\n this.duration = 0.4;\n this.factor = 100;\n this.speed = 1;\n this.maxSpeed = 50;\n this.easing = \"ease-out-quad\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n if (data.duration !== undefined) {\n this.duration = data.duration;\n }\n if (data.easing !== undefined) {\n this.easing = data.easing;\n }\n if (data.factor !== undefined) {\n this.factor = data.factor;\n }\n if (data.speed !== undefined) {\n this.speed = data.speed;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = data.maxSpeed;\n }\n }\n}\n","import { RepulseBase } from \"./RepulseBase.js\";\nexport class RepulseDiv extends RepulseBase {\n constructor() {\n super();\n this.selectors = [];\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n }\n}\n","import { executeOnSingleOrMultiple, } from \"@tsparticles/engine\";\nimport { RepulseBase } from \"./RepulseBase.js\";\nimport { RepulseDiv } from \"./RepulseDiv.js\";\nexport class Repulse extends RepulseBase {\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n this.divs = executeOnSingleOrMultiple(data.divs, (div) => {\n const tmp = new RepulseDiv();\n tmp.load(div);\n return tmp;\n });\n }\n}\n","export async function loadExternalRepulseInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalRepulse\", async (container) => {\n const { Repulser } = await import(\"./Repulser.js\");\n return new Repulser(engine, container);\n }, refresh);\n}\nexport * from \"./Options/Classes/RepulseBase.js\";\nexport * from \"./Options/Classes/RepulseDiv.js\";\nexport * from \"./Options/Classes/Repulse.js\";\nexport * from \"./Options/Interfaces/IRepulseBase.js\";\nexport * from \"./Options/Interfaces/IRepulseDiv.js\";\nexport * from \"./Options/Interfaces/IRepulse.js\";\n","export class Slow {\n constructor() {\n this.factor = 3;\n this.radius = 200;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.factor !== undefined) {\n this.factor = data.factor;\n }\n if (data.radius !== undefined) {\n this.radius = data.radius;\n }\n }\n}\n","export async function loadExternalSlowInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalSlow\", async (container) => {\n const { Slower } = await import(\"./Slower.js\");\n return new Slower(container);\n }, refresh);\n}\nexport * from \"./Options/Classes/Slow.js\";\nexport * from \"./Options/Interfaces/ISlow.js\";\n","export async function loadParticlesAttractInteraction(engine, refresh = true) {\n await engine.addInteractor(\"particlesAttract\", async (container) => {\n const { Attractor } = await import(\"./Attractor.js\");\n return new Attractor(container);\n }, refresh);\n}\n","export async function loadParticlesCollisionsInteraction(engine, refresh = true) {\n await engine.addInteractor(\"particlesCollisions\", async (container) => {\n const { Collider } = await import(\"./Collider.js\");\n return new Collider(container);\n }, refresh);\n}\n","import { OptionsColor } from \"@tsparticles/engine\";\nexport class LinksShadow {\n constructor() {\n this.blur = 5;\n this.color = new OptionsColor();\n this.color.value = \"#000\";\n this.enable = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.blur !== undefined) {\n this.blur = data.blur;\n }\n this.color = OptionsColor.create(this.color, data.color);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n","import { OptionsColor } from \"@tsparticles/engine\";\nexport class LinksTriangle {\n constructor() {\n this.enable = false;\n this.frequency = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.frequency !== undefined) {\n this.frequency = data.frequency;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { OptionsColor } from \"@tsparticles/engine\";\nimport { LinksShadow } from \"./LinksShadow.js\";\nimport { LinksTriangle } from \"./LinksTriangle.js\";\nexport class Links {\n constructor() {\n this.blink = false;\n this.color = new OptionsColor();\n this.color.value = \"#fff\";\n this.consent = false;\n this.distance = 100;\n this.enable = false;\n this.frequency = 1;\n this.opacity = 1;\n this.shadow = new LinksShadow();\n this.triangles = new LinksTriangle();\n this.width = 1;\n this.warp = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.id !== undefined) {\n this.id = data.id;\n }\n if (data.blink !== undefined) {\n this.blink = data.blink;\n }\n this.color = OptionsColor.create(this.color, data.color);\n if (data.consent !== undefined) {\n this.consent = data.consent;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.frequency !== undefined) {\n this.frequency = data.frequency;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n this.shadow.load(data.shadow);\n this.triangles.load(data.triangles);\n if (data.width !== undefined) {\n this.width = data.width;\n }\n if (data.warp !== undefined) {\n this.warp = data.warp;\n }\n }\n}\n","export async function loadParticlesLinksInteraction(engine, refresh = true) {\n const { loadLinksInteraction } = await import(\"./interaction.js\"), { loadLinksPlugin } = await import(\"./plugin.js\");\n await loadLinksInteraction(engine, refresh);\n await loadLinksPlugin(engine, refresh);\n}\nexport * from \"./Options/Classes/Links.js\";\nexport * from \"./Options/Classes/LinksShadow.js\";\nexport * from \"./Options/Classes/LinksTriangle.js\";\nexport * from \"./Options/Interfaces/ILinks.js\";\nexport * from \"./Options/Interfaces/ILinksShadow.js\";\nexport * from \"./Options/Interfaces/ILinksTriangle.js\";\n","import { addEasing } from \"@tsparticles/engine\";\nexport async function loadEasingQuadPlugin() {\n addEasing(\"ease-in-quad\", (value) => value ** 2);\n addEasing(\"ease-out-quad\", (value) => 1 - (1 - value) ** 2);\n addEasing(\"ease-in-out-quad\", (value) => (value < 0.5 ? 2 * value ** 2 : 1 - (-2 * value + 2) ** 2 / 2));\n await Promise.resolve();\n}\n","export const validTypes = [\"emoji\"];\n","import { validTypes } from \"./Constants.js\";\nexport async function loadEmojiShape(engine, refresh = true) {\n const { EmojiDrawer } = await import(\"./EmojiDrawer.js\");\n await engine.addShape(validTypes, new EmojiDrawer(), refresh);\n}\n","import { errorPrefix, getLogger, getStyleFromHsl } from \"@tsparticles/engine\";\nconst stringStart = 0, defaultOpacity = 1;\nconst currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d.]+%?\\))|currentcolor/gi;\nfunction replaceColorSvg(imageShape, color, opacity) {\n const { svgData } = imageShape;\n if (!svgData) {\n return \"\";\n }\n const colorStyle = getStyleFromHsl(color, opacity);\n if (svgData.includes(\"fill\")) {\n return svgData.replace(currentColorRegex, () => colorStyle);\n }\n const preFillIndex = svgData.indexOf(\">\");\n return `${svgData.substring(stringStart, preFillIndex)} fill=\"${colorStyle}\"${svgData.substring(preFillIndex)}`;\n}\nexport async function loadImage(image) {\n return new Promise((resolve) => {\n image.loading = true;\n const img = new Image();\n image.element = img;\n img.addEventListener(\"load\", () => {\n image.loading = false;\n resolve();\n });\n img.addEventListener(\"error\", () => {\n image.element = undefined;\n image.error = true;\n image.loading = false;\n getLogger().error(`${errorPrefix} loading image: ${image.source}`);\n resolve();\n });\n img.src = image.source;\n });\n}\nexport async function downloadSvgImage(image) {\n if (image.type !== \"svg\") {\n await loadImage(image);\n return;\n }\n image.loading = true;\n const response = await fetch(image.source);\n if (!response.ok) {\n getLogger().error(`${errorPrefix} Image not found`);\n image.error = true;\n }\n else {\n image.svgData = await response.text();\n }\n image.loading = false;\n}\nexport function replaceImageColor(image, imageData, color, particle) {\n const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? defaultOpacity), imageRes = {\n color,\n gif: imageData.gif,\n data: {\n ...image,\n svgData: svgColoredData,\n },\n loaded: false,\n ratio: imageData.width / imageData.height,\n replaceColor: imageData.replaceColor,\n source: imageData.src,\n };\n return new Promise((resolve) => {\n const svg = new Blob([svgColoredData], { type: \"image/svg+xml\" }), domUrl = URL || window.URL || window.webkitURL || window, url = domUrl.createObjectURL(svg), img = new Image();\n img.addEventListener(\"load\", () => {\n imageRes.loaded = true;\n imageRes.element = img;\n resolve(imageRes);\n domUrl.revokeObjectURL(url);\n });\n const errorHandler = async () => {\n domUrl.revokeObjectURL(url);\n const img2 = {\n ...image,\n error: false,\n loading: true,\n };\n await loadImage(img2);\n imageRes.loaded = true;\n imageRes.element = img2.element;\n resolve(imageRes);\n };\n img.addEventListener(\"error\", () => void errorHandler());\n img.src = url;\n });\n}\n","import { downloadSvgImage, loadImage } from \"./Utils.js\";\nimport { errorPrefix } from \"@tsparticles/engine\";\nconst extLength = 3;\nfunction addLoadImageToEngine(engine) {\n if (engine.loadImage) {\n return;\n }\n engine.loadImage = async (data) => {\n if (!data.name && !data.src) {\n throw new Error(`${errorPrefix} no image source provided`);\n }\n if (!engine.images) {\n engine.images = [];\n }\n if (engine.images.find((t) => t.name === data.name || t.source === data.src)) {\n return;\n }\n try {\n const image = {\n gif: data.gif ?? false,\n name: data.name ?? data.src,\n source: data.src,\n type: data.src.substring(data.src.length - extLength),\n error: false,\n loading: true,\n replaceColor: data.replaceColor,\n ratio: data.width && data.height ? data.width / data.height : undefined,\n };\n engine.images.push(image);\n let imageFunc;\n if (data.gif) {\n const { loadGifImage } = await import(\"./GifUtils/Utils.js\");\n imageFunc = loadGifImage;\n }\n else {\n imageFunc = data.replaceColor ? downloadSvgImage : loadImage;\n }\n await imageFunc(image);\n }\n catch {\n throw new Error(`${errorPrefix} ${data.name ?? data.src} not found`);\n }\n };\n}\nexport async function loadImageShape(engine, refresh = true) {\n addLoadImageToEngine(engine);\n const { ImagePreloaderPlugin } = await import(\"./ImagePreloader.js\"), { ImageDrawer } = await import(\"./ImageDrawer.js\");\n const preloader = new ImagePreloaderPlugin(engine);\n await engine.addPlugin(preloader, refresh);\n await engine.addShape([\"image\", \"images\"], new ImageDrawer(engine), refresh);\n}\n","export async function loadLineShape(engine, refresh = true) {\n const { LineDrawer } = await import(\"./LineDrawer.js\");\n await engine.addShape(\"line\", new LineDrawer(), refresh);\n}\n","export async function loadGenericPolygonShape(engine, refresh = true) {\n const { PolygonDrawer } = await import(\"./PolygonDrawer.js\");\n await engine.addShape(\"polygon\", new PolygonDrawer(), refresh);\n}\nexport async function loadTriangleShape(engine, refresh = true) {\n const { TriangleDrawer } = await import(\"./TriangleDrawer.js\");\n await engine.addShape(\"triangle\", new TriangleDrawer(), refresh);\n}\nexport async function loadPolygonShape(engine, refresh = true) {\n await loadGenericPolygonShape(engine, refresh);\n await loadTriangleShape(engine, refresh);\n}\n","export async function loadSquareShape(engine, refresh = true) {\n const { SquareDrawer } = await import(\"./SquareDrawer.js\");\n await engine.addShape([\"edge\", \"square\"], new SquareDrawer(), refresh);\n}\n","export async function loadStarShape(engine, refresh = true) {\n const { StarDrawer } = await import(\"./StarDrawer.js\");\n await engine.addShape(\"star\", new StarDrawer(), refresh);\n}\n","export async function loadLifeUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"life\", async (container) => {\n const { LifeUpdater } = await import(\"./LifeUpdater.js\");\n return new LifeUpdater(container);\n }, refresh);\n}\n","export async function loadRotateUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"rotate\", async (container) => {\n const { RotateUpdater } = await import(\"./RotateUpdater.js\");\n return new RotateUpdater(container);\n }, refresh);\n}\n","export async function loadStrokeColorUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"strokeColor\", async (container) => {\n const { StrokeColorUpdater } = await import(\"./StrokeColorUpdater.js\");\n return new StrokeColorUpdater(container);\n }, refresh);\n}\n","export async function loadBasic(engine, refresh = true) {\n const { loadBaseMover } = await import(\"@tsparticles/move-base\"), { loadCircleShape } = await import(\"@tsparticles/shape-circle\"), { loadColorUpdater } = await import(\"@tsparticles/updater-color\"), { loadOpacityUpdater } = await import(\"@tsparticles/updater-opacity\"), { loadOutModesUpdater } = await import(\"@tsparticles/updater-out-modes\"), { loadSizeUpdater } = await import(\"@tsparticles/updater-size\");\n await loadBaseMover(engine, false);\n await loadCircleShape(engine, false);\n await loadColorUpdater(engine, false);\n await loadOpacityUpdater(engine, false);\n await loadOutModesUpdater(engine, false);\n await loadSizeUpdater(engine, false);\n await engine.refresh(refresh);\n}\n","import { isSsr } from \"@tsparticles/engine\";\nconst half = 0.5;\nexport class ParallaxMover {\n init() {\n }\n isEnabled(particle) {\n return (!isSsr() &&\n !particle.destroyed &&\n particle.container.actualOptions.interactivity.events.onHover.parallax.enable);\n }\n move(particle) {\n const container = particle.container, options = container.actualOptions, parallaxOptions = options.interactivity.events.onHover.parallax;\n if (isSsr() || !parallaxOptions.enable) {\n return;\n }\n const parallaxForce = parallaxOptions.force, mousePos = container.interactivity.mouse.position;\n if (!mousePos) {\n return;\n }\n const canvasSize = container.canvas.size, canvasCenter = {\n x: canvasSize.width * half,\n y: canvasSize.height * half,\n }, parallaxSmooth = parallaxOptions.smooth, factor = particle.getRadius() / parallaxForce, centerDistance = {\n x: (mousePos.x - canvasCenter.x) * factor,\n y: (mousePos.y - canvasCenter.y) * factor,\n }, { offset } = particle;\n offset.x += (centerDistance.x - offset.x) / parallaxSmooth;\n offset.y += (centerDistance.y - offset.y) / parallaxSmooth;\n }\n}\n","import { Circle, Vector, clamp, getDistances, getEasing, } from \"@tsparticles/engine\";\nconst minFactor = 1, identity = 1, minRadius = 0;\nfunction processAttract(container, position, attractRadius, area, queryCb) {\n const attractOptions = container.actualOptions.interactivity.modes.attract;\n if (!attractOptions) {\n return;\n }\n const query = container.particles.quadTree.query(area, queryCb);\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(particle.position, position), velocity = attractOptions.speed * attractOptions.factor, attractFactor = clamp(getEasing(attractOptions.easing)(identity - distance / attractRadius) * velocity, minFactor, attractOptions.maxSpeed), normVec = Vector.create(!distance ? velocity : (dx / distance) * attractFactor, !distance ? velocity : (dy / distance) * attractFactor);\n particle.position.subFrom(normVec);\n }\n}\nexport function clickAttract(container, enabledCb) {\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n const { attract } = container;\n if (!attract.finish) {\n if (!attract.count) {\n attract.count = 0;\n }\n attract.count++;\n if (attract.count === container.particles.count) {\n attract.finish = true;\n }\n }\n if (attract.clicking) {\n const mousePos = container.interactivity.mouse.clickPosition, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(container, mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius), (p) => enabledCb(p));\n }\n else if (attract.clicking === false) {\n attract.particles = [];\n }\n}\nexport function hoverAttract(container, enabledCb) {\n const mousePos = container.interactivity.mouse.position, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(container, mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius), (p) => enabledCb(p));\n}\n","import { ExternalInteractorBase, isInArray, millisecondsToSeconds, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { clickAttract, hoverAttract } from \"./Utils.js\";\nimport { Attract } from \"./Options/Classes/Attract.js\";\nconst attractMode = \"attract\";\nexport class Attractor extends ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._engine = engine;\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n this.handleClickMode = (mode) => {\n const options = this.container.actualOptions, attract = options.interactivity.modes.attract;\n if (!attract || mode !== attractMode) {\n return;\n }\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n container.attract.clicking = true;\n container.attract.count = 0;\n for (const particle of container.attract.particles) {\n if (!this.isEnabled(particle)) {\n continue;\n }\n particle.velocity.setTo(particle.initialVelocity);\n }\n container.attract.particles = [];\n container.attract.finish = false;\n setTimeout(() => {\n if (container.destroyed) {\n return;\n }\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n container.attract.clicking = false;\n }, attract.duration * millisecondsToSeconds);\n };\n }\n clear() {\n }\n init() {\n const container = this.container, attract = container.actualOptions.interactivity.modes.attract;\n if (!attract) {\n return;\n }\n container.retina.attractModeDistance = attract.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, { enable: hoverEnabled, mode: hoverMode } = events.onHover, { enable: clickEnabled, mode: clickMode } = events.onClick;\n if (mouseMoveStatus && hoverEnabled && isInArray(attractMode, hoverMode)) {\n hoverAttract(this.container, (p) => this.isEnabled(p));\n }\n else if (clickEnabled && isInArray(attractMode, clickMode)) {\n clickAttract(this.container, (p) => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events;\n if ((!mouse.position || !events.onHover.enable) && (!mouse.clickPosition || !events.onClick.enable)) {\n return false;\n }\n const hoverMode = events.onHover.mode, clickMode = events.onClick.mode;\n return isInArray(attractMode, hoverMode) || isInArray(attractMode, clickMode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.attract) {\n options.attract = new Attract();\n }\n for (const source of sources) {\n options.attract.load(source?.attract);\n }\n }\n reset() {\n }\n}\n","import { Circle, Rectangle, Vector, calculateBounds, circleBounce, circleBounceDataFromParticle, divModeExecute, rectBounce, } from \"@tsparticles/engine\";\nconst squareExp = 2, half = 0.5, halfPI = Math.PI * half, double = 2, toleranceFactor = 10, minRadius = 0;\nfunction processBounce(container, position, radius, area, enabledCb) {\n const query = container.particles.quadTree.query(area, enabledCb);\n for (const particle of query) {\n if (area instanceof Circle) {\n circleBounce(circleBounceDataFromParticle(particle), {\n position,\n radius,\n mass: radius ** squareExp * halfPI,\n velocity: Vector.origin,\n factor: Vector.origin,\n });\n }\n else if (area instanceof Rectangle) {\n rectBounce(particle, calculateBounds(position, radius));\n }\n }\n}\nfunction singleSelectorBounce(container, selector, div, bounceCb) {\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach((item) => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === \"circle\"\n ? new Circle(pos.x, pos.y, radius + tolerance)\n : new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);\n bounceCb(pos, radius, area);\n });\n}\nexport function divBounce(container, divs, bounceMode, enabledCb) {\n divModeExecute(bounceMode, divs, (selector, div) => singleSelectorBounce(container, selector, div, (pos, radius, area) => processBounce(container, pos, radius, area, enabledCb)));\n}\nexport function mouseBounce(container, enabledCb) {\n const pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;\n if (!radius || radius < minRadius || !mousePos) {\n return;\n }\n processBounce(container, mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance), enabledCb);\n}\n","import { ExternalInteractorBase, isDivModeEnabled, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { divBounce, mouseBounce } from \"./Utils.js\";\nimport { Bounce } from \"./Options/Classes/Bounce.js\";\nconst bounceMode = \"bounce\";\nexport class Bouncer extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, bounce = container.actualOptions.interactivity.modes.bounce;\n if (!bounce) {\n return;\n }\n container.retina.bounceModeDistance = bounce.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, events = options.interactivity.events, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && isInArray(bounceMode, hoverMode)) {\n mouseBounce(this.container, (p) => this.isEnabled(p));\n }\n else {\n divBounce(this.container, divs, bounceMode, (p) => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv;\n return ((!!mouse.position && events.onHover.enable && isInArray(bounceMode, events.onHover.mode)) ||\n isDivModeEnabled(bounceMode, divs));\n }\n loadModeOptions(options, ...sources) {\n if (!options.bounce) {\n options.bounce = new Bounce();\n }\n for (const source of sources) {\n options.bounce.load(source?.bounce);\n }\n }\n reset() {\n }\n}\n","import { clamp } from \"@tsparticles/engine\";\nexport function calculateBubbleValue(particleValue, modeValue, optionsValue, ratio) {\n if (modeValue >= optionsValue) {\n const value = particleValue + (modeValue - optionsValue) * ratio;\n return clamp(value, particleValue, modeValue);\n }\n else if (modeValue < optionsValue) {\n const value = particleValue - (optionsValue - modeValue) * ratio;\n return clamp(value, modeValue, particleValue);\n }\n}\n","import { Circle, ExternalInteractorBase, Rectangle, colorMix, divMode, divModeExecute, getDistance, getRangeMax, isDivModeEnabled, isInArray, itemFromSingleOrMultiple, millisecondsToSeconds, mouseLeaveEvent, mouseMoveEvent, rangeColorToHsl, rgbToHsl, } from \"@tsparticles/engine\";\nimport { Bubble } from \"./Options/Classes/Bubble.js\";\nimport { calculateBubbleValue } from \"./Utils.js\";\nconst bubbleMode = \"bubble\", minDistance = 0, defaultClickTime = 0, double = 2, defaultOpacity = 1, ratioOffset = 1, defaultBubbleValue = 0, minRatio = 0, half = 0.5, defaultRatio = 1;\nexport class Bubbler extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this._clickBubble = () => {\n const container = this.container, options = container.actualOptions, mouseClickPos = container.interactivity.mouse.clickPosition, bubbleOptions = options.interactivity.modes.bubble;\n if (!bubbleOptions || !mouseClickPos) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n const distance = container.retina.bubbleModeDistance;\n if (!distance || distance < minDistance) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mouseClickPos, distance, (p) => this.isEnabled(p)), { bubble } = container;\n for (const particle of query) {\n if (!bubble.clicking) {\n continue;\n }\n particle.bubble.inRange = !bubble.durationEnd;\n const pos = particle.getPosition(), distMouse = getDistance(pos, mouseClickPos), timeSpent = (new Date().getTime() - (container.interactivity.mouse.clickTime ?? defaultClickTime)) /\n millisecondsToSeconds;\n if (timeSpent > bubbleOptions.duration) {\n bubble.durationEnd = true;\n }\n if (timeSpent > bubbleOptions.duration * double) {\n bubble.clicking = false;\n bubble.durationEnd = false;\n }\n const sizeData = {\n bubbleObj: {\n optValue: container.retina.bubbleModeSize,\n value: particle.bubble.radius,\n },\n particlesObj: {\n optValue: getRangeMax(particle.options.size.value) * container.retina.pixelRatio,\n value: particle.size.value,\n },\n type: \"size\",\n };\n this._process(particle, distMouse, timeSpent, sizeData);\n const opacityData = {\n bubbleObj: {\n optValue: bubbleOptions.opacity,\n value: particle.bubble.opacity,\n },\n particlesObj: {\n optValue: getRangeMax(particle.options.opacity.value),\n value: particle.opacity?.value ?? defaultOpacity,\n },\n type: \"opacity\",\n };\n this._process(particle, distMouse, timeSpent, opacityData);\n if (!bubble.durationEnd && distMouse <= distance) {\n this._hoverBubbleColor(particle, distMouse);\n }\n else {\n delete particle.bubble.color;\n }\n }\n };\n this._hoverBubble = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, distance = container.retina.bubbleModeDistance;\n if (!distance || distance < minDistance || !mousePos) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mousePos, distance, (p) => this.isEnabled(p));\n for (const particle of query) {\n particle.bubble.inRange = true;\n const pos = particle.getPosition(), pointDistance = getDistance(pos, mousePos), ratio = ratioOffset - pointDistance / distance;\n if (pointDistance <= distance) {\n if (ratio >= minRatio && container.interactivity.status === mouseMoveEvent) {\n this._hoverBubbleSize(particle, ratio);\n this._hoverBubbleOpacity(particle, ratio);\n this._hoverBubbleColor(particle, ratio);\n }\n }\n else {\n this.reset(particle);\n }\n if (container.interactivity.status === mouseLeaveEvent) {\n this.reset(particle);\n }\n }\n };\n this._hoverBubbleColor = (particle, ratio, divBubble) => {\n const options = this.container.actualOptions, bubbleOptions = divBubble ?? options.interactivity.modes.bubble;\n if (!bubbleOptions) {\n return;\n }\n if (!particle.bubble.finalColor) {\n const modeColor = bubbleOptions.color;\n if (!modeColor) {\n return;\n }\n const bubbleColor = itemFromSingleOrMultiple(modeColor);\n particle.bubble.finalColor = rangeColorToHsl(bubbleColor);\n }\n if (!particle.bubble.finalColor) {\n return;\n }\n if (bubbleOptions.mix) {\n particle.bubble.color = undefined;\n const pColor = particle.getFillColor();\n particle.bubble.color = pColor\n ? rgbToHsl(colorMix(pColor, particle.bubble.finalColor, ratioOffset - ratio, ratio))\n : particle.bubble.finalColor;\n }\n else {\n particle.bubble.color = particle.bubble.finalColor;\n }\n };\n this._hoverBubbleOpacity = (particle, ratio, divBubble) => {\n const container = this.container, options = container.actualOptions, modeOpacity = divBubble?.opacity ?? options.interactivity.modes.bubble?.opacity;\n if (!modeOpacity) {\n return;\n }\n const optOpacity = particle.options.opacity.value, pOpacity = particle.opacity?.value ?? defaultOpacity, opacity = calculateBubbleValue(pOpacity, modeOpacity, getRangeMax(optOpacity), ratio);\n if (opacity !== undefined) {\n particle.bubble.opacity = opacity;\n }\n };\n this._hoverBubbleSize = (particle, ratio, divBubble) => {\n const container = this.container, modeSize = divBubble?.size ? divBubble.size * container.retina.pixelRatio : container.retina.bubbleModeSize;\n if (modeSize === undefined) {\n return;\n }\n const optSize = getRangeMax(particle.options.size.value) * container.retina.pixelRatio, pSize = particle.size.value, size = calculateBubbleValue(pSize, modeSize, optSize, ratio);\n if (size !== undefined) {\n particle.bubble.radius = size;\n }\n };\n this._process = (particle, distMouse, timeSpent, data) => {\n const container = this.container, bubbleParam = data.bubbleObj.optValue, options = container.actualOptions, bubbleOptions = options.interactivity.modes.bubble;\n if (!bubbleOptions || bubbleParam === undefined) {\n return;\n }\n const bubbleDuration = bubbleOptions.duration, bubbleDistance = container.retina.bubbleModeDistance, particlesParam = data.particlesObj.optValue, pObjBubble = data.bubbleObj.value, pObj = data.particlesObj.value ?? defaultBubbleValue, type = data.type;\n if (!bubbleDistance || bubbleDistance < minDistance || bubbleParam === particlesParam) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n if (container.bubble.durationEnd) {\n if (pObjBubble) {\n if (type === \"size\") {\n delete particle.bubble.radius;\n }\n if (type === \"opacity\") {\n delete particle.bubble.opacity;\n }\n }\n }\n else {\n if (distMouse <= bubbleDistance) {\n const obj = pObjBubble ?? pObj;\n if (obj !== bubbleParam) {\n const value = pObj - (timeSpent * (pObj - bubbleParam)) / bubbleDuration;\n if (type === \"size\") {\n particle.bubble.radius = value;\n }\n if (type === \"opacity\") {\n particle.bubble.opacity = value;\n }\n }\n }\n else {\n if (type === \"size\") {\n delete particle.bubble.radius;\n }\n if (type === \"opacity\") {\n delete particle.bubble.opacity;\n }\n }\n }\n };\n this._singleSelectorHover = (delta, selector, div) => {\n const container = this.container, selectors = document.querySelectorAll(selector), bubble = container.actualOptions.interactivity.modes.bubble;\n if (!bubble || !selectors.length) {\n return;\n }\n selectors.forEach((item) => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, repulseRadius = elem.offsetWidth * half * pxRatio, area = div.type === \"circle\"\n ? new Circle(pos.x, pos.y, repulseRadius)\n : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio), query = container.particles.quadTree.query(area, (p) => this.isEnabled(p));\n for (const particle of query) {\n if (!area.contains(particle.getPosition())) {\n continue;\n }\n particle.bubble.inRange = true;\n const divs = bubble.divs, divBubble = divMode(divs, elem);\n if (!particle.bubble.div || particle.bubble.div !== elem) {\n this.clear(particle, delta, true);\n particle.bubble.div = elem;\n }\n this._hoverBubbleSize(particle, defaultRatio, divBubble);\n this._hoverBubbleOpacity(particle, defaultRatio, divBubble);\n this._hoverBubbleColor(particle, defaultRatio, divBubble);\n }\n });\n };\n if (!container.bubble) {\n container.bubble = {};\n }\n this.handleClickMode = (mode) => {\n if (mode !== bubbleMode) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n container.bubble.clicking = true;\n };\n }\n clear(particle, delta, force) {\n if (particle.bubble.inRange && !force) {\n return;\n }\n delete particle.bubble.div;\n delete particle.bubble.opacity;\n delete particle.bubble.radius;\n delete particle.bubble.color;\n }\n init() {\n const container = this.container, bubble = container.actualOptions.interactivity.modes.bubble;\n if (!bubble) {\n return;\n }\n container.retina.bubbleModeDistance = bubble.distance * container.retina.pixelRatio;\n if (bubble.size !== undefined) {\n container.retina.bubbleModeSize = bubble.size * container.retina.pixelRatio;\n }\n }\n interact(delta) {\n const options = this.container.actualOptions, events = options.interactivity.events, onHover = events.onHover, onClick = events.onClick, hoverEnabled = onHover.enable, hoverMode = onHover.mode, clickEnabled = onClick.enable, clickMode = onClick.mode, divs = events.onDiv;\n if (hoverEnabled && isInArray(bubbleMode, hoverMode)) {\n this._hoverBubble();\n }\n else if (clickEnabled && isInArray(bubbleMode, clickMode)) {\n this._clickBubble();\n }\n else {\n divModeExecute(bubbleMode, divs, (selector, div) => this._singleSelectorHover(delta, selector, div));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, { onClick, onDiv, onHover } = events, divBubble = isDivModeEnabled(bubbleMode, onDiv);\n if (!(divBubble || (onHover.enable && !!mouse.position) || (onClick.enable && mouse.clickPosition))) {\n return false;\n }\n return isInArray(bubbleMode, onHover.mode) || isInArray(bubbleMode, onClick.mode) || divBubble;\n }\n loadModeOptions(options, ...sources) {\n if (!options.bubble) {\n options.bubble = new Bubble();\n }\n for (const source of sources) {\n options.bubble.load(source?.bubble);\n }\n }\n reset(particle) {\n particle.bubble.inRange = false;\n }\n}\n","import { clamp, colorMix, drawLine, getStyleFromHsl, getStyleFromRgb, } from \"@tsparticles/engine\";\nconst gradientMin = 0, gradientMax = 1, defaultLinksWidth = 0;\nexport function gradient(context, p1, p2, opacity) {\n const gradStop = Math.floor(p2.getRadius() / p1.getRadius()), color1 = p1.getFillColor(), color2 = p2.getFillColor();\n if (!color1 || !color2) {\n return;\n }\n const sourcePos = p1.getPosition(), destPos = p2.getPosition(), midRgb = colorMix(color1, color2, p1.getRadius(), p2.getRadius()), grad = context.createLinearGradient(sourcePos.x, sourcePos.y, destPos.x, destPos.y);\n grad.addColorStop(gradientMin, getStyleFromHsl(color1, opacity));\n grad.addColorStop(clamp(gradStop, gradientMin, gradientMax), getStyleFromRgb(midRgb, opacity));\n grad.addColorStop(gradientMax, getStyleFromHsl(color2, opacity));\n return grad;\n}\nexport function drawConnectLine(context, width, lineStyle, begin, end) {\n drawLine(context, begin, end);\n context.lineWidth = width;\n context.strokeStyle = lineStyle;\n context.stroke();\n}\nexport function lineStyle(container, ctx, p1, p2) {\n const options = container.actualOptions, connectOptions = options.interactivity.modes.connect;\n if (!connectOptions) {\n return;\n }\n return gradient(ctx, p1, p2, connectOptions.links.opacity);\n}\nexport function drawConnection(container, p1, p2) {\n container.canvas.draw((ctx) => {\n const ls = lineStyle(container, ctx, p1, p2);\n if (!ls) {\n return;\n }\n const pos1 = p1.getPosition(), pos2 = p2.getPosition();\n drawConnectLine(ctx, p1.retina.linksWidth ?? defaultLinksWidth, ls, pos1, pos2);\n });\n}\n","import { ExternalInteractorBase, isInArray, } from \"@tsparticles/engine\";\nimport { Connect } from \"./Options/Classes/Connect.js\";\nimport { drawConnection } from \"./Utils.js\";\nconst connectMode = \"connect\", minDistance = 0;\nexport class Connector extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, connect = container.actualOptions.interactivity.modes.connect;\n if (!connect) {\n return;\n }\n container.retina.connectModeDistance = connect.distance * container.retina.pixelRatio;\n container.retina.connectModeRadius = connect.radius * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions;\n if (options.interactivity.events.onHover.enable && container.interactivity.status === \"pointermove\") {\n const mousePos = container.interactivity.mouse.position, { connectModeDistance, connectModeRadius } = container.retina;\n if (!connectModeDistance ||\n connectModeDistance < minDistance ||\n !connectModeRadius ||\n connectModeRadius < minDistance ||\n !mousePos) {\n return;\n }\n const distance = Math.abs(connectModeRadius), query = container.particles.quadTree.queryCircle(mousePos, distance, (p) => this.isEnabled(p));\n query.forEach((p1, i) => {\n const pos1 = p1.getPosition(), indexOffset = 1;\n for (const p2 of query.slice(i + indexOffset)) {\n const pos2 = p2.getPosition(), distMax = Math.abs(connectModeDistance), xDiff = Math.abs(pos1.x - pos2.x), yDiff = Math.abs(pos1.y - pos2.y);\n if (xDiff < distMax && yDiff < distMax) {\n drawConnection(container, p1, p2);\n }\n }\n });\n }\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n if (!(events.onHover.enable && mouse.position)) {\n return false;\n }\n return isInArray(connectMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.connect) {\n options.connect = new Connect();\n }\n for (const source of sources) {\n options.connect.load(source?.connect);\n }\n }\n reset() {\n }\n}\n","import { drawLine, getStyleFromRgb } from \"@tsparticles/engine\";\nconst defaultWidth = 0;\nexport function drawGrabLine(context, width, begin, end, colorLine, opacity) {\n drawLine(context, begin, end);\n context.strokeStyle = getStyleFromRgb(colorLine, opacity);\n context.lineWidth = width;\n context.stroke();\n}\nexport function drawGrab(container, particle, lineColor, opacity, mousePos) {\n container.canvas.draw((ctx) => {\n const beginPos = particle.getPosition();\n drawGrabLine(ctx, particle.retina.linksWidth ?? defaultWidth, beginPos, mousePos, lineColor, opacity);\n });\n}\n","import { ExternalInteractorBase, getDistance, getLinkColor, getLinkRandomColor, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Grab } from \"./Options/Classes/Grab.js\";\nimport { drawGrab } from \"./Utils.js\";\nconst grabMode = \"grab\", minDistance = 0, minOpacity = 0;\nexport class Grabber extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, grab = container.actualOptions.interactivity.modes.grab;\n if (!grab) {\n return;\n }\n container.retina.grabModeDistance = grab.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, interactivity = options.interactivity;\n if (!interactivity.modes.grab ||\n !interactivity.events.onHover.enable ||\n container.interactivity.status !== mouseMoveEvent) {\n return;\n }\n const mousePos = container.interactivity.mouse.position;\n if (!mousePos) {\n return;\n }\n const distance = container.retina.grabModeDistance;\n if (!distance || distance < minDistance) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mousePos, distance, (p) => this.isEnabled(p));\n for (const particle of query) {\n const pos = particle.getPosition(), pointDistance = getDistance(pos, mousePos);\n if (pointDistance > distance) {\n continue;\n }\n const grabLineOptions = interactivity.modes.grab.links, lineOpacity = grabLineOptions.opacity, opacityLine = lineOpacity - (pointDistance * lineOpacity) / distance;\n if (opacityLine <= minOpacity) {\n continue;\n }\n const optColor = grabLineOptions.color ?? particle.options.links?.color;\n if (!container.particles.grabLineColor && optColor) {\n const linksOptions = interactivity.modes.grab.links;\n container.particles.grabLineColor = getLinkRandomColor(optColor, linksOptions.blink, linksOptions.consent);\n }\n const colorLine = getLinkColor(particle, undefined, container.particles.grabLineColor);\n if (!colorLine) {\n continue;\n }\n drawGrab(container, particle, colorLine, opacityLine, mousePos);\n }\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n return events.onHover.enable && !!mouse.position && isInArray(grabMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.grab) {\n options.grab = new Grab();\n }\n for (const source of sources) {\n options.grab.load(source?.grab);\n }\n }\n reset() {\n }\n}\n","import { ExternalInteractorBase } from \"@tsparticles/engine\";\nconst pauseMode = \"pause\";\nexport class Pauser extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n if (mode !== pauseMode) {\n return;\n }\n const container = this.container;\n if (container.animationStatus) {\n container.pause();\n }\n else {\n container.play();\n }\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n reset() {\n }\n}\n","import { ExternalInteractorBase, getRangeValue, itemFromArray, } from \"@tsparticles/engine\";\nimport { Push } from \"./Options/Classes/Push.js\";\nconst pushMode = \"push\", minQuantity = 0;\nexport class Pusher extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n if (mode !== pushMode) {\n return;\n }\n const container = this.container, options = container.actualOptions, pushOptions = options.interactivity.modes.push;\n if (!pushOptions) {\n return;\n }\n const quantity = getRangeValue(pushOptions.quantity);\n if (quantity <= minQuantity) {\n return;\n }\n const group = itemFromArray([undefined, ...pushOptions.groups]), groupOptions = group !== undefined ? container.actualOptions.particles.groups[group] : undefined;\n void container.particles.push(quantity, container.interactivity.mouse, groupOptions, group);\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n loadModeOptions(options, ...sources) {\n if (!options.push) {\n options.push = new Push();\n }\n for (const source of sources) {\n options.push.load(source?.push);\n }\n }\n reset() {\n }\n}\n","import { ExternalInteractorBase, getRangeValue, } from \"@tsparticles/engine\";\nimport { Remove } from \"./Options/Classes/Remove.js\";\nconst removeMode = \"remove\";\nexport class Remover extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n const container = this.container, options = container.actualOptions;\n if (!options.interactivity.modes.remove || mode !== removeMode) {\n return;\n }\n const removeNb = getRangeValue(options.interactivity.modes.remove.quantity);\n container.particles.removeQuantity(removeNb);\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n loadModeOptions(options, ...sources) {\n if (!options.remove) {\n options.remove = new Remove();\n }\n for (const source of sources) {\n options.remove.load(source?.remove);\n }\n }\n reset() {\n }\n}\n","import { Circle, ExternalInteractorBase, Rectangle, Vector, clamp, divMode, divModeExecute, getDistances, getEasing, isDivModeEnabled, isInArray, millisecondsToSeconds, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Repulse } from \"./Options/Classes/Repulse.js\";\nconst repulseMode = \"repulse\", minDistance = 0, repulseRadiusFactor = 6, repulseRadiusPower = 3, squarePower = 2, minRadius = 0, minSpeed = 0, easingOffset = 1, half = 0.5;\nexport class Repulser extends ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._clickRepulse = () => {\n const container = this.container, repulseOptions = container.actualOptions.interactivity.modes.repulse;\n if (!repulseOptions) {\n return;\n }\n const repulse = container.repulse ?? { particles: [] };\n if (!repulse.finish) {\n if (!repulse.count) {\n repulse.count = 0;\n }\n repulse.count++;\n if (repulse.count === container.particles.count) {\n repulse.finish = true;\n }\n }\n if (repulse.clicking) {\n const repulseDistance = container.retina.repulseModeDistance;\n if (!repulseDistance || repulseDistance < minDistance) {\n return;\n }\n const repulseRadius = Math.pow(repulseDistance / repulseRadiusFactor, repulseRadiusPower), mouseClickPos = container.interactivity.mouse.clickPosition;\n if (mouseClickPos === undefined) {\n return;\n }\n const range = new Circle(mouseClickPos.x, mouseClickPos.y, repulseRadius), query = container.particles.quadTree.query(range, (p) => this.isEnabled(p));\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(mouseClickPos, particle.position), d = distance ** squarePower, velocity = repulseOptions.speed, force = (-repulseRadius * velocity) / d;\n if (d <= repulseRadius) {\n repulse.particles.push(particle);\n const vect = Vector.create(dx, dy);\n vect.length = force;\n particle.velocity.setTo(vect);\n }\n }\n }\n else if (repulse.clicking === false) {\n for (const particle of repulse.particles) {\n particle.velocity.setTo(particle.initialVelocity);\n }\n repulse.particles = [];\n }\n };\n this._hoverRepulse = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, repulseRadius = container.retina.repulseModeDistance;\n if (!repulseRadius || repulseRadius < minRadius || !mousePos) {\n return;\n }\n this._processRepulse(mousePos, repulseRadius, new Circle(mousePos.x, mousePos.y, repulseRadius));\n };\n this._processRepulse = (position, repulseRadius, area, divRepulse) => {\n const container = this.container, query = container.particles.quadTree.query(area, (p) => this.isEnabled(p)), repulseOptions = container.actualOptions.interactivity.modes.repulse;\n if (!repulseOptions) {\n return;\n }\n const { easing, speed, factor, maxSpeed } = repulseOptions, easingFunc = getEasing(easing), velocity = (divRepulse?.speed ?? speed) * factor;\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(particle.position, position), repulseFactor = clamp(easingFunc(easingOffset - distance / repulseRadius) * velocity, minSpeed, maxSpeed), normVec = Vector.create(!distance ? velocity : (dx / distance) * repulseFactor, !distance ? velocity : (dy / distance) * repulseFactor);\n particle.position.addTo(normVec);\n }\n };\n this._singleSelectorRepulse = (selector, div) => {\n const container = this.container, repulse = container.actualOptions.interactivity.modes.repulse;\n if (!repulse) {\n return;\n }\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach((item) => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, repulseRadius = elem.offsetWidth * half * pxRatio, area = div.type === \"circle\"\n ? new Circle(pos.x, pos.y, repulseRadius)\n : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio), divs = repulse.divs, divRepulse = divMode(divs, elem);\n this._processRepulse(pos, repulseRadius, area, divRepulse);\n });\n };\n this._engine = engine;\n if (!container.repulse) {\n container.repulse = { particles: [] };\n }\n this.handleClickMode = (mode) => {\n const options = this.container.actualOptions, repulseOpts = options.interactivity.modes.repulse;\n if (!repulseOpts || mode !== repulseMode) {\n return;\n }\n if (!container.repulse) {\n container.repulse = { particles: [] };\n }\n const repulse = container.repulse;\n repulse.clicking = true;\n repulse.count = 0;\n for (const particle of container.repulse.particles) {\n if (!this.isEnabled(particle)) {\n continue;\n }\n particle.velocity.setTo(particle.initialVelocity);\n }\n repulse.particles = [];\n repulse.finish = false;\n setTimeout(() => {\n if (container.destroyed) {\n return;\n }\n repulse.clicking = false;\n }, repulseOpts.duration * millisecondsToSeconds);\n };\n }\n clear() {\n }\n init() {\n const container = this.container, repulse = container.actualOptions.interactivity.modes.repulse;\n if (!repulse) {\n return;\n }\n container.retina.repulseModeDistance = repulse.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, hover = events.onHover, hoverEnabled = hover.enable, hoverMode = hover.mode, click = events.onClick, clickEnabled = click.enable, clickMode = click.mode, divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && isInArray(repulseMode, hoverMode)) {\n this._hoverRepulse();\n }\n else if (clickEnabled && isInArray(repulseMode, clickMode)) {\n this._clickRepulse();\n }\n else {\n divModeExecute(repulseMode, divs, (selector, div) => this._singleSelectorRepulse(selector, div));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv, hover = events.onHover, click = events.onClick, divRepulse = isDivModeEnabled(repulseMode, divs);\n if (!(divRepulse || (hover.enable && !!mouse.position) || (click.enable && mouse.clickPosition))) {\n return false;\n }\n const hoverMode = hover.mode, clickMode = click.mode;\n return isInArray(repulseMode, hoverMode) || isInArray(repulseMode, clickMode) || divRepulse;\n }\n loadModeOptions(options, ...sources) {\n if (!options.repulse) {\n options.repulse = new Repulse();\n }\n for (const source of sources) {\n options.repulse.load(source?.repulse);\n }\n }\n reset() {\n }\n}\n","import { ExternalInteractorBase, getDistance, isInArray, } from \"@tsparticles/engine\";\nimport { Slow } from \"./Options/Classes/Slow.js\";\nconst slowMode = \"slow\", minRadius = 0;\nexport class Slower extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear(particle, delta, force) {\n if (particle.slow.inRange && !force) {\n return;\n }\n particle.slow.factor = 1;\n }\n init() {\n const container = this.container, slow = container.actualOptions.interactivity.modes.slow;\n if (!slow) {\n return;\n }\n container.retina.slowModeRadius = slow.radius * container.retina.pixelRatio;\n }\n interact() {\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n return events.onHover.enable && !!mouse.position && isInArray(slowMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.slow) {\n options.slow = new Slow();\n }\n for (const source of sources) {\n options.slow.load(source?.slow);\n }\n }\n reset(particle) {\n particle.slow.inRange = false;\n const container = this.container, options = container.actualOptions, mousePos = container.interactivity.mouse.position, radius = container.retina.slowModeRadius, slowOptions = options.interactivity.modes.slow;\n if (!slowOptions || !radius || radius < minRadius || !mousePos) {\n return;\n }\n const particlePos = particle.getPosition(), dist = getDistance(mousePos, particlePos), proximityFactor = dist / radius, slowFactor = slowOptions.factor, { slow } = particle;\n if (dist > radius) {\n return;\n }\n slow.inRange = true;\n slow.factor = proximityFactor / slowFactor;\n }\n}\n","import { ParticlesInteractorBase, getDistances, getRangeValue, } from \"@tsparticles/engine\";\nconst attractFactor = 1000, identity = 1;\nexport class Attractor extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n }\n interact(p1) {\n const container = this.container;\n if (p1.attractDistance === undefined) {\n p1.attractDistance = getRangeValue(p1.options.move.attract.distance) * container.retina.pixelRatio;\n }\n const distance = p1.attractDistance, pos1 = p1.getPosition(), query = container.particles.quadTree.queryCircle(pos1, distance);\n for (const p2 of query) {\n if (p1 === p2 || !p2.options.move.attract.enable || p2.destroyed || p2.spawning) {\n continue;\n }\n const pos2 = p2.getPosition(), { dx, dy } = getDistances(pos1, pos2), rotate = p1.options.move.attract.rotate, ax = dx / (rotate.x * attractFactor), ay = dy / (rotate.y * attractFactor), p1Factor = p2.size.value / p1.size.value, p2Factor = identity / p1Factor;\n p1.velocity.x -= ax * p1Factor;\n p1.velocity.y -= ay * p1Factor;\n p2.velocity.x += ax * p2Factor;\n p2.velocity.y += ay * p2Factor;\n }\n }\n isEnabled(particle) {\n return particle.options.move.attract.enable;\n }\n reset() {\n }\n}\n","import { clamp } from \"@tsparticles/engine\";\nconst half = 0.5, absorbFactor = 10, minAbsorbFactor = 0;\nfunction updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {\n const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) / absorbFactor, minAbsorbFactor, r2);\n p1.size.value += factor * half;\n p2.size.value -= factor;\n if (r2 <= pixelRatio) {\n p2.size.value = 0;\n p2.destroy();\n }\n}\nexport function absorb(p1, p2, delta, pixelRatio) {\n const r1 = p1.getRadius(), r2 = p2.getRadius();\n if (r1 === undefined && r2 !== undefined) {\n p1.destroy();\n }\n else if (r1 !== undefined && r2 === undefined) {\n p2.destroy();\n }\n else if (r1 !== undefined && r2 !== undefined) {\n if (r1 >= r2) {\n updateAbsorb(p1, r1, p2, r2, delta, pixelRatio);\n }\n else {\n updateAbsorb(p2, r2, p1, r1, delta, pixelRatio);\n }\n }\n}\n","import { circleBounce, circleBounceDataFromParticle, getRangeValue } from \"@tsparticles/engine\";\nconst fixBounceSpeed = (p) => {\n if (p.collisionMaxSpeed === undefined) {\n p.collisionMaxSpeed = getRangeValue(p.options.collisions.maxSpeed);\n }\n if (p.velocity.length > p.collisionMaxSpeed) {\n p.velocity.length = p.collisionMaxSpeed;\n }\n};\nexport function bounce(p1, p2) {\n circleBounce(circleBounceDataFromParticle(p1), circleBounceDataFromParticle(p2));\n fixBounceSpeed(p1);\n fixBounceSpeed(p2);\n}\n","import { bounce } from \"./Bounce.js\";\nexport function destroy(p1, p2) {\n if (!p1.unbreakable && !p2.unbreakable) {\n bounce(p1, p2);\n }\n if (p1.getRadius() === undefined && p2.getRadius() !== undefined) {\n p1.destroy();\n }\n else if (p1.getRadius() !== undefined && p2.getRadius() === undefined) {\n p2.destroy();\n }\n else if (p1.getRadius() !== undefined && p2.getRadius() !== undefined) {\n const deleteP = p1.getRadius() >= p2.getRadius() ? p2 : p1;\n deleteP.destroy();\n }\n}\n","import { absorb } from \"./Absorb.js\";\nimport { bounce } from \"./Bounce.js\";\nimport { destroy } from \"./Destroy.js\";\nexport function resolveCollision(p1, p2, delta, pixelRatio) {\n switch (p1.options.collisions.mode) {\n case \"absorb\": {\n absorb(p1, p2, delta, pixelRatio);\n break;\n }\n case \"bounce\": {\n bounce(p1, p2);\n break;\n }\n case \"destroy\": {\n destroy(p1, p2);\n break;\n }\n }\n}\n","import { ParticlesInteractorBase, getDistance } from \"@tsparticles/engine\";\nimport { resolveCollision } from \"./ResolveCollision.js\";\nconst double = 2;\nexport class Collider extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n }\n interact(p1, delta) {\n if (p1.destroyed || p1.spawning) {\n return;\n }\n const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * double);\n for (const p2 of query) {\n if (p1 === p2 ||\n !p2.options.collisions.enable ||\n p1.options.collisions.mode !== p2.options.collisions.mode ||\n p2.destroyed ||\n p2.spawning) {\n continue;\n }\n const pos2 = p2.getPosition(), radius2 = p2.getRadius();\n if (Math.abs(Math.round(pos1.z) - Math.round(pos2.z)) > radius1 + radius2) {\n continue;\n }\n const dist = getDistance(pos1, pos2), distP = radius1 + radius2;\n if (dist > distP) {\n continue;\n }\n resolveCollision(p1, p2, delta, container.retina.pixelRatio);\n }\n }\n isEnabled(particle) {\n return particle.options.collisions.enable;\n }\n reset() {\n }\n}\n","export async function loadLinksInteraction(engine, refresh = true) {\n await engine.addInteractor(\"particlesLinks\", async (container) => {\n const { Linker } = await import(\"./Linker.js\");\n return new Linker(container);\n }, refresh);\n}\n","export async function loadLinksPlugin(engine, refresh = true) {\n const { LinksPlugin } = await import(\"./LinksPlugin.js\"), plugin = new LinksPlugin();\n await engine.addPlugin(plugin, refresh);\n}\n","export function drawEmoji(data) {\n const { context, particle, radius, opacity } = data, emojiData = particle.emojiData, double = 2, diameter = radius * double, previousAlpha = context.globalAlpha;\n if (!emojiData) {\n return;\n }\n context.globalAlpha = opacity;\n context.drawImage(emojiData, -radius, -radius, diameter, diameter);\n context.globalAlpha = previousAlpha;\n}\n","import { executeOnSingleOrMultiple, getRangeMax, isInArray, itemFromSingleOrMultiple, loadFont, } from \"@tsparticles/engine\";\nimport { drawEmoji } from \"./Utils.js\";\nimport { validTypes } from \"./Constants.js\";\nconst defaultFont = '\"Twemoji Mozilla\", Apple Color Emoji, \"Segoe UI Emoji\", \"Noto Color Emoji\", \"EmojiOne Color\"';\nexport class EmojiDrawer {\n constructor() {\n this._emojiShapeDict = new Map();\n }\n destroy() {\n for (const [key, emojiData] of this._emojiShapeDict) {\n if (emojiData instanceof ImageBitmap) {\n emojiData?.close();\n this._emojiShapeDict.delete(key);\n }\n }\n }\n draw(data) {\n drawEmoji(data);\n }\n async init(container) {\n const options = container.actualOptions;\n if (!validTypes.find((t) => isInArray(t, options.particles.shape.type))) {\n return;\n }\n const promises = [loadFont(defaultFont)], shapeOptions = validTypes\n .map((t) => options.particles.shape.options[t])\n .find((t) => !!t);\n if (shapeOptions) {\n executeOnSingleOrMultiple(shapeOptions, (shape) => {\n if (shape.font) {\n promises.push(loadFont(shape.font));\n }\n });\n }\n await Promise.all(promises);\n }\n particleDestroy(particle) {\n delete particle.emojiData;\n }\n particleInit(container, particle) {\n const double = 2, shapeData = particle.shapeData;\n if (!shapeData?.value) {\n return;\n }\n const emoji = itemFromSingleOrMultiple(shapeData.value, particle.randomIndexData), font = shapeData.font ?? defaultFont;\n if (!emoji) {\n return;\n }\n const key = `${emoji}_${font}`, existingData = this._emojiShapeDict.get(key);\n if (existingData) {\n particle.emojiData = existingData;\n return;\n }\n const canvasSize = getRangeMax(particle.size.value) * double;\n let emojiData;\n const maxSize = getRangeMax(particle.size.value);\n if (typeof OffscreenCanvas !== \"undefined\") {\n const canvas = new OffscreenCanvas(canvasSize, canvasSize), context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(emoji, maxSize, maxSize);\n emojiData = canvas.transferToImageBitmap();\n }\n else {\n const canvas = document.createElement(\"canvas\");\n canvas.width = canvasSize;\n canvas.height = canvasSize;\n const context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(emoji, maxSize, maxSize);\n emojiData = canvas;\n }\n this._emojiShapeDict.set(key, emojiData);\n particle.emojiData = emojiData;\n }\n}\n","export const InterlaceOffsets = [0, 4, 2, 1];\nexport const InterlaceSteps = [8, 8, 4, 2];\n","export class ByteStream {\n constructor(bytes) {\n this.pos = 0;\n this.data = new Uint8ClampedArray(bytes);\n }\n getString(count) {\n const slice = this.data.slice(this.pos, this.pos + count);\n this.pos += slice.length;\n return slice.reduce((acc, curr) => acc + String.fromCharCode(curr), \"\");\n }\n nextByte() {\n return this.data[this.pos++];\n }\n nextTwoBytes() {\n const increment = 2, previous = 1, shift = 8;\n this.pos += increment;\n return this.data[this.pos - increment] + (this.data[this.pos - previous] << shift);\n }\n readSubBlocks() {\n let blockString = \"\", size = 0;\n const minCount = 0, emptySize = 0;\n do {\n size = this.data[this.pos++];\n for (let count = size; --count >= minCount; blockString += String.fromCharCode(this.data[this.pos++])) {\n }\n } while (size !== emptySize);\n return blockString;\n }\n readSubBlocksBin() {\n let size = this.data[this.pos], len = 0;\n const emptySize = 0, increment = 1;\n for (let offset = 0; size !== emptySize; offset += size + increment, size = this.data[this.pos + offset]) {\n len += size;\n }\n const blockData = new Uint8Array(len);\n size = this.data[this.pos++];\n for (let i = 0; size !== emptySize; size = this.data[this.pos++]) {\n for (let count = size; --count >= emptySize; blockData[i++] = this.data[this.pos++]) {\n }\n }\n return blockData;\n }\n skipSubBlocks() {\n for (const increment = 1, noData = 0; this.data[this.pos] !== noData; this.pos += this.data[this.pos] + increment) {\n }\n this.pos++;\n }\n}\n","import { InterlaceOffsets, InterlaceSteps } from \"./Constants.js\";\nimport { ByteStream } from \"./ByteStream.js\";\nconst origin = {\n x: 0,\n y: 0,\n}, defaultFrame = 0, half = 0.5, initialTime = 0, firstIndex = 0, defaultLoopCount = 0;\nfunction parseColorTable(byteStream, count) {\n const colors = [];\n for (let i = 0; i < count; i++) {\n colors.push({\n r: byteStream.data[byteStream.pos],\n g: byteStream.data[byteStream.pos + 1],\n b: byteStream.data[byteStream.pos + 2],\n });\n byteStream.pos += 3;\n }\n return colors;\n}\nfunction parseExtensionBlock(byteStream, gif, getFrameIndex, getTransparencyIndex) {\n switch (byteStream.nextByte()) {\n case 249: {\n const frame = gif.frames[getFrameIndex(false)];\n byteStream.pos++;\n const packedByte = byteStream.nextByte();\n frame.GCreserved = (packedByte & 0xe0) >>> 5;\n frame.disposalMethod = (packedByte & 0x1c) >>> 2;\n frame.userInputDelayFlag = (packedByte & 2) === 2;\n const transparencyFlag = (packedByte & 1) === 1;\n frame.delayTime = byteStream.nextTwoBytes() * 0xa;\n const transparencyIndex = byteStream.nextByte();\n if (transparencyFlag) {\n getTransparencyIndex(transparencyIndex);\n }\n byteStream.pos++;\n break;\n }\n case 255: {\n byteStream.pos++;\n const applicationExtension = {\n identifier: byteStream.getString(8),\n authenticationCode: byteStream.getString(3),\n data: byteStream.readSubBlocksBin(),\n };\n gif.applicationExtensions.push(applicationExtension);\n break;\n }\n case 254: {\n gif.comments.push([getFrameIndex(false), byteStream.readSubBlocks()]);\n break;\n }\n case 1: {\n if (gif.globalColorTable.length === 0) {\n throw new EvalError(\"plain text extension without global color table\");\n }\n byteStream.pos++;\n gif.frames[getFrameIndex(false)].plainTextData = {\n left: byteStream.nextTwoBytes(),\n top: byteStream.nextTwoBytes(),\n width: byteStream.nextTwoBytes(),\n height: byteStream.nextTwoBytes(),\n charSize: {\n width: byteStream.nextTwoBytes(),\n height: byteStream.nextTwoBytes(),\n },\n foregroundColor: byteStream.nextByte(),\n backgroundColor: byteStream.nextByte(),\n text: byteStream.readSubBlocks(),\n };\n break;\n }\n default:\n byteStream.skipSubBlocks();\n break;\n }\n}\nasync function parseImageBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback) {\n const frame = gif.frames[getFrameIndex(true)];\n frame.left = byteStream.nextTwoBytes();\n frame.top = byteStream.nextTwoBytes();\n frame.width = byteStream.nextTwoBytes();\n frame.height = byteStream.nextTwoBytes();\n const packedByte = byteStream.nextByte(), localColorTableFlag = (packedByte & 0x80) === 0x80, interlacedFlag = (packedByte & 0x40) === 0x40;\n frame.sortFlag = (packedByte & 0x20) === 0x20;\n frame.reserved = (packedByte & 0x18) >>> 3;\n const localColorCount = 1 << ((packedByte & 7) + 1);\n if (localColorTableFlag) {\n frame.localColorTable = parseColorTable(byteStream, localColorCount);\n }\n const getColor = (index) => {\n const { r, g, b } = (localColorTableFlag ? frame.localColorTable : gif.globalColorTable)[index];\n if (index !== getTransparencyIndex(null)) {\n return { r, g, b, a: 255 };\n }\n return { r, g, b, a: avgAlpha ? ~~((r + g + b) / 3) : 0 };\n };\n const image = (() => {\n try {\n return new ImageData(frame.width, frame.height, { colorSpace: \"srgb\" });\n }\n catch (error) {\n if (error instanceof DOMException && error.name === \"IndexSizeError\") {\n return null;\n }\n throw error;\n }\n })();\n if (image == null) {\n throw new EvalError(\"GIF frame size is to large\");\n }\n const minCodeSize = byteStream.nextByte(), imageData = byteStream.readSubBlocksBin(), clearCode = 1 << minCodeSize;\n const readBits = (pos, len) => {\n const bytePos = pos >>> 3, bitPos = pos & 7;\n return (((imageData[bytePos] + (imageData[bytePos + 1] << 8) + (imageData[bytePos + 2] << 16)) &\n (((1 << len) - 1) << bitPos)) >>>\n bitPos);\n };\n if (interlacedFlag) {\n for (let code = 0, size = minCodeSize + 1, pos = 0, dic = [[0]], pass = 0; pass < 4; pass++) {\n if (InterlaceOffsets[pass] < frame.height) {\n let pixelPos = 0, lineIndex = 0, exit = false;\n while (!exit) {\n const last = code;\n code = readBits(pos, size);\n pos += size + 1;\n if (code === clearCode) {\n size = minCodeSize + 1;\n dic.length = clearCode + 2;\n for (let i = 0; i < dic.length; i++) {\n dic[i] = i < clearCode ? [i] : [];\n }\n }\n else {\n if (code >= dic.length) {\n dic.push(dic[last].concat(dic[last][0]));\n }\n else if (last !== clearCode) {\n dic.push(dic[last].concat(dic[code][0]));\n }\n for (const item of dic[code]) {\n const { r, g, b, a } = getColor(item);\n image.data.set([r, g, b, a], InterlaceOffsets[pass] * frame.width +\n InterlaceSteps[pass] * lineIndex +\n (pixelPos % (frame.width * 4)));\n pixelPos += 4;\n }\n if (dic.length === 1 << size && size < 0xc) {\n size++;\n }\n }\n if (pixelPos === frame.width * 4 * (lineIndex + 1)) {\n lineIndex++;\n if (InterlaceOffsets[pass] + InterlaceSteps[pass] * lineIndex >= frame.height) {\n exit = true;\n }\n }\n }\n }\n progressCallback?.(byteStream.pos / (byteStream.data.length - 1), getFrameIndex(false) + 1, image, { x: frame.left, y: frame.top }, { width: gif.width, height: gif.height });\n }\n frame.image = image;\n frame.bitmap = await createImageBitmap(image);\n }\n else {\n let code = 0, size = minCodeSize + 1, pos = 0, pixelPos = -4, exit = false;\n const dic = [[0]];\n while (!exit) {\n const last = code;\n code = readBits(pos, size);\n pos += size;\n if (code === clearCode) {\n size = minCodeSize + 1;\n dic.length = clearCode + 2;\n for (let i = 0; i < dic.length; i++) {\n dic[i] = i < clearCode ? [i] : [];\n }\n }\n else {\n if (code === clearCode + 1) {\n exit = true;\n break;\n }\n if (code >= dic.length) {\n dic.push(dic[last].concat(dic[last][0]));\n }\n else if (last !== clearCode) {\n dic.push(dic[last].concat(dic[code][0]));\n }\n for (const item of dic[code]) {\n const { r, g, b, a } = getColor(item);\n image.data.set([r, g, b, a], (pixelPos += 4));\n }\n if (dic.length >= 1 << size && size < 0xc) {\n size++;\n }\n }\n }\n frame.image = image;\n frame.bitmap = await createImageBitmap(image);\n progressCallback?.((byteStream.pos + 1) / byteStream.data.length, getFrameIndex(false) + 1, frame.image, { x: frame.left, y: frame.top }, { width: gif.width, height: gif.height });\n }\n}\nasync function parseBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback) {\n switch (byteStream.nextByte()) {\n case 59:\n return true;\n case 44:\n await parseImageBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback);\n break;\n case 33:\n parseExtensionBlock(byteStream, gif, getFrameIndex, getTransparencyIndex);\n break;\n default:\n throw new EvalError(\"undefined block found\");\n }\n return false;\n}\nexport function getGIFLoopAmount(gif) {\n for (const extension of gif.applicationExtensions) {\n if (extension.identifier + extension.authenticationCode !== \"NETSCAPE2.0\") {\n continue;\n }\n return extension.data[1] + (extension.data[2] << 8);\n }\n return NaN;\n}\nexport async function decodeGIF(gifURL, progressCallback, avgAlpha) {\n if (!avgAlpha)\n avgAlpha = false;\n const res = await fetch(gifURL);\n if (!res.ok && res.status === 404) {\n throw new EvalError(\"file not found\");\n }\n const buffer = await res.arrayBuffer();\n const gif = {\n width: 0,\n height: 0,\n totalTime: 0,\n colorRes: 0,\n pixelAspectRatio: 0,\n frames: [],\n sortFlag: false,\n globalColorTable: [],\n backgroundImage: new ImageData(1, 1, { colorSpace: \"srgb\" }),\n comments: [],\n applicationExtensions: [],\n }, byteStream = new ByteStream(new Uint8ClampedArray(buffer));\n if (byteStream.getString(6) !== \"GIF89a\") {\n throw new Error(\"not a supported GIF file\");\n }\n gif.width = byteStream.nextTwoBytes();\n gif.height = byteStream.nextTwoBytes();\n const packedByte = byteStream.nextByte(), globalColorTableFlag = (packedByte & 0x80) === 0x80;\n gif.colorRes = (packedByte & 0x70) >>> 4;\n gif.sortFlag = (packedByte & 8) === 8;\n const globalColorCount = 1 << ((packedByte & 7) + 1), backgroundColorIndex = byteStream.nextByte();\n gif.pixelAspectRatio = byteStream.nextByte();\n if (gif.pixelAspectRatio !== 0) {\n gif.pixelAspectRatio = (gif.pixelAspectRatio + 0xf) / 0x40;\n }\n if (globalColorTableFlag) {\n gif.globalColorTable = parseColorTable(byteStream, globalColorCount);\n }\n const backgroundImage = (() => {\n try {\n return new ImageData(gif.width, gif.height, { colorSpace: \"srgb\" });\n }\n catch (error) {\n if (error instanceof DOMException && error.name === \"IndexSizeError\") {\n return null;\n }\n throw error;\n }\n })();\n if (backgroundImage == null) {\n throw new Error(\"GIF frame size is to large\");\n }\n const { r, g, b } = gif.globalColorTable[backgroundColorIndex];\n backgroundImage.data.set(globalColorTableFlag ? [r, g, b, 255] : [0, 0, 0, 0]);\n for (let i = 4; i < backgroundImage.data.length; i *= 2) {\n backgroundImage.data.copyWithin(i, 0, i);\n }\n gif.backgroundImage = backgroundImage;\n let frameIndex = -1, incrementFrameIndex = true, transparencyIndex = -1;\n const getframeIndex = (increment) => {\n if (increment) {\n incrementFrameIndex = true;\n }\n return frameIndex;\n };\n const getTransparencyIndex = (newValue) => {\n if (newValue != null) {\n transparencyIndex = newValue;\n }\n return transparencyIndex;\n };\n try {\n do {\n if (incrementFrameIndex) {\n gif.frames.push({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n disposalMethod: 0,\n image: new ImageData(1, 1, { colorSpace: \"srgb\" }),\n plainTextData: null,\n userInputDelayFlag: false,\n delayTime: 0,\n sortFlag: false,\n localColorTable: [],\n reserved: 0,\n GCreserved: 0,\n });\n frameIndex++;\n transparencyIndex = -1;\n incrementFrameIndex = false;\n }\n } while (!(await parseBlock(byteStream, gif, avgAlpha, getframeIndex, getTransparencyIndex, progressCallback)));\n gif.frames.length--;\n for (const frame of gif.frames) {\n if (frame.userInputDelayFlag && frame.delayTime === 0) {\n gif.totalTime = Infinity;\n break;\n }\n gif.totalTime += frame.delayTime;\n }\n return gif;\n }\n catch (error) {\n if (error instanceof EvalError) {\n throw new Error(`error while parsing frame ${frameIndex} \"${error.message}\"`);\n }\n throw error;\n }\n}\nexport function drawGif(data) {\n const { context, radius, particle, delta } = data, image = particle.image;\n if (!image?.gifData || !image.gif) {\n return;\n }\n const offscreenCanvas = new OffscreenCanvas(image.gifData.width, image.gifData.height), offscreenContext = offscreenCanvas.getContext(\"2d\");\n if (!offscreenContext) {\n throw new Error(\"could not create offscreen canvas context\");\n }\n offscreenContext.imageSmoothingQuality = \"low\";\n offscreenContext.imageSmoothingEnabled = false;\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n if (particle.gifLoopCount === undefined) {\n particle.gifLoopCount = image.gifLoopCount ?? defaultLoopCount;\n }\n let frameIndex = particle.gifFrame ?? defaultFrame;\n const pos = { x: -image.gifData.width * half, y: -image.gifData.height * half }, frame = image.gifData.frames[frameIndex];\n if (particle.gifTime === undefined) {\n particle.gifTime = initialTime;\n }\n if (!frame.bitmap) {\n return;\n }\n context.scale(radius / image.gifData.width, radius / image.gifData.height);\n switch (frame.disposalMethod) {\n case 4:\n case 5:\n case 6:\n case 7:\n case 0:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n break;\n case 1:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n break;\n case 2:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n if (!image.gifData.globalColorTable.length) {\n offscreenContext.putImageData(image.gifData.frames[firstIndex].image, pos.x + frame.left, pos.y + frame.top);\n }\n else {\n offscreenContext.putImageData(image.gifData.backgroundImage, pos.x, pos.y);\n }\n break;\n case 3:\n {\n const previousImageData = offscreenContext.getImageData(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n offscreenContext.putImageData(previousImageData, origin.x, origin.y);\n }\n break;\n }\n particle.gifTime += delta.value;\n if (particle.gifTime > frame.delayTime) {\n particle.gifTime -= frame.delayTime;\n if (++frameIndex >= image.gifData.frames.length) {\n if (--particle.gifLoopCount <= defaultLoopCount) {\n return;\n }\n frameIndex = firstIndex;\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n }\n particle.gifFrame = frameIndex;\n }\n context.scale(image.gifData.width / radius, image.gifData.height / radius);\n}\nexport async function loadGifImage(image) {\n if (image.type !== \"gif\") {\n const { loadImage } = await import(\"../Utils.js\");\n await loadImage(image);\n return;\n }\n image.loading = true;\n try {\n image.gifData = await decodeGIF(image.source);\n image.gifLoopCount = getGIFLoopAmount(image.gifData) ?? defaultLoopCount;\n if (!image.gifLoopCount) {\n image.gifLoopCount = Infinity;\n }\n }\n catch {\n image.error = true;\n }\n image.loading = false;\n}\n","export class Preload {\n constructor() {\n this.src = \"\";\n this.gif = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.gif !== undefined) {\n this.gif = data.gif;\n }\n if (data.height !== undefined) {\n this.height = data.height;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n if (data.replaceColor !== undefined) {\n this.replaceColor = data.replaceColor;\n }\n if (data.src !== undefined) {\n this.src = data.src;\n }\n if (data.width !== undefined) {\n this.width = data.width;\n }\n }\n}\n","import { Preload } from \"./Options/Classes/Preload.js\";\nexport class ImagePreloaderPlugin {\n constructor(engine) {\n this.id = \"imagePreloader\";\n this._engine = engine;\n }\n async getPlugin() {\n await Promise.resolve();\n return {};\n }\n loadOptions(options, source) {\n if (!source?.preload) {\n return;\n }\n if (!options.preload) {\n options.preload = [];\n }\n const preloadOptions = options.preload;\n for (const item of source.preload) {\n const existing = preloadOptions.find((t) => t.name === item.name || t.src === item.src);\n if (existing) {\n existing.load(item);\n }\n else {\n const preload = new Preload();\n preload.load(item);\n preloadOptions.push(preload);\n }\n }\n }\n needsPlugin() {\n return true;\n }\n}\n","import { errorPrefix } from \"@tsparticles/engine\";\nimport { replaceImageColor } from \"./Utils.js\";\nimport { drawGif } from \"./GifUtils/Utils.js\";\nconst double = 2, defaultAlpha = 1, sides = 12, defaultRatio = 1;\nexport class ImageDrawer {\n constructor(engine) {\n this.loadImageShape = async (imageShape) => {\n if (!this._engine.loadImage) {\n throw new Error(`${errorPrefix} image shape not initialized`);\n }\n await this._engine.loadImage({\n gif: imageShape.gif,\n name: imageShape.name,\n replaceColor: imageShape.replaceColor ?? false,\n src: imageShape.src,\n });\n };\n this._engine = engine;\n }\n addImage(image) {\n if (!this._engine.images) {\n this._engine.images = [];\n }\n this._engine.images.push(image);\n }\n draw(data) {\n const { context, radius, particle, opacity } = data, image = particle.image, element = image?.element;\n if (!image) {\n return;\n }\n context.globalAlpha = opacity;\n if (image.gif && image.gifData) {\n drawGif(data);\n }\n else if (element) {\n const ratio = image.ratio, pos = {\n x: -radius,\n y: -radius,\n }, diameter = radius * double;\n context.drawImage(element, pos.x, pos.y, diameter, diameter / ratio);\n }\n context.globalAlpha = defaultAlpha;\n }\n getSidesCount() {\n return sides;\n }\n async init(container) {\n const options = container.actualOptions;\n if (!options.preload || !this._engine.loadImage) {\n return;\n }\n for (const imageData of options.preload) {\n await this._engine.loadImage(imageData);\n }\n }\n loadShape(particle) {\n if (particle.shape !== \"image\" && particle.shape !== \"images\") {\n return;\n }\n if (!this._engine.images) {\n this._engine.images = [];\n }\n const imageData = particle.shapeData;\n if (!imageData) {\n return;\n }\n const image = this._engine.images.find((t) => t.name === imageData.name || t.source === imageData.src);\n if (!image) {\n void this.loadImageShape(imageData).then(() => {\n this.loadShape(particle);\n });\n }\n }\n particleInit(container, particle) {\n if (particle.shape !== \"image\" && particle.shape !== \"images\") {\n return;\n }\n if (!this._engine.images) {\n this._engine.images = [];\n }\n const images = this._engine.images, imageData = particle.shapeData;\n if (!imageData) {\n return;\n }\n const color = particle.getFillColor(), image = images.find((t) => t.name === imageData.name || t.source === imageData.src);\n if (!image) {\n return;\n }\n const replaceColor = imageData.replaceColor ?? image.replaceColor;\n if (image.loading) {\n setTimeout(() => {\n this.particleInit(container, particle);\n });\n return;\n }\n void (async () => {\n let imageRes;\n if (image.svgData && color) {\n imageRes = await replaceImageColor(image, imageData, color, particle);\n }\n else {\n imageRes = {\n color,\n data: image,\n element: image.element,\n gif: image.gif,\n gifData: image.gifData,\n gifLoopCount: image.gifLoopCount,\n loaded: true,\n ratio: imageData.width && imageData.height\n ? imageData.width / imageData.height\n : image.ratio ?? defaultRatio,\n replaceColor: replaceColor,\n source: imageData.src,\n };\n }\n if (!imageRes.ratio) {\n imageRes.ratio = 1;\n }\n const fill = imageData.fill ?? particle.shapeFill, close = imageData.close ?? particle.shapeClose, imageShape = {\n image: imageRes,\n fill,\n close,\n };\n particle.image = imageShape.image;\n particle.shapeFill = imageShape.fill;\n particle.shapeClose = imageShape.close;\n })();\n }\n}\n","export function drawLine(data) {\n const { context, particle, radius } = data, shapeData = particle.shapeData, centerY = 0;\n context.moveTo(-radius, centerY);\n context.lineTo(radius, centerY);\n context.lineCap = shapeData?.cap ?? \"butt\";\n}\n","import { drawLine } from \"./Utils.js\";\nconst sides = 1;\nexport class LineDrawer {\n draw(data) {\n drawLine(data);\n }\n getSidesCount() {\n return sides;\n }\n}\n","import { degToRad } from \"@tsparticles/engine\";\nconst piDeg = 180, origin = { x: 0, y: 0 }, sidesOffset = 2;\nexport function drawPolygon(data, start, side) {\n const { context } = data, sideCount = side.count.numerator * side.count.denominator, decimalSides = side.count.numerator / side.count.denominator, interiorAngleDegrees = (piDeg * (decimalSides - sidesOffset)) / decimalSides, interiorAngle = Math.PI - degToRad(interiorAngleDegrees);\n if (!context) {\n return;\n }\n context.beginPath();\n context.translate(start.x, start.y);\n context.moveTo(origin.x, origin.y);\n for (let i = 0; i < sideCount; i++) {\n context.lineTo(side.length, origin.y);\n context.translate(side.length, origin.y);\n context.rotate(interiorAngle);\n }\n}\n","import { getRangeValue, } from \"@tsparticles/engine\";\nimport { drawPolygon } from \"./Utils.js\";\nconst defaultSides = 5;\nexport class PolygonDrawerBase {\n draw(data) {\n const { particle, radius } = data, start = this.getCenter(particle, radius), side = this.getSidesData(particle, radius);\n drawPolygon(data, start, side);\n }\n getSidesCount(particle) {\n const polygon = particle.shapeData;\n return Math.round(getRangeValue(polygon?.sides ?? defaultSides));\n }\n}\n","import { PolygonDrawerBase } from \"./PolygonDrawerBase.js\";\nconst sidesCenterFactor = 3.5, yFactor = 2.66, sidesFactor = 3;\nexport class PolygonDrawer extends PolygonDrawerBase {\n getCenter(particle, radius) {\n return {\n x: -radius / (particle.sides / sidesCenterFactor),\n y: -radius / (yFactor / sidesCenterFactor),\n };\n }\n getSidesData(particle, radius) {\n const sides = particle.sides;\n return {\n count: {\n denominator: 1,\n numerator: sides,\n },\n length: (radius * yFactor) / (sides / sidesFactor),\n };\n }\n}\n","import { PolygonDrawerBase } from \"./PolygonDrawerBase.js\";\nconst yFactor = 1.66, sides = 3, double = 2;\nexport class TriangleDrawer extends PolygonDrawerBase {\n getCenter(particle, radius) {\n return {\n x: -radius,\n y: radius / yFactor,\n };\n }\n getSidesCount() {\n return sides;\n }\n getSidesData(particle, radius) {\n const diameter = radius * double;\n return {\n count: {\n denominator: 2,\n numerator: 3,\n },\n length: diameter,\n };\n }\n}\n","const fixFactorSquared = 2, fixFactor = Math.sqrt(fixFactorSquared), double = 2;\nexport function drawSquare(data) {\n const { context, radius } = data, fixedRadius = radius / fixFactor, fixedDiameter = fixedRadius * double;\n context.rect(-fixedRadius, -fixedRadius, fixedDiameter, fixedDiameter);\n}\n","import { drawSquare } from \"./Utils.js\";\nconst sides = 4;\nexport class SquareDrawer {\n draw(data) {\n drawSquare(data);\n }\n getSidesCount() {\n return sides;\n }\n}\n","const defaultInset = 2, origin = { x: 0, y: 0 };\nexport function drawStar(data) {\n const { context, particle, radius } = data, sides = particle.sides, inset = particle.starInset ?? defaultInset;\n context.moveTo(origin.x, origin.y - radius);\n for (let i = 0; i < sides; i++) {\n context.rotate(Math.PI / sides);\n context.lineTo(origin.x, origin.y - radius * inset);\n context.rotate(Math.PI / sides);\n context.lineTo(origin.x, origin.y - radius);\n }\n}\n","import { getRangeValue, } from \"@tsparticles/engine\";\nimport { drawStar } from \"./Utils.js\";\nconst defaultInset = 2, defaultSides = 5;\nexport class StarDrawer {\n draw(data) {\n drawStar(data);\n }\n getSidesCount(particle) {\n const star = particle.shapeData;\n return Math.round(getRangeValue(star?.sides ?? defaultSides));\n }\n particleInit(container, particle) {\n const star = particle.shapeData;\n particle.starInset = getRangeValue(star?.inset ?? defaultInset);\n }\n}\n","import { ValueWithRandom } from \"@tsparticles/engine\";\nexport class LifeDelay extends ValueWithRandom {\n constructor() {\n super();\n this.sync = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n super.load(data);\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n","import { ValueWithRandom } from \"@tsparticles/engine\";\nexport class LifeDuration extends ValueWithRandom {\n constructor() {\n super();\n this.sync = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n super.load(data);\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n","import { LifeDelay } from \"./LifeDelay.js\";\nimport { LifeDuration } from \"./LifeDuration.js\";\nexport class Life {\n constructor() {\n this.count = 0;\n this.delay = new LifeDelay();\n this.duration = new LifeDuration();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.count !== undefined) {\n this.count = data.count;\n }\n this.delay.load(data.delay);\n this.duration.load(data.duration);\n }\n}\n","import { getRangeValue, millisecondsToSeconds, randomInRange, setRangeValue, } from \"@tsparticles/engine\";\nconst noTime = 0, infiniteValue = -1, noLife = 0, minCanvasSize = 0;\nexport function updateLife(particle, delta, canvasSize) {\n if (!particle.life) {\n return;\n }\n const life = particle.life;\n let justSpawned = false;\n if (particle.spawning) {\n life.delayTime += delta.value;\n if (life.delayTime >= particle.life.delay) {\n justSpawned = true;\n particle.spawning = false;\n life.delayTime = noTime;\n life.time = noTime;\n }\n else {\n return;\n }\n }\n if (life.duration === infiniteValue) {\n return;\n }\n if (particle.spawning) {\n return;\n }\n if (justSpawned) {\n life.time = noTime;\n }\n else {\n life.time += delta.value;\n }\n if (life.time < life.duration) {\n return;\n }\n life.time = noTime;\n if (particle.life.count > noLife) {\n particle.life.count--;\n }\n if (particle.life.count === noLife) {\n particle.destroy();\n return;\n }\n const widthRange = setRangeValue(minCanvasSize, canvasSize.width), heightRange = setRangeValue(minCanvasSize, canvasSize.width);\n particle.position.x = randomInRange(widthRange);\n particle.position.y = randomInRange(heightRange);\n particle.spawning = true;\n life.delayTime = noTime;\n life.time = noTime;\n particle.reset();\n const lifeOptions = particle.options.life;\n if (lifeOptions) {\n life.delay = getRangeValue(lifeOptions.delay.value) * millisecondsToSeconds;\n life.duration = getRangeValue(lifeOptions.duration.value) * millisecondsToSeconds;\n }\n}\n","import { getRandom, getRangeValue, millisecondsToSeconds, } from \"@tsparticles/engine\";\nimport { Life } from \"./Options/Classes/Life.js\";\nimport { updateLife } from \"./Utils.js\";\nconst noTime = 0, identity = 1, infiniteValue = -1;\nexport class LifeUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const container = this.container, particlesOptions = particle.options, lifeOptions = particlesOptions.life;\n if (!lifeOptions) {\n return;\n }\n particle.life = {\n delay: container.retina.reduceFactor\n ? ((getRangeValue(lifeOptions.delay.value) * (lifeOptions.delay.sync ? identity : getRandom())) /\n container.retina.reduceFactor) *\n millisecondsToSeconds\n : noTime,\n delayTime: noTime,\n duration: container.retina.reduceFactor\n ? ((getRangeValue(lifeOptions.duration.value) * (lifeOptions.duration.sync ? identity : getRandom())) /\n container.retina.reduceFactor) *\n millisecondsToSeconds\n : noTime,\n time: noTime,\n count: lifeOptions.count,\n };\n if (particle.life.duration <= noTime) {\n particle.life.duration = infiniteValue;\n }\n if (particle.life.count <= noTime) {\n particle.life.count = infiniteValue;\n }\n if (particle.life) {\n particle.spawning = particle.life.delay > noTime;\n }\n }\n isEnabled(particle) {\n return !particle.destroyed;\n }\n loadOptions(options, ...sources) {\n if (!options.life) {\n options.life = new Life();\n }\n for (const source of sources) {\n options.life.load(source?.life);\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle) || !particle.life) {\n return;\n }\n updateLife(particle, delta, this.container.canvas.size);\n }\n}\n","import { setRangeValue } from \"@tsparticles/engine\";\nexport class RotateAnimation {\n constructor() {\n this.enable = false;\n this.speed = 0;\n this.decay = 0;\n this.sync = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.speed !== undefined) {\n this.speed = setRangeValue(data.speed);\n }\n if (data.decay !== undefined) {\n this.decay = setRangeValue(data.decay);\n }\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n","import { ValueWithRandom, } from \"@tsparticles/engine\";\nimport { RotateAnimation } from \"./RotateAnimation.js\";\nexport class Rotate extends ValueWithRandom {\n constructor() {\n super();\n this.animation = new RotateAnimation();\n this.direction = \"clockwise\";\n this.path = false;\n this.value = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n super.load(data);\n if (data.direction !== undefined) {\n this.direction = data.direction;\n }\n this.animation.load(data.animation);\n if (data.path !== undefined) {\n this.path = data.path;\n }\n }\n}\n","import { degToRad, getRandom, getRangeValue, updateAnimation, } from \"@tsparticles/engine\";\nimport { Rotate } from \"./Options/Classes/Rotate.js\";\nconst double = 2, doublePI = Math.PI * double, identity = 1, doublePIDeg = 360;\nexport class RotateUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const rotateOptions = particle.options.rotate;\n if (!rotateOptions) {\n return;\n }\n particle.rotate = {\n enable: rotateOptions.animation.enable,\n value: degToRad(getRangeValue(rotateOptions.value)),\n min: 0,\n max: doublePI,\n };\n particle.pathRotation = rotateOptions.path;\n let rotateDirection = rotateOptions.direction;\n if (rotateDirection === \"random\") {\n const index = Math.floor(getRandom() * double), minIndex = 0;\n rotateDirection = index > minIndex ? \"counter-clockwise\" : \"clockwise\";\n }\n switch (rotateDirection) {\n case \"counter-clockwise\":\n case \"counterClockwise\":\n particle.rotate.status = \"decreasing\";\n break;\n case \"clockwise\":\n particle.rotate.status = \"increasing\";\n break;\n }\n const rotateAnimation = rotateOptions.animation;\n if (rotateAnimation.enable) {\n particle.rotate.decay = identity - getRangeValue(rotateAnimation.decay);\n particle.rotate.velocity =\n (getRangeValue(rotateAnimation.speed) / doublePIDeg) * this.container.retina.reduceFactor;\n if (!rotateAnimation.sync) {\n particle.rotate.velocity *= getRandom();\n }\n }\n particle.rotation = particle.rotate.value;\n }\n isEnabled(particle) {\n const rotate = particle.options.rotate;\n if (!rotate) {\n return false;\n }\n return !particle.destroyed && !particle.spawning && rotate.animation.enable && !rotate.path;\n }\n loadOptions(options, ...sources) {\n if (!options.rotate) {\n options.rotate = new Rotate();\n }\n for (const source of sources) {\n options.rotate.load(source?.rotate);\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n if (!particle.rotate) {\n return;\n }\n updateAnimation(particle, particle.rotate, false, \"none\", delta);\n particle.rotation = particle.rotate.value;\n }\n}\n","import { getHslAnimationFromHsl, getRangeValue, itemFromSingleOrMultiple, rangeColorToHsl, updateColor, } from \"@tsparticles/engine\";\nconst defaultOpacity = 1;\nexport class StrokeColorUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const container = this.container, options = particle.options;\n const stroke = itemFromSingleOrMultiple(options.stroke, particle.id, options.reduceDuplicates);\n particle.strokeWidth = getRangeValue(stroke.width) * container.retina.pixelRatio;\n particle.strokeOpacity = getRangeValue(stroke.opacity ?? defaultOpacity);\n particle.strokeAnimation = stroke.color?.animation;\n const strokeHslColor = rangeColorToHsl(stroke.color) ?? particle.getFillColor();\n if (strokeHslColor) {\n particle.strokeColor = getHslAnimationFromHsl(strokeHslColor, particle.strokeAnimation, container.retina.reduceFactor);\n }\n }\n isEnabled(particle) {\n const color = particle.strokeAnimation, { strokeColor } = particle;\n return (!particle.destroyed &&\n !particle.spawning &&\n !!color &&\n ((strokeColor?.h.value !== undefined && strokeColor.h.enable) ||\n (strokeColor?.s.value !== undefined && strokeColor.s.enable) ||\n (strokeColor?.l.value !== undefined && strokeColor.l.enable)));\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateColor(particle.strokeColor, delta);\n }\n}\n","export async function loadBaseMover(engine, refresh = true) {\n await engine.addMover(\"base\", async () => {\n const { BaseMover } = await import(\"./BaseMover.js\");\n return new BaseMover();\n }, refresh);\n}\n","export async function loadCircleShape(engine, refresh = true) {\n const { CircleDrawer } = await import(\"./CircleDrawer.js\");\n await engine.addShape(\"circle\", new CircleDrawer(), refresh);\n}\n","export async function loadColorUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"color\", async (container) => {\n const { ColorUpdater } = await import(\"./ColorUpdater.js\");\n return new ColorUpdater(container);\n }, refresh);\n}\n","export async function loadOpacityUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"opacity\", async (container) => {\n const { OpacityUpdater } = await import(\"./OpacityUpdater.js\");\n return new OpacityUpdater(container);\n }, refresh);\n}\n","export async function loadOutModesUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"outModes\", async (container) => {\n const { OutOfCanvasUpdater } = await import(\"./OutOfCanvasUpdater.js\");\n return new OutOfCanvasUpdater(container);\n }, refresh);\n}\n","export async function loadSizeUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"size\", async () => {\n const { SizeUpdater } = await import(\"./SizeUpdater.js\");\n return new SizeUpdater();\n }, refresh);\n}\n","import { Circle, Rectangle } from \"@tsparticles/engine\";\nconst double = 2;\nexport class CircleWarp extends Circle {\n constructor(x, y, radius, canvasSize) {\n super(x, y, radius);\n this.canvasSize = canvasSize;\n this.canvasSize = { ...canvasSize };\n }\n contains(point) {\n const { width, height } = this.canvasSize, { x, y } = point;\n return (super.contains(point) ||\n super.contains({ x: x - width, y }) ||\n super.contains({ x: x - width, y: y - height }) ||\n super.contains({ x, y: y - height }));\n }\n intersects(range) {\n if (super.intersects(range)) {\n return true;\n }\n const rect = range, circle = range, newPos = {\n x: range.position.x - this.canvasSize.width,\n y: range.position.y - this.canvasSize.height,\n };\n if (circle.radius !== undefined) {\n const biggerCircle = new Circle(newPos.x, newPos.y, circle.radius * double);\n return super.intersects(biggerCircle);\n }\n else if (rect.size !== undefined) {\n const rectSW = new Rectangle(newPos.x, newPos.y, rect.size.width * double, rect.size.height * double);\n return super.intersects(rectSW);\n }\n return false;\n }\n}\n","import { Circle, ParticlesInteractorBase, getDistances, getLinkRandomColor, } from \"@tsparticles/engine\";\nimport { CircleWarp } from \"./CircleWarp.js\";\nimport { Links } from \"./Options/Classes/Links.js\";\nconst squarePower = 2, opacityOffset = 1, origin = {\n x: 0,\n y: 0,\n}, minDistance = 0;\nfunction getLinkDistance(pos1, pos2, optDistance, canvasSize, warp) {\n const { dx, dy, distance } = getDistances(pos1, pos2);\n if (!warp || distance <= optDistance) {\n return distance;\n }\n const absDiffs = {\n x: Math.abs(dx),\n y: Math.abs(dy),\n }, warpDistances = {\n x: Math.min(absDiffs.x, canvasSize.width - absDiffs.x),\n y: Math.min(absDiffs.y, canvasSize.height - absDiffs.y),\n };\n return Math.sqrt(warpDistances.x ** squarePower + warpDistances.y ** squarePower);\n}\nexport class Linker extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n this._setColor = (p1) => {\n if (!p1.options.links) {\n return;\n }\n const container = this.linkContainer, linksOptions = p1.options.links;\n let linkColor = linksOptions.id === undefined\n ? container.particles.linksColor\n : container.particles.linksColors.get(linksOptions.id);\n if (linkColor) {\n return;\n }\n const optColor = linksOptions.color;\n linkColor = getLinkRandomColor(optColor, linksOptions.blink, linksOptions.consent);\n if (linksOptions.id === undefined) {\n container.particles.linksColor = linkColor;\n }\n else {\n container.particles.linksColors.set(linksOptions.id, linkColor);\n }\n };\n this.linkContainer = container;\n }\n clear() {\n }\n init() {\n this.linkContainer.particles.linksColor = undefined;\n this.linkContainer.particles.linksColors = new Map();\n }\n interact(p1) {\n if (!p1.options.links) {\n return;\n }\n p1.links = [];\n const pos1 = p1.getPosition(), container = this.container, canvasSize = container.canvas.size;\n if (pos1.x < origin.x || pos1.y < origin.y || pos1.x > canvasSize.width || pos1.y > canvasSize.height) {\n return;\n }\n const linkOpt1 = p1.options.links, optOpacity = linkOpt1.opacity, optDistance = p1.retina.linksDistance ?? minDistance, warp = linkOpt1.warp;\n let range;\n if (warp) {\n range = new CircleWarp(pos1.x, pos1.y, optDistance, canvasSize);\n }\n else {\n range = new Circle(pos1.x, pos1.y, optDistance);\n }\n const query = container.particles.quadTree.query(range);\n for (const p2 of query) {\n const linkOpt2 = p2.options.links;\n if (p1 === p2 ||\n !linkOpt2?.enable ||\n linkOpt1.id !== linkOpt2.id ||\n p2.spawning ||\n p2.destroyed ||\n !p2.links ||\n p1.links.some((t) => t.destination === p2) ||\n p2.links.some((t) => t.destination === p1)) {\n continue;\n }\n const pos2 = p2.getPosition();\n if (pos2.x < origin.x || pos2.y < origin.y || pos2.x > canvasSize.width || pos2.y > canvasSize.height) {\n continue;\n }\n const distance = getLinkDistance(pos1, pos2, optDistance, canvasSize, warp && linkOpt2.warp);\n if (distance > optDistance) {\n continue;\n }\n const opacityLine = (opacityOffset - distance / optDistance) * optOpacity;\n this._setColor(p1);\n p1.links.push({\n destination: p2,\n opacity: opacityLine,\n });\n }\n }\n isEnabled(particle) {\n return !!particle.options.links?.enable;\n }\n loadParticlesOptions(options, ...sources) {\n if (!options.links) {\n options.links = new Links();\n }\n for (const source of sources) {\n options.links.load(source?.links);\n }\n }\n reset() {\n }\n}\n","export class LinksPlugin {\n constructor() {\n this.id = \"links\";\n }\n async getPlugin(container) {\n const { LinkInstance } = await import(\"./LinkInstance.js\");\n return new LinkInstance(container);\n }\n loadOptions() {\n }\n needsPlugin() {\n return true;\n }\n}\n","import { clamp, getDistance, getDistances, getRandom, getRangeValue, } from \"@tsparticles/engine\";\nconst half = 0.5, minVelocity = 0, identity = 1, moveSpeedFactor = 60, minSpinRadius = 0, spinFactor = 0.01;\nexport function applyDistance(particle) {\n const initialPosition = particle.initialPosition, { dx, dy } = getDistances(initialPosition, particle.position), dxFixed = Math.abs(dx), dyFixed = Math.abs(dy), { maxDistance } = particle.retina, hDistance = maxDistance.horizontal, vDistance = maxDistance.vertical;\n if (!hDistance && !vDistance) {\n return;\n }\n const hasHDistance = (hDistance && dxFixed >= hDistance) ?? false, hasVDistance = (vDistance && dyFixed >= vDistance) ?? false;\n if ((hasHDistance || hasVDistance) && !particle.misplaced) {\n particle.misplaced = (!!hDistance && dxFixed > hDistance) || (!!vDistance && dyFixed > vDistance);\n if (hDistance) {\n particle.velocity.x = particle.velocity.y * half - particle.velocity.x;\n }\n if (vDistance) {\n particle.velocity.y = particle.velocity.x * half - particle.velocity.y;\n }\n }\n else if ((!hDistance || dxFixed < hDistance) && (!vDistance || dyFixed < vDistance) && particle.misplaced) {\n particle.misplaced = false;\n }\n else if (particle.misplaced) {\n const pos = particle.position, vel = particle.velocity;\n if (hDistance &&\n ((pos.x < initialPosition.x && vel.x < minVelocity) || (pos.x > initialPosition.x && vel.x > minVelocity))) {\n vel.x *= -getRandom();\n }\n if (vDistance &&\n ((pos.y < initialPosition.y && vel.y < minVelocity) || (pos.y > initialPosition.y && vel.y > minVelocity))) {\n vel.y *= -getRandom();\n }\n }\n}\nexport function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {\n applyPath(particle, delta);\n const gravityOptions = particle.gravity, gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -identity : identity;\n if (moveDrift && moveSpeed) {\n particle.velocity.x += (moveDrift * delta.factor) / (moveSpeedFactor * moveSpeed);\n }\n if (gravityOptions?.enable && moveSpeed) {\n particle.velocity.y +=\n (gravityFactor * (gravityOptions.acceleration * delta.factor)) / (moveSpeedFactor * moveSpeed);\n }\n const decay = particle.moveDecay;\n particle.velocity.multTo(decay);\n const velocity = particle.velocity.mult(moveSpeed);\n if (gravityOptions?.enable &&\n maxSpeed > minVelocity &&\n ((!gravityOptions.inverse && velocity.y >= minVelocity && velocity.y >= maxSpeed) ||\n (gravityOptions.inverse && velocity.y <= minVelocity && velocity.y <= -maxSpeed))) {\n velocity.y = gravityFactor * maxSpeed;\n if (moveSpeed) {\n particle.velocity.y = velocity.y / moveSpeed;\n }\n }\n const zIndexOptions = particle.options.zIndex, zVelocityFactor = (identity - particle.zIndexFactor) ** zIndexOptions.velocityRate;\n velocity.multTo(zVelocityFactor);\n const { position } = particle;\n position.addTo(velocity);\n if (moveOptions.vibrate) {\n position.x += Math.sin(position.x * Math.cos(position.y));\n position.y += Math.cos(position.y * Math.sin(position.x));\n }\n}\nexport function spin(particle, moveSpeed) {\n const container = particle.container;\n if (!particle.spin) {\n return;\n }\n const updateFunc = {\n x: particle.spin.direction === \"clockwise\" ? Math.cos : Math.sin,\n y: particle.spin.direction === \"clockwise\" ? Math.sin : Math.cos,\n };\n particle.position.x = particle.spin.center.x + particle.spin.radius * updateFunc.x(particle.spin.angle);\n particle.position.y = particle.spin.center.y + particle.spin.radius * updateFunc.y(particle.spin.angle);\n particle.spin.radius += particle.spin.acceleration;\n const maxCanvasSize = Math.max(container.canvas.size.width, container.canvas.size.height), halfMaxSize = maxCanvasSize * half;\n if (particle.spin.radius > halfMaxSize) {\n particle.spin.radius = halfMaxSize;\n particle.spin.acceleration *= -identity;\n }\n else if (particle.spin.radius < minSpinRadius) {\n particle.spin.radius = minSpinRadius;\n particle.spin.acceleration *= -identity;\n }\n particle.spin.angle += moveSpeed * spinFactor * (identity - particle.spin.radius / maxCanvasSize);\n}\nexport function applyPath(particle, delta) {\n const particlesOptions = particle.options, pathOptions = particlesOptions.move.path, pathEnabled = pathOptions.enable;\n if (!pathEnabled) {\n return;\n }\n if (particle.lastPathTime <= particle.pathDelay) {\n particle.lastPathTime += delta.value;\n return;\n }\n const path = particle.pathGenerator?.generate(particle, delta);\n if (path) {\n particle.velocity.addTo(path);\n }\n if (pathOptions.clamp) {\n particle.velocity.x = clamp(particle.velocity.x, -identity, identity);\n particle.velocity.y = clamp(particle.velocity.y, -identity, identity);\n }\n particle.lastPathTime -= particle.pathDelay;\n}\nexport function getProximitySpeedFactor(particle) {\n return particle.slow.inRange ? particle.slow.factor : identity;\n}\nexport function initSpin(particle) {\n const container = particle.container, options = particle.options, spinOptions = options.move.spin;\n if (!spinOptions.enable) {\n return;\n }\n const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {\n x: spinPos.x * spinFactor * container.canvas.size.width,\n y: spinPos.y * spinFactor * container.canvas.size.height,\n }, pos = particle.getPosition(), distance = getDistance(pos, spinCenter), spinAcceleration = getRangeValue(spinOptions.acceleration);\n particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;\n const minVelocity = 0;\n particle.spin = {\n center: spinCenter,\n direction: particle.velocity.x >= minVelocity ? \"clockwise\" : \"counter-clockwise\",\n angle: particle.velocity.angle,\n radius: distance,\n acceleration: particle.retina.spinAcceleration,\n };\n}\n","import { getRangeMax, getRangeValue } from \"@tsparticles/engine\";\nimport { applyDistance, getProximitySpeedFactor, initSpin, move, spin } from \"./Utils.js\";\nconst diffFactor = 2, defaultSizeFactor = 1, defaultDeltaFactor = 1;\nexport class BaseMover {\n init(particle) {\n const options = particle.options, gravityOptions = options.move.gravity;\n particle.gravity = {\n enable: gravityOptions.enable,\n acceleration: getRangeValue(gravityOptions.acceleration),\n inverse: gravityOptions.inverse,\n };\n initSpin(particle);\n }\n isEnabled(particle) {\n return !particle.destroyed && particle.options.move.enable;\n }\n move(particle, delta) {\n const particleOptions = particle.options, moveOptions = particleOptions.move;\n if (!moveOptions.enable) {\n return;\n }\n const container = particle.container, pxRatio = container.retina.pixelRatio;\n particle.retina.moveSpeed ??= getRangeValue(moveOptions.speed) * pxRatio;\n particle.retina.moveDrift ??= getRangeValue(particle.options.move.drift) * pxRatio;\n const slowFactor = getProximitySpeedFactor(particle), baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor, moveDrift = particle.retina.moveDrift, maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor, deltaFactor = delta.factor || defaultDeltaFactor, moveSpeed = (baseSpeed * sizeFactor * slowFactor * deltaFactor) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;\n if (moveOptions.spin.enable) {\n spin(particle, moveSpeed);\n }\n else {\n move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta);\n }\n applyDistance(particle);\n }\n}\n","const double = 2, doublePI = Math.PI * double, minAngle = 0, origin = { x: 0, y: 0 };\nexport function drawCircle(data) {\n const { context, particle, radius } = data;\n if (!particle.circleRange) {\n particle.circleRange = { min: minAngle, max: doublePI };\n }\n const circleRange = particle.circleRange;\n context.arc(origin.x, origin.y, radius, circleRange.min, circleRange.max, false);\n}\n","import { degToRad, isObject } from \"@tsparticles/engine\";\nimport { drawCircle } from \"./Utils.js\";\nconst sides = 12, maxAngle = 360, minAngle = 0;\nexport class CircleDrawer {\n draw(data) {\n drawCircle(data);\n }\n getSidesCount() {\n return sides;\n }\n particleInit(container, particle) {\n const shapeData = particle.shapeData, angle = shapeData?.angle ?? {\n max: maxAngle,\n min: minAngle,\n };\n particle.circleRange = !isObject(angle)\n ? {\n min: minAngle,\n max: degToRad(angle),\n }\n : { min: degToRad(angle.min), max: degToRad(angle.max) };\n }\n}\n","import { getHslAnimationFromHsl, rangeColorToHsl, updateColor, } from \"@tsparticles/engine\";\nexport class ColorUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const hslColor = rangeColorToHsl(particle.options.color, particle.id, particle.options.reduceDuplicates);\n if (hslColor) {\n particle.color = getHslAnimationFromHsl(hslColor, particle.options.color.animation, this.container.retina.reduceFactor);\n }\n }\n isEnabled(particle) {\n const { h: hAnimation, s: sAnimation, l: lAnimation } = particle.options.color.animation, { color } = particle;\n return (!particle.destroyed &&\n !particle.spawning &&\n ((color?.h.value !== undefined && hAnimation.enable) ||\n (color?.s.value !== undefined && sAnimation.enable) ||\n (color?.l.value !== undefined && lAnimation.enable)));\n }\n update(particle, delta) {\n updateColor(particle.color, delta);\n }\n}\n","import { getRandom, getRangeValue, initParticleNumericAnimationValue, percentDenominator, updateAnimation, } from \"@tsparticles/engine\";\nexport class OpacityUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const opacityOptions = particle.options.opacity, pxRatio = 1;\n particle.opacity = initParticleNumericAnimationValue(opacityOptions, pxRatio);\n const opacityAnimation = opacityOptions.animation;\n if (opacityAnimation.enable) {\n particle.opacity.velocity =\n (getRangeValue(opacityAnimation.speed) / percentDenominator) * this.container.retina.reduceFactor;\n if (!opacityAnimation.sync) {\n particle.opacity.velocity *= getRandom();\n }\n }\n }\n isEnabled(particle) {\n const none = 0;\n return (!particle.destroyed &&\n !particle.spawning &&\n !!particle.opacity &&\n particle.opacity.enable &&\n ((particle.opacity.maxLoops ?? none) <= none ||\n ((particle.opacity.maxLoops ?? none) > none &&\n (particle.opacity.loops ?? none) < (particle.opacity.maxLoops ?? none))));\n }\n reset(particle) {\n if (particle.opacity) {\n particle.opacity.time = 0;\n particle.opacity.loops = 0;\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle) || !particle.opacity) {\n return;\n }\n updateAnimation(particle, particle.opacity, true, particle.options.opacity.animation.destroy, delta);\n }\n}\n","import { getRangeValue } from \"@tsparticles/engine\";\nconst minVelocity = 0, boundsMin = 0;\nexport function bounceHorizontal(data) {\n if ((data.outMode !== \"bounce\" && data.outMode !== \"split\") ||\n (data.direction !== \"left\" && data.direction !== \"right\")) {\n return;\n }\n if (data.bounds.right < boundsMin && data.direction === \"left\") {\n data.particle.position.x = data.size + data.offset.x;\n }\n else if (data.bounds.left > data.canvasSize.width && data.direction === \"right\") {\n data.particle.position.x = data.canvasSize.width - data.size - data.offset.x;\n }\n const velocity = data.particle.velocity.x;\n let bounced = false;\n if ((data.direction === \"right\" &&\n data.bounds.right >= data.canvasSize.width &&\n velocity > minVelocity) ||\n (data.direction === \"left\" && data.bounds.left <= boundsMin && velocity < minVelocity)) {\n const newVelocity = getRangeValue(data.particle.options.bounce.horizontal.value);\n data.particle.velocity.x *= -newVelocity;\n bounced = true;\n }\n if (!bounced) {\n return;\n }\n const minPos = data.offset.x + data.size;\n if (data.bounds.right >= data.canvasSize.width && data.direction === \"right\") {\n data.particle.position.x = data.canvasSize.width - minPos;\n }\n else if (data.bounds.left <= boundsMin && data.direction === \"left\") {\n data.particle.position.x = minPos;\n }\n if (data.outMode === \"split\") {\n data.particle.destroy();\n }\n}\nexport function bounceVertical(data) {\n if ((data.outMode !== \"bounce\" && data.outMode !== \"split\") ||\n (data.direction !== \"bottom\" && data.direction !== \"top\")) {\n return;\n }\n if (data.bounds.bottom < boundsMin && data.direction === \"top\") {\n data.particle.position.y = data.size + data.offset.y;\n }\n else if (data.bounds.top > data.canvasSize.height && data.direction === \"bottom\") {\n data.particle.position.y = data.canvasSize.height - data.size - data.offset.y;\n }\n const velocity = data.particle.velocity.y;\n let bounced = false;\n if ((data.direction === \"bottom\" &&\n data.bounds.bottom >= data.canvasSize.height &&\n velocity > minVelocity) ||\n (data.direction === \"top\" && data.bounds.top <= boundsMin && velocity < minVelocity)) {\n const newVelocity = getRangeValue(data.particle.options.bounce.vertical.value);\n data.particle.velocity.y *= -newVelocity;\n bounced = true;\n }\n if (!bounced) {\n return;\n }\n const minPos = data.offset.y + data.size;\n if (data.bounds.bottom >= data.canvasSize.height && data.direction === \"bottom\") {\n data.particle.position.y = data.canvasSize.height - minPos;\n }\n else if (data.bounds.top <= boundsMin && data.direction === \"top\") {\n data.particle.position.y = minPos;\n }\n if (data.outMode === \"split\") {\n data.particle.destroy();\n }\n}\n","import { calculateBounds, } from \"@tsparticles/engine\";\nimport { bounceHorizontal, bounceVertical } from \"./Utils.js\";\nexport class BounceOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\n \"bounce\",\n \"split\",\n ];\n }\n update(particle, direction, delta, outMode) {\n if (!this.modes.includes(outMode)) {\n return;\n }\n const container = this.container;\n let handled = false;\n for (const [, plugin] of container.plugins) {\n if (plugin.particleBounce !== undefined) {\n handled = plugin.particleBounce(particle, delta, direction);\n }\n if (handled) {\n break;\n }\n }\n if (handled) {\n return;\n }\n const pos = particle.getPosition(), offset = particle.offset, size = particle.getRadius(), bounds = calculateBounds(pos, size), canvasSize = container.canvas.size;\n bounceHorizontal({ particle, outMode, direction, bounds, canvasSize, offset, size });\n bounceVertical({ particle, outMode, direction, bounds, canvasSize, offset, size });\n }\n}\n","import { Vector, getDistances, isPointInside, } from \"@tsparticles/engine\";\nconst minVelocity = 0;\nexport class DestroyOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\"destroy\"];\n }\n update(particle, direction, _delta, outMode) {\n if (!this.modes.includes(outMode)) {\n return;\n }\n const container = this.container;\n switch (particle.outType) {\n case \"normal\":\n case \"outside\":\n if (isPointInside(particle.position, container.canvas.size, Vector.origin, particle.getRadius(), direction)) {\n return;\n }\n break;\n case \"inside\": {\n const { dx, dy } = getDistances(particle.position, particle.moveCenter), { x: vx, y: vy } = particle.velocity;\n if ((vx < minVelocity && dx > particle.moveCenter.radius) ||\n (vy < minVelocity && dy > particle.moveCenter.radius) ||\n (vx >= minVelocity && dx < -particle.moveCenter.radius) ||\n (vy >= minVelocity && dy < -particle.moveCenter.radius)) {\n return;\n }\n break;\n }\n }\n container.particles.remove(particle, undefined, true);\n }\n}\n","import { Vector, isPointInside, } from \"@tsparticles/engine\";\nconst minVelocity = 0;\nexport class NoneOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\"none\"];\n }\n update(particle, direction, delta, outMode) {\n if (!this.modes.includes(outMode)) {\n return;\n }\n if ((particle.options.move.distance.horizontal &&\n (direction === \"left\" || direction === \"right\")) ??\n (particle.options.move.distance.vertical &&\n (direction === \"top\" || direction === \"bottom\"))) {\n return;\n }\n const gravityOptions = particle.options.move.gravity, container = this.container, canvasSize = container.canvas.size, pRadius = particle.getRadius();\n if (!gravityOptions.enable) {\n if ((particle.velocity.y > minVelocity && particle.position.y <= canvasSize.height + pRadius) ||\n (particle.velocity.y < minVelocity && particle.position.y >= -pRadius) ||\n (particle.velocity.x > minVelocity && particle.position.x <= canvasSize.width + pRadius) ||\n (particle.velocity.x < minVelocity && particle.position.x >= -pRadius)) {\n return;\n }\n if (!isPointInside(particle.position, container.canvas.size, Vector.origin, pRadius, direction)) {\n container.particles.remove(particle);\n }\n }\n else {\n const position = particle.position;\n if ((!gravityOptions.inverse &&\n position.y > canvasSize.height + pRadius &&\n direction === \"bottom\") ||\n (gravityOptions.inverse && position.y < -pRadius && direction === \"top\")) {\n container.particles.remove(particle);\n }\n }\n }\n}\n","import { Vector, calculateBounds, getDistances, getRandom, isPointInside, randomInRange, } from \"@tsparticles/engine\";\nconst minVelocity = 0, minDistance = 0;\nexport class OutOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\"out\"];\n }\n update(particle, direction, delta, outMode) {\n if (!this.modes.includes(outMode)) {\n return;\n }\n const container = this.container;\n switch (particle.outType) {\n case \"inside\": {\n const { x: vx, y: vy } = particle.velocity;\n const circVec = Vector.origin;\n circVec.length = particle.moveCenter.radius;\n circVec.angle = particle.velocity.angle + Math.PI;\n circVec.addTo(Vector.create(particle.moveCenter));\n const { dx, dy } = getDistances(particle.position, circVec);\n if ((vx <= minVelocity && dx >= minDistance) ||\n (vy <= minVelocity && dy >= minDistance) ||\n (vx >= minVelocity && dx <= minDistance) ||\n (vy >= minVelocity && dy <= minDistance)) {\n return;\n }\n particle.position.x = Math.floor(randomInRange({\n min: 0,\n max: container.canvas.size.width,\n }));\n particle.position.y = Math.floor(randomInRange({\n min: 0,\n max: container.canvas.size.height,\n }));\n const { dx: newDx, dy: newDy } = getDistances(particle.position, particle.moveCenter);\n particle.direction = Math.atan2(-newDy, -newDx);\n particle.velocity.angle = particle.direction;\n break;\n }\n default: {\n if (isPointInside(particle.position, container.canvas.size, Vector.origin, particle.getRadius(), direction)) {\n return;\n }\n switch (particle.outType) {\n case \"outside\": {\n particle.position.x =\n Math.floor(randomInRange({\n min: -particle.moveCenter.radius,\n max: particle.moveCenter.radius,\n })) + particle.moveCenter.x;\n particle.position.y =\n Math.floor(randomInRange({\n min: -particle.moveCenter.radius,\n max: particle.moveCenter.radius,\n })) + particle.moveCenter.y;\n const { dx, dy } = getDistances(particle.position, particle.moveCenter);\n if (particle.moveCenter.radius) {\n particle.direction = Math.atan2(dy, dx);\n particle.velocity.angle = particle.direction;\n }\n break;\n }\n case \"normal\": {\n const warp = particle.options.move.warp, canvasSize = container.canvas.size, newPos = {\n bottom: canvasSize.height + particle.getRadius() + particle.offset.y,\n left: -particle.getRadius() - particle.offset.x,\n right: canvasSize.width + particle.getRadius() + particle.offset.x,\n top: -particle.getRadius() - particle.offset.y,\n }, sizeValue = particle.getRadius(), nextBounds = calculateBounds(particle.position, sizeValue);\n if (direction === \"right\" &&\n nextBounds.left > canvasSize.width + particle.offset.x) {\n particle.position.x = newPos.left;\n particle.initialPosition.x = particle.position.x;\n if (!warp) {\n particle.position.y = getRandom() * canvasSize.height;\n particle.initialPosition.y = particle.position.y;\n }\n }\n else if (direction === \"left\" && nextBounds.right < -particle.offset.x) {\n particle.position.x = newPos.right;\n particle.initialPosition.x = particle.position.x;\n if (!warp) {\n particle.position.y = getRandom() * canvasSize.height;\n particle.initialPosition.y = particle.position.y;\n }\n }\n if (direction === \"bottom\" &&\n nextBounds.top > canvasSize.height + particle.offset.y) {\n if (!warp) {\n particle.position.x = getRandom() * canvasSize.width;\n particle.initialPosition.x = particle.position.x;\n }\n particle.position.y = newPos.top;\n particle.initialPosition.y = particle.position.y;\n }\n else if (direction === \"top\" && nextBounds.bottom < -particle.offset.y) {\n if (!warp) {\n particle.position.x = getRandom() * canvasSize.width;\n particle.initialPosition.x = particle.position.x;\n }\n particle.position.y = newPos.bottom;\n particle.initialPosition.y = particle.position.y;\n }\n break;\n }\n }\n break;\n }\n }\n }\n}\n","import { BounceOutMode } from \"./BounceOutMode.js\";\nimport { DestroyOutMode } from \"./DestroyOutMode.js\";\nimport { NoneOutMode } from \"./NoneOutMode.js\";\nimport { OutOutMode } from \"./OutOutMode.js\";\nconst checkOutMode = (outModes, outMode) => {\n return (outModes.default === outMode ||\n outModes.bottom === outMode ||\n outModes.left === outMode ||\n outModes.right === outMode ||\n outModes.top === outMode);\n};\nexport class OutOfCanvasUpdater {\n constructor(container) {\n this._updateOutMode = (particle, delta, outMode, direction) => {\n for (const updater of this.updaters) {\n updater.update(particle, direction, delta, outMode);\n }\n };\n this.container = container;\n this.updaters = [];\n }\n init(particle) {\n this.updaters = [];\n const outModes = particle.options.move.outModes;\n if (checkOutMode(outModes, \"bounce\")) {\n this.updaters.push(new BounceOutMode(this.container));\n }\n else if (checkOutMode(outModes, \"out\")) {\n this.updaters.push(new OutOutMode(this.container));\n }\n else if (checkOutMode(outModes, \"destroy\")) {\n this.updaters.push(new DestroyOutMode(this.container));\n }\n else if (checkOutMode(outModes, \"none\")) {\n this.updaters.push(new NoneOutMode(this.container));\n }\n }\n isEnabled(particle) {\n return !particle.destroyed && !particle.spawning;\n }\n update(particle, delta) {\n const outModes = particle.options.move.outModes;\n this._updateOutMode(particle, delta, outModes.bottom ?? outModes.default, \"bottom\");\n this._updateOutMode(particle, delta, outModes.left ?? outModes.default, \"left\");\n this._updateOutMode(particle, delta, outModes.right ?? outModes.default, \"right\");\n this._updateOutMode(particle, delta, outModes.top ?? outModes.default, \"top\");\n }\n}\n","import { getRandom, percentDenominator, updateAnimation, } from \"@tsparticles/engine\";\nconst minLoops = 0;\nexport class SizeUpdater {\n init(particle) {\n const container = particle.container, sizeOptions = particle.options.size, sizeAnimation = sizeOptions.animation;\n if (sizeAnimation.enable) {\n particle.size.velocity =\n ((particle.retina.sizeAnimationSpeed ?? container.retina.sizeAnimationSpeed) / percentDenominator) *\n container.retina.reduceFactor;\n if (!sizeAnimation.sync) {\n particle.size.velocity *= getRandom();\n }\n }\n }\n isEnabled(particle) {\n return (!particle.destroyed &&\n !particle.spawning &&\n particle.size.enable &&\n ((particle.size.maxLoops ?? minLoops) <= minLoops ||\n ((particle.size.maxLoops ?? minLoops) > minLoops &&\n (particle.size.loops ?? minLoops) < (particle.size.maxLoops ?? minLoops))));\n }\n reset(particle) {\n particle.size.loops = minLoops;\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateAnimation(particle, particle.size, true, particle.options.size.animation.destroy, delta);\n }\n}\n","import { drawLine, getDistance, getDistances, getRandom, getStyleFromRgb, rangeColorToRgb, } from \"@tsparticles/engine\";\nexport function drawTriangle(context, p1, p2, p3) {\n context.beginPath();\n context.moveTo(p1.x, p1.y);\n context.lineTo(p2.x, p2.y);\n context.lineTo(p3.x, p3.y);\n context.closePath();\n}\nexport function drawLinkLine(params) {\n let drawn = false;\n const { begin, end, maxDistance, context, canvasSize, width, backgroundMask, colorLine, opacity, links } = params;\n if (getDistance(begin, end) <= maxDistance) {\n drawLine(context, begin, end);\n drawn = true;\n }\n else if (links.warp) {\n let pi1;\n let pi2;\n const endNE = {\n x: end.x - canvasSize.width,\n y: end.y,\n };\n const d1 = getDistances(begin, endNE);\n if (d1.distance <= maxDistance) {\n const yi = begin.y - (d1.dy / d1.dx) * begin.x;\n pi1 = { x: 0, y: yi };\n pi2 = { x: canvasSize.width, y: yi };\n }\n else {\n const endSW = {\n x: end.x,\n y: end.y - canvasSize.height,\n };\n const d2 = getDistances(begin, endSW);\n if (d2.distance <= maxDistance) {\n const yi = begin.y - (d2.dy / d2.dx) * begin.x;\n const xi = -yi / (d2.dy / d2.dx);\n pi1 = { x: xi, y: 0 };\n pi2 = { x: xi, y: canvasSize.height };\n }\n else {\n const endSE = {\n x: end.x - canvasSize.width,\n y: end.y - canvasSize.height,\n };\n const d3 = getDistances(begin, endSE);\n if (d3.distance <= maxDistance) {\n const yi = begin.y - (d3.dy / d3.dx) * begin.x;\n const xi = -yi / (d3.dy / d3.dx);\n pi1 = { x: xi, y: yi };\n pi2 = { x: pi1.x + canvasSize.width, y: pi1.y + canvasSize.height };\n }\n }\n }\n if (pi1 && pi2) {\n drawLine(context, begin, pi1);\n drawLine(context, end, pi2);\n drawn = true;\n }\n }\n if (!drawn) {\n return;\n }\n context.lineWidth = width;\n if (backgroundMask.enable) {\n context.globalCompositeOperation = backgroundMask.composite;\n }\n context.strokeStyle = getStyleFromRgb(colorLine, opacity);\n const { shadow } = links;\n if (shadow.enable) {\n const shadowColor = rangeColorToRgb(shadow.color);\n if (shadowColor) {\n context.shadowBlur = shadow.blur;\n context.shadowColor = getStyleFromRgb(shadowColor);\n }\n }\n context.stroke();\n}\nexport function drawLinkTriangle(params) {\n const { context, pos1, pos2, pos3, backgroundMask, colorTriangle, opacityTriangle } = params;\n drawTriangle(context, pos1, pos2, pos3);\n if (backgroundMask.enable) {\n context.globalCompositeOperation = backgroundMask.composite;\n }\n context.fillStyle = getStyleFromRgb(colorTriangle, opacityTriangle);\n context.fill();\n}\nexport function getLinkKey(ids) {\n ids.sort((a, b) => a - b);\n return ids.join(\"_\");\n}\nexport function setLinkFrequency(particles, dictionary) {\n const key = getLinkKey(particles.map((t) => t.id));\n let res = dictionary.get(key);\n if (res === undefined) {\n res = getRandom();\n dictionary.set(key, res);\n }\n return res;\n}\n","import { getDistance, getLinkColor, getRandom, getRangeValue, rangeColorToRgb, } from \"@tsparticles/engine\";\nimport { drawLinkLine, drawLinkTriangle, setLinkFrequency } from \"./Utils.js\";\nconst minOpacity = 0, minWidth = 0, minDistance = 0, half = 0.5, maxFrequency = 1;\nexport class LinkInstance {\n constructor(container) {\n this.container = container;\n this._drawLinkLine = (p1, link) => {\n const p1LinksOptions = p1.options.links;\n if (!p1LinksOptions?.enable) {\n return;\n }\n const container = this.container, options = container.actualOptions, p2 = link.destination, pos1 = p1.getPosition(), pos2 = p2.getPosition();\n let opacity = link.opacity;\n container.canvas.draw((ctx) => {\n let colorLine;\n const twinkle = p1.options.twinkle?.lines;\n if (twinkle?.enable) {\n const twinkleFreq = twinkle.frequency, twinkleRgb = rangeColorToRgb(twinkle.color), twinkling = getRandom() < twinkleFreq;\n if (twinkling && twinkleRgb) {\n colorLine = twinkleRgb;\n opacity = getRangeValue(twinkle.opacity);\n }\n }\n if (!colorLine) {\n const linkColor = p1LinksOptions.id !== undefined\n ? container.particles.linksColors.get(p1LinksOptions.id)\n : container.particles.linksColor;\n colorLine = getLinkColor(p1, p2, linkColor);\n }\n if (!colorLine) {\n return;\n }\n const width = p1.retina.linksWidth ?? minWidth, maxDistance = p1.retina.linksDistance ?? minDistance, { backgroundMask } = options;\n drawLinkLine({\n context: ctx,\n width,\n begin: pos1,\n end: pos2,\n maxDistance,\n canvasSize: container.canvas.size,\n links: p1LinksOptions,\n backgroundMask: backgroundMask,\n colorLine,\n opacity,\n });\n });\n };\n this._drawLinkTriangle = (p1, link1, link2) => {\n const linksOptions = p1.options.links;\n if (!linksOptions?.enable) {\n return;\n }\n const triangleOptions = linksOptions.triangles;\n if (!triangleOptions.enable) {\n return;\n }\n const container = this.container, options = container.actualOptions, p2 = link1.destination, p3 = link2.destination, opacityTriangle = triangleOptions.opacity ?? (link1.opacity + link2.opacity) * half;\n if (opacityTriangle <= minOpacity) {\n return;\n }\n container.canvas.draw((ctx) => {\n const pos1 = p1.getPosition(), pos2 = p2.getPosition(), pos3 = p3.getPosition(), linksDistance = p1.retina.linksDistance ?? minDistance;\n if (getDistance(pos1, pos2) > linksDistance ||\n getDistance(pos3, pos2) > linksDistance ||\n getDistance(pos3, pos1) > linksDistance) {\n return;\n }\n let colorTriangle = rangeColorToRgb(triangleOptions.color);\n if (!colorTriangle) {\n const linkColor = linksOptions.id !== undefined\n ? container.particles.linksColors.get(linksOptions.id)\n : container.particles.linksColor;\n colorTriangle = getLinkColor(p1, p2, linkColor);\n }\n if (!colorTriangle) {\n return;\n }\n drawLinkTriangle({\n context: ctx,\n pos1,\n pos2,\n pos3,\n backgroundMask: options.backgroundMask,\n colorTriangle,\n opacityTriangle,\n });\n });\n };\n this._drawTriangles = (options, p1, link, p1Links) => {\n const p2 = link.destination;\n if (!(options.links?.triangles.enable && p2.options.links?.triangles.enable)) {\n return;\n }\n const vertices = p2.links?.filter((t) => {\n const linkFreq = this._getLinkFrequency(p2, t.destination), minCount = 0;\n return (p2.options.links &&\n linkFreq <= p2.options.links.frequency &&\n p1Links.findIndex((l) => l.destination === t.destination) >= minCount);\n });\n if (!vertices?.length) {\n return;\n }\n for (const vertex of vertices) {\n const p3 = vertex.destination, triangleFreq = this._getTriangleFrequency(p1, p2, p3);\n if (triangleFreq > options.links.triangles.frequency) {\n continue;\n }\n this._drawLinkTriangle(p1, link, vertex);\n }\n };\n this._getLinkFrequency = (p1, p2) => {\n return setLinkFrequency([p1, p2], this._freqs.links);\n };\n this._getTriangleFrequency = (p1, p2, p3) => {\n return setLinkFrequency([p1, p2, p3], this._freqs.triangles);\n };\n this._freqs = {\n links: new Map(),\n triangles: new Map(),\n };\n }\n drawParticle(context, particle) {\n const { links, options } = particle;\n if (!links?.length) {\n return;\n }\n const p1Links = links.filter((l) => options.links &&\n (options.links.frequency >= maxFrequency ||\n this._getLinkFrequency(particle, l.destination) <= options.links.frequency));\n for (const link of p1Links) {\n this._drawTriangles(options, particle, link, p1Links);\n if (link.opacity > minOpacity && (particle.retina.linksWidth ?? minWidth) > minWidth) {\n this._drawLinkLine(particle, link);\n }\n }\n }\n async init() {\n this._freqs.links = new Map();\n this._freqs.triangles = new Map();\n await Promise.resolve();\n }\n particleCreated(particle) {\n particle.links = [];\n if (!particle.options.links) {\n return;\n }\n const ratio = this.container.retina.pixelRatio, { retina } = particle, { distance, width } = particle.options.links;\n retina.linksDistance = distance * ratio;\n retina.linksWidth = width * ratio;\n }\n particleDestroyed(particle) {\n particle.links = [];\n }\n}\n"],"file":"assets/tsparticles-c231ab8e.js"}