{"version":3,"file":"a139f6a5f038b3758d831a61765abc76ad48b8fc-3a9c0cef6a9b5181f017.js","mappings":"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","sources":["webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/ColorAnimation.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/HslAnimation.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/AnimatableColor.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Utils/CanvasUtils.js","webpack://evolvan/./node_modules/react-tsparticles/esm/Utils.js","webpack://evolvan/./node_modules/react-tsparticles/esm/Particles.js","webpack://evolvan/./node_modules/react-tsparticles/esm/index.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/Vector3d.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Random.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/ValueWithRandom.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/Rectangle.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Collisions/CollisionsAbsorb.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Collisions/CollisionsOverlap.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Bounce/ParticlesBounce.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Collisions/Collisions.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/MoveAngle.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/MoveAttract.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/MoveCenter.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/MoveGravity.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/Path/MovePath.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/MoveTrailFill.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/MoveTrail.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/OutModes.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/Spin.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Move/Move.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Opacity/OpacityAnimation.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Opacity/Opacity.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Number/ParticlesDensity.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Number/ParticlesNumber.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Shadow.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Shape/Shape.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Size/SizeAnimation.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Size/Size.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/Stroke.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/ZIndex/ZIndex.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Particles/ParticlesOptions.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Utils/OptionsUtils.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Utils/Utils.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Utils/ColorUtils.js","webpack://evolvan/./node_modules/tsparticles-plugin-absorbers/esm/Options/Classes/AbsorberSizeLimit.js","webpack://evolvan/./node_modules/tsparticles-plugin-absorbers/esm/Options/Classes/AbsorberSize.js","webpack://evolvan/./node_modules/tsparticles-plugin-absorbers/esm/Options/Classes/Absorber.js","webpack://evolvan/./node_modules/tsparticles-plugin-absorbers/esm/AbsorberInstance.js","webpack://evolvan/./node_modules/tsparticles-plugin-absorbers/esm/Absorbers.js","webpack://evolvan/./node_modules/tsparticles-plugin-absorbers/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-destroy/esm/Options/Classes/DestroyBounds.js","webpack://evolvan/./node_modules/tsparticles-updater-destroy/esm/Options/Classes/SplitFactor.js","webpack://evolvan/./node_modules/tsparticles-updater-destroy/esm/Options/Classes/SplitRate.js","webpack://evolvan/./node_modules/tsparticles-updater-destroy/esm/Options/Classes/Split.js","webpack://evolvan/./node_modules/tsparticles-updater-destroy/esm/Options/Classes/Destroy.js","webpack://evolvan/./node_modules/tsparticles-updater-destroy/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-updater-destroy/esm/DestroyUpdater.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/Shapes/Circle/CircleShape.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/Options/Classes/EmitterLife.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/Options/Classes/EmitterRate.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/Options/Classes/EmitterSize.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/Options/Classes/Emitter.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/EmitterInstance.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/Emitters.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/ShapeManager.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/Shapes/Square/SquareShape.js","webpack://evolvan/./node_modules/tsparticles-plugin-emitters/esm/index.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/ExternalInteractorBase.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-trail/esm/Options/Classes/Trail.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-trail/esm/TrailMaker.js","webpack://evolvan/./node_modules/tsparticles-updater-roll/esm/Options/Classes/RollLight.js","webpack://evolvan/./node_modules/tsparticles-updater-roll/esm/Options/Classes/Roll.js","webpack://evolvan/./node_modules/tsparticles-updater-roll/esm/RollUpdater.js","webpack://evolvan/./node_modules/tsparticles-updater-roll/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-particles.js/esm/marcbruederlin/Particles.js","webpack://evolvan/./node_modules/tsparticles-particles.js/esm/VincentGarreau/particles.js","webpack://evolvan/./node_modules/tsparticles-particles.js/esm/index.js","webpack://evolvan/./node_modules/tsparticles-move-base/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-move-base/esm/BaseMover.js","webpack://evolvan/./node_modules/tsparticles-shape-circle/esm/CircleDrawer.js","webpack://evolvan/./node_modules/tsparticles-updater-color/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-updater-color/esm/ColorUpdater.js","webpack://evolvan/./node_modules/tsparticles-updater-opacity/esm/OpacityUpdater.js","webpack://evolvan/./node_modules/tsparticles-updater-opacity/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-updater-out-modes/esm/BounceOutMode.js","webpack://evolvan/./node_modules/tsparticles-updater-out-modes/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-updater-out-modes/esm/DestroyOutMode.js","webpack://evolvan/./node_modules/tsparticles-updater-out-modes/esm/NoneOutMode.js","webpack://evolvan/./node_modules/tsparticles-updater-out-modes/esm/OutOutMode.js","webpack://evolvan/./node_modules/tsparticles-updater-out-modes/esm/OutOfCanvasUpdater.js","webpack://evolvan/./node_modules/tsparticles-updater-size/esm/SizeUpdater.js","webpack://evolvan/./node_modules/tsparticles-updater-size/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-basic/esm/index.js","webpack://evolvan/./node_modules/tsparticles-move-base/esm/index.js","webpack://evolvan/./node_modules/tsparticles-shape-circle/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-color/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-opacity/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-out-modes/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-size/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-attract/esm/Options/Classes/Attract.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-attract/esm/Attractor.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bounce/esm/Options/Classes/Bounce.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bounce/esm/Bouncer.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bubble/esm/Options/Classes/BubbleBase.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bubble/esm/Options/Classes/BubbleDiv.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bubble/esm/Options/Classes/Bubble.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bubble/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bubble/esm/Bubbler.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-connect/esm/Options/Classes/ConnectLinks.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-connect/esm/Options/Classes/Connect.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-connect/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-connect/esm/Connector.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-grab/esm/Options/Classes/GrabLinks.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-grab/esm/Options/Classes/Grab.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-grab/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-grab/esm/Grabber.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-pause/esm/Pauser.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-push/esm/Options/Classes/Push.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-push/esm/Pusher.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-remove/esm/Options/Classes/Remove.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-remove/esm/Remover.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-repulse/esm/Options/Classes/RepulseBase.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-repulse/esm/Options/Classes/RepulseDiv.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-repulse/esm/Options/Classes/Repulse.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-repulse/esm/Repulser.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-slow/esm/Options/Classes/Slow.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-slow/esm/Slower.js","webpack://evolvan/./node_modules/tsparticles-shape-image/esm/GifUtils/Constants.js","webpack://evolvan/./node_modules/tsparticles-shape-image/esm/GifUtils/ByteStream.js","webpack://evolvan/./node_modules/tsparticles-shape-image/esm/GifUtils/Utils.js","webpack://evolvan/./node_modules/tsparticles-shape-image/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-shape-image/esm/ImageDrawer.js","webpack://evolvan/./node_modules/tsparticles-shape-image/esm/Options/Classes/Preload.js","webpack://evolvan/./node_modules/tsparticles-shape-image/esm/ImagePreloader.js","webpack://evolvan/./node_modules/tsparticles-shape-image/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-life/esm/Options/Classes/LifeDelay.js","webpack://evolvan/./node_modules/tsparticles-updater-life/esm/Options/Classes/LifeDuration.js","webpack://evolvan/./node_modules/tsparticles-updater-life/esm/Options/Classes/Life.js","webpack://evolvan/./node_modules/tsparticles-updater-life/esm/LifeUpdater.js","webpack://evolvan/./node_modules/tsparticles-shape-line/esm/LineDrawer.js","webpack://evolvan/./node_modules/tsparticles-move-parallax/esm/ParallaxMover.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/ParticlesInteractorBase.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-attract/esm/Attractor.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-collisions/esm/Absorb.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-collisions/esm/Bounce.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-collisions/esm/ResolveCollision.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-collisions/esm/Destroy.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-collisions/esm/Collider.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/CircleWarp.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/Options/Classes/LinksShadow.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/Options/Classes/LinksTriangle.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/Options/Classes/Links.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/Linker.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/LinkInstance.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/plugin.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-links/esm/interaction.js","webpack://evolvan/./node_modules/tsparticles-shape-polygon/esm/PolygonDrawerBase.js","webpack://evolvan/./node_modules/tsparticles-shape-polygon/esm/PolygonDrawer.js","webpack://evolvan/./node_modules/tsparticles-shape-polygon/esm/TriangleDrawer.js","webpack://evolvan/./node_modules/tsparticles-shape-polygon/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-rotate/esm/Options/Classes/RotateAnimation.js","webpack://evolvan/./node_modules/tsparticles-updater-rotate/esm/Options/Classes/Rotate.js","webpack://evolvan/./node_modules/tsparticles-updater-rotate/esm/RotateUpdater.js","webpack://evolvan/./node_modules/tsparticles-shape-square/esm/SquareDrawer.js","webpack://evolvan/./node_modules/tsparticles-shape-star/esm/StarDrawer.js","webpack://evolvan/./node_modules/tsparticles-updater-stroke-color/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-updater-stroke-color/esm/StrokeColorUpdater.js","webpack://evolvan/./node_modules/tsparticles-shape-text/esm/TextDrawer.js","webpack://evolvan/./node_modules/tsparticles-slim/esm/index.js","webpack://evolvan/./node_modules/tsparticles-move-parallax/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-attract/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bounce/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-bubble/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-connect/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-grab/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-pause/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-push/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-remove/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-repulse/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-slow/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-attract/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-particles-collisions/esm/index.js","webpack://evolvan/./node_modules/tsparticles-plugin-easing-quad/esm/index.js","webpack://evolvan/./node_modules/tsparticles-shape-line/esm/index.js","webpack://evolvan/./node_modules/tsparticles-shape-square/esm/index.js","webpack://evolvan/./node_modules/tsparticles-shape-star/esm/index.js","webpack://evolvan/./node_modules/tsparticles-shape-text/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-life/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-rotate/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-stroke-color/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-tilt/esm/Options/Classes/TiltAnimation.js","webpack://evolvan/./node_modules/tsparticles-updater-tilt/esm/Options/Classes/Tilt.js","webpack://evolvan/./node_modules/tsparticles-updater-tilt/esm/TiltUpdater.js","webpack://evolvan/./node_modules/tsparticles-updater-tilt/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles-updater-twinkle/esm/Options/Classes/TwinkleValues.js","webpack://evolvan/./node_modules/tsparticles-updater-twinkle/esm/Options/Classes/Twinkle.js","webpack://evolvan/./node_modules/tsparticles-updater-twinkle/esm/TwinkleUpdater.js","webpack://evolvan/./node_modules/tsparticles-updater-wobble/esm/Options/Classes/WobbleSpeed.js","webpack://evolvan/./node_modules/tsparticles-updater-wobble/esm/Options/Classes/Wobble.js","webpack://evolvan/./node_modules/tsparticles-updater-wobble/esm/WobbleUpdater.js","webpack://evolvan/./node_modules/tsparticles-updater-wobble/esm/Utils.js","webpack://evolvan/./node_modules/tsparticles/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-destroy/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-roll/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-tilt/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-twinkle/esm/index.js","webpack://evolvan/./node_modules/tsparticles-updater-wobble/esm/index.js","webpack://evolvan/./node_modules/tsparticles-interaction-external-trail/esm/index.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Utils/NumberUtils.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/AnimationOptions.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/Circle.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/Constants.js","webpack://evolvan/./src/config/particle-config.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/OptionsColor.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Canvas.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/EventListeners.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Background/Background.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/BackgroundMask/BackgroundMaskCover.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/BackgroundMask/BackgroundMask.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/FullScreen/FullScreen.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Interactivity/Events/ClickEvent.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Interactivity/Events/DivEvent.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Interactivity/Events/Parallax.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Interactivity/Events/HoverEvent.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Interactivity/Events/ResizeEvent.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Interactivity/Events/Events.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Interactivity/Modes/Modes.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Interactivity/Interactivity.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/ManualParticle.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Responsive.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Theme/ThemeDefault.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Theme/Theme.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Options/Classes/Options.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/InteractionManager.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Particle.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/Point.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/QuadTree.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Particles.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Retina.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Container.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Utils/EventDispatcher.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/Plugins.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Engine.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Utils/HslColorManager.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Utils/RgbColorManager.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/index.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/init.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/Vector.js","webpack://evolvan/./node_modules/tsparticles-engine/esm/Core/Utils/Range.js"],"sourcesContent":["import { setRangeValue } from \"../../Utils/NumberUtils\";\nexport class ColorAnimation {\n    constructor() {\n        this.count = 0;\n        this.enable = false;\n        this.offset = 0;\n        this.speed = 1;\n        this.delay = 0;\n        this.decay = 0;\n        this.sync = true;\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.offset !== undefined) {\n            this.offset = setRangeValue(data.offset);\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}\n","import { ColorAnimation } from \"./ColorAnimation\";\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/Utils\";\nimport { HslAnimation } from \"./HslAnimation\";\nimport { OptionsColor } from \"./OptionsColor\";\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 { getStyleFromRgb } from \"./ColorUtils\";\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 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 paintBase(context, dimension, baseColor) {\n    context.fillStyle = baseColor ?? \"rgba(0,0,0,0)\";\n    context.fillRect(0, 0, 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, 0, 0, dimension.width, dimension.height);\n    context.globalAlpha = 1;\n}\nexport function clear(context, dimension) {\n    context.clearRect(0, 0, dimension.width, dimension.height);\n}\nexport function drawParticle(data) {\n    const { container, context, particle, delta, colorStyles, backgroundMask, composite, radius, opacity, shadow, transform, } = data;\n    const pos = particle.getPosition(), angle = particle.rotation + (particle.pathRotation ? particle.velocity.angle : 0), rotateData = {\n        sin: Math.sin(angle),\n        cos: Math.cos(angle),\n    }, transformData = {\n        a: rotateData.cos * (transform.a ?? 1),\n        b: rotateData.sin * (transform.b ?? 1),\n        c: -rotateData.sin * (transform.c ?? 1),\n        d: rotateData.cos * (transform.d ?? 1),\n    };\n    context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);\n    context.beginPath();\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 strokeWidth = particle.strokeWidth ?? 0;\n    context.lineWidth = strokeWidth;\n    if (colorStyles.stroke) {\n        context.strokeStyle = colorStyles.stroke;\n    }\n    drawShape(container, context, particle, radius, opacity, delta);\n    if (strokeWidth > 0) {\n        context.stroke();\n    }\n    if (particle.close) {\n        context.closePath();\n    }\n    if (particle.fill) {\n        context.fill();\n    }\n    drawShapeAfterEffect(container, context, particle, radius, opacity, delta);\n    context.globalCompositeOperation = \"source-over\";\n    context.setTransform(1, 0, 0, 1, 0, 0);\n}\nexport function drawShape(container, context, particle, radius, opacity, delta) {\n    if (!particle.shape) {\n        return;\n    }\n    const drawer = container.drawers.get(particle.shape);\n    if (!drawer) {\n        return;\n    }\n    drawer.draw(context, particle, radius, opacity, delta, container.retina.pixelRatio);\n}\nexport function drawShapeAfterEffect(container, context, particle, radius, opacity, delta) {\n    if (!particle.shape) {\n        return;\n    }\n    const drawer = container.drawers.get(particle.shape);\n    if (!drawer || !drawer.afterEffect) {\n        return;\n    }\n    drawer.afterEffect(context, particle, radius, opacity, delta, container.retina.pixelRatio);\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    return {\n        h: color.h,\n        s: color.s,\n        l: color.l + (type === \"darken\" ? -1 : 1) * value,\n    };\n}\n","const isObject = (val) => typeof val === \"object\" && val !== null;\nexport function deepCompare(obj1, obj2, excludeKeyFn = () => false) {\n    if (!isObject(obj1) || !isObject(obj2)) {\n        return obj1 === obj2;\n    }\n    const keys1 = Object.keys(obj1).filter(key => !excludeKeyFn(key)), keys2 = Object.keys(obj2).filter(key => !excludeKeyFn(key));\n    if (keys1.length !== keys2.length) {\n        return false;\n    }\n    for (const key of keys1) {\n        const value1 = obj1[key], value2 = obj2[key];\n        if (isObject(value1) && isObject(value2)) {\n            if (value1 === obj2 && value2 === obj1) {\n                continue;\n            }\n            if (!deepCompare(value1, value2, excludeKeyFn)) {\n                return false;\n            }\n        }\n        else if (Array.isArray(value1) && Array.isArray(value2)) {\n            if (!deepCompareArrays(value1, value2, excludeKeyFn)) {\n                return false;\n            }\n        }\n        else if (value1 !== value2) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction deepCompareArrays(arr1, arr2, excludeKeyFn) {\n    if (arr1.length !== arr2.length) {\n        return false;\n    }\n    for (let i = 0; i < arr1.length; i++) {\n        const val1 = arr1[i], val2 = arr2[i];\n        if (Array.isArray(val1) && Array.isArray(val2)) {\n            if (!deepCompareArrays(val1, val2, excludeKeyFn)) {\n                return false;\n            }\n        }\n        else if (isObject(val1) && isObject(val2)) {\n            if (!deepCompare(val1, val2, excludeKeyFn)) {\n                return false;\n            }\n        }\n        else if (val1 !== val2) {\n            return false;\n        }\n    }\n    return true;\n}\n","import React, { Component } from \"react\";\nimport { tsParticles } from \"tsparticles-engine\";\nimport { deepCompare } from \"./Utils\";\nconst defaultId = \"tsparticles\";\nclass Particles extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            init: false,\n            library: undefined,\n        };\n    }\n    destroy() {\n        if (!this.state.library) {\n            return;\n        }\n        this.state.library.destroy();\n        this.setState({\n            library: undefined,\n        });\n    }\n    shouldComponentUpdate(nextProps) {\n        const nextOptions = nextProps.options ?? nextProps.params, currentOptions = this.props.options ?? this.props.params;\n        return (nextProps.url !== this.props.url ||\n            nextProps.id !== this.props.id ||\n            nextProps.canvasClassName !== this.props.canvasClassName ||\n            nextProps.className !== this.props.className ||\n            nextProps.height !== this.props.height ||\n            nextProps.width !== this.props.width ||\n            !deepCompare(nextProps.style, this.props.style) ||\n            nextProps.init !== this.props.init ||\n            nextProps.loaded !== this.props.loaded ||\n            !deepCompare(nextOptions, currentOptions, key => key.startsWith(\"_\")));\n    }\n    componentDidUpdate() {\n        this.refresh();\n    }\n    forceUpdate() {\n        this.refresh().then(() => {\n            super.forceUpdate();\n        });\n    }\n    componentDidMount() {\n        (async () => {\n            if (this.props.init) {\n                await this.props.init(tsParticles);\n            }\n            this.setState({\n                init: true,\n            }, async () => {\n                await this.loadParticles();\n            });\n        })();\n    }\n    componentWillUnmount() {\n        this.destroy();\n    }\n    render() {\n        const { width, height, className, canvasClassName, id } = this.props;\n        return (React.createElement(\"div\", { className: className, id: id },\n            React.createElement(\"canvas\", { className: canvasClassName, style: {\n                    ...this.props.style,\n                    width,\n                    height,\n                } })));\n    }\n    async refresh() {\n        this.destroy();\n        await this.loadParticles();\n    }\n    async loadParticles() {\n        if (!this.state.init) {\n            return;\n        }\n        const id = this.props.id ?? Particles.defaultProps.id ?? defaultId, container = await tsParticles.load({\n            url: this.props.url,\n            id,\n            options: this.props.options ?? this.props.params,\n        });\n        if (this.props.container) {\n            this.props.container.current = container;\n        }\n        this.setState({\n            library: container,\n        });\n        if (this.props.loaded) {\n            await this.props.loaded(container);\n        }\n    }\n}\nParticles.defaultProps = {\n    width: \"100%\",\n    height: \"100%\",\n    options: {},\n    style: {},\n    url: undefined,\n    id: defaultId,\n};\nexport default Particles;\n","import Particles from \"./Particles\";\nexport default Particles;\nexport { Particles };\n","import { errorPrefix } from \"./Constants\";\nimport { isNumber } from \"../../Utils/Utils\";\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 : 0;\n        }\n        else if (xOrCoords !== undefined && y !== undefined) {\n            this.x = xOrCoords;\n            this.y = y;\n            this.z = z ?? 0;\n        }\n        else {\n            throw new Error(`${errorPrefix} Vector3d not initialized correctly`);\n        }\n    }\n    static get origin() {\n        return Vector3d.create(0, 0, 0);\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 ** 2 + this.y ** 2;\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;\n        if (length != 0) {\n            this.multTo(1.0 / 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), 0);\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 : 0;\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}\n","export class Random {\n    constructor() {\n        this.enable = false;\n        this.minimumValue = 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.minimumValue !== undefined) {\n            this.minimumValue = data.minimumValue;\n        }\n    }\n}\n","import { AnimationOptions, RangedAnimationOptions } from \"./AnimationOptions\";\nimport { Random } from \"./Random\";\nimport { isBoolean } from \"../../Utils/Utils\";\nimport { setRangeValue } from \"../../Utils/NumberUtils\";\nexport class ValueWithRandom {\n    constructor() {\n        this.random = new Random();\n        this.value = 0;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (isBoolean(data.random)) {\n            this.random.enable = data.random;\n        }\n        else {\n            this.random.load(data.random);\n        }\n        if (data.value !== undefined) {\n            this.value = setRangeValue(data.value, this.random.enable ? this.random.minimumValue : undefined);\n        }\n    }\n}\nexport class AnimationValueWithRandom extends ValueWithRandom {\n    constructor() {\n        super();\n        this.animation = new AnimationOptions();\n    }\n    get anim() {\n        return this.animation;\n    }\n    set anim(value) {\n        this.animation = value;\n    }\n    load(data) {\n        super.load(data);\n        if (!data) {\n            return;\n        }\n        const animation = data.animation ?? data.anim;\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        if (!data) {\n            return;\n        }\n        const animation = data.animation ?? data.anim;\n        if (animation !== undefined) {\n            this.value = setRangeValue(this.value, this.animation.enable ? this.animation.minimumValue : undefined);\n        }\n    }\n}\n","import { Circle } from \"./Circle\";\nimport { Range } from \"./Range\";\nexport class Rectangle extends Range {\n    constructor(x, y, width, height) {\n        super(x, y);\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            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","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 { ValueWithRandom } from \"../../ValueWithRandom\";\nexport class ParticlesBounceFactor extends ValueWithRandom {\n    constructor() {\n        super();\n        this.random.minimumValue = 0.1;\n        this.value = 1;\n    }\n}\n","import { ParticlesBounceFactor } from \"./ParticlesBounceFactor\";\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\";\nimport { CollisionsOverlap } from \"./CollisionsOverlap\";\nimport { ParticlesBounce } from \"../Bounce/ParticlesBounce\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils\";\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 { setRangeValue } from \"../../../../Utils/NumberUtils\";\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\";\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    get rotateX() {\n        return this.rotate.x;\n    }\n    set rotateX(value) {\n        this.rotate.x = value;\n    }\n    get rotateY() {\n        return this.rotate.y;\n    }\n    set rotateY(value) {\n        this.rotate.y = value;\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        const rotateX = data.rotate?.x ?? data.rotateX;\n        if (rotateX !== undefined) {\n            this.rotate.x = rotateX;\n        }\n        const rotateY = data.rotate?.y ?? data.rotateY;\n        if (rotateY !== undefined) {\n            this.rotate.y = rotateY;\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\";\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\";\nimport { deepExtend } from \"../../../../../Utils/Utils\";\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\";\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\";\nexport class MoveTrail {\n    constructor() {\n        this.enable = false;\n        this.length = 10;\n        this.fill = new MoveTrailFill();\n    }\n    get fillColor() {\n        return this.fill.color;\n    }\n    set fillColor(value) {\n        this.fill.load({ color: value });\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 || data.fillColor !== undefined) {\n            this.fill.load(data.fill || { color: data.fillColor });\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\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils\";\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/Utils\";\nimport { MoveAngle } from \"./MoveAngle\";\nimport { MoveAttract } from \"./MoveAttract\";\nimport { MoveCenter } from \"./MoveCenter\";\nimport { MoveGravity } from \"./MoveGravity\";\nimport { MovePath } from \"./Path/MovePath\";\nimport { MoveTrail } from \"./MoveTrail\";\nimport { OutModes } from \"./OutModes\";\nimport { Spin } from \"./Spin\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils\";\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    get bounce() {\n        return this.collisions;\n    }\n    set bounce(value) {\n        this.collisions = value;\n    }\n    get collisions() {\n        return false;\n    }\n    set collisions(_) {\n    }\n    get noise() {\n        return this.path;\n    }\n    set noise(value) {\n        this.path = value;\n    }\n    get outMode() {\n        return this.outModes.default;\n    }\n    set outMode(value) {\n        this.outModes.default = value;\n    }\n    get out_mode() {\n        return this.outMode;\n    }\n    set out_mode(value) {\n        this.outMode = value;\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 ?? data.outMode ?? data.out_mode;\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 ?? data.noise);\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\";\nexport class OpacityAnimation extends RangedAnimationOptions {\n    constructor() {\n        super();\n        this.destroy = \"none\";\n        this.speed = 2;\n    }\n    get opacity_min() {\n        return this.minimumValue;\n    }\n    set opacity_min(value) {\n        this.minimumValue = value;\n    }\n    load(data) {\n        if (data?.opacity_min !== undefined && data.minimumValue === undefined) {\n            data.minimumValue = data.opacity_min;\n        }\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\";\nimport { ValueWithRandom } from \"../../ValueWithRandom\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils\";\nexport class Opacity extends ValueWithRandom {\n    constructor() {\n        super();\n        this.animation = new OpacityAnimation();\n        this.random.minimumValue = 0.1;\n        this.value = 1;\n    }\n    get anim() {\n        return this.animation;\n    }\n    set anim(value) {\n        this.animation = value;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        super.load(data);\n        const animation = data.animation ?? data.anim;\n        if (animation !== undefined) {\n            this.animation.load(animation);\n            this.value = setRangeValue(this.value, this.animation.enable ? this.animation.minimumValue : undefined);\n        }\n    }\n}\n","export class ParticlesDensity {\n    constructor() {\n        this.enable = false;\n        this.width = 1920;\n        this.height = 1080;\n    }\n    get area() {\n        return this.width;\n    }\n    set area(value) {\n        this.width = value;\n    }\n    get factor() {\n        return this.height;\n    }\n    set factor(value) {\n        this.height = value;\n    }\n    get value_area() {\n        return this.area;\n    }\n    set value_area(value) {\n        this.area = value;\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 ?? data.area ?? data.value_area;\n        if (width !== undefined) {\n            this.width = width;\n        }\n        const height = data.height ?? data.factor;\n        if (height !== undefined) {\n            this.height = height;\n        }\n    }\n}\n","import { ParticlesDensity } from \"./ParticlesDensity\";\nexport class ParticlesNumber {\n    constructor() {\n        this.density = new ParticlesDensity();\n        this.limit = 0;\n        this.value = 0;\n    }\n    get max() {\n        return this.limit;\n    }\n    set max(value) {\n        this.limit = value;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        this.density.load(data.density);\n        const limit = data.limit ?? data.max;\n        if (limit !== undefined) {\n            this.limit = limit;\n        }\n        if (data.value !== undefined) {\n            this.value = data.value;\n        }\n    }\n}\n","import { OptionsColor } from \"../OptionsColor\";\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, isArray } from \"../../../../Utils/Utils\";\nconst charKey = \"character\", charAltKey = \"char\", imageKey = \"image\", imageAltKey = \"images\", polygonKey = \"polygon\", polygonAltKey = \"star\";\nexport class Shape {\n    constructor() {\n        this.loadShape = (item, mainKey, altKey, altOverride) => {\n            if (!item) {\n                return;\n            }\n            const itemIsArray = isArray(item), emptyValue = itemIsArray ? [] : {}, mainDifferentValues = itemIsArray !== isArray(this.options[mainKey]), altDifferentValues = itemIsArray !== isArray(this.options[altKey]);\n            if (mainDifferentValues) {\n                this.options[mainKey] = emptyValue;\n            }\n            if (altDifferentValues && altOverride) {\n                this.options[altKey] = emptyValue;\n            }\n            this.options[mainKey] = deepExtend(this.options[mainKey] ?? emptyValue, item);\n            if (!this.options[altKey] || altOverride) {\n                this.options[altKey] = deepExtend(this.options[altKey] ?? emptyValue, item);\n            }\n        };\n        this.close = true;\n        this.fill = true;\n        this.options = {};\n        this.type = \"circle\";\n    }\n    get character() {\n        return (this.options[charKey] ?? this.options[charAltKey]);\n    }\n    set character(value) {\n        this.options[charAltKey] = this.options[charKey] = value;\n    }\n    get custom() {\n        return this.options;\n    }\n    set custom(value) {\n        this.options = value;\n    }\n    get image() {\n        return (this.options[imageKey] ?? this.options[imageAltKey]);\n    }\n    set image(value) {\n        this.options[imageAltKey] = this.options[imageKey] = value;\n    }\n    get images() {\n        return this.image;\n    }\n    set images(value) {\n        this.image = value;\n    }\n    get polygon() {\n        return (this.options[polygonKey] ?? this.options[polygonAltKey]);\n    }\n    set polygon(value) {\n        this.options[polygonAltKey] = this.options[polygonKey] = value;\n    }\n    get stroke() {\n        return [];\n    }\n    set stroke(_value) {\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        const options = data.options ?? data.custom;\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        this.loadShape(data.character, charKey, charAltKey, true);\n        this.loadShape(data.polygon, polygonKey, polygonAltKey, false);\n        this.loadShape(data.image ?? data.images, imageKey, imageAltKey, true);\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\";\nexport class SizeAnimation extends RangedAnimationOptions {\n    constructor() {\n        super();\n        this.destroy = \"none\";\n        this.speed = 5;\n    }\n    get size_min() {\n        return this.minimumValue;\n    }\n    set size_min(value) {\n        this.minimumValue = value;\n    }\n    load(data) {\n        if (data?.size_min !== undefined && data.minimumValue === undefined) {\n            data.minimumValue = data.size_min;\n        }\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 { SizeAnimation } from \"./SizeAnimation\";\nimport { ValueWithRandom } from \"../../ValueWithRandom\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils\";\nexport class Size extends ValueWithRandom {\n    constructor() {\n        super();\n        this.animation = new SizeAnimation();\n        this.random.minimumValue = 1;\n        this.value = 3;\n    }\n    get anim() {\n        return this.animation;\n    }\n    set anim(value) {\n        this.animation = value;\n    }\n    load(data) {\n        super.load(data);\n        if (!data) {\n            return;\n        }\n        const animation = data.animation ?? data.anim;\n        if (animation !== undefined) {\n            this.animation.load(animation);\n            this.value = setRangeValue(this.value, this.animation.enable ? this.animation.minimumValue : undefined);\n        }\n    }\n}\n","import { AnimatableColor } from \"../AnimatableColor\";\nimport { setRangeValue } from \"../../../Utils/NumberUtils\";\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\";\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\";\nimport { AnimatableColor } from \"../AnimatableColor\";\nimport { Collisions } from \"./Collisions/Collisions\";\nimport { Move } from \"./Move/Move\";\nimport { Opacity } from \"./Opacity/Opacity\";\nimport { ParticlesBounce } from \"./Bounce/ParticlesBounce\";\nimport { ParticlesNumber } from \"./Number/ParticlesNumber\";\nimport { Shadow } from \"./Shadow\";\nimport { Shape } from \"./Shape/Shape\";\nimport { Size } from \"./Size/Size\";\nimport { Stroke } from \"./Stroke\";\nimport { ZIndex } from \"./ZIndex/ZIndex\";\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.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        this.bounce.load(data.bounce);\n        this.color.load(AnimatableColor.create(this.color, data.color));\n        if (data.groups !== undefined) {\n            for (const group in data.groups) {\n                const item = data.groups[group];\n                if (item !== undefined) {\n                    this.groups[group] = deepExtend(this.groups[group] ?? {}, item);\n                }\n            }\n        }\n        this.move.load(data.move);\n        this.number.load(data.number);\n        this.opacity.load(data.opacity);\n        if (data.reduceDuplicates !== undefined) {\n            this.reduceDuplicates = data.reduceDuplicates;\n        }\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        const collisions = data.move?.collisions ?? data.move?.bounce;\n        if (collisions !== undefined) {\n            this.collisions.enable = collisions;\n        }\n        this.collisions.load(data.collisions);\n        if (data.interactivity !== undefined) {\n            this.interactivity = deepExtend({}, data.interactivity);\n        }\n        const strokeToLoad = data.stroke ?? data.shape?.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.plugins.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.plugins.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\";\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 { collisionVelocity, getDistances, getRandom, getRangeMax, getRangeMin, getRangeValue, getValue, randomInRange, } from \"./NumberUtils\";\nimport { Vector } from \"../Core/Utils/Vector\";\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;\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) / 2 && velocity > 0) ||\n        (pSide.min <= rectSide.max && pSide.min > (rectSide.max + rectSide.min) / 2 && velocity < 0)) {\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 safeMutationObserver(callback) {\n    if (isSsr() || typeof MutationObserver === \"undefined\") {\n        return;\n    }\n    return new MutationObserver(callback);\n}\nexport function isInArray(value, array) {\n    return value === array || (isArray(array) && array.indexOf(value) > -1);\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    return areBoundsInside(calculateBounds(point, radius ?? 0), 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(getValue(p.options.bounce.horizontal), getValue(p.options.bounce.vertical)),\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);\n    if (xVelocityDiff * xDist + yVelocityDiff * yDist < 0) {\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), 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: getValue(particle.options.bounce.horizontal),\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: getValue(particle.options.bounce.vertical),\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    return isArray(obj) ? obj.map((item, index) => callback(item, index)) : callback(obj, 0);\n}\nexport function itemFromSingleOrMultiple(obj, index, useIndex) {\n    return isArray(obj) ? itemFromArray(obj, index, useIndex) : obj;\n}\nexport function findItemFromSingleOrMultiple(obj, callback) {\n    return isArray(obj) ? obj.find((t, index) => callback(t, index)) : callback(obj, 0) ? obj : undefined;\n}\nexport function initParticleNumericAnimationValue(options, pxRatio) {\n    const valueRange = options.value, animationOptions = options.animation, res = {\n        delayTime: getRangeValue(animationOptions.delay) * 1000,\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    };\n    if (animationOptions.enable) {\n        res.decay = 1 - 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() >= 0.5 ? \"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() >= 0.5 ? \"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 / 100) * canvasSize.width,\n            y: (positionOrSize.y / 100) * canvasSize.height,\n        };\n    }\n    else {\n        return {\n            width: (positionOrSize.width / 100) * canvasSize.width,\n            height: (positionOrSize.height / 100) * 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}\nexport 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 { getRandom, getRangeValue, mix, randomInRange, setRangeValue } from \"./NumberUtils\";\nimport { isArray, isString, itemFromArray } from \"./Utils\";\nconst randomColorValue = \"random\", midColorValue = \"mid\", colorManagers = new Map();\nexport function addColorManager(manager) {\n    colorManagers.set(manager.key, manager);\n}\nfunction hue2rgb(p, q, t) {\n    if (t < 0) {\n        t += 1;\n    }\n    if (t > 1) {\n        t -= 1;\n    }\n    if (t < 1 / 6) {\n        return p + (q - p) * 6 * t;\n    }\n    if (t < 1 / 2) {\n        return q;\n    }\n    if (t < 2 / 3) {\n        return p + (q - p) * (2 / 3 - t) * 6;\n    }\n    return p;\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);\n    return result\n        ? {\n            a: result[4] !== undefined ? parseInt(result[4], 16) / 0xff : 1,\n            b: parseInt(result[3], 16),\n            g: parseInt(result[2], 16),\n            r: parseInt(result[1], 16),\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 r1 = color.r / 255, g1 = color.g / 255, b1 = color.b / 255, max = Math.max(r1, g1, b1), min = Math.min(r1, g1, b1), res = {\n        h: 0,\n        l: (max + min) / 2,\n        s: 0,\n    };\n    if (max !== min) {\n        res.s = res.l < 0.5 ? (max - min) / (max + min) : (max - min) / (2.0 - max - min);\n        res.h =\n            r1 === max\n                ? (g1 - b1) / (max - min)\n                : (res.h = g1 === max ? 2.0 + (b1 - r1) / (max - min) : 4.0 + (r1 - g1) / (max - min));\n    }\n    res.l *= 100;\n    res.s *= 100;\n    res.h *= 60;\n    if (res.h < 0) {\n        res.h += 360;\n    }\n    if (res.h >= 360) {\n        res.h -= 360;\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 result = { b: 0, g: 0, r: 0 }, hslPercent = {\n        h: hsl.h / 360,\n        l: hsl.l / 100,\n        s: hsl.s / 100,\n    };\n    if (!hslPercent.s) {\n        result.r = result.g = result.b = hslPercent.l;\n    }\n    else {\n        const q = hslPercent.l < 0.5\n            ? hslPercent.l * (1 + hslPercent.s)\n            : hslPercent.l + hslPercent.s - hslPercent.l * hslPercent.s, p = 2 * hslPercent.l - q;\n        result.r = hue2rgb(p, q, hslPercent.h + 1 / 3);\n        result.g = hue2rgb(p, q, hslPercent.h);\n        result.b = hue2rgb(p, q, hslPercent.h - 1 / 3);\n    }\n    result.r = Math.floor(result.r * 255);\n    result.g = Math.floor(result.g * 255);\n    result.b = Math.floor(result.b * 255);\n    return result;\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 fixedMin = min ?? 0;\n    return {\n        b: Math.floor(randomInRange(setRangeValue(fixedMin, 256))),\n        g: Math.floor(randomInRange(setRangeValue(fixedMin, 256))),\n        r: Math.floor(randomInRange(setRangeValue(fixedMin, 256))),\n    };\n}\nexport function getStyleFromRgb(color, opacity) {\n    return `rgba(${color.r}, ${color.g}, ${color.b}, ${opacity ?? 1})`;\n}\nexport function getStyleFromHsl(color, opacity) {\n    return `hsla(${color.h}, ${color.s}%, ${color.l}%, ${opacity ?? 1})`;\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    if (colorValue.enable) {\n        colorValue.velocity = (getRangeValue(colorAnimation.speed) / 100) * reduceFactor;\n        colorValue.decay = 1 - getRangeValue(colorAnimation.decay);\n        colorValue.status = \"increasing\";\n        colorValue.loops = 0;\n        colorValue.maxLoops = getRangeValue(colorAnimation.count);\n        colorValue.time = 0;\n        colorValue.delayTime = getRangeValue(colorAnimation.delay) * 1000;\n        if (!colorAnimation.sync) {\n            colorValue.velocity *= getRandom();\n            colorValue.value *= getRandom();\n        }\n        colorValue.initialValue = colorValue.value;\n    }\n    else {\n        colorValue.velocity = 0;\n    }\n}\n","export class AbsorberSizeLimit {\n    constructor() {\n        this.radius = 0;\n        this.mass = 0;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.mass !== undefined) {\n            this.mass = data.mass;\n        }\n        if (data.radius !== undefined) {\n            this.radius = data.radius;\n        }\n    }\n}\n","import { ValueWithRandom, isNumber } from \"tsparticles-engine\";\nimport { AbsorberSizeLimit } from \"./AbsorberSizeLimit\";\nexport class AbsorberSize extends ValueWithRandom {\n    constructor() {\n        super();\n        this.density = 5;\n        this.value = 50;\n        this.limit = new AbsorberSizeLimit();\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        super.load(data);\n        if (data.density !== undefined) {\n            this.density = data.density;\n        }\n        if (isNumber(data.limit)) {\n            this.limit.radius = data.limit;\n        }\n        else {\n            this.limit.load(data.limit);\n        }\n    }\n}\n","import { OptionsColor, setRangeValue, } from \"tsparticles-engine\";\nimport { AbsorberSize } from \"./AbsorberSize\";\nexport class Absorber {\n    constructor() {\n        this.color = new OptionsColor();\n        this.color.value = \"#000000\";\n        this.draggable = false;\n        this.opacity = 1;\n        this.destroy = true;\n        this.orbits = false;\n        this.size = new AbsorberSize();\n    }\n    load(data) {\n        if (data === undefined) {\n            return;\n        }\n        if (data.color !== undefined) {\n            this.color = OptionsColor.create(this.color, data.color);\n        }\n        if (data.draggable !== undefined) {\n            this.draggable = data.draggable;\n        }\n        this.name = data.name;\n        if (data.opacity !== undefined) {\n            this.opacity = data.opacity;\n        }\n        if (data.position !== undefined) {\n            this.position = {};\n            if (data.position.x !== undefined) {\n                this.position.x = setRangeValue(data.position.x);\n            }\n            if (data.position.y !== undefined) {\n                this.position.y = setRangeValue(data.position.y);\n            }\n        }\n        if (data.size !== undefined) {\n            this.size.load(data.size);\n        }\n        if (data.destroy !== undefined) {\n            this.destroy = data.destroy;\n        }\n        if (data.orbits !== undefined) {\n            this.orbits = data.orbits;\n        }\n    }\n}\n","import { Vector, calcPositionOrRandomFromSize, calcPositionOrRandomFromSizeRanged, getDistance, getDistances, getRandom, getRangeValue, getStyleFromRgb, isPointInside, rangeColorToRgb, } from \"tsparticles-engine\";\nimport { Absorber } from \"./Options/Classes/Absorber\";\nexport class AbsorberInstance {\n    constructor(absorbers, container, options, position) {\n        this.absorbers = absorbers;\n        this.container = container;\n        this._calcPosition = () => {\n            const exactPosition = calcPositionOrRandomFromSizeRanged({\n                size: this.container.canvas.size,\n                position: this.options.position,\n            });\n            return Vector.create(exactPosition.x, exactPosition.y);\n        };\n        this._updateParticlePosition = (particle, v) => {\n            if (particle.destroyed) {\n                return;\n            }\n            const container = this.container, canvasSize = container.canvas.size;\n            if (particle.needsNewPosition) {\n                const newPosition = calcPositionOrRandomFromSize({ size: canvasSize });\n                particle.position.setTo(newPosition);\n                particle.velocity.setTo(particle.initialVelocity);\n                particle.absorberOrbit = undefined;\n                particle.needsNewPosition = false;\n            }\n            if (this.options.orbits) {\n                if (particle.absorberOrbit === undefined) {\n                    particle.absorberOrbit = Vector.create(0, 0);\n                    particle.absorberOrbit.length = getDistance(particle.getPosition(), this.position);\n                    particle.absorberOrbit.angle = getRandom() * Math.PI * 2;\n                }\n                if (particle.absorberOrbit.length <= this.size && !this.options.destroy) {\n                    const minSize = Math.min(canvasSize.width, canvasSize.height);\n                    particle.absorberOrbit.length = minSize * (1 + (getRandom() * 0.2 - 0.1));\n                }\n                if (particle.absorberOrbitDirection === undefined) {\n                    particle.absorberOrbitDirection =\n                        particle.velocity.x >= 0 ? \"clockwise\" : \"counter-clockwise\";\n                }\n                const orbitRadius = particle.absorberOrbit.length, orbitAngle = particle.absorberOrbit.angle, orbitDirection = particle.absorberOrbitDirection;\n                particle.velocity.setTo(Vector.origin);\n                const updateFunc = {\n                    x: orbitDirection === \"clockwise\" ? Math.cos : Math.sin,\n                    y: orbitDirection === \"clockwise\" ? Math.sin : Math.cos,\n                };\n                particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);\n                particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);\n                particle.absorberOrbit.length -= v.length;\n                particle.absorberOrbit.angle +=\n                    (((particle.retina.moveSpeed ?? 0) * container.retina.pixelRatio) / 100) *\n                        container.retina.reduceFactor;\n            }\n            else {\n                const addV = Vector.origin;\n                addV.length = v.length;\n                addV.angle = v.angle;\n                particle.velocity.addTo(addV);\n            }\n        };\n        this.initialPosition = position ? Vector.create(position.x, position.y) : undefined;\n        if (options instanceof Absorber) {\n            this.options = options;\n        }\n        else {\n            this.options = new Absorber();\n            this.options.load(options);\n        }\n        this.dragging = false;\n        this.name = this.options.name;\n        this.opacity = this.options.opacity;\n        this.size = getRangeValue(this.options.size.value) * container.retina.pixelRatio;\n        this.mass = this.size * this.options.size.density * container.retina.reduceFactor;\n        const limit = this.options.size.limit;\n        this.limit = {\n            radius: limit.radius * container.retina.pixelRatio * container.retina.reduceFactor,\n            mass: limit.mass,\n        };\n        this.color = rangeColorToRgb(this.options.color) ?? {\n            b: 0,\n            g: 0,\n            r: 0,\n        };\n        this.position = this.initialPosition?.copy() ?? this._calcPosition();\n    }\n    attract(particle) {\n        const container = this.container, options = this.options;\n        if (options.draggable) {\n            const mouse = container.interactivity.mouse;\n            if (mouse.clicking && mouse.downPosition) {\n                const mouseDist = getDistance(this.position, mouse.downPosition);\n                if (mouseDist <= this.size) {\n                    this.dragging = true;\n                }\n            }\n            else {\n                this.dragging = false;\n            }\n            if (this.dragging && mouse.position) {\n                this.position.x = mouse.position.x;\n                this.position.y = mouse.position.y;\n            }\n        }\n        const pos = particle.getPosition(), { dx, dy, distance } = getDistances(this.position, pos), v = Vector.create(dx, dy);\n        v.length = (this.mass / Math.pow(distance, 2)) * container.retina.reduceFactor;\n        if (distance < this.size + particle.getRadius()) {\n            const sizeFactor = particle.getRadius() * 0.033 * container.retina.pixelRatio;\n            if ((this.size > particle.getRadius() && distance < this.size - particle.getRadius()) ||\n                (particle.absorberOrbit !== undefined && particle.absorberOrbit.length < 0)) {\n                if (options.destroy) {\n                    particle.destroy();\n                }\n                else {\n                    particle.needsNewPosition = true;\n                    this._updateParticlePosition(particle, v);\n                }\n            }\n            else {\n                if (options.destroy) {\n                    particle.size.value -= sizeFactor;\n                }\n                this._updateParticlePosition(particle, v);\n            }\n            if (this.limit.radius <= 0 || this.size < this.limit.radius) {\n                this.size += sizeFactor;\n            }\n            if (this.limit.mass <= 0 || this.mass < this.limit.mass) {\n                this.mass += sizeFactor * this.options.size.density * container.retina.reduceFactor;\n            }\n        }\n        else {\n            this._updateParticlePosition(particle, v);\n        }\n    }\n    draw(context) {\n        context.translate(this.position.x, this.position.y);\n        context.beginPath();\n        context.arc(0, 0, this.size, 0, Math.PI * 2, false);\n        context.closePath();\n        context.fillStyle = getStyleFromRgb(this.color, this.opacity);\n        context.fill();\n    }\n    resize() {\n        const initialPosition = this.initialPosition;\n        this.position =\n            initialPosition && isPointInside(initialPosition, this.container.canvas.size, Vector.origin)\n                ? initialPosition\n                : this._calcPosition();\n    }\n}\n","import { executeOnSingleOrMultiple, isNumber, itemFromSingleOrMultiple, } from \"tsparticles-engine\";\nimport { AbsorberInstance } from \"./AbsorberInstance\";\nexport class Absorbers {\n    constructor(container) {\n        this.container = container;\n        this.array = [];\n        this.absorbers = [];\n        this.interactivityAbsorbers = [];\n        container.getAbsorber = (idxOrName) => idxOrName === undefined || isNumber(idxOrName)\n            ? this.array[idxOrName || 0]\n            : this.array.find((t) => t.name === idxOrName);\n        container.addAbsorber = (options, position) => this.addAbsorber(options, position);\n    }\n    addAbsorber(options, position) {\n        const absorber = new AbsorberInstance(this, this.container, options, position);\n        this.array.push(absorber);\n        return absorber;\n    }\n    draw(context) {\n        for (const absorber of this.array) {\n            absorber.draw(context);\n        }\n    }\n    handleClickMode(mode) {\n        const absorberOptions = this.absorbers, modeAbsorbers = this.interactivityAbsorbers;\n        if (mode === \"absorber\") {\n            const absorbersModeOptions = itemFromSingleOrMultiple(modeAbsorbers), absorbersOptions = absorbersModeOptions ?? itemFromSingleOrMultiple(absorberOptions), aPosition = this.container.interactivity.mouse.clickPosition;\n            this.addAbsorber(absorbersOptions, aPosition);\n        }\n    }\n    async init() {\n        this.absorbers = this.container.actualOptions.absorbers;\n        this.interactivityAbsorbers = this.container.actualOptions.interactivity.modes.absorbers;\n        executeOnSingleOrMultiple(this.absorbers, (absorber) => {\n            this.addAbsorber(absorber);\n        });\n    }\n    particleUpdate(particle) {\n        for (const absorber of this.array) {\n            absorber.attract(particle);\n            if (particle.destroyed) {\n                break;\n            }\n        }\n    }\n    removeAbsorber(absorber) {\n        const index = this.array.indexOf(absorber);\n        if (index >= 0) {\n            this.array.splice(index, 1);\n        }\n    }\n    resize() {\n        for (const absorber of this.array) {\n            absorber.resize();\n        }\n    }\n    stop() {\n        this.array = [];\n    }\n}\n","import { executeOnSingleOrMultiple, isArray, isInArray, } from \"tsparticles-engine\";\nimport { Absorber } from \"./Options/Classes/Absorber\";\nimport { Absorbers } from \"./Absorbers\";\nclass AbsorbersPlugin {\n    constructor() {\n        this.id = \"absorbers\";\n    }\n    getPlugin(container) {\n        return new Absorbers(container);\n    }\n    loadOptions(options, source) {\n        if (!this.needsPlugin(options) && !this.needsPlugin(source)) {\n            return;\n        }\n        if (source?.absorbers) {\n            options.absorbers = executeOnSingleOrMultiple(source.absorbers, (absorber) => {\n                const tmp = new Absorber();\n                tmp.load(absorber);\n                return tmp;\n            });\n        }\n        options.interactivity.modes.absorbers = executeOnSingleOrMultiple(source?.interactivity?.modes?.absorbers, (absorber) => {\n            const tmp = new Absorber();\n            tmp.load(absorber);\n            return tmp;\n        });\n    }\n    needsPlugin(options) {\n        if (!options) {\n            return false;\n        }\n        const absorbers = options.absorbers;\n        if (isArray(absorbers)) {\n            return !!absorbers.length;\n        }\n        else if (absorbers) {\n            return true;\n        }\n        else if (options.interactivity?.events?.onClick?.mode &&\n            isInArray(\"absorber\", options.interactivity.events.onClick.mode)) {\n            return true;\n        }\n        return false;\n    }\n}\nexport async function loadAbsorbersPlugin(engine, refresh = true) {\n    await engine.addPlugin(new AbsorbersPlugin(), refresh);\n}\nexport * from \"./AbsorberContainer\";\nexport * from \"./Enums/AbsorberClickMode\";\n","import { setRangeValue } from \"tsparticles-engine\";\nexport class DestroyBounds {\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.bottom !== undefined) {\n            this.bottom = setRangeValue(data.bottom);\n        }\n        if (data.left !== undefined) {\n            this.left = setRangeValue(data.left);\n        }\n        if (data.right !== undefined) {\n            this.right = setRangeValue(data.right);\n        }\n        if (data.top !== undefined) {\n            this.top = setRangeValue(data.top);\n        }\n    }\n}\n","import { ValueWithRandom } from \"tsparticles-engine\";\nexport class SplitFactor extends ValueWithRandom {\n    constructor() {\n        super();\n        this.value = 3;\n    }\n}\n","import { ValueWithRandom } from \"tsparticles-engine\";\nexport class SplitRate extends ValueWithRandom {\n    constructor() {\n        super();\n        this.value = { min: 4, max: 9 };\n    }\n}\n","import { OptionsColor, deepExtend, executeOnSingleOrMultiple, } from \"tsparticles-engine\";\nimport { SplitFactor } from \"./SplitFactor\";\nimport { SplitRate } from \"./SplitRate\";\nexport class Split {\n    constructor() {\n        this.count = 1;\n        this.factor = new SplitFactor();\n        this.rate = new SplitRate();\n        this.sizeOffset = true;\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.count !== undefined) {\n            this.count = data.count;\n        }\n        this.factor.load(data.factor);\n        this.rate.load(data.rate);\n        this.particles = executeOnSingleOrMultiple(data.particles, (particles) => {\n            return deepExtend({}, particles);\n        });\n        if (data.sizeOffset !== undefined) {\n            this.sizeOffset = data.sizeOffset;\n        }\n        if (data.colorOffset) {\n            this.colorOffset = this.colorOffset ?? {};\n            if (data.colorOffset.h !== undefined) {\n                this.colorOffset.h = data.colorOffset.h;\n            }\n            if (data.colorOffset.s !== undefined) {\n                this.colorOffset.s = data.colorOffset.s;\n            }\n            if (data.colorOffset.l !== undefined) {\n                this.colorOffset.l = data.colorOffset.l;\n            }\n        }\n    }\n}\n","import { DestroyBounds } from \"./DestroyBounds\";\nimport { Split } from \"./Split\";\nexport class Destroy {\n    constructor() {\n        this.bounds = new DestroyBounds();\n        this.mode = \"none\";\n        this.split = new Split();\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.mode) {\n            this.mode = data.mode;\n        }\n        if (data.bounds) {\n            this.bounds.load(data.bounds);\n        }\n        this.split.load(data.split);\n    }\n}\n","import { getRangeValue, getValue, isNumber, itemFromSingleOrMultiple, loadParticlesOptions, randomInRange, setRangeValue, } from \"tsparticles-engine\";\nfunction addSplitParticle(engine, container, parent, splitParticlesOptions) {\n    const destroyOptions = parent.options.destroy;\n    if (!destroyOptions) {\n        return;\n    }\n    const splitOptions = destroyOptions.split, options = loadParticlesOptions(engine, container, parent.options), factor = getValue(splitOptions.factor), parentColor = parent.getFillColor();\n    if (splitOptions.color) {\n        options.color.load(splitOptions.color);\n    }\n    else if (splitOptions.colorOffset && parentColor) {\n        options.color.load({\n            value: {\n                hsl: {\n                    h: parentColor.h + getRangeValue(splitOptions.colorOffset.h ?? 0),\n                    s: parentColor.s + getRangeValue(splitOptions.colorOffset.s ?? 0),\n                    l: parentColor.l + getRangeValue(splitOptions.colorOffset.l ?? 0),\n                },\n            },\n        });\n    }\n    else {\n        options.color.load({\n            value: {\n                hsl: parent.getFillColor(),\n            },\n        });\n    }\n    options.move.load({\n        center: {\n            x: parent.position.x,\n            y: parent.position.y,\n            mode: \"precise\",\n        },\n    });\n    if (isNumber(options.size.value)) {\n        options.size.value /= factor;\n    }\n    else {\n        options.size.value.min /= factor;\n        options.size.value.max /= factor;\n    }\n    options.load(splitParticlesOptions);\n    const offset = splitOptions.sizeOffset ? setRangeValue(-parent.size.value, parent.size.value) : 0, position = {\n        x: parent.position.x + randomInRange(offset),\n        y: parent.position.y + randomInRange(offset),\n    };\n    return container.particles.addParticle(position, options, parent.group, (particle) => {\n        if (particle.size.value < 0.5) {\n            return false;\n        }\n        particle.velocity.length = randomInRange(setRangeValue(parent.velocity.length, particle.velocity.length));\n        particle.splitCount = (parent.splitCount ?? 0) + 1;\n        particle.unbreakable = true;\n        setTimeout(() => {\n            particle.unbreakable = false;\n        }, 500);\n        return true;\n    });\n}\nexport function split(engine, container, particle) {\n    const destroyOptions = particle.options.destroy;\n    if (!destroyOptions) {\n        return;\n    }\n    const splitOptions = destroyOptions.split;\n    if (splitOptions.count >= 0 && (particle.splitCount === undefined || particle.splitCount++ > splitOptions.count)) {\n        return;\n    }\n    const rate = getValue(splitOptions.rate), particlesSplitOptions = itemFromSingleOrMultiple(splitOptions.particles);\n    for (let i = 0; i < rate; i++) {\n        addSplitParticle(engine, container, particle, particlesSplitOptions);\n    }\n}\n","import { getRangeValue, } from \"tsparticles-engine\";\nimport { Destroy } from \"./Options/Classes/Destroy\";\nimport { split } from \"./Utils\";\nexport class DestroyUpdater {\n    constructor(engine, container) {\n        this.engine = engine;\n        this.container = container;\n    }\n    init(particle) {\n        const container = this.container, particlesOptions = particle.options, destroyOptions = particlesOptions.destroy;\n        if (!destroyOptions) {\n            return;\n        }\n        particle.splitCount = 0;\n        const destroyBoundsOptions = destroyOptions.bounds;\n        if (!particle.destroyBounds) {\n            particle.destroyBounds = {};\n        }\n        const { bottom, left, right, top } = destroyBoundsOptions, { destroyBounds } = particle, canvasSize = container.canvas.size;\n        if (bottom) {\n            destroyBounds.bottom = (getRangeValue(bottom) * canvasSize.height) / 100;\n        }\n        if (left) {\n            destroyBounds.left = (getRangeValue(left) * canvasSize.width) / 100;\n        }\n        if (right) {\n            destroyBounds.right = (getRangeValue(right) * canvasSize.width) / 100;\n        }\n        if (top) {\n            destroyBounds.top = (getRangeValue(top) * canvasSize.height) / 100;\n        }\n    }\n    isEnabled(particle) {\n        return !particle.destroyed;\n    }\n    loadOptions(options, ...sources) {\n        if (!options.destroy) {\n            options.destroy = new Destroy();\n        }\n        for (const source of sources) {\n            options.destroy.load(source?.destroy);\n        }\n    }\n    particleDestroyed(particle, override) {\n        if (override) {\n            return;\n        }\n        const destroyOptions = particle.options.destroy;\n        if (destroyOptions && destroyOptions.mode === \"split\") {\n            split(this.engine, this.container, particle);\n        }\n    }\n    update(particle) {\n        if (!this.isEnabled(particle)) {\n            return;\n        }\n        const position = particle.getPosition(), bounds = particle.destroyBounds;\n        if (!bounds) {\n            return;\n        }\n        if ((bounds.bottom !== undefined && position.y >= bounds.bottom) ||\n            (bounds.left !== undefined && position.x <= bounds.left) ||\n            (bounds.right !== undefined && position.x >= bounds.right) ||\n            (bounds.top !== undefined && position.y <= bounds.top)) {\n            particle.destroy();\n        }\n    }\n}\n","import { getRandom } from \"tsparticles-engine\";\nexport class CircleShape {\n    randomPosition(position, size, fill) {\n        const generateTheta = (x, y) => {\n            const u = getRandom() / 4.0, theta = Math.atan((y / x) * Math.tan(2 * Math.PI * u)), v = getRandom();\n            if (v < 0.25) {\n                return theta;\n            }\n            else if (v < 0.5) {\n                return Math.PI - theta;\n            }\n            else if (v < 0.75) {\n                return Math.PI + theta;\n            }\n            else {\n                return -theta;\n            }\n        }, radius = (x, y, theta) => (x * y) / Math.sqrt((y * Math.cos(theta)) ** 2 + (x * Math.sin(theta)) ** 2), [a, b] = [size.width / 2, size.height / 2], randomTheta = generateTheta(a, b), maxRadius = radius(a, b, randomTheta), randomRadius = fill ? maxRadius * Math.sqrt(getRandom()) : maxRadius;\n        return {\n            x: position.x + randomRadius * Math.cos(randomTheta),\n            y: position.y + randomRadius * Math.sin(randomTheta),\n        };\n    }\n}\n","import { setRangeValue } from \"tsparticles-engine\";\nexport class EmitterLife {\n    constructor() {\n        this.wait = false;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.count !== undefined) {\n            this.count = data.count;\n        }\n        if (data.delay !== undefined) {\n            this.delay = setRangeValue(data.delay);\n        }\n        if (data.duration !== undefined) {\n            this.duration = setRangeValue(data.duration);\n        }\n        if (data.wait !== undefined) {\n            this.wait = data.wait;\n        }\n    }\n}\n","import { setRangeValue } from \"tsparticles-engine\";\nexport class EmitterRate {\n    constructor() {\n        this.quantity = 1;\n        this.delay = 0.1;\n    }\n    load(data) {\n        if (data === undefined) {\n            return;\n        }\n        if (data.quantity !== undefined) {\n            this.quantity = setRangeValue(data.quantity);\n        }\n        if (data.delay !== undefined) {\n            this.delay = setRangeValue(data.delay);\n        }\n    }\n}\n","export class EmitterSize {\n    constructor() {\n        this.mode = \"percent\";\n        this.height = 0;\n        this.width = 0;\n    }\n    load(data) {\n        if (data === undefined) {\n            return;\n        }\n        if (data.mode !== undefined) {\n            this.mode = data.mode;\n        }\n        if (data.height !== undefined) {\n            this.height = data.height;\n        }\n        if (data.width !== undefined) {\n            this.width = data.width;\n        }\n    }\n}\n","import { AnimatableColor, deepExtend, executeOnSingleOrMultiple, setRangeValue, } from \"tsparticles-engine\";\nimport { EmitterLife } from \"./EmitterLife\";\nimport { EmitterRate } from \"./EmitterRate\";\nimport { EmitterSize } from \"./EmitterSize\";\nexport class Emitter {\n    constructor() {\n        this.autoPlay = true;\n        this.fill = true;\n        this.life = new EmitterLife();\n        this.rate = new EmitterRate();\n        this.shape = \"square\";\n        this.startCount = 0;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.autoPlay !== undefined) {\n            this.autoPlay = data.autoPlay;\n        }\n        if (data.size !== undefined) {\n            if (!this.size) {\n                this.size = new EmitterSize();\n            }\n            this.size.load(data.size);\n        }\n        if (data.direction !== undefined) {\n            this.direction = data.direction;\n        }\n        this.domId = data.domId;\n        if (data.fill !== undefined) {\n            this.fill = data.fill;\n        }\n        this.life.load(data.life);\n        this.name = data.name;\n        this.particles = executeOnSingleOrMultiple(data.particles, (particles) => {\n            return deepExtend({}, particles);\n        });\n        this.rate.load(data.rate);\n        if (data.shape !== undefined) {\n            this.shape = data.shape;\n        }\n        if (data.position !== undefined) {\n            this.position = {};\n            if (data.position.x !== undefined) {\n                this.position.x = setRangeValue(data.position.x);\n            }\n            if (data.position.y !== undefined) {\n                this.position.y = setRangeValue(data.position.y);\n            }\n        }\n        if (data.spawnColor !== undefined) {\n            if (this.spawnColor === undefined) {\n                this.spawnColor = new AnimatableColor();\n            }\n            this.spawnColor.load(data.spawnColor);\n        }\n        if (data.startCount !== undefined) {\n            this.startCount = data.startCount;\n        }\n    }\n}\n","import { Vector, calcPositionOrRandomFromSizeRanged, deepExtend, getRangeValue, getSize, isPointInside, itemFromSingleOrMultiple, randomInRange, rangeColorToHsl, } from \"tsparticles-engine\";\nimport { Emitter } from \"./Options/Classes/Emitter\";\nimport { EmitterSize } from \"./Options/Classes/EmitterSize\";\nexport class EmitterInstance {\n    constructor(engine, emitters, container, options, position) {\n        this.emitters = emitters;\n        this.container = container;\n        this._calcPosition = () => {\n            return calcPositionOrRandomFromSizeRanged({\n                size: this.container.canvas.size,\n                position: this.options.position,\n            });\n        };\n        this._destroy = () => {\n            this.emitters.removeEmitter(this);\n            this._engine.dispatchEvent(\"emitterDestroyed\", {\n                container: this.container,\n                data: {\n                    emitter: this,\n                },\n            });\n        };\n        this._emit = () => {\n            if (this._paused) {\n                return;\n            }\n            const quantity = getRangeValue(this.options.rate.quantity);\n            this._emitParticles(quantity);\n        };\n        this._emitParticles = (quantity) => {\n            const position = this.getPosition(), size = this.getSize(), singleParticlesOptions = itemFromSingleOrMultiple(this._particlesOptions);\n            for (let i = 0; i < quantity; i++) {\n                const particlesOptions = deepExtend({}, singleParticlesOptions);\n                if (this.spawnColor) {\n                    const hslAnimation = this.options.spawnColor?.animation;\n                    if (hslAnimation) {\n                        this.spawnColor.h = this._setColorAnimation(hslAnimation.h, this.spawnColor.h, 360);\n                        this.spawnColor.s = this._setColorAnimation(hslAnimation.s, this.spawnColor.s, 100);\n                        this.spawnColor.l = this._setColorAnimation(hslAnimation.l, this.spawnColor.l, 100);\n                    }\n                    if (!particlesOptions.color) {\n                        particlesOptions.color = {\n                            value: this.spawnColor,\n                        };\n                    }\n                    else {\n                        particlesOptions.color.value = this.spawnColor;\n                    }\n                }\n                if (!position) {\n                    return;\n                }\n                const pPosition = this._shape?.randomPosition(position, size, this.fill) ?? position;\n                this.container.particles.addParticle(pPosition, particlesOptions);\n            }\n        };\n        this._prepareToDie = () => {\n            if (this._paused) {\n                return;\n            }\n            const duration = this.options.life?.duration !== undefined ? getRangeValue(this.options.life.duration) : undefined;\n            if (this.container.retina.reduceFactor &&\n                (this._lifeCount > 0 || this._immortal) &&\n                duration !== undefined &&\n                duration > 0) {\n                this._duration = duration * 1000;\n            }\n        };\n        this._setColorAnimation = (animation, initValue, maxValue) => {\n            const container = this.container;\n            if (!animation.enable) {\n                return initValue;\n            }\n            const colorOffset = randomInRange(animation.offset), delay = getRangeValue(this.options.rate.delay), emitFactor = (1000 * delay) / container.retina.reduceFactor, colorSpeed = getRangeValue(animation.speed ?? 0);\n            return (initValue + (colorSpeed * container.fpsLimit) / emitFactor + colorOffset * 3.6) % maxValue;\n        };\n        this._engine = engine;\n        this._currentDuration = 0;\n        this._currentEmitDelay = 0;\n        this._currentSpawnDelay = 0;\n        this._initialPosition = position;\n        if (options instanceof Emitter) {\n            this.options = options;\n        }\n        else {\n            this.options = new Emitter();\n            this.options.load(options);\n        }\n        this._spawnDelay = (getRangeValue(this.options.life.delay ?? 0) * 1000) / this.container.retina.reduceFactor;\n        this.position = this._initialPosition ?? this._calcPosition();\n        this.name = this.options.name;\n        this._shape = this._engine.emitterShapeManager?.getShape(this.options.shape);\n        this.fill = this.options.fill;\n        this._firstSpawn = !this.options.life.wait;\n        this._startParticlesAdded = false;\n        let particlesOptions = deepExtend({}, this.options.particles);\n        particlesOptions ??= {};\n        particlesOptions.move ??= {};\n        particlesOptions.move.direction ??= this.options.direction;\n        if (this.options.spawnColor) {\n            this.spawnColor = rangeColorToHsl(this.options.spawnColor);\n        }\n        this._paused = !this.options.autoPlay;\n        this._particlesOptions = particlesOptions;\n        this.size =\n            this.options.size ??\n                (() => {\n                    const size = new EmitterSize();\n                    size.load({\n                        height: 0,\n                        mode: \"percent\",\n                        width: 0,\n                    });\n                    return size;\n                })();\n        this._lifeCount = this.options.life.count ?? -1;\n        this._immortal = this._lifeCount <= 0;\n        this._engine.dispatchEvent(\"emitterCreated\", {\n            container,\n            data: {\n                emitter: this,\n            },\n        });\n        this.play();\n    }\n    externalPause() {\n        this._paused = true;\n        this.pause();\n    }\n    externalPlay() {\n        this._paused = false;\n        this.play();\n    }\n    getPosition() {\n        if (this.options.domId) {\n            const container = this.container, element = document.getElementById(this.options.domId);\n            if (element) {\n                const elRect = element.getBoundingClientRect();\n                return {\n                    x: (elRect.x + elRect.width / 2) * container.retina.pixelRatio,\n                    y: (elRect.y + elRect.height / 2) * container.retina.pixelRatio,\n                };\n            }\n        }\n        return this.position;\n    }\n    getSize() {\n        const container = this.container;\n        if (this.options.domId) {\n            const element = document.getElementById(this.options.domId);\n            if (element) {\n                const elRect = element.getBoundingClientRect();\n                return {\n                    width: elRect.width * container.retina.pixelRatio,\n                    height: elRect.height * container.retina.pixelRatio,\n                };\n            }\n        }\n        return getSize(this.size, container.canvas.size);\n    }\n    pause() {\n        if (this._paused) {\n            return;\n        }\n        delete this._emitDelay;\n    }\n    play() {\n        if (this._paused) {\n            return;\n        }\n        if (!(this.container.retina.reduceFactor &&\n            (this._lifeCount > 0 || this._immortal || !this.options.life.count) &&\n            (this._firstSpawn || this._currentSpawnDelay >= (this._spawnDelay ?? 0)))) {\n            return;\n        }\n        if (this._emitDelay === undefined) {\n            const delay = getRangeValue(this.options.rate.delay);\n            this._emitDelay = (1000 * delay) / this.container.retina.reduceFactor;\n        }\n        if (this._lifeCount > 0 || this._immortal) {\n            this._prepareToDie();\n        }\n    }\n    resize() {\n        const initialPosition = this._initialPosition;\n        this.position =\n            initialPosition && isPointInside(initialPosition, this.container.canvas.size, Vector.origin)\n                ? initialPosition\n                : this._calcPosition();\n    }\n    update(delta) {\n        if (this._paused) {\n            return;\n        }\n        if (this._firstSpawn) {\n            this._firstSpawn = false;\n            this._currentSpawnDelay = this._spawnDelay ?? 0;\n            this._currentEmitDelay = this._emitDelay ?? 0;\n        }\n        if (!this._startParticlesAdded) {\n            this._startParticlesAdded = true;\n            this._emitParticles(this.options.startCount);\n        }\n        if (this._duration !== undefined) {\n            this._currentDuration += delta.value;\n            if (this._currentDuration >= this._duration) {\n                this.pause();\n                if (this._spawnDelay !== undefined) {\n                    delete this._spawnDelay;\n                }\n                if (!this._immortal) {\n                    this._lifeCount--;\n                }\n                if (this._lifeCount > 0 || this._immortal) {\n                    this.position = this._calcPosition();\n                    this._spawnDelay =\n                        (getRangeValue(this.options.life.delay ?? 0) * 1000) / this.container.retina.reduceFactor;\n                }\n                else {\n                    this._destroy();\n                }\n                this._currentDuration -= this._duration;\n                delete this._duration;\n            }\n        }\n        if (this._spawnDelay !== undefined) {\n            this._currentSpawnDelay += delta.value;\n            if (this._currentSpawnDelay >= this._spawnDelay) {\n                this._engine.dispatchEvent(\"emitterPlay\", {\n                    container: this.container,\n                });\n                this.play();\n                this._currentSpawnDelay -= this._currentSpawnDelay;\n                delete this._spawnDelay;\n            }\n        }\n        if (this._emitDelay !== undefined) {\n            this._currentEmitDelay += delta.value;\n            if (this._currentEmitDelay >= this._emitDelay) {\n                this._emit();\n                this._currentEmitDelay -= this._emitDelay;\n            }\n        }\n    }\n}\n","import { arrayRandomIndex, executeOnSingleOrMultiple, isArray, isNumber, itemFromArray, } from \"tsparticles-engine\";\nimport { Emitter } from \"./Options/Classes/Emitter\";\nimport { EmitterInstance } from \"./EmitterInstance\";\nexport class Emitters {\n    constructor(engine, container) {\n        this.container = container;\n        this._engine = engine;\n        this.array = [];\n        this.emitters = [];\n        this.interactivityEmitters = {\n            random: {\n                count: 1,\n                enable: false,\n            },\n            value: [],\n        };\n        container.getEmitter = (idxOrName) => idxOrName === undefined || isNumber(idxOrName)\n            ? this.array[idxOrName || 0]\n            : this.array.find((t) => t.name === idxOrName);\n        container.addEmitter = (options, position) => this.addEmitter(options, position);\n        container.removeEmitter = (idxOrName) => {\n            const emitter = container.getEmitter(idxOrName);\n            if (emitter) {\n                this.removeEmitter(emitter);\n            }\n        };\n        container.playEmitter = (idxOrName) => {\n            const emitter = container.getEmitter(idxOrName);\n            if (emitter) {\n                emitter.externalPlay();\n            }\n        };\n        container.pauseEmitter = (idxOrName) => {\n            const emitter = container.getEmitter(idxOrName);\n            if (emitter) {\n                emitter.externalPause();\n            }\n        };\n    }\n    addEmitter(options, position) {\n        const emitterOptions = new Emitter();\n        emitterOptions.load(options);\n        const emitter = new EmitterInstance(this._engine, this, this.container, emitterOptions, position);\n        this.array.push(emitter);\n        return emitter;\n    }\n    handleClickMode(mode) {\n        const emitterOptions = this.emitters, modeEmitters = this.interactivityEmitters;\n        if (mode !== \"emitter\") {\n            return;\n        }\n        let emittersModeOptions;\n        if (modeEmitters && isArray(modeEmitters.value)) {\n            if (modeEmitters.value.length > 0 && modeEmitters.random.enable) {\n                emittersModeOptions = [];\n                const usedIndexes = [];\n                for (let i = 0; i < modeEmitters.random.count; i++) {\n                    const idx = arrayRandomIndex(modeEmitters.value);\n                    if (usedIndexes.includes(idx) && usedIndexes.length < modeEmitters.value.length) {\n                        i--;\n                        continue;\n                    }\n                    usedIndexes.push(idx);\n                    emittersModeOptions.push(itemFromArray(modeEmitters.value, idx));\n                }\n            }\n            else {\n                emittersModeOptions = modeEmitters.value;\n            }\n        }\n        else {\n            emittersModeOptions = modeEmitters?.value;\n        }\n        const emittersOptions = emittersModeOptions ?? emitterOptions, ePosition = this.container.interactivity.mouse.clickPosition;\n        executeOnSingleOrMultiple(emittersOptions, (emitter) => {\n            this.addEmitter(emitter, ePosition);\n        });\n    }\n    async init() {\n        this.emitters = this.container.actualOptions.emitters;\n        this.interactivityEmitters = this.container.actualOptions.interactivity.modes.emitters;\n        if (!this.emitters) {\n            return;\n        }\n        if (isArray(this.emitters)) {\n            for (const emitterOptions of this.emitters) {\n                this.addEmitter(emitterOptions);\n            }\n        }\n        else {\n            this.addEmitter(this.emitters);\n        }\n    }\n    pause() {\n        for (const emitter of this.array) {\n            emitter.pause();\n        }\n    }\n    play() {\n        for (const emitter of this.array) {\n            emitter.play();\n        }\n    }\n    removeEmitter(emitter) {\n        const index = this.array.indexOf(emitter);\n        if (index >= 0) {\n            this.array.splice(index, 1);\n        }\n    }\n    resize() {\n        for (const emitter of this.array) {\n            emitter.resize();\n        }\n    }\n    stop() {\n        this.array = [];\n    }\n    update(delta) {\n        for (const emitter of this.array) {\n            emitter.update(delta);\n        }\n    }\n}\n","const shapes = new Map();\nexport class ShapeManager {\n    constructor(engine) {\n        this._engine = engine;\n    }\n    addShape(name, drawer) {\n        if (!this.getShape(name)) {\n            shapes.set(name, drawer);\n        }\n    }\n    getShape(name) {\n        return shapes.get(name);\n    }\n    getSupportedShapes() {\n        return shapes.keys();\n    }\n}\n","import { getRandom } from \"tsparticles-engine\";\nfunction randomSquareCoordinate(position, offset) {\n    return position + offset * (getRandom() - 0.5);\n}\nexport class SquareShape {\n    randomPosition(position, size, fill) {\n        if (fill) {\n            return {\n                x: randomSquareCoordinate(position.x, size.width),\n                y: randomSquareCoordinate(position.y, size.height),\n            };\n        }\n        else {\n            const halfW = size.width / 2, halfH = size.height / 2, side = Math.floor(getRandom() * 4), v = (getRandom() - 0.5) * 2;\n            switch (side) {\n                case 0:\n                    return {\n                        x: position.x + v * halfW,\n                        y: position.y - halfH,\n                    };\n                case 1:\n                    return {\n                        x: position.x - halfW,\n                        y: position.y + v * halfH,\n                    };\n                case 2:\n                    return {\n                        x: position.x + v * halfW,\n                        y: position.y + halfH,\n                    };\n                case 3:\n                default:\n                    return {\n                        x: position.x + halfW,\n                        y: position.y + v * halfH,\n                    };\n            }\n        }\n    }\n}\n","import { executeOnSingleOrMultiple, isArray, isInArray, } from \"tsparticles-engine\";\nimport { CircleShape } from \"./Shapes/Circle/CircleShape\";\nimport { Emitter } from \"./Options/Classes/Emitter\";\nimport { Emitters } from \"./Emitters\";\nimport { ShapeManager } from \"./ShapeManager\";\nimport { SquareShape } from \"./Shapes/Square/SquareShape\";\nclass EmittersPlugin {\n    constructor(engine) {\n        this._engine = engine;\n        this.id = \"emitters\";\n    }\n    getPlugin(container) {\n        return new Emitters(this._engine, container);\n    }\n    loadOptions(options, source) {\n        if (!this.needsPlugin(options) && !this.needsPlugin(source)) {\n            return;\n        }\n        if (source?.emitters) {\n            options.emitters = executeOnSingleOrMultiple(source.emitters, (emitter) => {\n                const tmp = new Emitter();\n                tmp.load(emitter);\n                return tmp;\n            });\n        }\n        const interactivityEmitters = source?.interactivity?.modes?.emitters;\n        if (interactivityEmitters) {\n            if (isArray(interactivityEmitters)) {\n                options.interactivity.modes.emitters = {\n                    random: {\n                        count: 1,\n                        enable: true,\n                    },\n                    value: interactivityEmitters.map((s) => {\n                        const tmp = new Emitter();\n                        tmp.load(s);\n                        return tmp;\n                    }),\n                };\n            }\n            else {\n                const emitterMode = interactivityEmitters;\n                if (emitterMode.value !== undefined) {\n                    if (isArray(emitterMode.value)) {\n                        options.interactivity.modes.emitters = {\n                            random: {\n                                count: emitterMode.random.count ?? 1,\n                                enable: emitterMode.random.enable ?? false,\n                            },\n                            value: emitterMode.value.map((s) => {\n                                const tmp = new Emitter();\n                                tmp.load(s);\n                                return tmp;\n                            }),\n                        };\n                    }\n                    else {\n                        const tmp = new Emitter();\n                        tmp.load(emitterMode.value);\n                        options.interactivity.modes.emitters = {\n                            random: {\n                                count: emitterMode.random.count ?? 1,\n                                enable: emitterMode.random.enable ?? false,\n                            },\n                            value: tmp,\n                        };\n                    }\n                }\n                else {\n                    const emitterOptions = (options.interactivity.modes.emitters = {\n                        random: {\n                            count: 1,\n                            enable: false,\n                        },\n                        value: new Emitter(),\n                    });\n                    emitterOptions.value.load(interactivityEmitters);\n                }\n            }\n        }\n    }\n    needsPlugin(options) {\n        if (!options) {\n            return false;\n        }\n        const emitters = options.emitters;\n        return ((isArray(emitters) && !!emitters.length) ||\n            emitters !== undefined ||\n            (!!options.interactivity?.events?.onClick?.mode &&\n                isInArray(\"emitter\", options.interactivity.events.onClick.mode)));\n    }\n}\nexport async function loadEmittersPlugin(engine, refresh = true) {\n    if (!engine.emitterShapeManager) {\n        engine.emitterShapeManager = new ShapeManager(engine);\n    }\n    if (!engine.addEmitterShape) {\n        engine.addEmitterShape = (name, shape) => {\n            engine.emitterShapeManager?.addShape(name, shape);\n        };\n    }\n    const plugin = new EmittersPlugin(engine);\n    await engine.addPlugin(plugin, refresh);\n    engine.addEmitterShape(\"circle\", new CircleShape());\n    engine.addEmitterShape(\"square\", new SquareShape());\n}\nexport * from \"./EmitterContainer\";\nexport * from \"./EmittersEngine\";\nexport * from \"./Enums/EmitterClickMode\";\nexport * from \"./Enums/EmitterShapeType\";\n","export class ExternalInteractorBase {\n    constructor(container) {\n        this.container = container;\n        this.type = \"external\";\n    }\n}\n","import { deepExtend } from \"tsparticles-engine\";\nexport class Trail {\n    constructor() {\n        this.delay = 1;\n        this.pauseOnStop = false;\n        this.quantity = 1;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.delay !== undefined) {\n            this.delay = data.delay;\n        }\n        if (data.quantity !== undefined) {\n            this.quantity = data.quantity;\n        }\n        if (data.particles !== undefined) {\n            this.particles = deepExtend({}, data.particles);\n        }\n        if (data.pauseOnStop !== undefined) {\n            this.pauseOnStop = data.pauseOnStop;\n        }\n    }\n}\n","import { ExternalInteractorBase, isInArray, } from \"tsparticles-engine\";\nimport { Trail } from \"./Options/Classes/Trail\";\nexport class TrailMaker extends ExternalInteractorBase {\n    constructor(container) {\n        super(container);\n        this._delay = 0;\n    }\n    clear() {\n    }\n    init() {\n    }\n    async interact(delta) {\n        const container = this.container, { interactivity } = container;\n        if (!container.retina.reduceFactor) {\n            return;\n        }\n        const options = container.actualOptions, trailOptions = options.interactivity.modes.trail;\n        if (!trailOptions) {\n            return;\n        }\n        const optDelay = (trailOptions.delay * 1000) / this.container.retina.reduceFactor;\n        if (this._delay < optDelay) {\n            this._delay += delta.value;\n        }\n        if (this._delay < optDelay) {\n            return;\n        }\n        const canEmit = !(trailOptions.pauseOnStop &&\n            (interactivity.mouse.position === this._lastPosition ||\n                (interactivity.mouse.position?.x === this._lastPosition?.x &&\n                    interactivity.mouse.position?.y === this._lastPosition?.y)));\n        const mousePos = container.interactivity.mouse.position;\n        if (mousePos) {\n            this._lastPosition = { ...mousePos };\n        }\n        else {\n            delete this._lastPosition;\n        }\n        if (canEmit) {\n            container.particles.push(trailOptions.quantity, container.interactivity.mouse, trailOptions.particles);\n        }\n        this._delay -= optDelay;\n    }\n    isEnabled(particle) {\n        const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events;\n        return ((mouse.clicking && mouse.inside && !!mouse.position && isInArray(\"trail\", events.onClick.mode)) ||\n            (mouse.inside && !!mouse.position && isInArray(\"trail\", events.onHover.mode)));\n    }\n    loadModeOptions(options, ...sources) {\n        if (!options.trail) {\n            options.trail = new Trail();\n        }\n        for (const source of sources) {\n            options.trail.load(source?.trail);\n        }\n    }\n    reset() {\n    }\n}\n","import { setRangeValue } from \"tsparticles-engine\";\nexport class RollLight {\n    constructor() {\n        this.enable = false;\n        this.value = 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.value !== undefined) {\n            this.value = setRangeValue(data.value);\n        }\n    }\n}\n","import { OptionsColor, setRangeValue, } from \"tsparticles-engine\";\nimport { RollLight } from \"./RollLight\";\nexport class Roll {\n    constructor() {\n        this.darken = new RollLight();\n        this.enable = false;\n        this.enlighten = new RollLight();\n        this.mode = \"vertical\";\n        this.speed = 25;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.backColor !== undefined) {\n            this.backColor = OptionsColor.create(this.backColor, data.backColor);\n        }\n        this.darken.load(data.darken);\n        if (data.enable !== undefined) {\n            this.enable = data.enable;\n        }\n        this.enlighten.load(data.enlighten);\n        if (data.mode !== undefined) {\n            this.mode = data.mode;\n        }\n        if (data.speed !== undefined) {\n            this.speed = setRangeValue(data.speed);\n        }\n    }\n}\n","import { initParticle, updateRoll } from \"./Utils\";\nimport { Roll } from \"./Options/Classes/Roll\";\nexport class RollUpdater {\n    getTransformValues(particle) {\n        const roll = particle.roll?.enable && particle.roll, rollHorizontal = roll && roll.horizontal, rollVertical = roll && roll.vertical;\n        return {\n            a: rollHorizontal ? Math.cos(roll.angle) : undefined,\n            d: rollVertical ? Math.sin(roll.angle) : undefined,\n        };\n    }\n    init(particle) {\n        initParticle(particle);\n    }\n    isEnabled(particle) {\n        const roll = particle.options.roll;\n        return !particle.destroyed && !particle.spawning && !!roll?.enable;\n    }\n    loadOptions(options, ...sources) {\n        if (!options.roll) {\n            options.roll = new Roll();\n        }\n        for (const source of sources) {\n            options.roll.load(source?.roll);\n        }\n    }\n    update(particle, delta) {\n        if (!this.isEnabled(particle)) {\n            return;\n        }\n        updateRoll(particle, delta);\n    }\n}\n","import { getRandom, getRangeValue, rangeColorToHsl } from \"tsparticles-engine\";\nexport function initParticle(particle) {\n    const rollOpt = particle.options.roll;\n    if (!rollOpt?.enable) {\n        particle.roll = {\n            enable: false,\n            horizontal: false,\n            vertical: false,\n            angle: 0,\n            speed: 0,\n        };\n        return;\n    }\n    particle.roll = {\n        enable: rollOpt.enable,\n        horizontal: rollOpt.mode === \"horizontal\" || rollOpt.mode === \"both\",\n        vertical: rollOpt.mode === \"vertical\" || rollOpt.mode === \"both\",\n        angle: getRandom() * Math.PI * 2,\n        speed: getRangeValue(rollOpt.speed) / 360,\n    };\n    if (rollOpt.backColor) {\n        particle.backColor = rangeColorToHsl(rollOpt.backColor);\n    }\n    else if (rollOpt.darken.enable && rollOpt.enlighten.enable) {\n        const alterType = getRandom() >= 0.5 ? \"darken\" : \"enlighten\";\n        particle.roll.alter = {\n            type: alterType,\n            value: getRangeValue(alterType === \"darken\" ? rollOpt.darken.value : rollOpt.enlighten.value),\n        };\n    }\n    else if (rollOpt.darken.enable) {\n        particle.roll.alter = {\n            type: \"darken\",\n            value: getRangeValue(rollOpt.darken.value),\n        };\n    }\n    else if (rollOpt.enlighten.enable) {\n        particle.roll.alter = {\n            type: \"enlighten\",\n            value: getRangeValue(rollOpt.enlighten.value),\n        };\n    }\n}\nexport function updateRoll(particle, delta) {\n    const roll = particle.options.roll, data = particle.roll;\n    if (!data || !roll?.enable) {\n        return;\n    }\n    const speed = data.speed * delta.factor, max = 2 * Math.PI;\n    data.angle += speed;\n    if (data.angle > max) {\n        data.angle -= max;\n    }\n}\n","import { tsParticles } from \"tsparticles-engine\";\nexport class Particles {\n    static init(options) {\n        const particles = new Particles(), selector = options.selector;\n        if (!selector) {\n            throw new Error(\"No selector provided\");\n        }\n        const el = document.querySelector(selector);\n        if (!el) {\n            throw new Error(\"No element found for selector\");\n        }\n        tsParticles\n            .set(selector.replace(\".\", \"\").replace(\"!\", \"\"), el, {\n            fullScreen: {\n                enable: false,\n            },\n            particles: {\n                color: {\n                    value: options.color ?? \"!000000\",\n                },\n                links: {\n                    color: \"random\",\n                    distance: options.minDistance ?? 120,\n                    enable: options.connectParticles ?? false,\n                },\n                move: {\n                    enable: true,\n                    speed: options.speed ?? 0.5,\n                },\n                number: {\n                    value: options.maxParticles ?? 100,\n                },\n                size: {\n                    value: { min: 1, max: options.sizeVariations ?? 3 },\n                },\n            },\n            responsive: options.responsive?.map((responsive) => ({\n                maxWidth: responsive.breakpoint,\n                options: {\n                    particles: {\n                        color: {\n                            value: responsive.options?.color,\n                        },\n                        links: {\n                            distance: responsive.options?.minDistance,\n                            enable: responsive.options?.connectParticles,\n                        },\n                        number: {\n                            value: options.maxParticles,\n                        },\n                        move: {\n                            enable: true,\n                            speed: responsive.options?.speed,\n                        },\n                        size: {\n                            value: responsive.options?.sizeVariations,\n                        },\n                    },\n                },\n            })),\n        })\n            .then((container) => {\n            particles._container = container;\n        });\n        return particles;\n    }\n    destroy() {\n        const container = this._container;\n        container && container.destroy();\n    }\n    pauseAnimation() {\n        const container = this._container;\n        container && container.pause();\n    }\n    resumeAnimation() {\n        const container = this._container;\n        container && container.play();\n    }\n}\n","const initParticlesJS = (engine) => {\n    const particlesJS = (tagId, options) => {\n        return engine.load(tagId, options);\n    };\n    particlesJS.load = (tagId, pathConfigJson, callback) => {\n        engine\n            .loadJSON(tagId, pathConfigJson)\n            .then((container) => {\n            if (container) {\n                callback(container);\n            }\n        })\n            .catch(() => {\n            callback(undefined);\n        });\n    };\n    particlesJS.setOnClickHandler = (callback) => {\n        engine.setOnClickHandler(callback);\n    };\n    const pJSDom = engine.dom();\n    return { particlesJS, pJSDom };\n};\nexport { initParticlesJS };\n","import { Particles } from \"./marcbruederlin/Particles\";\nimport { initParticlesJS } from \"./VincentGarreau/particles\";\nconst initPjs = (engine) => {\n    const { particlesJS, pJSDom } = initParticlesJS(engine);\n    window.particlesJS = particlesJS;\n    window.pJSDom = pJSDom;\n    window.Particles = Particles;\n    return { particlesJS, pJSDom, Particles };\n};\nexport { initPjs };\n","import { clamp, getDistances, getRandom, } from \"tsparticles-engine\";\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    if (((hDistance && dxFixed >= hDistance) || (vDistance && dyFixed >= vDistance)) && !particle.misplaced) {\n        particle.misplaced = (!!hDistance && dxFixed > hDistance) || (!!vDistance && dyFixed > vDistance);\n        if (hDistance) {\n            particle.velocity.x = particle.velocity.y / 2 - particle.velocity.x;\n        }\n        if (vDistance) {\n            particle.velocity.y = particle.velocity.x / 2 - 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 && ((pos.x < initialPosition.x && vel.x < 0) || (pos.x > initialPosition.x && vel.x > 0))) {\n            vel.x *= -getRandom();\n        }\n        if (vDistance && ((pos.y < initialPosition.y && vel.y < 0) || (pos.y > initialPosition.y && vel.y > 0))) {\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 ? -1 : 1;\n    if (moveDrift && moveSpeed) {\n        particle.velocity.x += (moveDrift * delta.factor) / (60 * moveSpeed);\n    }\n    if (gravityOptions?.enable && moveSpeed) {\n        particle.velocity.y += (gravityFactor * (gravityOptions.acceleration * delta.factor)) / (60 * 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 > 0 &&\n        ((!gravityOptions.inverse && velocity.y >= 0 && velocity.y >= maxSpeed) ||\n            (gravityOptions.inverse && velocity.y <= 0 && 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 = (1 - 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);\n    if (particle.spin.radius > maxCanvasSize / 2) {\n        particle.spin.radius = maxCanvasSize / 2;\n        particle.spin.acceleration *= -1;\n    }\n    else if (particle.spin.radius < 0) {\n        particle.spin.radius = 0;\n        particle.spin.acceleration *= -1;\n    }\n    particle.spin.angle += (moveSpeed / 100) * (1 - 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, -1, 1);\n        particle.velocity.y = clamp(particle.velocity.y, -1, 1);\n    }\n    particle.lastPathTime -= particle.pathDelay;\n}\nexport function getProximitySpeedFactor(particle) {\n    return particle.slow.inRange ? particle.slow.factor : 1;\n}\n","import { getDistance, getRangeMax, getRangeValue, } from \"tsparticles-engine\";\nimport { applyDistance, getProximitySpeedFactor, move, spin } from \"./Utils\";\nconst diffFactor = 2;\nexport class BaseMover {\n    constructor() {\n        this._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 }, spinCenter = {\n                x: (spinPos.x / 100) * container.canvas.size.width,\n                y: (spinPos.y / 100) * 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            particle.spin = {\n                center: spinCenter,\n                direction: particle.velocity.x >= 0 ? \"clockwise\" : \"counter-clockwise\",\n                angle: particle.velocity.angle,\n                radius: distance,\n                acceleration: particle.retina.spinAcceleration,\n            };\n        };\n    }\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        this._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, slowFactor = getProximitySpeedFactor(particle), baseSpeed = (particle.retina.moveSpeed ??= getRangeValue(moveOptions.speed) * pxRatio) *\n            container.retina.reduceFactor, moveDrift = (particle.retina.moveDrift ??= getRangeValue(particle.options.move.drift) * pxRatio), maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : 1, moveSpeed = (baseSpeed * sizeFactor * slowFactor * (delta.factor || 1)) / 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","import { isObject } from \"tsparticles-engine\";\nexport class CircleDrawer {\n    draw(context, particle, radius) {\n        if (!particle.circleRange) {\n            particle.circleRange = { min: 0, max: Math.PI * 2 };\n        }\n        const circleRange = particle.circleRange;\n        context.arc(0, 0, radius, circleRange.min, circleRange.max, false);\n    }\n    getSidesCount() {\n        return 12;\n    }\n    particleInit(container, particle) {\n        const shapeData = particle.shapeData, angle = shapeData?.angle ?? {\n            max: 360,\n            min: 0,\n        };\n        particle.circleRange = !isObject(angle)\n            ? {\n                min: 0,\n                max: (angle * Math.PI) / 180,\n            }\n            : { min: (angle.min * Math.PI) / 180, max: (angle.max * Math.PI) / 180 };\n    }\n}\n","import { randomInRange, } from \"tsparticles-engine\";\nfunction updateColorValue(delta, colorValue, valueAnimation, max, decrease) {\n    if (!colorValue ||\n        !valueAnimation.enable ||\n        ((colorValue.maxLoops ?? 0) > 0 && (colorValue.loops ?? 0) > (colorValue.maxLoops ?? 0))) {\n        return;\n    }\n    if (!colorValue.time) {\n        colorValue.time = 0;\n    }\n    if ((colorValue.delayTime ?? 0) > 0 && colorValue.time < (colorValue.delayTime ?? 0)) {\n        colorValue.time += delta.value;\n    }\n    if ((colorValue.delayTime ?? 0) > 0 && colorValue.time < (colorValue.delayTime ?? 0)) {\n        return;\n    }\n    const offset = randomInRange(valueAnimation.offset), velocity = (colorValue.velocity ?? 0) * delta.factor + offset * 3.6, decay = colorValue.decay ?? 1;\n    if (!decrease || colorValue.status === \"increasing\") {\n        colorValue.value += velocity;\n        if (colorValue.value > max) {\n            if (!colorValue.loops) {\n                colorValue.loops = 0;\n            }\n            colorValue.loops++;\n            if (decrease) {\n                colorValue.status = \"decreasing\";\n                colorValue.value -= colorValue.value % max;\n            }\n        }\n    }\n    else {\n        colorValue.value -= velocity;\n        if (colorValue.value < 0) {\n            if (!colorValue.loops) {\n                colorValue.loops = 0;\n            }\n            colorValue.loops++;\n            colorValue.status = \"increasing\";\n            colorValue.value += colorValue.value;\n        }\n    }\n    if (colorValue.velocity && decay !== 1) {\n        colorValue.velocity *= decay;\n    }\n    if (colorValue.value > max) {\n        colorValue.value %= max;\n    }\n}\nexport function updateColor(particle, delta) {\n    const { h: hAnimation, s: sAnimation, l: lAnimation } = particle.options.color.animation, { color } = particle;\n    if (!color) {\n        return;\n    }\n    const { h, s, l } = color;\n    if (h) {\n        updateColorValue(delta, h, hAnimation, 360, false);\n    }\n    if (s) {\n        updateColorValue(delta, s, sAnimation, 100, true);\n    }\n    if (l) {\n        updateColorValue(delta, l, lAnimation, 100, true);\n    }\n}\n","import { getHslAnimationFromHsl, rangeColorToHsl, } from \"tsparticles-engine\";\nimport { updateColor } from \"./Utils\";\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, delta);\n    }\n}\n","import { getRandom, getRangeValue, initParticleNumericAnimationValue, } from \"tsparticles-engine\";\nimport { updateOpacity } from \"./Utils\";\nexport class OpacityUpdater {\n    constructor(container) {\n        this.container = container;\n    }\n    init(particle) {\n        const opacityOptions = particle.options.opacity;\n        particle.opacity = initParticleNumericAnimationValue(opacityOptions, 1);\n        const opacityAnimation = opacityOptions.animation;\n        if (opacityAnimation.enable) {\n            particle.opacity.velocity =\n                (getRangeValue(opacityAnimation.speed) / 100) * this.container.retina.reduceFactor;\n            if (!opacityAnimation.sync) {\n                particle.opacity.velocity *= getRandom();\n            }\n        }\n    }\n    isEnabled(particle) {\n        return (!particle.destroyed &&\n            !particle.spawning &&\n            !!particle.opacity &&\n            particle.opacity.enable &&\n            ((particle.opacity.maxLoops ?? 0) <= 0 ||\n                ((particle.opacity.maxLoops ?? 0) > 0 &&\n                    (particle.opacity.loops ?? 0) < (particle.opacity.maxLoops ?? 0))));\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)) {\n            return;\n        }\n        updateOpacity(particle, delta);\n    }\n}\n","import { clamp } from \"tsparticles-engine\";\nfunction checkDestroy(particle, value, minValue, maxValue) {\n    switch (particle.options.opacity.animation.destroy) {\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 updateOpacity(particle, delta) {\n    const data = particle.opacity;\n    if (particle.destroyed || !data?.enable || ((data.maxLoops ?? 0) > 0 && (data.loops ?? 0) > (data.maxLoops ?? 0))) {\n        return;\n    }\n    const minValue = data.min, maxValue = data.max, decay = data.decay ?? 1;\n    if (!data.time) {\n        data.time = 0;\n    }\n    if ((data.delayTime ?? 0) > 0 && data.time < (data.delayTime ?? 0)) {\n        data.time += delta.value;\n    }\n    if ((data.delayTime ?? 0) > 0 && data.time < (data.delayTime ?? 0)) {\n        return;\n    }\n    switch (data.status) {\n        case \"increasing\":\n            if (data.value >= maxValue) {\n                data.status = \"decreasing\";\n                if (!data.loops) {\n                    data.loops = 0;\n                }\n                data.loops++;\n            }\n            else {\n                data.value += (data.velocity ?? 0) * delta.factor;\n            }\n            break;\n        case \"decreasing\":\n            if (data.value <= minValue) {\n                data.status = \"increasing\";\n                if (!data.loops) {\n                    data.loops = 0;\n                }\n                data.loops++;\n            }\n            else {\n                data.value -= (data.velocity ?? 0) * delta.factor;\n            }\n            break;\n    }\n    if (data.velocity && data.decay !== 1) {\n        data.velocity *= decay;\n    }\n    checkDestroy(particle, data.value, minValue, maxValue);\n    if (!particle.destroyed) {\n        data.value = clamp(data.value, minValue, maxValue);\n    }\n}\n","import { calculateBounds, } from \"tsparticles-engine\";\nimport { bounceHorizontal, bounceVertical } from \"./Utils\";\nexport class BounceOutMode {\n    constructor(container) {\n        this.container = container;\n        this.modes = [\n            \"bounce\",\n            \"bounce-vertical\",\n            \"bounce-horizontal\",\n            \"bounceVertical\",\n            \"bounceHorizontal\",\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 { getValue } from \"tsparticles-engine\";\nexport function bounceHorizontal(data) {\n    if ((data.outMode !== \"bounce\" &&\n        data.outMode !== \"bounce-horizontal\" &&\n        data.outMode !== \"bounceHorizontal\" &&\n        data.outMode !== \"split\") ||\n        (data.direction !== \"left\" && data.direction !== \"right\")) {\n        return;\n    }\n    if (data.bounds.right < 0 && 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\" && data.bounds.right >= data.canvasSize.width && velocity > 0) ||\n        (data.direction === \"left\" && data.bounds.left <= 0 && velocity < 0)) {\n        const newVelocity = getValue(data.particle.options.bounce.horizontal);\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 <= 0 && 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\" &&\n        data.outMode !== \"bounce-vertical\" &&\n        data.outMode !== \"bounceVertical\" &&\n        data.outMode !== \"split\") ||\n        (data.direction !== \"bottom\" && data.direction !== \"top\")) {\n        return;\n    }\n    if (data.bounds.bottom < 0 && 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\" && data.bounds.bottom >= data.canvasSize.height && velocity > 0) ||\n        (data.direction === \"top\" && data.bounds.top <= 0 && velocity < 0)) {\n        const newVelocity = getValue(data.particle.options.bounce.vertical);\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 <= 0 && data.direction === \"top\") {\n        data.particle.position.y = minPos;\n    }\n    if (data.outMode === \"split\") {\n        data.particle.destroy();\n    }\n}\n","import { Vector, getDistances, isPointInside, } from \"tsparticles-engine\";\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);\n                const { x: vx, y: vy } = particle.velocity;\n                if ((vx < 0 && dx > particle.moveCenter.radius) ||\n                    (vy < 0 && dy > particle.moveCenter.radius) ||\n                    (vx >= 0 && dx < -particle.moveCenter.radius) ||\n                    (vy >= 0 && 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\";\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;\n        const canvasSize = container.canvas.size;\n        const pRadius = particle.getRadius();\n        if (!gravityOptions.enable) {\n            if ((particle.velocity.y > 0 && particle.position.y <= canvasSize.height + pRadius) ||\n                (particle.velocity.y < 0 && particle.position.y >= -pRadius) ||\n                (particle.velocity.x > 0 && particle.position.x <= canvasSize.width + pRadius) ||\n                (particle.velocity.x < 0 && 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\";\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 <= 0 && dx >= 0) || (vy <= 0 && dy >= 0) || (vx >= 0 && dx <= 0) || (vy >= 0 && dy <= 0)) {\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 wrap = 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 (!wrap) {\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 (!wrap) {\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 (!wrap) {\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 (!wrap) {\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\";\nimport { DestroyOutMode } from \"./DestroyOutMode\";\nimport { NoneOutMode } from \"./NoneOutMode\";\nimport { OutOutMode } from \"./OutOutMode\";\nexport class OutOfCanvasUpdater {\n    constructor(container) {\n        this.container = 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.updaters = [\n            new BounceOutMode(container),\n            new DestroyOutMode(container),\n            new OutOutMode(container),\n            new NoneOutMode(container),\n        ];\n    }\n    init() {\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 } from \"tsparticles-engine\";\nimport { updateSize } from \"./Utils\";\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) / 100) *\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 ?? 0) <= 0 ||\n                ((particle.size.maxLoops ?? 0) > 0 && (particle.size.loops ?? 0) < (particle.size.maxLoops ?? 0))));\n    }\n    reset(particle) {\n        particle.size.loops = 0;\n    }\n    update(particle, delta) {\n        if (!this.isEnabled(particle)) {\n            return;\n        }\n        updateSize(particle, delta);\n    }\n}\n","import { clamp } from \"tsparticles-engine\";\nfunction checkDestroy(particle, value, minValue, maxValue) {\n    switch (particle.options.size.animation.destroy) {\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 updateSize(particle, delta) {\n    const data = particle.size;\n    if (particle.destroyed ||\n        !data ||\n        !data.enable ||\n        ((data.maxLoops ?? 0) > 0 && (data.loops ?? 0) > (data.maxLoops ?? 0))) {\n        return;\n    }\n    const sizeVelocity = (data.velocity ?? 0) * delta.factor, minValue = data.min, maxValue = data.max, decay = data.decay ?? 1;\n    if (!data.time) {\n        data.time = 0;\n    }\n    if ((data.delayTime ?? 0) > 0 && data.time < (data.delayTime ?? 0)) {\n        data.time += delta.value;\n    }\n    if ((data.delayTime ?? 0) > 0 && data.time < (data.delayTime ?? 0)) {\n        return;\n    }\n    switch (data.status) {\n        case \"increasing\":\n            if (data.value >= maxValue) {\n                data.status = \"decreasing\";\n                if (!data.loops) {\n                    data.loops = 0;\n                }\n                data.loops++;\n            }\n            else {\n                data.value += sizeVelocity;\n            }\n            break;\n        case \"decreasing\":\n            if (data.value <= minValue) {\n                data.status = \"increasing\";\n                if (!data.loops) {\n                    data.loops = 0;\n                }\n                data.loops++;\n            }\n            else {\n                data.value -= sizeVelocity;\n            }\n    }\n    if (data.velocity && decay !== 1) {\n        data.velocity *= decay;\n    }\n    checkDestroy(particle, data.value, minValue, maxValue);\n    if (!particle.destroyed) {\n        data.value = clamp(data.value, minValue, maxValue);\n    }\n}\n","import { loadBaseMover } from \"tsparticles-move-base\";\nimport { loadCircleShape } from \"tsparticles-shape-circle\";\nimport { loadColorUpdater } from \"tsparticles-updater-color\";\nimport { loadOpacityUpdater } from \"tsparticles-updater-opacity\";\nimport { loadOutModesUpdater } from \"tsparticles-updater-out-modes\";\nimport { loadSizeUpdater } from \"tsparticles-updater-size\";\nexport async function loadBasic(engine, refresh = true) {\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 { BaseMover } from \"./BaseMover\";\nexport async function loadBaseMover(engine, refresh = true) {\n    await engine.addMover(\"base\", () => new BaseMover(), refresh);\n}\n","import { CircleDrawer } from \"./CircleDrawer\";\nexport async function loadCircleShape(engine, refresh = true) {\n    await engine.addShape(\"circle\", new CircleDrawer(), refresh);\n}\n","import { ColorUpdater } from \"./ColorUpdater\";\nexport async function loadColorUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"color\", (container) => new ColorUpdater(container), refresh);\n}\n","import { OpacityUpdater } from \"./OpacityUpdater\";\nexport async function loadOpacityUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"opacity\", (container) => new OpacityUpdater(container), refresh);\n}\n","import { OutOfCanvasUpdater } from \"./OutOfCanvasUpdater\";\nexport async function loadOutModesUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"outModes\", (container) => new OutOfCanvasUpdater(container), refresh);\n}\n","import { SizeUpdater } from \"./SizeUpdater\";\nexport async function loadSizeUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"size\", () => new SizeUpdater(), 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","import { Circle, ExternalInteractorBase, Vector, clamp, getDistances, getEasing, isInArray, mouseMoveEvent, } from \"tsparticles-engine\";\nimport { Attract } from \"./Options/Classes/Attract\";\nexport class Attractor extends ExternalInteractorBase {\n    constructor(engine, container) {\n        super(container);\n        this._clickAttract = () => {\n            const container = this.container;\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 < 0 || !mousePos) {\n                    return;\n                }\n                this._processAttract(mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius));\n            }\n            else if (attract.clicking === false) {\n                attract.particles = [];\n            }\n            return;\n        };\n        this._hoverAttract = () => {\n            const container = this.container, mousePos = container.interactivity.mouse.position, attractRadius = container.retina.attractModeDistance;\n            if (!attractRadius || attractRadius < 0 || !mousePos) {\n                return;\n            }\n            this._processAttract(mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius));\n        };\n        this._processAttract = (position, attractRadius, area) => {\n            const container = this.container, attractOptions = container.actualOptions.interactivity.modes.attract;\n            if (!attractOptions) {\n                return;\n            }\n            const query = container.particles.quadTree.query(area, (p) => this.isEnabled(p));\n            for (const particle of query) {\n                const { dx, dy, distance } = getDistances(particle.position, position);\n                const velocity = attractOptions.speed * attractOptions.factor;\n                const attractFactor = clamp(getEasing(attractOptions.easing)(1 - distance / attractRadius) * velocity, 0, attractOptions.maxSpeed);\n                const normVec = Vector.create(distance === 0 ? velocity : (dx / distance) * attractFactor, distance === 0 ? velocity : (dy / distance) * attractFactor);\n                particle.position.subFrom(normVec);\n            }\n        };\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 !== \"attract\") {\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 * 1000);\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    async interact() {\n        const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, clickEnabled = events.onClick.enable, clickMode = events.onClick.mode;\n        if (mouseMoveStatus && hoverEnabled && isInArray(\"attract\", hoverMode)) {\n            this._hoverAttract();\n        }\n        else if (clickEnabled && isInArray(\"attract\", clickMode)) {\n            this._clickAttract();\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(\"attract\", hoverMode) || isInArray(\"attract\", 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","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","import { Circle, ExternalInteractorBase, Rectangle, Vector, calculateBounds, circleBounce, circleBounceDataFromParticle, divModeExecute, isDivModeEnabled, isInArray, mouseMoveEvent, rectBounce, } from \"tsparticles-engine\";\nimport { Bounce } from \"./Options/Classes/Bounce\";\nexport class Bouncer extends ExternalInteractorBase {\n    constructor(container) {\n        super(container);\n        this._processBounce = (position, radius, area) => {\n            const query = this.container.particles.quadTree.query(area, (p) => this.isEnabled(p));\n            for (const particle of query) {\n                if (area instanceof Circle) {\n                    circleBounce(circleBounceDataFromParticle(particle), {\n                        position,\n                        radius,\n                        mass: (radius ** 2 * Math.PI) / 2,\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        };\n        this._processMouseBounce = () => {\n            const container = this.container, pxRatio = container.retina.pixelRatio, tolerance = 10 * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;\n            if (!radius || radius < 0 || !mousePos) {\n                return;\n            }\n            this._processBounce(mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance));\n        };\n        this._singleSelectorBounce = (selector, div) => {\n            const container = this.container, 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 / 2) * pxRatio,\n                    y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio,\n                }, radius = (elem.offsetWidth / 2) * pxRatio, tolerance = 10 * 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 * 2, elem.offsetHeight * pxRatio + tolerance * 2);\n                this._processBounce(pos, radius, area);\n            });\n        };\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    async 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(\"bounce\", hoverMode)) {\n            this._processMouseBounce();\n        }\n        else {\n            divModeExecute(\"bounce\", divs, (selector, div) => this._singleSelectorBounce(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;\n        return ((mouse.position && events.onHover.enable && isInArray(\"bounce\", events.onHover.mode)) ||\n            isDivModeEnabled(\"bounce\", 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 { 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 { executeOnSingleOrMultiple, } from \"tsparticles-engine\";\nimport { BubbleBase } from \"./BubbleBase\";\nexport class BubbleDiv extends BubbleBase {\n    constructor() {\n        super();\n        this.selectors = [];\n    }\n    get ids() {\n        return executeOnSingleOrMultiple(this.selectors, (t) => t.replace(\"#\", \"\"));\n    }\n    set ids(value) {\n        this.selectors = executeOnSingleOrMultiple(value, (t) => `#${t}`);\n    }\n    load(data) {\n        super.load(data);\n        if (!data) {\n            return;\n        }\n        if (data.ids !== undefined) {\n            this.ids = data.ids;\n        }\n        if (data.selectors !== undefined) {\n            this.selectors = data.selectors;\n        }\n    }\n}\n","import { executeOnSingleOrMultiple, } from \"tsparticles-engine\";\nimport { BubbleBase } from \"./BubbleBase\";\nimport { BubbleDiv } from \"./BubbleDiv\";\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","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, mouseLeaveEvent, mouseMoveEvent, rangeColorToHsl, rgbToHsl, } from \"tsparticles-engine\";\nimport { Bubble } from \"./Options/Classes/Bubble\";\nimport { calculateBubbleValue } from \"./Utils\";\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 < 0) {\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 || 0)) / 1000;\n                if (timeSpent > bubbleOptions.duration) {\n                    bubble.durationEnd = true;\n                }\n                if (timeSpent > bubbleOptions.duration * 2) {\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 ?? 1,\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 < 0 || mousePos === undefined) {\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 = 1 - pointDistance / distance;\n                if (pointDistance <= distance) {\n                    if (ratio >= 0 && 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, 1 - 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 ?? 1, 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 || 0, type = data.type;\n            if (!bubbleDistance || bubbleDistance < 0 || 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 / 2) * pxRatio,\n                    y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio,\n                }, repulseRadius = (elem.offsetWidth / 2) * 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, 1, divBubble);\n                    this._hoverBubbleOpacity(particle, 1, divBubble);\n                    this._hoverBubbleColor(particle, 1, divBubble);\n                }\n            });\n        };\n        if (!container.bubble) {\n            container.bubble = {};\n        }\n        this.handleClickMode = (mode) => {\n            if (mode !== \"bubble\") {\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    async 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(\"bubble\", hoverMode)) {\n            this._hoverBubble();\n        }\n        else if (clickEnabled && isInArray(\"bubble\", clickMode)) {\n            this._clickBubble();\n        }\n        else {\n            divModeExecute(\"bubble\", 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(\"bubble\", onDiv);\n        if (!(divBubble || (onHover.enable && mouse.position) || (onClick.enable && mouse.clickPosition))) {\n            return false;\n        }\n        return isInArray(\"bubble\", onHover.mode) || isInArray(\"bubble\", 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","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\";\nexport class Connect {\n    constructor() {\n        this.distance = 80;\n        this.links = new ConnectLinks();\n        this.radius = 60;\n    }\n    get lineLinked() {\n        return this.links;\n    }\n    set lineLinked(value) {\n        this.links = value;\n    }\n    get line_linked() {\n        return this.links;\n    }\n    set line_linked(value) {\n        this.links = value;\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 ?? data.lineLinked ?? data.line_linked);\n        if (data.radius !== undefined) {\n            this.radius = data.radius;\n        }\n    }\n}\n","import { colorMix, drawLine, getStyleFromHsl, getStyleFromRgb, } from \"tsparticles-engine\";\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(0, getStyleFromHsl(color1, opacity));\n    grad.addColorStop(gradStop > 1 ? 1 : gradStop, getStyleFromRgb(midRgb, opacity));\n    grad.addColorStop(1, 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 ?? 0, ls, pos1, pos2);\n    });\n}\n","import { ExternalInteractorBase, isInArray, } from \"tsparticles-engine\";\nimport { Connect } from \"./Options/Classes/Connect\";\nimport { drawConnection } from \"./Utils\";\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    async 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;\n            if (!container.retina.connectModeDistance ||\n                container.retina.connectModeDistance < 0 ||\n                !container.retina.connectModeRadius ||\n                container.retina.connectModeRadius < 0 ||\n                !mousePos) {\n                return;\n            }\n            const distance = Math.abs(container.retina.connectModeRadius), query = container.particles.quadTree.queryCircle(mousePos, distance, (p) => this.isEnabled(p));\n            let i = 0;\n            for (const p1 of query) {\n                const pos1 = p1.getPosition();\n                for (const p2 of query.slice(i + 1)) {\n                    const pos2 = p2.getPosition(), distMax = Math.abs(container.retina.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                ++i;\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(\"connect\", 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 { 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\";\nexport class Grab {\n    constructor() {\n        this.distance = 100;\n        this.links = new GrabLinks();\n    }\n    get lineLinked() {\n        return this.links;\n    }\n    set lineLinked(value) {\n        this.links = value;\n    }\n    get line_linked() {\n        return this.links;\n    }\n    set line_linked(value) {\n        this.links = value;\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 ?? data.lineLinked ?? data.line_linked);\n    }\n}\n","import { drawLine, getStyleFromRgb } from \"tsparticles-engine\";\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 ?? 0, beginPos, mousePos, lineColor, opacity);\n    });\n}\n","import { ExternalInteractorBase, getDistance, getLinkColor, getLinkRandomColor, isInArray, mouseMoveEvent, } from \"tsparticles-engine\";\nimport { Grab } from \"./Options/Classes/Grab\";\nimport { drawGrab } from \"./Utils\";\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    async 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 < 0) {\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 <= 0) {\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(\"grab\", 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\";\nexport class Pauser extends ExternalInteractorBase {\n    constructor(container) {\n        super(container);\n        this.handleClickMode = (mode) => {\n            if (mode !== \"pause\") {\n                return;\n            }\n            const container = this.container;\n            if (container.getAnimationStatus()) {\n                container.pause();\n            }\n            else {\n                container.play();\n            }\n        };\n    }\n    clear() {\n    }\n    init() {\n    }\n    async interact() {\n    }\n    isEnabled() {\n        return true;\n    }\n    reset() {\n    }\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    get particles_nb() {\n        return this.quantity;\n    }\n    set particles_nb(value) {\n        this.quantity = setRangeValue(value);\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 ?? data.particles_nb;\n        if (quantity !== undefined) {\n            this.quantity = setRangeValue(quantity);\n        }\n    }\n}\n","import { ExternalInteractorBase, getRangeValue, itemFromArray, } from \"tsparticles-engine\";\nimport { Push } from \"./Options/Classes/Push\";\nexport class Pusher extends ExternalInteractorBase {\n    constructor(container) {\n        super(container);\n        this.handleClickMode = (mode) => {\n            if (mode !== \"push\") {\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 <= 0) {\n                return;\n            }\n            const group = itemFromArray([undefined, ...pushOptions.groups]), groupOptions = group !== undefined ? container.actualOptions.particles.groups[group] : undefined;\n            container.particles.push(quantity, container.interactivity.mouse, groupOptions, group);\n        };\n    }\n    clear() {\n    }\n    init() {\n    }\n    async 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 { setRangeValue } from \"tsparticles-engine\";\nexport class Remove {\n    constructor() {\n        this.quantity = 2;\n    }\n    get particles_nb() {\n        return this.quantity;\n    }\n    set particles_nb(value) {\n        this.quantity = setRangeValue(value);\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        const quantity = data.quantity ?? data.particles_nb;\n        if (quantity !== undefined) {\n            this.quantity = setRangeValue(quantity);\n        }\n    }\n}\n","import { ExternalInteractorBase, getRangeValue, } from \"tsparticles-engine\";\nimport { Remove } from \"./Options/Classes/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 !== \"remove\") {\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    async 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","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 { executeOnSingleOrMultiple, } from \"tsparticles-engine\";\nimport { RepulseBase } from \"./RepulseBase\";\nexport class RepulseDiv extends RepulseBase {\n    constructor() {\n        super();\n        this.selectors = [];\n    }\n    get ids() {\n        return executeOnSingleOrMultiple(this.selectors, (t) => t.replace(\"#\", \"\"));\n    }\n    set ids(value) {\n        this.selectors = executeOnSingleOrMultiple(value, (t) => `#${t}`);\n    }\n    load(data) {\n        super.load(data);\n        if (!data) {\n            return;\n        }\n        if (data.ids !== undefined) {\n            this.ids = data.ids;\n        }\n        if (data.selectors !== undefined) {\n            this.selectors = data.selectors;\n        }\n    }\n}\n","import { executeOnSingleOrMultiple, } from \"tsparticles-engine\";\nimport { RepulseBase } from \"./RepulseBase\";\nimport { RepulseDiv } from \"./RepulseDiv\";\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","import { Circle, ExternalInteractorBase, Rectangle, Vector, clamp, divMode, divModeExecute, getDistances, getEasing, isDivModeEnabled, isInArray, mouseMoveEvent, } from \"tsparticles-engine\";\nimport { Repulse } from \"./Options/Classes/Repulse\";\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 < 0) {\n                    return;\n                }\n                const repulseRadius = Math.pow(repulseDistance / 6, 3), 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 ** 2, 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 < 0 || !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            for (const particle of query) {\n                const { dx, dy, distance } = getDistances(particle.position, position), velocity = (divRepulse?.speed ?? repulseOptions.speed) * repulseOptions.factor, repulseFactor = clamp(getEasing(repulseOptions.easing)(1 - distance / repulseRadius) * velocity, 0, repulseOptions.maxSpeed), normVec = Vector.create(distance === 0 ? velocity : (dx / distance) * repulseFactor, distance === 0 ? 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 / 2) * pxRatio,\n                    y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio,\n                }, repulseRadius = (elem.offsetWidth / 2) * 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 !== \"repulse\") {\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 * 1000);\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    async 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(\"repulse\", hoverMode)) {\n            this._hoverRepulse();\n        }\n        else if (clickEnabled && isInArray(\"repulse\", clickMode)) {\n            this._clickRepulse();\n        }\n        else {\n            divModeExecute(\"repulse\", 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(\"repulse\", 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(\"repulse\", hoverMode) || isInArray(\"repulse\", 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","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","import { ExternalInteractorBase, getDistance, isInArray, } from \"tsparticles-engine\";\nimport { Slow } from \"./Options/Classes/Slow\";\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    async 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(\"slow\", 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 < 0 || !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","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        this.pos += 2;\n        return this.data[this.pos - 2] + (this.data[this.pos - 1] << 8);\n    }\n    readSubBlocks() {\n        let blockString = \"\", size = 0;\n        do {\n            size = this.data[this.pos++];\n            for (let count = size; --count >= 0; blockString += String.fromCharCode(this.data[this.pos++])) {\n            }\n        } while (size !== 0);\n        return blockString;\n    }\n    readSubBlocksBin() {\n        let size = 0, len = 0;\n        for (let offset = 0; (size = this.data[this.pos + offset]) !== 0; offset += size + 1) {\n            len += size;\n        }\n        const blockData = new Uint8Array(len);\n        for (let i = 0; (size = this.data[this.pos++]) !== 0;) {\n            for (let count = size; --count >= 0; blockData[i++] = this.data[this.pos++]) {\n            }\n        }\n        return blockData;\n    }\n    skipSubBlocks() {\n        for (; this.data[this.pos] !== 0; this.pos += this.data[this.pos] + 1) {\n        }\n        this.pos++;\n    }\n}\n","import { InterlaceOffsets, InterlaceSteps } from \"./Constants\";\nimport { ByteStream } from \"./ByteStream\";\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}\nasync function 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        return { r, g, b, a: index === getTransparencyIndex(null) ? (avgAlpha ? ~~((r + g + b) / 3) : 0) : 255 };\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                for (let pixelPos = 0, lineIndex = 0;;) {\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 (let i = 0; i < dic[code].length; i++) {\n                            const { r, g, b, a } = getColor(dic[code][i]);\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                            break;\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        for (let code = 0, size = minCodeSize + 1, pos = 0, dic = [[0]], pixelPos = -4;;) {\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                    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 (let i = 0; i < dic[code].length; i++) {\n                    const { r, g, b, a } = getColor(dic[code][i]);\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            await 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}\n","import { errorPrefix, getLogger, getStyleFromHsl } from \"tsparticles-engine\";\nimport { decodeGIF, getGIFLoopAmount } from \"./GifUtils/Utils\";\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(0, 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 loadGifImage(image) {\n    if (image.type !== \"gif\") {\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) ?? 0;\n        if (image.gifLoopCount === 0) {\n            image.gifLoopCount = Infinity;\n        }\n    }\n    catch {\n        image.error = true;\n    }\n    image.loading = false;\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 ?? 1), 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 ?? imageData.replace_color,\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        img.addEventListener(\"error\", 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.src = url;\n    });\n}\n","import { errorPrefix } from \"tsparticles-engine\";\nimport { replaceImageColor } from \"./Utils\";\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 ?? imageShape.replace_color ?? 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(context, particle, radius, opacity, delta) {\n        const image = particle.image, element = image?.element;\n        if (!image) {\n            return;\n        }\n        context.globalAlpha = opacity;\n        if (image.gif && image.gifData) {\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(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n            if (particle.gifLoopCount === undefined) {\n                particle.gifLoopCount = image.gifLoopCount ?? 0;\n            }\n            let frameIndex = particle.gifFrame ?? 0;\n            const pos = { x: -image.gifData.width * 0.5, y: -image.gifData.height * 0.5 }, frame = image.gifData.frames[frameIndex];\n            if (particle.gifTime === undefined) {\n                particle.gifTime = 0;\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(0, 0, 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(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n                    if (image.gifData.globalColorTable.length === 0) {\n                        offscreenContext.putImageData(image.gifData.frames[0].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(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n                        offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n                        context.drawImage(offscreenCanvas, pos.x, pos.y);\n                        offscreenContext.clearRect(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n                        offscreenContext.putImageData(previousImageData, 0, 0);\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 <= 0) {\n                        return;\n                    }\n                    frameIndex = 0;\n                    offscreenContext.clearRect(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n                }\n                particle.gifFrame = frameIndex;\n            }\n            context.scale(image.gifData.width / radius, image.gifData.height / radius);\n        }\n        else if (element) {\n            const ratio = image.ratio, pos = {\n                x: -radius,\n                y: -radius,\n            };\n            context.drawImage(element, pos.x, pos.y, radius * 2, (radius * 2) / ratio);\n        }\n        context.globalAlpha = 1;\n    }\n    getSidesCount() {\n        return 12;\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, image = this._engine.images.find((t) => t.name === imageData.name || t.source === imageData.src);\n        if (!image) {\n            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, 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 ?? imageData.replace_color ?? image.replaceColor;\n        if (image.loading) {\n            setTimeout(() => {\n                this.particleInit(container, particle);\n            });\n            return;\n        }\n        (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 ? imageData.width / imageData.height : image.ratio ?? 1,\n                    replaceColor: replaceColor,\n                    source: imageData.src,\n                };\n            }\n            if (!imageRes.ratio) {\n                imageRes.ratio = 1;\n            }\n            const fill = imageData.fill ?? particle.fill, close = imageData.close ?? particle.close, imageShape = {\n                image: imageRes,\n                fill,\n                close,\n            };\n            particle.image = imageShape.image;\n            particle.fill = imageShape.fill;\n            particle.close = imageShape.close;\n        })();\n    }\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\";\nexport class ImagePreloaderPlugin {\n    constructor(engine) {\n        this.id = \"imagePreloader\";\n        this._engine = engine;\n    }\n    getPlugin() {\n        return {};\n    }\n    loadOptions(options, source) {\n        if (!source || !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 { downloadSvgImage, loadGifImage, loadImage } from \"./Utils\";\nimport { ImageDrawer } from \"./ImageDrawer\";\nimport { ImagePreloaderPlugin } from \"./ImagePreloader\";\nimport { errorPrefix } from \"tsparticles-engine\";\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 - 3),\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            const imageFunc = data.gif ? loadGifImage : data.replaceColor ? downloadSvgImage : loadImage;\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 preloader = new ImagePreloaderPlugin(engine);\n    await engine.addPlugin(preloader, refresh);\n    await engine.addShape([\"image\", \"images\"], new ImageDrawer(engine), refresh);\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.random.minimumValue = 0.0001;\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\";\nimport { LifeDuration } from \"./LifeDuration\";\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 { getRandom, getRangeValue, randomInRange, setRangeValue, } from \"tsparticles-engine\";\nimport { Life } from \"./Options/Classes/Life\";\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 ? 1 : getRandom())) /\n                    container.retina.reduceFactor) *\n                    1000\n                : 0,\n            delayTime: 0,\n            duration: container.retina.reduceFactor\n                ? ((getRangeValue(lifeOptions.duration.value) * (lifeOptions.duration.sync ? 1 : getRandom())) /\n                    container.retina.reduceFactor) *\n                    1000\n                : 0,\n            time: 0,\n            count: lifeOptions.count,\n        };\n        if (particle.life.duration <= 0) {\n            particle.life.duration = -1;\n        }\n        if (particle.life.count <= 0) {\n            particle.life.count = -1;\n        }\n        if (particle.life) {\n            particle.spawning = particle.life.delay > 0;\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        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 = 0;\n                life.time = 0;\n            }\n            else {\n                return;\n            }\n        }\n        if (life.duration === -1) {\n            return;\n        }\n        if (particle.spawning) {\n            return;\n        }\n        if (justSpawned) {\n            life.time = 0;\n        }\n        else {\n            life.time += delta.value;\n        }\n        if (life.time < life.duration) {\n            return;\n        }\n        life.time = 0;\n        if (particle.life.count > 0) {\n            particle.life.count--;\n        }\n        if (particle.life.count === 0) {\n            particle.destroy();\n            return;\n        }\n        const canvasSize = this.container.canvas.size, widthRange = setRangeValue(0, canvasSize.width), heightRange = setRangeValue(0, canvasSize.width);\n        particle.position.x = randomInRange(widthRange);\n        particle.position.y = randomInRange(heightRange);\n        particle.spawning = true;\n        life.delayTime = 0;\n        life.time = 0;\n        particle.reset();\n        const lifeOptions = particle.options.life;\n        if (lifeOptions) {\n            life.delay = getRangeValue(lifeOptions.delay.value) * 1000;\n            life.duration = getRangeValue(lifeOptions.duration.value) * 1000;\n        }\n    }\n}\n","export class LineDrawer {\n    draw(context, particle, radius) {\n        const shapeData = particle.shapeData;\n        context.moveTo(-radius / 2, 0);\n        context.lineTo(radius / 2, 0);\n        context.lineCap = shapeData?.cap ?? \"butt\";\n    }\n    getSidesCount() {\n        return 1;\n    }\n}\n","import { isSsr } from \"tsparticles-engine\";\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 / 2,\n            y: canvasSize.height / 2,\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","export class ParticlesInteractorBase {\n    constructor(container) {\n        this.container = container;\n        this.type = \"particles\";\n    }\n}\n","import { ParticlesInteractorBase, getDistances, } from \"tsparticles-engine\";\nexport class Attractor extends ParticlesInteractorBase {\n    constructor(container) {\n        super(container);\n    }\n    clear() {\n    }\n    init() {\n    }\n    async interact(p1) {\n        const container = this.container, distance = p1.retina.attractDistance ?? container.retina.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 * 1000), ay = dy / (rotate.y * 1000), p1Factor = p2.size.value / p1.size.value, p2Factor = 1 / 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\";\nfunction updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {\n    const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) / 10, 0, r2);\n    p1.size.value += factor / 2;\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 { absorb } from \"./Absorb\";\nimport { bounce } from \"./Bounce\";\nimport { destroy } from \"./Destroy\";\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 { bounce } from \"./Bounce\";\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 { ParticlesInteractorBase, getDistance } from \"tsparticles-engine\";\nimport { resolveCollision } from \"./ResolveCollision\";\nexport class Collider extends ParticlesInteractorBase {\n    constructor(container) {\n        super(container);\n    }\n    clear() {\n    }\n    init() {\n    }\n    async 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 * 2);\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","import { Circle, Rectangle } from \"tsparticles-engine\";\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;\n        const { 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 * 2);\n            return super.intersects(biggerCircle);\n        }\n        else if (rect.size !== undefined) {\n            const rectSW = new Rectangle(newPos.x, newPos.y, rect.size.width * 2, rect.size.height * 2);\n            return super.intersects(rectSW);\n        }\n        return false;\n    }\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\";\nimport { LinksTriangle } from \"./LinksTriangle\";\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","import { Circle, ParticlesInteractorBase, getDistances, getLinkRandomColor, } from \"tsparticles-engine\";\nimport { CircleWarp } from \"./CircleWarp\";\nimport { Links } from \"./Options/Classes/Links\";\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 ** 2 + warpDistances.y ** 2);\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    async 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 < 0 || pos1.y < 0 || pos1.x > canvasSize.width || pos1.y > canvasSize.height) {\n            return;\n        }\n        const linkOpt1 = p1.options.links, optOpacity = linkOpt1.opacity, optDistance = p1.retina.linksDistance ?? 0, warp = linkOpt1.warp, range = warp\n            ? new CircleWarp(pos1.x, pos1.y, optDistance, canvasSize)\n            : new Circle(pos1.x, pos1.y, optDistance), 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 < 0 || pos2.y < 0 || 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 = (1 - 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 ?? source?.lineLinked ?? source?.line_linked);\n        }\n    }\n    reset() {\n    }\n}\n","import { drawLine, drawTriangle, getDistance, getDistances, getRandom, getStyleFromRgb, rangeColorToRgb, } from \"tsparticles-engine\";\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\";\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 ?? 0, maxDistance = p1.retina.linksDistance ?? 0, { 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) / 2;\n            if (opacityTriangle <= 0) {\n                return;\n            }\n            container.canvas.draw((ctx) => {\n                const pos1 = p1.getPosition(), pos2 = p2.getPosition(), pos3 = p3.getPosition(), linksDistance = p1.retina.linksDistance ?? 0;\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);\n                return (p2.options.links &&\n                    linkFreq <= p2.options.links.frequency &&\n                    p1Links.findIndex((l) => l.destination === t.destination) >= 0);\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 || links.length <= 0) {\n            return;\n        }\n        const p1Links = links.filter((l) => options.links && 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 > 0 && (particle.retina.linksWidth ?? 0) > 0) {\n                this._drawLinkLine(particle, link);\n            }\n        }\n    }\n    async init() {\n        this._freqs.links = new Map();\n        this._freqs.triangles = new Map();\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","import { LinkInstance } from \"./LinkInstance\";\nclass LinksPlugin {\n    constructor() {\n        this.id = \"links\";\n    }\n    getPlugin(container) {\n        return new LinkInstance(container);\n    }\n    loadOptions() {\n    }\n    needsPlugin() {\n        return true;\n    }\n}\nexport async function loadLinksPlugin(engine, refresh = true) {\n    const plugin = new LinksPlugin();\n    await engine.addPlugin(plugin, refresh);\n}\n","import { loadLinksInteraction } from \"./interaction\";\nimport { loadLinksPlugin } from \"./plugin\";\nexport async function loadParticlesLinksInteraction(engine, refresh = true) {\n    await loadLinksInteraction(engine, refresh);\n    await loadLinksPlugin(engine, refresh);\n}\nexport * from \"./Options/Classes/Links\";\nexport * from \"./Options/Classes/LinksShadow\";\nexport * from \"./Options/Classes/LinksTriangle\";\nexport * from \"./Options/Interfaces/ILinks\";\nexport * from \"./Options/Interfaces/ILinksShadow\";\nexport * from \"./Options/Interfaces/ILinksTriangle\";\n","import { Linker } from \"./Linker\";\nexport async function loadLinksInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"particlesLinks\", (container) => new Linker(container), refresh);\n}\n","import { getRangeValue } from \"tsparticles-engine\";\nexport class PolygonDrawerBase {\n    draw(context, particle, radius) {\n        const start = this.getCenter(particle, radius), side = this.getSidesData(particle, radius), sideCount = side.count.numerator * side.count.denominator, decimalSides = side.count.numerator / side.count.denominator, interiorAngleDegrees = (180 * (decimalSides - 2)) / decimalSides, interiorAngle = Math.PI - (Math.PI * interiorAngleDegrees) / 180;\n        if (!context) {\n            return;\n        }\n        context.beginPath();\n        context.translate(start.x, start.y);\n        context.moveTo(0, 0);\n        for (let i = 0; i < sideCount; i++) {\n            context.lineTo(side.length, 0);\n            context.translate(side.length, 0);\n            context.rotate(interiorAngle);\n        }\n    }\n    getSidesCount(particle) {\n        const polygon = particle.shapeData;\n        return Math.round(getRangeValue(polygon?.sides ?? polygon?.nb_sides ?? 5));\n    }\n}\n","import { PolygonDrawerBase } from \"./PolygonDrawerBase\";\nexport class PolygonDrawer extends PolygonDrawerBase {\n    getCenter(particle, radius) {\n        return {\n            x: -radius / (particle.sides / 3.5),\n            y: -radius / (2.66 / 3.5),\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 * 2.66) / (sides / 3),\n        };\n    }\n}\n","import { PolygonDrawerBase } from \"./PolygonDrawerBase\";\nexport class TriangleDrawer extends PolygonDrawerBase {\n    getCenter(particle, radius) {\n        return {\n            x: -radius,\n            y: radius / 1.66,\n        };\n    }\n    getSidesCount() {\n        return 3;\n    }\n    getSidesData(particle, radius) {\n        return {\n            count: {\n                denominator: 2,\n                numerator: 3,\n            },\n            length: radius * 2,\n        };\n    }\n}\n","import { PolygonDrawer } from \"./PolygonDrawer\";\nimport { TriangleDrawer } from \"./TriangleDrawer\";\nexport async function loadGenericPolygonShape(engine, refresh = true) {\n    await engine.addShape(\"polygon\", new PolygonDrawer(), refresh);\n}\nexport async function loadTriangleShape(engine, refresh = true) {\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","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\";\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 { getRandom, getRangeValue, } from \"tsparticles-engine\";\nimport { Rotate } from \"./Options/Classes/Rotate\";\nfunction updateRotate(particle, delta) {\n    const rotate = particle.rotate, rotateOptions = particle.options.rotate;\n    if (!rotate || !rotateOptions) {\n        return;\n    }\n    const rotateAnimation = rotateOptions.animation, speed = (rotate.velocity ?? 0) * delta.factor, max = 2 * Math.PI, decay = rotate.decay ?? 1;\n    if (!rotateAnimation.enable) {\n        return;\n    }\n    switch (rotate.status) {\n        case \"increasing\":\n            rotate.value += speed;\n            if (rotate.value > max) {\n                rotate.value -= max;\n            }\n            break;\n        case \"decreasing\":\n        default:\n            rotate.value -= speed;\n            if (rotate.value < 0) {\n                rotate.value += max;\n            }\n            break;\n    }\n    if (rotate.velocity && decay !== 1) {\n        rotate.velocity *= decay;\n    }\n}\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: (getRangeValue(rotateOptions.value) * Math.PI) / 180,\n        };\n        particle.pathRotation = rotateOptions.path;\n        let rotateDirection = rotateOptions.direction;\n        if (rotateDirection === \"random\") {\n            const index = Math.floor(getRandom() * 2);\n            rotateDirection = index > 0 ? \"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 = 1 - getRangeValue(rotateAnimation.decay);\n            particle.rotate.velocity =\n                (getRangeValue(rotateAnimation.speed) / 360) * 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        updateRotate(particle, delta);\n        particle.rotation = particle.rotate?.value ?? 0;\n    }\n}\n","const fixFactor = Math.sqrt(2);\nexport class SquareDrawer {\n    draw(context, particle, radius) {\n        const fixedRadius = radius / fixFactor, fixedDiameter = fixedRadius * 2;\n        context.rect(-fixedRadius, -fixedRadius, fixedDiameter, fixedDiameter);\n    }\n    getSidesCount() {\n        return 4;\n    }\n}\n","import { getRangeValue } from \"tsparticles-engine\";\nexport class StarDrawer {\n    draw(context, particle, radius) {\n        const sides = particle.sides, inset = particle.starInset ?? 2;\n        context.moveTo(0, 0 - radius);\n        for (let i = 0; i < sides; i++) {\n            context.rotate(Math.PI / sides);\n            context.lineTo(0, 0 - radius * inset);\n            context.rotate(Math.PI / sides);\n            context.lineTo(0, 0 - radius);\n        }\n    }\n    getSidesCount(particle) {\n        const star = particle.shapeData;\n        return Math.round(getRangeValue(star?.sides ?? star?.nb_sides ?? 5));\n    }\n    particleInit(container, particle) {\n        const star = particle.shapeData, inset = getRangeValue(star?.inset ?? 2);\n        particle.starInset = inset;\n    }\n}\n","import { randomInRange, } from \"tsparticles-engine\";\nfunction updateColorValue(delta, colorValue, valueAnimation, max, decrease) {\n    if (!colorValue ||\n        !valueAnimation.enable ||\n        ((colorValue.maxLoops ?? 0) > 0 && (colorValue.loops ?? 0) > (colorValue.maxLoops ?? 0))) {\n        return;\n    }\n    if (!colorValue.time) {\n        colorValue.time = 0;\n    }\n    if ((colorValue.delayTime ?? 0) > 0 && colorValue.time < (colorValue.delayTime ?? 0)) {\n        colorValue.time += delta.value;\n    }\n    if ((colorValue.delayTime ?? 0) > 0 && colorValue.time < (colorValue.delayTime ?? 0)) {\n        return;\n    }\n    const offset = randomInRange(valueAnimation.offset), velocity = (colorValue.velocity ?? 0) * delta.factor + offset * 3.6, decay = colorValue.decay ?? 1;\n    if (!decrease || colorValue.status === \"increasing\") {\n        colorValue.value += velocity;\n        if (colorValue.value > max) {\n            if (!colorValue.loops) {\n                colorValue.loops = 0;\n            }\n            colorValue.loops++;\n            if (decrease) {\n                colorValue.status = \"decreasing\";\n                colorValue.value -= colorValue.value % max;\n            }\n        }\n    }\n    else {\n        colorValue.value -= velocity;\n        if (colorValue.value < 0) {\n            if (!colorValue.loops) {\n                colorValue.loops = 0;\n            }\n            colorValue.loops++;\n            colorValue.status = \"increasing\";\n            colorValue.value += colorValue.value;\n        }\n    }\n    if (colorValue.velocity && decay !== 1) {\n        colorValue.velocity *= decay;\n    }\n    if (colorValue.value > max) {\n        colorValue.value %= max;\n    }\n}\nexport function updateStrokeColor(particle, delta) {\n    if (!particle.strokeColor || !particle.strokeAnimation) {\n        return;\n    }\n    const { h, s, l } = particle.strokeColor, { h: hAnimation, s: sAnimation, l: lAnimation } = particle.strokeAnimation;\n    if (h) {\n        updateColorValue(delta, h, hAnimation, 360, false);\n    }\n    if (s) {\n        updateColorValue(delta, s, sAnimation, 100, true);\n    }\n    if (l) {\n        updateColorValue(delta, l, lAnimation, 100, true);\n    }\n}\n","import { getHslAnimationFromHsl, getRangeValue, itemFromSingleOrMultiple, rangeColorToHsl, } from \"tsparticles-engine\";\nimport { updateStrokeColor } from \"./Utils\";\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 ?? 1);\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        updateStrokeColor(particle, delta);\n    }\n}\n","import { executeOnSingleOrMultiple, isInArray, itemFromSingleOrMultiple, loadFont, } from \"tsparticles-engine\";\nexport const validTypes = [\"text\", \"character\", \"char\"];\nexport class TextDrawer {\n    draw(context, particle, radius, opacity) {\n        const character = particle.shapeData;\n        if (character === undefined) {\n            return;\n        }\n        const textData = character.value;\n        if (textData === undefined) {\n            return;\n        }\n        if (particle.text === undefined) {\n            particle.text = itemFromSingleOrMultiple(textData, particle.randomIndexData);\n        }\n        const text = particle.text, style = character.style ?? \"\", weight = character.weight ?? \"400\", size = Math.round(radius) * 2, font = character.font ?? \"Verdana\", fill = particle.fill, offsetX = (text.length * radius) / 2;\n        context.font = `${style} ${weight} ${size}px \"${font}\"`;\n        const pos = {\n            x: -offsetX,\n            y: radius / 2,\n        };\n        context.globalAlpha = opacity;\n        if (fill) {\n            context.fillText(text, pos.x, pos.y);\n        }\n        else {\n            context.strokeText(text, pos.x, pos.y);\n        }\n        context.globalAlpha = 1;\n    }\n    getSidesCount() {\n        return 12;\n    }\n    async init(container) {\n        const options = container.actualOptions;\n        if (validTypes.find((t) => isInArray(t, options.particles.shape.type))) {\n            const shapeOptions = validTypes\n                .map((t) => options.particles.shape.options[t])\n                .find((t) => !!t), promises = [];\n            executeOnSingleOrMultiple(shapeOptions, (shape) => {\n                promises.push(loadFont(shape.font, shape.weight));\n            });\n            await Promise.all(promises);\n        }\n    }\n    particleInit(container, particle) {\n        if (!particle.shape || !validTypes.includes(particle.shape)) {\n            return;\n        }\n        const character = particle.shapeData;\n        if (character === undefined) {\n            return;\n        }\n        const textData = character.value;\n        if (textData === undefined) {\n            return;\n        }\n        particle.text = itemFromSingleOrMultiple(textData, particle.randomIndexData);\n    }\n}\n","import { initPjs } from \"tsparticles-particles.js\";\nimport { loadBasic } from \"tsparticles-basic\";\nimport { loadEasingQuadPlugin } from \"tsparticles-plugin-easing-quad\";\nimport { loadExternalAttractInteraction } from \"tsparticles-interaction-external-attract\";\nimport { loadExternalBounceInteraction } from \"tsparticles-interaction-external-bounce\";\nimport { loadExternalBubbleInteraction } from \"tsparticles-interaction-external-bubble\";\nimport { loadExternalConnectInteraction } from \"tsparticles-interaction-external-connect\";\nimport { loadExternalGrabInteraction } from \"tsparticles-interaction-external-grab\";\nimport { loadExternalPauseInteraction } from \"tsparticles-interaction-external-pause\";\nimport { loadExternalPushInteraction } from \"tsparticles-interaction-external-push\";\nimport { loadExternalRemoveInteraction } from \"tsparticles-interaction-external-remove\";\nimport { loadExternalRepulseInteraction } from \"tsparticles-interaction-external-repulse\";\nimport { loadExternalSlowInteraction } from \"tsparticles-interaction-external-slow\";\nimport { loadImageShape } from \"tsparticles-shape-image\";\nimport { loadLifeUpdater } from \"tsparticles-updater-life\";\nimport { loadLineShape } from \"tsparticles-shape-line\";\nimport { loadParallaxMover } from \"tsparticles-move-parallax\";\nimport { loadParticlesAttractInteraction } from \"tsparticles-interaction-particles-attract\";\nimport { loadParticlesCollisionsInteraction } from \"tsparticles-interaction-particles-collisions\";\nimport { loadParticlesLinksInteraction } from \"tsparticles-interaction-particles-links\";\nimport { loadPolygonShape } from \"tsparticles-shape-polygon\";\nimport { loadRotateUpdater } from \"tsparticles-updater-rotate\";\nimport { loadSquareShape } from \"tsparticles-shape-square\";\nimport { loadStarShape } from \"tsparticles-shape-star\";\nimport { loadStrokeColorUpdater } from \"tsparticles-updater-stroke-color\";\nimport { loadTextShape } from \"tsparticles-shape-text\";\nexport async function loadSlim(engine, refresh = true) {\n    initPjs(engine);\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 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 loadTextShape(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 { ParallaxMover } from \"./ParallaxMover\";\nexport async function loadParallaxMover(engine, refresh = true) {\n    await engine.addMover(\"parallax\", () => new ParallaxMover(), refresh);\n}\n","import { Attractor } from \"./Attractor\";\nexport async function loadExternalAttractInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalAttract\", (container) => new Attractor(engine, container), refresh);\n}\nexport * from \"./Options/Classes/Attract\";\nexport * from \"./Options/Interfaces/IAttract\";\n","import { Bouncer } from \"./Bouncer\";\nexport async function loadExternalBounceInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalBounce\", (container) => new Bouncer(container), refresh);\n}\nexport * from \"./Options/Classes/Bounce\";\nexport * from \"./Options/Interfaces/IBounce\";\n","import { Bubbler } from \"./Bubbler\";\nexport async function loadExternalBubbleInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalBubble\", (container) => new Bubbler(container), refresh);\n}\nexport * from \"./Options/Classes/BubbleBase\";\nexport * from \"./Options/Classes/BubbleDiv\";\nexport * from \"./Options/Classes/Bubble\";\nexport * from \"./Options/Interfaces/IBubbleBase\";\nexport * from \"./Options/Interfaces/IBubbleDiv\";\nexport * from \"./Options/Interfaces/IBubble\";\n","import { Connector } from \"./Connector\";\nexport async function loadExternalConnectInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalConnect\", (container) => new Connector(container), refresh);\n}\nexport * from \"./Options/Classes/Connect\";\nexport * from \"./Options/Classes/ConnectLinks\";\nexport * from \"./Options/Interfaces/IConnect\";\nexport * from \"./Options/Interfaces/IConnectLinks\";\n","import { Grabber } from \"./Grabber\";\nexport async function loadExternalGrabInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalGrab\", (container) => new Grabber(container), refresh);\n}\nexport * from \"./Options/Classes/Grab\";\nexport * from \"./Options/Classes/GrabLinks\";\nexport * from \"./Options/Interfaces/IGrab\";\nexport * from \"./Options/Interfaces/IGrabLinks\";\n","import { Pauser } from \"./Pauser\";\nexport async function loadExternalPauseInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalPause\", (container) => new Pauser(container), refresh);\n}\n","import { Pusher } from \"./Pusher\";\nexport async function loadExternalPushInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalPush\", (container) => new Pusher(container), refresh);\n}\nexport * from \"./Options/Classes/Push\";\nexport * from \"./Options/Interfaces/IPush\";\n","import { Remover } from \"./Remover\";\nexport async function loadExternalRemoveInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalRemove\", (container) => new Remover(container), refresh);\n}\nexport * from \"./Options/Classes/Remove\";\nexport * from \"./Options/Interfaces/IRemove\";\n","import { Repulser } from \"./Repulser\";\nexport async function loadExternalRepulseInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalRepulse\", (container) => new Repulser(engine, container), refresh);\n}\nexport * from \"./Options/Classes/RepulseBase\";\nexport * from \"./Options/Classes/RepulseDiv\";\nexport * from \"./Options/Classes/Repulse\";\nexport * from \"./Options/Interfaces/IRepulseBase\";\nexport * from \"./Options/Interfaces/IRepulseDiv\";\nexport * from \"./Options/Interfaces/IRepulse\";\n","import { Slower } from \"./Slower\";\nexport async function loadExternalSlowInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalSlow\", (container) => new Slower(container), refresh);\n}\nexport * from \"./Options/Classes/Slow\";\nexport * from \"./Options/Interfaces/ISlow\";\n","import { Attractor } from \"./Attractor\";\nexport async function loadParticlesAttractInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"particlesAttract\", (container) => new Attractor(container), refresh);\n}\n","import { Collider } from \"./Collider\";\nexport async function loadParticlesCollisionsInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"particlesCollisions\", (container) => new Collider(container), refresh);\n}\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}\n","import { LineDrawer } from \"./LineDrawer\";\nexport async function loadLineShape(engine, refresh = true) {\n    await engine.addShape(\"line\", new LineDrawer(), refresh);\n}\n","import { SquareDrawer } from \"./SquareDrawer\";\nexport async function loadSquareShape(engine, refresh = true) {\n    await engine.addShape([\"edge\", \"square\"], new SquareDrawer(), refresh);\n}\n","import { StarDrawer } from \"./StarDrawer\";\nexport async function loadStarShape(engine, refresh = true) {\n    await engine.addShape(\"star\", new StarDrawer(), refresh);\n}\n","import { TextDrawer, validTypes } from \"./TextDrawer\";\nexport async function loadTextShape(engine, refresh = true) {\n    await engine.addShape(validTypes, new TextDrawer(), refresh);\n}\n","import { LifeUpdater } from \"./LifeUpdater\";\nexport async function loadLifeUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"life\", (container) => new LifeUpdater(container), refresh);\n}\n","import { RotateUpdater } from \"./RotateUpdater\";\nexport async function loadRotateUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"rotate\", (container) => new RotateUpdater(container), refresh);\n}\n","import { StrokeColorUpdater } from \"./StrokeColorUpdater\";\nexport async function loadStrokeColorUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"strokeColor\", (container) => new StrokeColorUpdater(container), refresh);\n}\n","import { setRangeValue } from \"tsparticles-engine\";\nexport class TiltAnimation {\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 { TiltAnimation } from \"./TiltAnimation\";\nexport class Tilt extends ValueWithRandom {\n    constructor() {\n        super();\n        this.animation = new TiltAnimation();\n        this.direction = \"clockwise\";\n        this.enable = false;\n        this.value = 0;\n    }\n    load(data) {\n        super.load(data);\n        if (!data) {\n            return;\n        }\n        this.animation.load(data.animation);\n        if (data.direction !== undefined) {\n            this.direction = data.direction;\n        }\n        if (data.enable !== undefined) {\n            this.enable = data.enable;\n        }\n    }\n}\n","import { getRandom, getRangeValue, } from \"tsparticles-engine\";\nimport { Tilt } from \"./Options/Classes/Tilt\";\nimport { updateTilt } from \"./Utils\";\nexport class TiltUpdater {\n    constructor(container) {\n        this.container = container;\n    }\n    getTransformValues(particle) {\n        const tilt = particle.tilt?.enable && particle.tilt;\n        return {\n            b: tilt ? Math.cos(tilt.value) * tilt.cosDirection : undefined,\n            c: tilt ? Math.sin(tilt.value) * tilt.sinDirection : undefined,\n        };\n    }\n    init(particle) {\n        const tiltOptions = particle.options.tilt;\n        if (!tiltOptions) {\n            return;\n        }\n        particle.tilt = {\n            enable: tiltOptions.enable,\n            value: (getRangeValue(tiltOptions.value) * Math.PI) / 180,\n            sinDirection: getRandom() >= 0.5 ? 1 : -1,\n            cosDirection: getRandom() >= 0.5 ? 1 : -1,\n        };\n        let tiltDirection = tiltOptions.direction;\n        if (tiltDirection === \"random\") {\n            const index = Math.floor(getRandom() * 2);\n            tiltDirection = index > 0 ? \"counter-clockwise\" : \"clockwise\";\n        }\n        switch (tiltDirection) {\n            case \"counter-clockwise\":\n            case \"counterClockwise\":\n                particle.tilt.status = \"decreasing\";\n                break;\n            case \"clockwise\":\n                particle.tilt.status = \"increasing\";\n                break;\n        }\n        const tiltAnimation = particle.options.tilt?.animation;\n        if (tiltAnimation?.enable) {\n            particle.tilt.decay = 1 - getRangeValue(tiltAnimation.decay);\n            particle.tilt.velocity = (getRangeValue(tiltAnimation.speed) / 360) * this.container.retina.reduceFactor;\n            if (!tiltAnimation.sync) {\n                particle.tilt.velocity *= getRandom();\n            }\n        }\n    }\n    isEnabled(particle) {\n        const tiltAnimation = particle.options.tilt?.animation;\n        return !particle.destroyed && !particle.spawning && !!tiltAnimation?.enable;\n    }\n    loadOptions(options, ...sources) {\n        if (!options.tilt) {\n            options.tilt = new Tilt();\n        }\n        for (const source of sources) {\n            options.tilt.load(source?.tilt);\n        }\n    }\n    update(particle, delta) {\n        if (!this.isEnabled(particle)) {\n            return;\n        }\n        updateTilt(particle, delta);\n    }\n}\n","export function updateTilt(particle, delta) {\n    if (!particle.tilt || !particle.options.tilt) {\n        return;\n    }\n    const tilt = particle.options.tilt, tiltAnimation = tilt.animation, speed = (particle.tilt.velocity ?? 0) * delta.factor, max = 2 * Math.PI, decay = particle.tilt.decay ?? 1;\n    if (!tiltAnimation.enable) {\n        return;\n    }\n    switch (particle.tilt.status) {\n        case \"increasing\":\n            particle.tilt.value += speed;\n            if (particle.tilt.value > max) {\n                particle.tilt.value -= max;\n            }\n            break;\n        case \"decreasing\":\n        default:\n            particle.tilt.value -= speed;\n            if (particle.tilt.value < 0) {\n                particle.tilt.value += max;\n            }\n            break;\n    }\n    if (particle.tilt.velocity && decay !== 1) {\n        particle.tilt.velocity *= decay;\n    }\n}\n","import { OptionsColor, setRangeValue, } from \"tsparticles-engine\";\nexport class TwinkleValues {\n    constructor() {\n        this.enable = false;\n        this.frequency = 0.05;\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.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 = setRangeValue(data.opacity);\n        }\n    }\n}\n","import { TwinkleValues } from \"./TwinkleValues\";\nexport class Twinkle {\n    constructor() {\n        this.lines = new TwinkleValues();\n        this.particles = new TwinkleValues();\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        this.lines.load(data.lines);\n        this.particles.load(data.particles);\n    }\n}\n","import { getRandom, getRangeValue, getStyleFromHsl, rangeColorToHsl, } from \"tsparticles-engine\";\nimport { Twinkle } from \"./Options/Classes/Twinkle\";\nexport class TwinkleUpdater {\n    getColorStyles(particle, context, radius, opacity) {\n        const pOptions = particle.options, twinkleOptions = pOptions.twinkle;\n        if (!twinkleOptions) {\n            return {};\n        }\n        const twinkle = twinkleOptions.particles, twinkling = twinkle.enable && getRandom() < twinkle.frequency, zIndexOptions = particle.options.zIndex, zOpacityFactor = (1 - particle.zIndexFactor) ** zIndexOptions.opacityRate, twinklingOpacity = twinkling ? getRangeValue(twinkle.opacity) * zOpacityFactor : opacity, twinkleRgb = rangeColorToHsl(twinkle.color), twinkleStyle = twinkleRgb ? getStyleFromHsl(twinkleRgb, twinklingOpacity) : undefined, res = {}, needsTwinkle = twinkling && twinkleStyle;\n        res.fill = needsTwinkle ? twinkleStyle : undefined;\n        res.stroke = needsTwinkle ? twinkleStyle : undefined;\n        return res;\n    }\n    init() {\n    }\n    isEnabled(particle) {\n        const pOptions = particle.options, twinkleOptions = pOptions.twinkle;\n        if (!twinkleOptions) {\n            return false;\n        }\n        return twinkleOptions.particles.enable;\n    }\n    loadOptions(options, ...sources) {\n        if (!options.twinkle) {\n            options.twinkle = new Twinkle();\n        }\n        for (const source of sources) {\n            options.twinkle.load(source?.twinkle);\n        }\n    }\n    update() {\n    }\n}\n","import { setRangeValue } from \"tsparticles-engine\";\nexport class WobbleSpeed {\n    constructor() {\n        this.angle = 50;\n        this.move = 10;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.angle !== undefined) {\n            this.angle = setRangeValue(data.angle);\n        }\n        if (data.move !== undefined) {\n            this.move = setRangeValue(data.move);\n        }\n    }\n}\n","import { isNumber, setRangeValue, } from \"tsparticles-engine\";\nimport { WobbleSpeed } from \"./WobbleSpeed\";\nexport class Wobble {\n    constructor() {\n        this.distance = 5;\n        this.enable = false;\n        this.speed = new WobbleSpeed();\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.speed !== undefined) {\n            if (isNumber(data.speed)) {\n                this.speed.load({ angle: data.speed });\n            }\n            else {\n                const rangeSpeed = data.speed;\n                if (rangeSpeed.min !== undefined) {\n                    this.speed.load({ angle: rangeSpeed });\n                }\n                else {\n                    this.speed.load(data.speed);\n                }\n            }\n        }\n    }\n}\n","import { getRandom, getRangeValue, } from \"tsparticles-engine\";\nimport { Wobble } from \"./Options/Classes/Wobble\";\nimport { updateWobble } from \"./Utils\";\nexport class WobbleUpdater {\n    constructor(container) {\n        this.container = container;\n    }\n    init(particle) {\n        const wobbleOpt = particle.options.wobble;\n        if (wobbleOpt?.enable) {\n            particle.wobble = {\n                angle: getRandom() * Math.PI * 2,\n                angleSpeed: getRangeValue(wobbleOpt.speed.angle) / 360,\n                moveSpeed: getRangeValue(wobbleOpt.speed.move) / 10,\n            };\n        }\n        else {\n            particle.wobble = {\n                angle: 0,\n                angleSpeed: 0,\n                moveSpeed: 0,\n            };\n        }\n        particle.retina.wobbleDistance = getRangeValue(wobbleOpt?.distance ?? 0) * this.container.retina.pixelRatio;\n    }\n    isEnabled(particle) {\n        return !particle.destroyed && !particle.spawning && !!particle.options.wobble?.enable;\n    }\n    loadOptions(options, ...sources) {\n        if (!options.wobble) {\n            options.wobble = new Wobble();\n        }\n        for (const source of sources) {\n            options.wobble.load(source?.wobble);\n        }\n    }\n    update(particle, delta) {\n        if (!this.isEnabled(particle)) {\n            return;\n        }\n        updateWobble(particle, delta);\n    }\n}\n","export function updateWobble(particle, delta) {\n    const { wobble: wobbleOptions } = particle.options, { wobble } = particle;\n    if (!wobbleOptions?.enable || !wobble) {\n        return;\n    }\n    const angleSpeed = wobble.angleSpeed * delta.factor, moveSpeed = wobble.moveSpeed * delta.factor, distance = (moveSpeed * ((particle.retina.wobbleDistance ?? 0) * delta.factor)) / (1000 / 60), max = 2 * Math.PI, { position } = particle;\n    wobble.angle += angleSpeed;\n    if (wobble.angle > max) {\n        wobble.angle -= max;\n    }\n    position.x += distance * Math.cos(wobble.angle);\n    position.y += distance * Math.abs(Math.sin(wobble.angle));\n}\n","import { loadAbsorbersPlugin } from \"tsparticles-plugin-absorbers\";\nimport { loadDestroyUpdater } from \"tsparticles-updater-destroy\";\nimport { loadEmittersPlugin } from \"tsparticles-plugin-emitters\";\nimport { loadExternalTrailInteraction } from \"tsparticles-interaction-external-trail\";\nimport { loadRollUpdater } from \"tsparticles-updater-roll\";\nimport { loadSlim } from \"tsparticles-slim\";\nimport { loadTiltUpdater } from \"tsparticles-updater-tilt\";\nimport { loadTwinkleUpdater } from \"tsparticles-updater-twinkle\";\nimport { loadWobbleUpdater } from \"tsparticles-updater-wobble\";\nexport async function loadFull(engine, refresh = true) {\n    await loadDestroyUpdater(engine, false);\n    await loadRollUpdater(engine, false);\n    await loadTiltUpdater(engine, false);\n    await loadTwinkleUpdater(engine, false);\n    await loadWobbleUpdater(engine, false);\n    await loadExternalTrailInteraction(engine, false);\n    await loadAbsorbersPlugin(engine, false);\n    await loadEmittersPlugin(engine, false);\n    await loadSlim(engine, refresh);\n}\n","import { DestroyUpdater } from \"./DestroyUpdater\";\nexport async function loadDestroyUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"destroy\", (container) => new DestroyUpdater(engine, container), refresh);\n}\n","import { RollUpdater } from \"./RollUpdater\";\nexport async function loadRollUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"roll\", () => new RollUpdater(), refresh);\n}\n","import { TiltUpdater } from \"./TiltUpdater\";\nexport async function loadTiltUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"tilt\", (container) => new TiltUpdater(container), refresh);\n}\n","import { TwinkleUpdater } from \"./TwinkleUpdater\";\nexport async function loadTwinkleUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"twinkle\", () => new TwinkleUpdater(), refresh);\n}\n","import { WobbleUpdater } from \"./WobbleUpdater\";\nexport async function loadWobbleUpdater(engine, refresh = true) {\n    await engine.addParticleUpdater(\"wobble\", (container) => new WobbleUpdater(container), refresh);\n}\n","import { TrailMaker } from \"./TrailMaker\";\nexport async function loadExternalTrailInteraction(engine, refresh = true) {\n    await engine.addInteractor(\"externalTrail\", (container) => new TrailMaker(container), refresh);\n}\nexport * from \"./Options/Classes/Trail\";\nexport * from \"./Options/Interfaces/ITrail\";\n","import { isBoolean, isNumber } from \"./Utils\";\nimport { Vector } from \"../Core/Utils/Vector\";\nlet _random = Math.random;\nconst easings = new Map();\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    return clamp(_random(), 0, 1 - 1e-16);\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);\n    let min = getRangeMin(r);\n    if (max === min) {\n        min = 0;\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 getValue(options) {\n    const random = options.random, { enable, minimumValue } = isBoolean(random)\n        ? {\n            enable: random,\n            minimumValue: 0,\n        }\n        : random;\n    return enable ? getRangeValue(setRangeValue(options.value, minimumValue)) : getRangeValue(options.value);\n}\nexport function getDistances(pointA, pointB) {\n    const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y;\n    return { dx: dx, dy: dy, distance: Math.sqrt(dx ** 2 + dy ** 2) };\n}\nexport function getDistance(pointA, pointB) {\n    return getDistances(pointA, pointB).distance;\n}\nexport function getParticleDirectionAngle(direction, position, center) {\n    if (isNumber(direction)) {\n        return (direction * Math.PI) / 180;\n    }\n    switch (direction) {\n        case \"top\":\n            return -Math.PI / 2;\n        case \"top-right\":\n            return -Math.PI / 4;\n        case \"right\":\n            return 0;\n        case \"bottom-right\":\n            return Math.PI / 4;\n        case \"bottom\":\n            return Math.PI / 2;\n        case \"bottom-left\":\n            return (3 * Math.PI) / 4;\n        case \"left\":\n            return Math.PI;\n        case \"top-left\":\n            return (-3 * Math.PI) / 4;\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() * Math.PI * 2;\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    return Vector.create((v1.x * (m1 - m2)) / (m1 + m2) + (v2.x * 2 * m2) / (m1 + m2), v1.y);\n}\nexport function calcPositionFromSize(data) {\n    return data.position && data.position.x !== undefined && data.position.y !== undefined\n        ? {\n            x: (data.position.x * data.size.width) / 100,\n            y: (data.position.y * data.size.height) / 100,\n        }\n        : undefined;\n}\nexport function calcPositionOrRandomFromSize(data) {\n    return {\n        x: ((data.position?.x ?? getRandom() * 100) * data.size.width) / 100,\n        y: ((data.position?.y ?? getRandom() * 100) * data.size.height) / 100,\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    return input ? (input.endsWith(\"%\") ? parseFloat(input) / 100 : parseFloat(input)) : 1;\n}\n","import { setRangeValue } from \"../../Utils/NumberUtils\";\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.minimumValue !== undefined) {\n            this.minimumValue = data.minimumValue;\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 { Range } from \"./Range\";\nimport { Rectangle } from \"./Rectangle\";\nimport { getDistance } from \"../../Utils/NumberUtils\";\nexport class Circle extends Range {\n    constructor(x, y, radius) {\n        super(x, y);\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) {\n            const rSum = r + range.radius, dist = Math.sqrt(distPos.x ** 2 + distPos.y ** 2);\n            return rSum > dist;\n        }\n        else if (range instanceof Rectangle) {\n            const { width, height } = range.size, edges = Math.pow(distPos.x - width, 2) + Math.pow(distPos.y - height, 2);\n            return (edges <= r ** 2 ||\n                (distPos.x <= r + width && distPos.y <= r + height) ||\n                distPos.x <= width ||\n                distPos.y <= height);\n        }\n        return false;\n    }\n}\n","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\";\n","const particlesConfig = {\r\n  particles: {\r\n    number: {\r\n      value: 180,\r\n      density: {\r\n        enable: true,\r\n        value_area: 900,\r\n      },\r\n    },\r\n    color: {\r\n      value: [\"#000000\", \"#2ab7ea\", \"#ed5471\", \"#d92c48\", \"ffffff\"],\r\n    },\r\n    shape: {\r\n      type: \"circle\",\r\n      stroke: {\r\n        width: 0,\r\n        color: \"#000000\",\r\n      },\r\n      polygon: {\r\n        nb_sides: 5,\r\n      },\r\n      image: {\r\n        src: \"/img/github.svg\",\r\n        width: 100,\r\n        height: 100,\r\n      },\r\n    },\r\n    opacity: {\r\n      value: 0.2,\r\n      random: true,\r\n      anim: {\r\n        enable: true,\r\n        speed: 1,\r\n        opacity_min: 0.3,\r\n        sync: false,\r\n      },\r\n    },\r\n    size: {\r\n      value: 1.8,\r\n      random: true,\r\n      anim: {\r\n        enable: false,\r\n        speed: 4,\r\n        size_min: 0.4,\r\n        sync: false,\r\n      },\r\n    },\r\n    line_linked: {\r\n      enable: false,\r\n      distance: 150,\r\n      color: \"#ffffff\",\r\n      opacity: 0.4,\r\n      width: 1,\r\n    },\r\n    move: {\r\n      enable: true,\r\n      speed: 1,\r\n      direction: \"none\",\r\n      random: true,\r\n      straight: false,\r\n      out_mode: \"out\",\r\n      bounce: true,\r\n      attract: {\r\n        enable: false,\r\n        rotateX: 600,\r\n        rotateY: 600,\r\n      },\r\n    },\r\n  },\r\n  interactivity: {\r\n    detect_on: \"canvas\",\r\n    events: {\r\n      onhover: {\r\n        enable: true,\r\n        mode: \"bubble\",\r\n      },\r\n      onclick: {\r\n        enable: true,\r\n        mode: \"repulse\",\r\n      },\r\n      resize: true,\r\n    },\r\n    modes: {\r\n      grab: {\r\n        distance: 400,\r\n        line_linked: {\r\n          opacity: 1,\r\n        },\r\n      },\r\n      bubble: {\r\n        distance: 250,\r\n        size: 0,\r\n        duration: 2,\r\n        opacity: 0,\r\n        speed: 3,\r\n      },\r\n      repulse: {\r\n        distance: 400,\r\n        duration: 0.4,\r\n      },\r\n      push: {\r\n        particles_nb: 4,\r\n      },\r\n      remove: {\r\n        particles_nb: 2,\r\n      },\r\n    },\r\n  },\r\n  retina_detect: true,\r\n};\r\n\r\nexport default particlesConfig;\r\n","import { isArray, isString } from \"../../Utils/Utils\";\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 { clear, drawParticle, drawParticlePlugin, drawPlugin, paintBase, paintImage } from \"../Utils/CanvasUtils\";\nimport { deepExtend, getLogger, safeMutationObserver } from \"../Utils/Utils\";\nimport { getStyleFromHsl, getStyleFromRgb, rangeColorToHsl, rangeColorToRgb } from \"../Utils/ColorUtils\";\nimport { generatedAttribute } from \"./Utils/Constants\";\nfunction setTransformValue(factor, newFactor, key) {\n    const newValue = newFactor[key];\n    if (newValue !== undefined) {\n        factor[key] = (factor[key] ?? 1) * newValue;\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 && 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 && updater.beforeDraw(particle);\n            }\n        };\n        this._applyResizePlugins = () => {\n            for (const plugin of this._resizePlugins) {\n                plugin.resize && 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 = () => {\n            const options = this.container.actualOptions, cover = options.backgroundMask.cover, color = cover.color, 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        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            if (trailFill.color) {\n                const fillColor = rangeColorToRgb(trailFill.color);\n                if (!fillColor) {\n                    return;\n                }\n                const trail = options.particles.move.trail;\n                this._trailFill = {\n                    color: {\n                        ...fillColor,\n                    },\n                    opacity: 1 / trail.length,\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: 1 / trail.length,\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            const style = element.style;\n            style.position = originalStyle.position;\n            style.zIndex = originalStyle.zIndex;\n            style.top = originalStyle.top;\n            style.left = originalStyle.left;\n            style.width = originalStyle.width;\n            style.height = originalStyle.height;\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 priority = \"important\", style = element.style;\n            style.setProperty(\"position\", \"fixed\", priority);\n            style.setProperty(\"z-index\", this.container.actualOptions.fullScreen.zIndex.toString(10), priority);\n            style.setProperty(\"top\", \"0\", priority);\n            style.setProperty(\"left\", \"0\", priority);\n            style.setProperty(\"width\", \"100%\", priority);\n            style.setProperty(\"height\", \"100%\", priority);\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;\n        if (options.backgroundMask.enable) {\n            this.paint();\n        }\n        else if (trail.enable && trail.length > 0 && 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 {\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 && 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    drawParticle(particle, delta) {\n        if (particle.spawning || particle.destroyed) {\n            return;\n        }\n        const radius = particle.getRadius();\n        if (radius <= 0) {\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, zOpacityFactor = (1 - particle.zIndexFactor) ** zIndexOptions.opacityRate, opacity = particle.bubble.opacity ?? particle.opacity?.value ?? 1, 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 * (1 - particle.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        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                this._paintBase(this._coverColorStyle);\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            this.resizeFactor = {\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, isBoolean, safeMatchMedia } from \"../../Utils/Utils\";\nimport { mouseDownEvent, mouseLeaveEvent, mouseMoveEvent, mouseOutEvent, mouseUpEvent, resizeEvent, touchCancelEvent, touchEndEvent, touchMoveEvent, touchStartEvent, visibilityChangeEvent, } from \"./Constants\";\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                setTimeout(() => this._mouseTouchFinish(), 500);\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                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.getAnimationStatus()) {\n                    container.play(true);\n                }\n                else {\n                    container.draw(true);\n                }\n            }\n        };\n        this._handleWindowResize = async () => {\n            if (this._resizeTimeout) {\n                clearTimeout(this._resizeTimeout);\n                delete this._resizeTimeout;\n            }\n            this._resizeTimeout = setTimeout(async () => {\n                const canvas = this.container.canvas;\n                canvas && (await canvas.windowResize());\n            }, this.container.actualOptions.interactivity.events.resize.delay * 1000);\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(async (entries) => {\n                    const entry = entries.find((e) => e.target === canvasEl);\n                    if (!entry) {\n                        return;\n                    }\n                    await 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 || !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 + 2 * sourceRect.left - (targetRect.left + canvasRect.left),\n                            y: mouseEvent.offsetY + 2 * 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, lastTouch = touchEvent.touches[touchEvent.touches.length - 1], canvasRect = canvasEl.getBoundingClientRect();\n                    pos = {\n                        x: lastTouch.clientX - (canvasRect.left ?? 0),\n                        y: lastTouch.clientY - (canvasRect.top ?? 0),\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","import { OptionsColor } from \"../OptionsColor\";\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\";\nexport class BackgroundMaskCover {\n    constructor() {\n        this.color = new OptionsColor();\n        this.color.value = \"#fff\";\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.opacity !== undefined) {\n            this.opacity = data.opacity;\n        }\n    }\n}\n","import { BackgroundMaskCover } from \"./BackgroundMaskCover\";\nimport { isString } from \"../../../Utils/Utils\";\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;\n            const color = (isString(data.cover) ? { color: data.cover } : data.cover);\n            this.cover.load(cover.color !== 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","import { executeOnSingleOrMultiple } from \"../../../../Utils/Utils\";\nexport class DivEvent {\n    constructor() {\n        this.selectors = [];\n        this.enable = false;\n        this.mode = [];\n        this.type = \"circle\";\n    }\n    get el() {\n        return this.elementId;\n    }\n    set el(value) {\n        this.elementId = value;\n    }\n    get elementId() {\n        return this.ids;\n    }\n    set elementId(value) {\n        this.ids = value;\n    }\n    get ids() {\n        return executeOnSingleOrMultiple(this.selectors, (t) => t.replace(\"#\", \"\"));\n    }\n    set ids(value) {\n        this.selectors = executeOnSingleOrMultiple(value, (t) => `#${t}`);\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        const ids = data.ids ?? data.elementId ?? data.el;\n        if (ids !== undefined) {\n            this.ids = ids;\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\";\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 { executeOnSingleOrMultiple, isBoolean } from \"../../../../Utils/Utils\";\nimport { ClickEvent } from \"./ClickEvent\";\nimport { DivEvent } from \"./DivEvent\";\nimport { HoverEvent } from \"./HoverEvent\";\nimport { ResizeEvent } from \"./ResizeEvent\";\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    get onclick() {\n        return this.onClick;\n    }\n    set onclick(value) {\n        this.onClick = value;\n    }\n    get ondiv() {\n        return this.onDiv;\n    }\n    set ondiv(value) {\n        this.onDiv = value;\n    }\n    get onhover() {\n        return this.onHover;\n    }\n    set onhover(value) {\n        this.onHover = value;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        this.onClick.load(data.onClick ?? data.onclick);\n        const onDiv = data.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 ?? data.onhover);\n        if (isBoolean(data.resize)) {\n            this.resize.enable = data.resize;\n        }\n        else {\n            this.resize.load(data.resize);\n        }\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.plugins.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\";\nimport { Modes } from \"./Modes/Modes\";\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    get detect_on() {\n        return this.detectsOn;\n    }\n    set detect_on(value) {\n        this.detectsOn = value;\n    }\n    load(data) {\n        if (!data) {\n            return;\n        }\n        const detectsOn = data.detectsOn ?? data.detect_on;\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\";\nexport class ManualParticle {\n    load(data) {\n        if (!data) {\n            return;\n        }\n        if (data.position) {\n            this.position = {\n                x: data.position.x ?? 50,\n                y: data.position.y ?? 50,\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\";\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\";\nimport { deepExtend } from \"../../../Utils/Utils\";\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","import { deepExtend, executeOnSingleOrMultiple, isBoolean, safeMatchMedia } from \"../../Utils/Utils\";\nimport { Background } from \"./Background/Background\";\nimport { BackgroundMask } from \"./BackgroundMask/BackgroundMask\";\nimport { FullScreen } from \"./FullScreen/FullScreen\";\nimport { Interactivity } from \"./Interactivity/Interactivity\";\nimport { ManualParticle } from \"./ManualParticle\";\nimport { Responsive } from \"./Responsive\";\nimport { Theme } from \"./Theme/Theme\";\nimport { loadParticlesOptions } from \"../../Utils/OptionsUtils\";\nimport { setRangeValue } from \"../../Utils/NumberUtils\";\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.plugins.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.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    get backgroundMode() {\n        return this.fullScreen;\n    }\n    set backgroundMode(value) {\n        this.fullScreen.load(value);\n    }\n    get fps_limit() {\n        return this.fpsLimit;\n    }\n    set fps_limit(value) {\n        this.fpsLimit = value;\n    }\n    get retina_detect() {\n        return this.detectRetina;\n    }\n    set retina_detect(value) {\n        this.detectRetina = value;\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.delay !== undefined) {\n            this.delay = setRangeValue(data.delay);\n        }\n        const detectRetina = data.detectRetina ?? data.retina_detect;\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 ?? data.fps_limit;\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 ?? data.backgroundMode;\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.plugins.loadOptions(this, data);\n        if (data.smooth !== undefined) {\n            this.smooth = data.smooth;\n        }\n        const interactors = this._engine.plugins.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","export class InteractionManager {\n    constructor(engine, container) {\n        this.container = container;\n        this._engine = engine;\n        this._interactors = engine.plugins.getInteractors(this.container, true);\n        this._externalInteractors = [];\n        this._particleInteractors = [];\n    }\n    async externalInteract(delta) {\n        for (const interactor of this._externalInteractors) {\n            interactor.isEnabled() && (await interactor.interact(delta));\n        }\n    }\n    handleClickMode(mode) {\n        for (const interactor of this._externalInteractors) {\n            interactor.handleClickMode && interactor.handleClickMode(mode);\n        }\n    }\n    init() {\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    async particlesInteract(particle, delta) {\n        for (const interactor of this._externalInteractors) {\n            interactor.clear(particle, delta);\n        }\n        for (const interactor of this._particleInteractors) {\n            interactor.isEnabled(particle) && (await interactor.interact(particle, delta));\n        }\n    }\n    async reset(particle) {\n        for (const interactor of this._externalInteractors) {\n            interactor.isEnabled() && interactor.reset(particle);\n        }\n        for (const interactor of this._particleInteractors) {\n            interactor.isEnabled(particle) && interactor.reset(particle);\n        }\n    }\n}\n","import { calcExactPositionOrRandomFromSize, clamp, getDistance, getParticleBaseVelocity, getParticleDirectionAngle, getRandom, getRangeValue, getValue, randomInRange, setRangeValue, } from \"../Utils/NumberUtils\";\nimport { deepExtend, getPosition, initParticleNumericAnimationValue, isInArray, itemFromSingleOrMultiple, } from \"../Utils/Utils\";\nimport { getHslFromAnimation, rangeColorToRgb } from \"../Utils/ColorUtils\";\nimport { Interactivity } from \"../Options/Classes/Interactivity/Interactivity\";\nimport { Vector } from \"./Utils/Vector\";\nimport { Vector3d } from \"./Utils/Vector3d\";\nimport { alterHsl } from \"../Utils/CanvasUtils\";\nimport { errorPrefix } from \"./Utils/Constants\";\nimport { loadParticlesOptions } from \"../Utils/OptionsUtils\";\nconst fixOutMode = (data) => {\n    if (!isInArray(data.outMode, data.checkModes)) {\n        return;\n    }\n    const diameter = data.radius * 2;\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, id, container, position, overrideOptions, group) {\n        this.container = container;\n        this._calcPosition = (container, position, zIndex, tryCount = 0) => {\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\", \"bounce-horizontal\"],\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\", \"bounce-vertical\"],\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                return this._calcPosition(container, undefined, zIndex, tryCount + 1);\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 = (Math.PI / 180) * getRangeValue(moveOptions.angle.value), radOffset = (Math.PI / 180) * getRangeValue(moveOptions.angle.offset), range = {\n                left: radOffset - rad / 2,\n                right: radOffset + rad / 2,\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 = 0) => {\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;\n            if (retries >= 0 && 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 backFactor = this.roll.horizontal && this.roll.vertical ? 2 : 1, backSum = this.roll.horizontal ? Math.PI / 2 : 0, rolled = Math.floor(((this.roll.angle ?? 0) + backSum) / (Math.PI / backFactor)) % 2;\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);\n            this.position = this._calcPosition(container, position, clamp(zIndexValue, 0, container.zLayers));\n            this.initialPosition = this.position.copy();\n            const canvasSize = container.canvas.size;\n            this.moveCenter = {\n                ...getPosition(this.options.move.center, canvasSize),\n                radius: this.options.move.center.radius ?? 0,\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._loadShapeData = (shapeOptions, reduceDuplicates) => {\n            const shapeData = shapeOptions.options[this.shape];\n            if (!shapeData) {\n                return;\n            }\n            return deepExtend({\n                close: shapeOptions.close,\n                fill: shapeOptions.fill,\n            }, itemFromSingleOrMultiple(shapeData, this.id, reduceDuplicates));\n        };\n        this._engine = engine;\n        this.init(id, position, overrideOptions, group);\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;\n        for (const [, plugin] of container.plugins) {\n            if (plugin.particleDestroyed) {\n                plugin.particleDestroyed(this, override);\n            }\n        }\n        for (const updater of container.particles.updaters) {\n            if (updater.particleDestroyed) {\n                updater.particleDestroyed(this, override);\n            }\n        }\n        if (pathGenerator) {\n            pathGenerator.reset(this);\n        }\n    }\n    draw(delta) {\n        const container = this.container;\n        for (const [, plugin] of container.plugins) {\n            container.canvas.drawParticlePlugin(plugin, this, delta);\n        }\n        container.canvas.drawParticle(this, delta);\n    }\n    getFillColor() {\n        return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.color));\n    }\n    getMass() {\n        return (this.getRadius() ** 2 * Math.PI) / 2;\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.fill = true;\n        this.pathRotation = false;\n        this.close = true;\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), shapeType = particlesOptions.shape.type, { reduceDuplicates } = particlesOptions;\n        this.shape = itemFromSingleOrMultiple(shapeType, this.id, reduceDuplicates);\n        const shapeOptions = particlesOptions.shape;\n        if (overrideOptions && overrideOptions.shape && 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        this.shapeData = this._loadShapeData(shapeOptions, reduceDuplicates);\n        particlesOptions.load(overrideOptions);\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.fill = shapeData?.fill ?? particlesOptions.shape.fill;\n        this.close = shapeData?.close ?? particlesOptions.shape.close;\n        this.options = particlesOptions;\n        const pathOptions = this.options.move.path;\n        this.pathDelay = getValue(pathOptions.delay) * 1000;\n        if (pathOptions.generator) {\n            this.pathGenerator = this._engine.plugins.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        this.moveDecay = 1 - getRangeValue(this.options.move.decay);\n        const particles = container.particles;\n        particles.needsSort = particles.needsSort || particles.lastZIndex < this.position.z;\n        particles.lastZIndex = this.position.z;\n        this.zIndexFactor = this.position.z / container.zLayers;\n        this.sides = 24;\n        let drawer = container.drawers.get(this.shape);\n        if (!drawer) {\n            drawer = this._engine.plugins.getShapeDrawer(this.shape);\n            if (drawer) {\n                container.drawers.set(this.shape, drawer);\n            }\n        }\n        if (drawer && drawer.loadShape) {\n            drawer.loadShape(this);\n        }\n        const sideCountFunc = drawer?.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 container.particles.updaters) {\n            updater.init(this);\n        }\n        for (const mover of container.particles.movers) {\n            mover.init && mover.init(this);\n        }\n        if (drawer && drawer.particleInit) {\n            drawer.particleInit(container, this);\n        }\n        for (const [, plugin] of container.plugins) {\n            plugin.particleCreated && 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 && updater.reset(this);\n        }\n    }\n}\n","export class Point {\n    constructor(position, particle) {\n        this.position = position;\n        this.particle = particle;\n    }\n}\n","import { Circle } from \"./Circle\";\nimport { Rectangle } from \"./Rectangle\";\nimport { getDistance } from \"../../Utils/NumberUtils\";\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 < 4; i++) {\n                this._subs.push(new QuadTree(new Rectangle(x + (width / 2) * (i % 2), y + (height / 2) * (Math.round(i / 2) - (i % 2)), width / 2, height / 2), 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, found) {\n        const res = found || [];\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                sub.query(range, check, res);\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\";\nimport { InteractionManager } from \"./Utils/InteractionManager\";\nimport { Particle } from \"./Particle\";\nimport { Point } from \"./Utils/Point\";\nimport { QuadTree } from \"./Utils/QuadTree\";\nimport { Rectangle } from \"./Utils/Rectangle\";\nimport { errorPrefix } from \"./Utils/Constants\";\nconst qTreeCapacity = 4;\nconst qTreeRectangle = (canvasSize) => {\n    return new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, (canvasSize.width * 3) / 2, (canvasSize.height * 3) / 2);\n};\nexport class Particles {\n    constructor(engine, container) {\n        this._applyDensity = (options, manualCount, group) => {\n            if (!options.number.density?.enable) {\n                return;\n            }\n            const numberOptions = options.number, densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit > 0 ? numberOptions.limit : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter((t) => t.group === group).length);\n            this.limit = numberOptions.limit * densityFactor;\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;\n            if (!container.canvas.element || !densityOptions.enable) {\n                return 1;\n            }\n            const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;\n            return (canvas.width * canvas.height) / (densityOptions.factor * pxRatio ** 2 * densityOptions.area);\n        };\n        this._pushParticle = (position, overrideOptions, group, initializer) => {\n            try {\n                let particle = this.pool.pop();\n                if (particle) {\n                    particle.init(this._nextId, position, overrideOptions, group);\n                }\n                else {\n                    particle = new Particle(this._engine, this._nextId, this._container, position, overrideOptions, group);\n                }\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                return;\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            particle.destroy(override);\n            const zIdx = this._zArray.indexOf(particle);\n            this._array.splice(index, 1);\n            this._zArray.splice(zIdx, 1);\n            this.pool.push(particle);\n            this._engine.dispatchEvent(\"particleRemoved\", {\n                container: this._container,\n                data: {\n                    particle,\n                },\n            });\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.needsSort = false;\n        this.lastZIndex = 0;\n        this._interactionManager = new InteractionManager(engine, container);\n        const canvasSize = container.canvas.size;\n        this.quadTree = new QuadTree(qTreeRectangle(canvasSize), qTreeCapacity);\n        this.movers = this._engine.plugins.getMovers(container, true);\n        this.updaters = this._engine.plugins.getUpdaters(container, true);\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 container = this._container, options = container.actualOptions, limit = options.particles.number.limit;\n        if (limit > 0) {\n            const countToRemove = this.count + 1 - limit;\n            if (countToRemove > 0) {\n                this.removeQuantity(countToRemove);\n            }\n        }\n        return this._pushParticle(position, overrideOptions, group, initializer);\n    }\n    clear() {\n        this._array = [];\n        this._zArray = [];\n    }\n    destroy() {\n        this._array = [];\n        this._zArray = [];\n        this.movers = [];\n        this.updaters = [];\n    }\n    async draw(delta) {\n        const container = this._container;\n        container.canvas.clear();\n        await this.update(delta);\n        for (const [, plugin] of container.plugins) {\n            container.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    handleClickMode(mode) {\n        this._interactionManager.handleClickMode(mode);\n    }\n    init() {\n        const container = this._container, options = container.actualOptions;\n        this.lastZIndex = 0;\n        this.needsSort = false;\n        let handled = false;\n        this.updaters = this._engine.plugins.getUpdaters(container, true);\n        this._interactionManager.init();\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._interactionManager.init();\n        for (const [, pathGenerator] of container.pathGenerators) {\n            pathGenerator.init(container);\n        }\n        this.addManualParticles();\n        if (!handled) {\n            for (const group in options.particles.groups) {\n                const groupOptions = options.particles.groups[group];\n                for (let i = this.count, j = 0; j < groupOptions.number?.value && i < options.particles.number.value; i++, j++) {\n                    this.addParticle(undefined, groupOptions, group);\n                }\n            }\n            for (let i = this.count; i < options.particles.number.value; i++) {\n                this.addParticle();\n            }\n        }\n    }\n    push(nb, mouse, overrideOptions, group) {\n        this.pushing = true;\n        for (let i = 0; i < nb; i++) {\n            this.addParticle(mouse?.position, overrideOptions, group);\n        }\n        this.pushing = false;\n    }\n    async redraw() {\n        this.clear();\n        this.init();\n        await 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 = 1, group, override) {\n        if (index < 0 || index > this.count) {\n            return;\n        }\n        let deleted = 0;\n        for (let i = index; deleted < quantity && i < this.count; i++) {\n            this._removeParticle(i--, group, override) && deleted++;\n        }\n    }\n    removeQuantity(quantity, group) {\n        this.removeAt(0, quantity, group);\n    }\n    setDensity() {\n        const options = this._container.actualOptions, groups = options.particles.groups;\n        for (const group in groups) {\n            this._applyDensity(groups[group], 0, group);\n        }\n        this._applyDensity(options.particles, options.manualParticles.length);\n    }\n    async 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 && plugin.update(delta);\n        }\n        for (const particle of this._array) {\n            const resizeFactor = container.canvas.resizeFactor;\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            await this._interactionManager.reset(particle);\n            for (const [, plugin] of this._container.plugins) {\n                if (particle.destroyed) {\n                    break;\n                }\n                if (plugin.particleUpdate) {\n                    plugin.particleUpdate(particle, delta);\n                }\n            }\n            for (const mover of this.movers) {\n                mover.isEnabled(particle) && mover.move(particle, delta);\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            this.pool.push(...particlesToDelete);\n        }\n        await 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                await this._interactionManager.particlesInteract(particle, delta);\n            }\n        }\n        delete container.canvas.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            this.lastZIndex = zArray[zArray.length - 1].position.z;\n            this.needsSort = false;\n        }\n    }\n}\n","import { getRangeValue } from \"../Utils/NumberUtils\";\nimport { isSsr } from \"../Utils/Utils\";\nexport class Retina {\n    constructor(container) {\n        this.container = container;\n        this.pixelRatio = 1;\n        this.reduceFactor = 1;\n    }\n    init() {\n        const container = this.container, options = container.actualOptions;\n        this.pixelRatio = !options.detectRetina || isSsr() ? 1 : window.devicePixelRatio;\n        this.reduceFactor = 1;\n        const ratio = this.pixelRatio;\n        if (container.canvas.element) {\n            const element = container.canvas.element;\n            container.canvas.size.width = element.offsetWidth * ratio;\n            container.canvas.size.height = element.offsetHeight * ratio;\n        }\n        const particles = options.particles, moveOptions = particles.move;\n        this.attractDistance = getRangeValue(moveOptions.attract.distance) * ratio;\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.attractDistance = getRangeValue(moveOptions.attract.distance) * ratio;\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 { getLogger, isFunction } from \"../Utils/Utils\";\nimport { Canvas } from \"./Canvas\";\nimport { EventListeners } from \"./Utils/EventListeners\";\nimport { Options } from \"../Options/Classes/Options\";\nimport { Particles } from \"./Particles\";\nimport { Retina } from \"./Retina\";\nimport { errorPrefix } from \"./Utils/Constants\";\nimport { getRangeValue } from \"../Utils/NumberUtils\";\nimport { loadOptions } from \"../Utils/OptionsUtils\";\nfunction guardCheck(container) {\n    return container && !container.destroyed;\n}\nfunction initDelta(value, fpsLimit = 60, smooth = false) {\n    return {\n        value,\n        factor: smooth ? 60 / fpsLimit : (60 * value) / 1000,\n    };\n}\nfunction loadContainerOptions(engine, container, ...sourceOptionsArr) {\n    const options = new Options(engine, container);\n    loadOptions(options, ...sourceOptionsArr);\n    return options;\n}\nconst defaultPathGeneratorKey = \"default\", defaultPathGenerator = {\n    generate: (p) => p.velocity,\n    init: () => {\n    },\n    update: () => {\n    },\n    reset: () => {\n    },\n};\nexport class Container {\n    constructor(engine, id, sourceOptions) {\n        this.id = id;\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                (entry.isIntersecting ? this.play : this.pause)();\n            }\n        };\n        this._nextFrame = async (timestamp) => {\n            try {\n                if (!this.smooth &&\n                    this.lastFrameTime !== undefined &&\n                    timestamp < this.lastFrameTime + 1000 / 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 > 1000) {\n                    this.draw(false);\n                    return;\n                }\n                await this.particles.draw(delta);\n                if (!this.alive()) {\n                    this.destroy();\n                    return;\n                }\n                if (this.getAnimationStatus()) {\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.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.drawers = new Map();\n        this._options = loadContainerOptions(this._engine, this);\n        this.actualOptions = loadContainerOptions(this._engine, this);\n        this._eventListeners = new EventListeners(this);\n        if (typeof IntersectionObserver !== \"undefined\" && IntersectionObserver) {\n            this._intersectionObserver = new IntersectionObserver((entries) => this._intersectionManager(entries));\n        }\n        this._engine.dispatchEvent(\"containerBuilt\", { container: 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            };\n            clickOrTouchHandler(e, pos, 1);\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                let lastTouch = touchEvent.touches[touchEvent.touches.length - 1];\n                if (!lastTouch) {\n                    lastTouch = touchEvent.changedTouches[touchEvent.changedTouches.length - 1];\n                    if (!lastTouch) {\n                        return;\n                    }\n                }\n                const element = this.canvas.element, canvasRect = element ? element.getBoundingClientRect() : undefined, pos = {\n                    x: lastTouch.clientX - (canvasRect ? canvasRect.left : 0),\n                    y: lastTouch.clientY - (canvasRect ? canvasRect.top : 0),\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 ?? defaultPathGenerator);\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 [, drawer] of this.drawers) {\n            drawer.destroy && drawer.destroy(this);\n        }\n        for (const key of this.drawers.keys()) {\n            this.drawers.delete(key);\n        }\n        this._engine.plugins.destroy(this);\n        this.destroyed = true;\n        const mainArr = this._engine.dom(), idx = mainArr.findIndex((t) => t === this);\n        if (idx >= 0) {\n            mainArr.splice(idx, 1);\n        }\n        this._engine.dispatchEvent(\"containerDestroyed\", { container: this });\n    }\n    draw(force) {\n        if (!guardCheck(this)) {\n            return;\n        }\n        let refreshTime = force;\n        this._drawAnimationFrame = requestAnimationFrame(async (timestamp) => {\n            if (refreshTime) {\n                this.lastFrameTime = undefined;\n                refreshTime = false;\n            }\n            await this._nextFrame(timestamp);\n        });\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    getAnimationStatus() {\n        return !this._paused && !this.pageHidden && guardCheck(this);\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 && plugin.handleClickMode(mode);\n        }\n    }\n    async init() {\n        if (!guardCheck(this)) {\n            return;\n        }\n        const shapes = this._engine.plugins.getSupportedShapes();\n        for (const type of shapes) {\n            const drawer = this._engine.plugins.getShapeDrawer(type);\n            if (drawer) {\n                this.drawers.set(type, drawer);\n            }\n        }\n        this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n        this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n        const availablePlugins = this._engine.plugins.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) * 1000;\n        this._delay = getRangeValue(this.actualOptions.delay) * 1000;\n        this._lifeTime = 0;\n        this.fpsLimit = this.actualOptions.fpsLimit > 0 ? this.actualOptions.fpsLimit : 120;\n        this.smooth = this.actualOptions.smooth;\n        for (const [, drawer] of this.drawers) {\n            drawer.init && (await drawer.init(this));\n        }\n        for (const [, plugin] of this.plugins) {\n            plugin.init && (await plugin.init());\n        }\n        this._engine.dispatchEvent(\"containerInit\", { container: this });\n        this.particles.init();\n        this.particles.setDensity();\n        for (const [, plugin] of this.plugins) {\n            plugin.particlesSetup && 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 && 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    setNoise(noiseOrGenerator, init, update) {\n        if (!guardCheck(this)) {\n            return;\n        }\n        this.setPath(noiseOrGenerator, init, update);\n    }\n    setPath(pathOrGenerator, init, update) {\n        if (!pathOrGenerator || !guardCheck(this)) {\n            return;\n        }\n        const pathGenerator = { ...defaultPathGenerator };\n        if (isFunction(pathOrGenerator)) {\n            pathGenerator.generate = pathOrGenerator;\n            if (init) {\n                pathGenerator.init = init;\n            }\n            if (update) {\n                pathGenerator.update = update;\n            }\n        }\n        else {\n            const oldGenerator = pathGenerator;\n            pathGenerator.generate = pathOrGenerator.generate || oldGenerator.generate;\n            pathGenerator.init = pathOrGenerator.init || oldGenerator.init;\n            pathGenerator.update = pathOrGenerator.update || oldGenerator.update;\n        }\n        this.addPath(defaultPathGeneratorKey, pathGenerator, true);\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            this._delayTimeout = setTimeout(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                    plugin.start && (await plugin.start());\n                }\n                this._engine.dispatchEvent(\"containerStarted\", { container: this });\n                this.play();\n                resolve();\n            }, 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 && 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 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 && 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);\n        if (idx < 0) {\n            return;\n        }\n        if (length === 1) {\n            this._listeners.delete(type);\n        }\n        else {\n            arr.splice(idx, 1);\n        }\n    }\n}\n","import { executeOnSingleOrMultiple } from \"../../Utils/Utils\";\nfunction getItemsFromInitializer(container, map, initializers, force = false) {\n    let res = map.get(container);\n    if (!res || force) {\n        res = [...initializers.values()].map((t) => t(container));\n        map.set(container, res);\n    }\n    return res;\n}\nexport class Plugins {\n    constructor(engine) {\n        this._engine = engine;\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.drawers = new Map();\n        this.pathGenerators = new Map();\n    }\n    addInteractor(name, initInteractor) {\n        this._initializers.interactors.set(name, initInteractor);\n    }\n    addParticleMover(name, initMover) {\n        this._initializers.movers.set(name, initMover);\n    }\n    addParticleUpdater(name, initUpdater) {\n        this._initializers.updaters.set(name, initUpdater);\n    }\n    addPathGenerator(type, pathGenerator) {\n        !this.getPathGenerator(type) && this.pathGenerators.set(type, pathGenerator);\n    }\n    addPlugin(plugin) {\n        !this.getPlugin(plugin.id) && this.plugins.push(plugin);\n    }\n    addPreset(presetKey, options, override = false) {\n        (override || !this.getPreset(presetKey)) && this.presets.set(presetKey, options);\n    }\n    addShapeDrawer(types, drawer) {\n        executeOnSingleOrMultiple(types, (type) => {\n            !this.getShapeDrawer(type) && this.drawers.set(type, drawer);\n        });\n    }\n    destroy(container) {\n        this.updaters.delete(container);\n        this.movers.delete(container);\n        this.interactors.delete(container);\n    }\n    getAvailablePlugins(container) {\n        const res = new Map();\n        for (const plugin of this.plugins) {\n            plugin.needsPlugin(container.actualOptions) && res.set(plugin.id, plugin.getPlugin(container));\n        }\n        return res;\n    }\n    getInteractors(container, force = false) {\n        return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);\n    }\n    getMovers(container, force = false) {\n        return 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.drawers.get(type);\n    }\n    getSupportedShapes() {\n        return this.drawers.keys();\n    }\n    getUpdaters(container, force = false) {\n        return getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);\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 && updater.loadOptions(options, ...sourceOptions);\n        }\n    }\n}\n","import { errorPrefix, generatedAttribute } from \"./Utils/Constants\";\nimport { getLogger, isBoolean, isFunction, isNumber, isString, itemFromSingleOrMultiple } from \"../Utils/Utils\";\nimport { Container } from \"./Container\";\nimport { EventDispatcher } from \"../Utils/EventDispatcher\";\nimport { Plugins } from \"./Utils/Plugins\";\nimport { getRandom } from \"../Utils/NumberUtils\";\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 response.json();\n    }\n    getLogger().error(`${errorPrefix} ${response.status} while retrieving config file`);\n    return data.fallback;\n}\nfunction isParamsEmpty(params) {\n    return !params.id && !params.element && !params.url && !params.options;\n}\nfunction isParams(obj) {\n    return !isParamsEmpty(obj);\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 = new Plugins(this);\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 \"2.12.0\";\n    }\n    addConfig(nameOrConfig, config) {\n        if (isString(nameOrConfig)) {\n            if (config) {\n                config.name = nameOrConfig;\n                this._configs.set(nameOrConfig, config);\n            }\n        }\n        else {\n            this._configs.set(nameOrConfig.name ?? \"default\", nameOrConfig);\n        }\n    }\n    addEventListener(type, listener) {\n        this._eventDispatcher.addEventListener(type, listener);\n    }\n    async addInteractor(name, interactorInitializer, refresh = true) {\n        this.plugins.addInteractor(name, interactorInitializer);\n        await this.refresh(refresh);\n    }\n    async addMover(name, moverInitializer, refresh = true) {\n        this.plugins.addParticleMover(name, moverInitializer);\n        await this.refresh(refresh);\n    }\n    async addParticleUpdater(name, updaterInitializer, refresh = true) {\n        this.plugins.addParticleUpdater(name, updaterInitializer);\n        await this.refresh(refresh);\n    }\n    async addPathGenerator(name, generator, refresh = true) {\n        this.plugins.addPathGenerator(name, generator);\n        await this.refresh(refresh);\n    }\n    async addPlugin(plugin, refresh = true) {\n        this.plugins.addPlugin(plugin);\n        await this.refresh(refresh);\n    }\n    async addPreset(preset, options, override = false, refresh = true) {\n        this.plugins.addPreset(preset, options, override);\n        await this.refresh(refresh);\n    }\n    async addShape(shape, drawer, initOrRefresh, afterEffectOrRefresh, destroyOrRefresh, refresh = true) {\n        let customDrawer;\n        let realRefresh = refresh, realInit, realAfterEffect, realDestroy;\n        if (isBoolean(initOrRefresh)) {\n            realRefresh = initOrRefresh;\n            realInit = undefined;\n        }\n        else {\n            realInit = initOrRefresh;\n        }\n        if (isBoolean(afterEffectOrRefresh)) {\n            realRefresh = afterEffectOrRefresh;\n            realAfterEffect = undefined;\n        }\n        else {\n            realAfterEffect = afterEffectOrRefresh;\n        }\n        if (isBoolean(destroyOrRefresh)) {\n            realRefresh = destroyOrRefresh;\n            realDestroy = undefined;\n        }\n        else {\n            realDestroy = destroyOrRefresh;\n        }\n        if (isFunction(drawer)) {\n            customDrawer = {\n                afterEffect: realAfterEffect,\n                destroy: realDestroy,\n                draw: drawer,\n                init: realInit,\n            };\n        }\n        else {\n            customDrawer = drawer;\n        }\n        this.plugins.addShapeDrawer(shape, customDrawer);\n        await this.refresh(realRefresh);\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            dom.splice(index, 1);\n            return;\n        }\n        return item;\n    }\n    init() {\n        if (this._initialized) {\n            return;\n        }\n        this._initialized = true;\n    }\n    async load(tagIdOrOptionsOrParams, options) {\n        return this.loadFromArray(tagIdOrOptionsOrParams, options);\n    }\n    async loadFromArray(tagIdOrOptionsOrParams, optionsOrIndex, index) {\n        let params;\n        if (!isParams(tagIdOrOptionsOrParams)) {\n            params = {};\n            if (isString(tagIdOrOptionsOrParams)) {\n                params.id = tagIdOrOptionsOrParams;\n            }\n            else {\n                params.options = tagIdOrOptionsOrParams;\n            }\n            if (isNumber(optionsOrIndex)) {\n                params.index = optionsOrIndex;\n            }\n            else {\n                params.options = optionsOrIndex ?? params.options;\n            }\n            params.index = index ?? params.index;\n        }\n        else {\n            params = tagIdOrOptionsOrParams;\n        }\n        return this._loadParams(params);\n    }\n    async loadJSON(tagId, pathConfigJson, index) {\n        let url, id;\n        if (isNumber(pathConfigJson) || pathConfigJson === undefined) {\n            url = tagId;\n        }\n        else {\n            id = tagId;\n            url = pathConfigJson;\n        }\n        return this._loadParams({ id: id, url, index });\n    }\n    async refresh(refresh = true) {\n        if (!refresh) {\n            return;\n        }\n        this.dom().forEach((t) => t.refresh());\n    }\n    removeEventListener(type, listener) {\n        this._eventDispatcher.removeEventListener(type, listener);\n    }\n    async set(id, element, options, index) {\n        const params = { index };\n        if (isString(id)) {\n            params.id = id;\n        }\n        else {\n            params.element = id;\n        }\n        if (element instanceof HTMLElement) {\n            params.element = element;\n        }\n        else {\n            params.options = element;\n        }\n        if (isNumber(options)) {\n            params.index = options;\n        }\n        else {\n            params.options = options ?? params.options;\n        }\n        return this._loadParams(params);\n    }\n    async setJSON(id, element, pathConfigJson, index) {\n        const params = {};\n        if (id instanceof HTMLElement) {\n            params.element = id;\n            params.url = element;\n            params.index = pathConfigJson;\n        }\n        else {\n            params.id = id;\n            params.element = element;\n            params.url = pathConfigJson;\n            params.index = index;\n        }\n        return this._loadParams(params);\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    async _loadParams(params) {\n        const id = params.id ?? `tsparticles${Math.floor(getRandom() * 10000)}`, { 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 === id);\n        if (oldIndex >= 0) {\n            const old = this.domItem(oldIndex);\n            if (old && !old.destroyed) {\n                old.destroy();\n                dom.splice(oldIndex, 1);\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                canvasEl = existingCanvases[0];\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 newItem = new Container(this, id, currentOptions);\n        if (oldIndex >= 0) {\n            dom.splice(oldIndex, 0, newItem);\n        }\n        else {\n            dom.push(newItem);\n        }\n        newItem.canvas.loadCanvas(canvasEl);\n        await newItem.start();\n        return newItem;\n    }\n}\n","import { getRangeValue, parseAlpha } from \"./NumberUtils\";\nimport { hslToRgb, hslaToRgba } from \"./ColorUtils\";\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);\n        return result\n            ? hslaToRgba({\n                a: result.length > 4 ? parseAlpha(result[5]) : 1,\n                h: parseInt(result[1], 10),\n                l: parseInt(result[3], 10),\n                s: parseInt(result[2], 10),\n            })\n            : undefined;\n    }\n}\n","import { getRangeValue, parseAlpha } from \"./NumberUtils\";\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);\n        return result\n            ? {\n                a: result.length > 4 ? parseAlpha(result[5]) : 1,\n                b: parseInt(result[3], 10),\n                g: parseInt(result[2], 10),\n                r: parseInt(result[1], 10),\n            }\n            : undefined;\n    }\n}\n","import { init } from \"./init\";\nimport { isSsr } from \"./Utils/Utils\";\nconst tsParticles = init();\nif (!isSsr()) {\n    window.tsParticles = tsParticles;\n}\nexport * from \"./exports\";\nexport * from \"./export-types\";\nexport { tsParticles };\n","import { Engine } from \"./Core/Engine\";\nimport { HslColorManager } from \"./Utils/HslColorManager\";\nimport { RgbColorManager } from \"./Utils/RgbColorManager\";\nimport { addColorManager } from \"./Utils/ColorUtils\";\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","import { Vector3d } from \"./Vector3d\";\nexport class Vector extends Vector3d {\n    constructor(xOrCoords, y) {\n        super(xOrCoords, y, 0);\n    }\n    static get origin() {\n        return Vector.create(0, 0);\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","export class Range {\n    constructor(x, y) {\n        this.position = {\n            x: x,\n            y: y,\n        };\n    }\n}\n"],"names":["ColorAnimation","constructor","this","count","enable","offset","speed","delay","decay","sync","load","data","undefined","HslAnimation","h","s","l","AnimatableColor","OptionsColor","O","super","animation","create","source","color","value","colorAnimation","drawLine","context","begin","end","beginPath","moveTo","x","y","lineTo","closePath","drawTriangle","p1","p2","p3","paintBase","dimension","baseColor","fillStyle","fillRect","width","height","paintImage","image","opacity","globalAlpha","drawImage","clear","clearRect","drawParticle","container","particle","delta","colorStyles","backgroundMask","composite","radius","shadow","transform","pos","getPosition","angle","rotation","pathRotation","velocity","rotateData","Math","sin","cos","transformData","a","b","c","d","setTransform","globalCompositeOperation","shadowColor","shadowBlur","blur","shadowOffsetX","shadowOffsetY","fill","strokeWidth","lineWidth","stroke","strokeStyle","shape","drawer","drawers","get","draw","retina","pixelRatio","drawShape","close","afterEffect","drawShapeAfterEffect","drawPlugin","plugin","drawParticlePlugin","alterHsl","type","isObject","val","deepCompare","obj1","obj2","excludeKeyFn","keys1","Object","keys","filter","key","keys2","length","value1","value2","Array","isArray","deepCompareArrays","arr1","arr2","i","val1","val2","defaultId","Particles","Component","props","state","init","library","destroy","setState","shouldComponentUpdate","nextProps","nextOptions","options","params","currentOptions","url","id","canvasClassName","className","style","loaded","startsWith","componentDidUpdate","refresh","forceUpdate","then","componentDidMount","async","loadParticles","componentWillUnmount","render","defaultProps","current","Vector3d","xOrCoords","z","_updateFromAngle","coords3d","Error","origin","atan2","sqrt","getLengthSq","clone","add","v","addTo","copy","distanceTo","sub","distanceToSq","div","n","divTo","mult","multTo","normalize","rotate","setTo","v3d","subFrom","Random","minimumValue","ValueWithRandom","random","Rectangle","size","contains","point","w","position","intersects","range","pos1","pos2","size2","w2","h2","CollisionsAbsorb","CollisionsOverlap","retries","ParticlesBounceFactor","ParticlesBounce","horizontal","vertical","Collisions","absorb","bounce","maxSpeed","mode","overlap","MoveAngle","MoveAttract","distance","rotateX","rotateY","MoveCenter","MoveGravity","acceleration","inverse","MovePath","clamp","generator","MoveTrailFill","MoveTrail","fillColor","OutModes","default","bottom","left","right","top","Spin","Move","attract","center","direction","drift","gravity","path","outModes","spin","straight","trail","vibrate","warp","collisions","_","noise","outMode","out_mode","OpacityAnimation","opacity_min","Opacity","anim","ParticlesDensity","area","factor","value_area","ParticlesNumber","density","limit","max","Shadow","charKey","charAltKey","imageKey","imageAltKey","polygonKey","polygonAltKey","Shape","loadShape","item","mainKey","altKey","altOverride","itemIsArray","emptyValue","mainDifferentValues","altDifferentValues","character","custom","images","polygon","_value","SizeAnimation","size_min","Size","Stroke","A","ZIndex","opacityRate","sizeRate","velocityRate","ParticlesOptions","engine","_engine","_container","groups","move","number","reduceDuplicates","zIndex","group","interactivity","strokeToLoad","t","tmp","updaters","plugins","updater","loadOptions","interactors","interactor","loadParticlesOptions","sourceOptionsArr","sourceOptions","_logger","debug","console","error","info","log","verbose","warning","warn","getLogger","rectSideBounce","res","bounced","pSide","pOtherSide","rectSide","rectOtherSide","min","isSsr","window","document","safeMatchMedia","query","matchMedia","safeMutationObserver","callback","MutationObserver","isInArray","array","indexOf","loadFont","font","weight","fonts","arrayRandomIndex","floor","itemFromArray","index","useIndex","isPointInside","bounds","inside","areBoundsInside","calculateBounds","deepExtend","destination","sources","sourceIsArray","destDict","map","isDivModeEnabled","divs","findItemFromSingleOrMultiple","divModeExecute","executeOnSingleOrMultiple","divMode","selectors","selector","singleDivModeExecute","element","matches","some","checkSelector","circleBounceDataFromParticle","p","getRadius","mass","getMass","circleBounce","xVelocityDiff","yVelocityDiff","dx","xDist","dy","yDist","m1","m2","u1","u2","v1","v2","vFinal1","vFinal2","rectBounce","divBounds","resH","resV","obj","itemFromSingleOrMultiple","find","initParticleNumericAnimationValue","pxRatio","valueRange","animationOptions","delayTime","loops","maxLoops","time","status","autoStatus","startValue","initialValue","getPositionOrSize","positionOrSize","canvasSize","rest","getSize","isBoolean","arg","isString","isNumber","isFunction","randomColorValue","midColorValue","colorManagers","Map","addColorManager","manager","set","hue2rgb","q","stringToRgba","input","stringPrefix","parseString","hexFixed","replace","r","g","result","exec","parseInt","rangeColorToRgb","colorToRgb","handleRangeColor","getRandomRgbColor","stringToRgb","handleColor","rangeColorToHsl","rgb","rgbToHsl","r1","g1","b1","hslToRgb","hsl","hslPercent","hslaToRgba","hsla","rgbResult","fixedMin","getStyleFromRgb","getStyleFromHsl","colorMix","color1","color2","size1","rgb1","rgb2","getLinkColor","linkColor","sourceColor","getFillColor","getStrokeColor","destColor","hslColor","getLinkRandomColor","optColor","blink","consent","getHslFromAnimation","getHslAnimationFromHsl","reduceFactor","resColor","setColorAnimation","colorValue","AbsorberSizeLimit","AbsorberSize","Absorber","draggable","orbits","name","AbsorberInstance","absorbers","_calcPosition","exactPosition","canvas","Vector","_updateParticlePosition","destroyed","needsNewPosition","newPosition","initialVelocity","absorberOrbit","PI","minSize","absorberOrbitDirection","orbitRadius","orbitAngle","orbitDirection","updateFunc","moveSpeed","addV","initialPosition","dragging","mouse","clicking","downPosition","pow","sizeFactor","translate","arc","resize","Absorbers","interactivityAbsorbers","getAbsorber","idxOrName","addAbsorber","absorber","push","handleClickMode","absorberOptions","modeAbsorbers","absorbersOptions","aPosition","clickPosition","actualOptions","modes","particleUpdate","removeAbsorber","splice","stop","AbsorbersPlugin","getPlugin","needsPlugin","events","onClick","DestroyBounds","SplitFactor","SplitRate","Split","rate","sizeOffset","particles","colorOffset","Destroy","split","addSplitParticle","parent","splitParticlesOptions","destroyOptions","splitOptions","parentColor","addParticle","splitCount","unbreakable","setTimeout","DestroyUpdater","destroyBoundsOptions","destroyBounds","isEnabled","particleDestroyed","override","particlesSplitOptions","update","CircleShape","randomPosition","randomTheta","u","theta","atan","tan","generateTheta","maxRadius","randomRadius","EmitterLife","wait","duration","EmitterRate","quantity","EmitterSize","Emitter","autoPlay","life","startCount","domId","spawnColor","EmitterInstance","emitters","_destroy","removeEmitter","dispatchEvent","emitter","_emit","_paused","_emitParticles","singleParticlesOptions","_particlesOptions","particlesOptions","hslAnimation","_setColorAnimation","pPosition","_shape","_prepareToDie","_lifeCount","_immortal","_duration","initValue","maxValue","emitFactor","fpsLimit","_currentDuration","_currentEmitDelay","_currentSpawnDelay","_initialPosition","_spawnDelay","emitterShapeManager","getShape","_firstSpawn","_startParticlesAdded","play","externalPause","pause","externalPlay","getElementById","elRect","getBoundingClientRect","_emitDelay","Emitters","interactivityEmitters","getEmitter","addEmitter","playEmitter","pauseEmitter","emitterOptions","modeEmitters","emittersModeOptions","usedIndexes","idx","includes","emittersOptions","ePosition","shapes","ShapeManager","addShape","getSupportedShapes","randomSquareCoordinate","SquareShape","halfW","halfH","side","EmittersPlugin","emitterMode","ExternalInteractorBase","Trail","pauseOnStop","TrailMaker","_delay","interact","trailOptions","optDelay","canEmit","_lastPosition","mousePos","onHover","loadModeOptions","reset","RollLight","Roll","darken","enlighten","backColor","RollUpdater","getTransformValues","roll","rollHorizontal","rollVertical","rollOpt","alterType","alter","initParticle","spawning","updateRoll","el","querySelector","fullScreen","links","minDistance","connectParticles","maxParticles","sizeVariations","responsive","maxWidth","breakpoint","pauseAnimation","resumeAnimation","initPjs","particlesJS","pJSDom","tagId","pathConfigJson","loadJSON","catch","setOnClickHandler","dom","initParticlesJS","moveOptions","moveDrift","pathOptions","lastPathTime","pathDelay","pathGenerator","generate","applyPath","gravityOptions","gravityFactor","moveDecay","zIndexOptions","zVelocityFactor","zIndexFactor","BaseMover","_initSpin","spinOptions","spinPos","spinCenter","spinAcceleration","particleOptions","slowFactor","slow","inRange","getProximitySpeedFactor","baseSpeed","maxSize","maxCanvasSize","dxFixed","abs","dyFixed","maxDistance","hDistance","vDistance","misplaced","vel","applyDistance","CircleDrawer","circleRange","getSidesCount","particleInit","shapeData","updateColorValue","valueAnimation","decrease","ColorUpdater","hAnimation","sAnimation","lAnimation","updateColor","OpacityUpdater","opacityOptions","opacityAnimation","minValue","checkDestroy","updateOpacity","BounceOutMode","handled","particleBounce","newVelocity","minPos","bounceHorizontal","bounceVertical","DestroyOutMode","_delta","outType","moveCenter","vx","vy","remove","NoneOutMode","pRadius","OutOutMode","circVec","newDx","newDy","wrap","newPos","sizeValue","nextBounds","OutOfCanvasUpdater","_updateOutMode","SizeUpdater","sizeAnimation","sizeAnimationSpeed","sizeVelocity","updateSize","loadBasic","addMover","loadBaseMover","loadCircleShape","addParticleUpdater","loadColorUpdater","loadOpacityUpdater","loadOutModesUpdater","loadSizeUpdater","Attract","easing","Attractor","_clickAttract","finish","attractRadius","attractModeDistance","_processAttract","Circle","_hoverAttract","attractOptions","quadTree","attractFactor","normVec","mouseMoveStatus","hoverEnabled","hoverMode","clickEnabled","clickMode","Bounce","Bouncer","_processBounce","_processMouseBounce","tolerance","bounceModeDistance","_singleSelectorBounce","querySelectorAll","forEach","elem","offsetLeft","offsetWidth","offsetTop","offsetHeight","onDiv","BubbleBase","mix","BubbleDiv","ids","Bubble","calculateBubbleValue","particleValue","modeValue","optionsValue","ratio","Bubbler","_clickBubble","mouseClickPos","bubbleOptions","bubble","bubbleModeDistance","queryCircle","durationEnd","distMouse","timeSpent","Date","getTime","clickTime","sizeData","bubbleObj","optValue","bubbleModeSize","particlesObj","_process","opacityData","_hoverBubbleColor","_hoverBubble","pointDistance","_hoverBubbleSize","_hoverBubbleOpacity","divBubble","finalColor","modeColor","bubbleColor","pColor","modeOpacity","optOpacity","modeSize","optSize","bubbleParam","bubbleDuration","bubbleDistance","particlesParam","pObjBubble","pObj","_singleSelectorHover","repulseRadius","force","ConnectLinks","Connect","lineLinked","line_linked","lineStyle","ctx","connectOptions","connect","gradStop","sourcePos","destPos","midRgb","grad","createLinearGradient","addColorStop","gradient","drawConnection","ls","drawConnectLine","linksWidth","Connector","connectModeDistance","connectModeRadius","slice","distMax","xDiff","yDiff","GrabLinks","Grab","drawGrab","lineColor","beginPos","colorLine","drawGrabLine","Grabber","grab","grabModeDistance","grabLineOptions","lineOpacity","opacityLine","grabLineColor","linksOptions","Pauser","getAnimationStatus","Push","particles_nb","Pusher","pushOptions","groupOptions","Remove","Remover","removeNb","removeQuantity","RepulseBase","RepulseDiv","Repulse","Repulser","_clickRepulse","repulseOptions","repulse","repulseDistance","repulseModeDistance","vect","_hoverRepulse","_processRepulse","divRepulse","repulseFactor","_singleSelectorRepulse","repulseOpts","hover","click","Slow","Slower","slowModeRadius","slowOptions","particlePos","dist","proximityFactor","InterlaceOffsets","InterlaceSteps","ByteStream","bytes","Uint8ClampedArray","getString","reduce","acc","curr","String","fromCharCode","nextByte","nextTwoBytes","readSubBlocks","blockString","readSubBlocksBin","len","blockData","Uint8Array","skipSubBlocks","parseColorTable","byteStream","colors","parseBlock","gif","avgAlpha","getFrameIndex","getTransparencyIndex","progressCallback","frame","frames","packedByte","localColorTableFlag","interlacedFlag","sortFlag","reserved","localColorCount","localColorTable","getColor","globalColorTable","ImageData","colorSpace","DOMException","EvalError","minCodeSize","imageData","clearCode","readBits","bytePos","bitPos","code","dic","pass","pixelPos","lineIndex","last","concat","bitmap","createImageBitmap","parseImageBlock","GCreserved","disposalMethod","userInputDelayFlag","transparencyFlag","transparencyIndex","applicationExtension","identifier","authenticationCode","applicationExtensions","comments","plainTextData","charSize","foregroundColor","backgroundColor","text","parseExtensionBlock","currentColorRegex","loadImage","Promise","resolve","loading","img","Image","addEventListener","src","loadGifImage","gifData","gifURL","fetch","ok","buffer","arrayBuffer","totalTime","colorRes","pixelAspectRatio","backgroundImage","globalColorTableFlag","globalColorCount","backgroundColorIndex","copyWithin","frameIndex","incrementFrameIndex","getframeIndex","increment","newValue","Infinity","message","decodeGIF","gifLoopCount","extension","NaN","getGIFLoopAmount","downloadSvgImage","response","svgData","replaceImageColor","svgColoredData","imageShape","colorStyle","preFillIndex","substring","replaceColorSvg","imageRes","replaceColor","replace_color","svg","Blob","domUrl","URL","webkitURL","createObjectURL","revokeObjectURL","img2","ImageDrawer","loadImageShape","addImage","offscreenCanvas","OffscreenCanvas","offscreenContext","getContext","imageSmoothingQuality","imageSmoothingEnabled","gifFrame","gifTime","scale","putImageData","previousImageData","getImageData","preload","Preload","ImagePreloaderPlugin","preloadOptions","existing","imageFunc","addLoadImageToEngine","preloader","addPlugin","LifeDelay","LifeDuration","Life","LifeUpdater","lifeOptions","justSpawned","widthRange","heightRange","LineDrawer","lineCap","cap","ParallaxMover","parallax","parallaxOptions","parallaxForce","canvasCenter","parallaxSmooth","smooth","centerDistance","ParticlesInteractorBase","attractDistance","ax","ay","p1Factor","p2Factor","updateAbsorb","r2","fixBounceSpeed","collisionMaxSpeed","resolveCollision","Collider","radius1","radius2","round","CircleWarp","rect","circle","biggerCircle","rectSW","LinksShadow","LinksTriangle","frequency","Links","triangles","getLinkDistance","optDistance","absDiffs","warpDistances","Linker","_setColor","linkContainer","linksColor","linksColors","linkOpt1","linksDistance","linkOpt2","setLinkFrequency","dictionary","sort","join","LinkInstance","_drawLinkLine","link","p1LinksOptions","twinkle","lines","twinkleFreq","twinkleRgb","drawn","pi1","pi2","endNE","d1","yi","endSW","d2","xi","endSE","d3","drawLinkLine","_drawLinkTriangle","link1","link2","triangleOptions","opacityTriangle","pos3","colorTriangle","drawLinkTriangle","_drawTriangles","p1Links","vertices","linkFreq","_getLinkFrequency","findIndex","vertex","_getTriangleFrequency","_freqs","particleCreated","LinksPlugin","loadParticlesLinksInteraction","addInteractor","loadLinksInteraction","loadLinksPlugin","PolygonDrawerBase","start","getCenter","getSidesData","sideCount","numerator","denominator","decimalSides","interiorAngleDegrees","interiorAngle","sides","nb_sides","PolygonDrawer","TriangleDrawer","loadPolygonShape","loadGenericPolygonShape","loadTriangleShape","RotateAnimation","Rotate","RotateUpdater","rotateOptions","rotateDirection","rotateAnimation","updateRotate","fixFactor","SquareDrawer","fixedRadius","fixedDiameter","StarDrawer","inset","starInset","star","StrokeColorUpdater","strokeOpacity","strokeAnimation","strokeHslColor","strokeColor","updateStrokeColor","validTypes","TextDrawer","textData","randomIndexData","offsetX","fillText","strokeText","shapeOptions","promises","all","loadSlim","loadParallaxMover","loadExternalAttractInteraction","loadExternalBounceInteraction","loadExternalBubbleInteraction","loadExternalConnectInteraction","loadExternalGrabInteraction","loadExternalPauseInteraction","loadExternalPushInteraction","loadExternalRemoveInteraction","loadExternalRepulseInteraction","loadExternalSlowInteraction","loadParticlesAttractInteraction","loadParticlesCollisionsInteraction","loadEasingQuadPlugin","loadLineShape","loadSquareShape","loadStarShape","loadTextShape","loadLifeUpdater","loadRotateUpdater","loadStrokeColorUpdater","TiltAnimation","Tilt","TiltUpdater","tilt","cosDirection","sinDirection","tiltOptions","tiltDirection","tiltAnimation","updateTilt","TwinkleValues","Twinkle","TwinkleUpdater","getColorStyles","twinkleOptions","twinkling","zOpacityFactor","twinklingOpacity","twinkleStyle","needsTwinkle","WobbleSpeed","Wobble","rangeSpeed","WobbleUpdater","wobbleOpt","wobble","angleSpeed","wobbleDistance","wobbleOptions","updateWobble","loadFull","loadDestroyUpdater","loadRollUpdater","loadTiltUpdater","loadTwinkleUpdater","loadWobbleUpdater","loadExternalTrailInteraction","loadAbsorbersPlugin","addEmitterShape","loadEmittersPlugin","_random","easings","addEasing","getEasing","getRandom","num","comp1","comp2","weight1","weight2","randomInRange","getRangeMax","getRangeMin","getRangeValue","setRangeValue","getValue","getDistances","pointA","pointB","getDistance","getParticleDirectionAngle","getParticleBaseVelocity","baseVelocity","collisionVelocity","calcPositionOrRandomFromSize","calcPositionOrRandomFromSizeRanged","calcExactPositionOrRandomFromSize","parseAlpha","endsWith","parseFloat","AnimationOptions","RangedAnimationOptions","distPos","generatedAttribute","mouseDownEvent","mouseUpEvent","mouseLeaveEvent","mouseOutEvent","mouseMoveEvent","touchStartEvent","touchEndEvent","touchMoveEvent","touchCancelEvent","resizeEvent","visibilityChangeEvent","errorPrefix","detect_on","onhover","onclick","retina_detect","setTransformValue","newFactor","Canvas","_applyPostDrawUpdaters","_postDrawUpdaters","afterDraw","_applyPreDrawUpdaters","zOpacity","_preDrawUpdaters","updaterTransform","beforeDraw","_applyResizePlugins","_resizePlugins","_getPluginParticleColors","fColor","sColor","_colorPlugins","particleFillColor","particleStrokeColor","_initCover","cover","coverRgb","coverColor","_coverColorStyle","_initStyle","_fullScreen","_originalStyle","_setFullScreenStyle","_resetOriginalStyle","setProperty","_initTrail","trailFill","_trailFill","reject","createElement","evt","_paintBase","_paintImage","_repairStyle","_safeMutationObserver","observer","disconnect","initBackground","observe","attributes","originalStyle","_mutationObserver","priority","toString","_context","_generated","paint","cb","pfColor","psColor","zStrokeOpacity","obs","records","record","attributeName","e","initUpdaters","initPlugins","background","elementStyle","backgroundPosition","backgroundRepeat","repeat","backgroundSize","loadCanvas","dataset","ariaHidden","newSize","oldSize","started","resizeFactor","windowResize","needsRefresh","updateActualOptions","setDensity","manageListener","event","handler","addOptions","passive","capture","removeOptions","removeEventListener","EventListeners","_doMouseTouchClick","_canPush","mouseInteractivity","_mouseTouchFinish","_handleThemeChange","mediaEvent","defaultThemes","themeName","dark","light","theme","themes","auto","loadTheme","_handleVisibilityChange","pauseOnBlur","hidden","pageHidden","_handleWindowResize","_resizeTimeout","clearTimeout","_manageInteractivityListeners","mouseLeaveTmpEvent","handlers","_handlers","interactivityEl","html","canvasEl","pointerEvents","mouseMove","touchStart","touchMove","touchEndClick","mouseUp","mouseDown","touchEnd","mouseLeave","touchCancel","_manageListeners","detectType","detectsOn","parentElement","parentNode","_manageMediaMatch","_manageResize","visibilityChange","mediaMatch","addListener","oldThemeChange","removeListener","themeChange","ResizeObserver","_resizeObserver","unobserve","entries","target","_mouseDown","_mouseTouchClick","mousePosition","clickPositionValid","_mouseTouchMove","mouseEvent","clientRect","clientX","clientY","currentTarget","sourceRect","targetRect","canvasRect","offsetY","touchEvent","lastTouch","touches","_touchEnd","from","changedTouches","touch","_touches","delete","_touchEndClick","_touchStart","performance","now","addListeners","removeListeners","Background","BackgroundMaskCover","BackgroundMask","FullScreen","ClickEvent","DivEvent","elementId","Parallax","HoverEvent","ResizeEvent","Events","ondiv","Modes","Interactivity","ManualParticle","Responsive","ThemeDefault","Theme","Options","_findDefaultTheme","_importPreset","preset","getPreset","detectRetina","manualParticles","pauseOnOutsideViewport","zLayers","backgroundMode","fps_limit","optResponsive","existingTheme","optTheme","setResponsive","defaultOptions","responsiveOptions","screen","availWidth","setTheme","chosenTheme","clientDarkMode","defaultTheme","InteractionManager","_interactors","getInteractors","_externalInteractors","_particleInteractors","externalInteract","particlesInteract","fixOutMode","checkModes","diameter","coord","maxCoord","setCb","Particle","overrideOptions","tryCount","pluginPos","particlePosition","fixHorizontal","fixVertical","_checkOverlap","_calculateVelocity","rad","radOffset","collisionsOptions","overlapOptions","_getRollColor","backFactor","backSum","_initPosition","zIndexValue","_loadShapeData","ignoresResizeRatio","mainOptions","shapeType","overrideShapeType","getPathGenerator","addPath","needsSort","lastZIndex","getShapeDrawer","sideCountFunc","mover","movers","isInsideCanvas","isVisible","Point","QuadTree","rectangle","capacity","_subdivide","_subs","_divided","_points","insert","check","found","queryRectangle","qTreeRectangle","_applyDensity","manualCount","numberOptions","densityFactor","_initDensityFactor","optParticlesNumber","optParticlesLimit","particlesNumber","particlesCount","densityOptions","_pushParticle","initializer","pool","pop","_nextId","canAdd","_array","_zArray","_removeParticle","zIdx","_interactionManager","getMovers","getUpdaters","addManualParticles","countToRemove","condition","particlesInitialization","pathGenerators","j","nb","pushing","redraw","removeAt","deleted","particlesToDelete","Set","checkDelete","has","zArray","Retina","devicePixelRatio","moveDistance","guardCheck","loadContainerOptions","defaultPathGenerator","Container","_intersectionManager","entry","isIntersecting","_nextFrame","timestamp","lastFrameTime","initDelta","addLifeTime","alive","_lifeTime","_firstStart","_sourceOptions","_initialSourceOptions","_options","_eventListeners","IntersectionObserver","_intersectionObserver","addClickHandler","clickOrTouchHandler","posRetina","touched","touchMoved","radiusX","radiusY","mainArr","refreshTime","_drawAnimationFrame","requestAnimationFrame","export","supported","blob","availablePlugins","getAvailablePlugins","particlesSetup","_currentTheme","cancelAnimationFrame","needsUpdate","setNoise","noiseOrGenerator","setPath","pathOrGenerator","oldGenerator","_delayTimeout","HTMLElement","newMaxWidth","responsiveMaxWidth","EventDispatcher","_listeners","listener","arr","args","listeners","hasEventListener","removeAllEventListeners","getItemsFromInitializer","initializers","values","Plugins","_initializers","presets","initInteractor","addParticleMover","initMover","initUpdater","addPathGenerator","addPreset","presetKey","addShapeDrawer","types","Engine","_configs","_domArray","_eventDispatcher","_initialized","configs","config","version","addConfig","nameOrConfig","interactorInitializer","moverInitializer","updaterInitializer","initOrRefresh","afterEffectOrRefresh","destroyOrRefresh","customDrawer","realInit","realAfterEffect","realDestroy","realRefresh","domItem","tagIdOrOptionsOrParams","loadFromArray","optionsOrIndex","isParams","_loadParams","setJSON","fallback","json","getDataFromUrl","domContainer","body","append","oldIndex","old","tagName","toLowerCase","existingCanvases","getElementsByTagName","appendChild","newItem","HslColorManager","RgbColorManager","rgbColor","tsParticles","rgbColorManager","hslColorManager","Range"],"sourceRoot":""}