@xdy-npm/react-particle-backgrounds 1.0.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/Constants.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Directions/MoveDirection.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/TypeUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/Vectors.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/NumberUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/AnimationMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/AnimationStatus.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/DestroyType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Directions/OutModeDirection.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/PixelMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/StartValueType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/Utils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/AlterType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/ColorUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/CanvasUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Canvas.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/InteractivityDetect.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/EventListeners.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/EventType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/OptionsColor.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Background/Background.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/BackgroundMask/BackgroundMaskCover.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/BackgroundMask/BackgroundMask.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/FullScreen/FullScreen.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/ClickEvent.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/DivType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/DivEvent.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/Parallax.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/HoverEvent.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/ResizeEvent.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/Events.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Modes/Modes.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Interactivity.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/ManualParticle.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/ResponsiveMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Responsive.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/ThemeMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Theme/ThemeDefault.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Theme/Theme.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/AnimationOptions.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/ColorAnimation.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/HslAnimation.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/AnimatableColor.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/CollisionMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/CollisionsAbsorb.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/CollisionsOverlap.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/ValueWithRandom.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Bounce/ParticlesBounce.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/Collisions.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Effect/Effect.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveAngle.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveAttract.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveCenter.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveGravity.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Path/MovePath.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveTrailFill.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveTrail.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/OutMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/OutModes.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Spin.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Move.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Opacity/Opacity.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesDensity.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/LimitMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesNumber.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Shadow.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Shape/Shape.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Size/SizeAnimation.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Size/Size.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Stroke.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/ZIndex/ZIndex.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/ParticlesOptions.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/OptionsUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Options.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/InteractorType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/InteractionManager.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/ParticleOutType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Particle.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/Point.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Types/RangeType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/Ranges.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/QuadTree.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Particles.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Retina.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Container.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/EventDispatcher.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Engine.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/init.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/ExternalInteractorBase.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/ParticlesInteractorBase.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Directions/RotateDirection.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/GradientType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/EasingType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/index.js","../node_modules/.pnpm/@tsparticles+react@3.0.0_@tsparticles+engine@3.9.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tsparticles/react/dist/Particles.js","../node_modules/.pnpm/@tsparticles+react@3.0.0_@tsparticles+engine@3.9.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tsparticles/react/dist/index.js","../node_modules/.pnpm/@tsparticles+move-base@3.9.1/node_modules/@tsparticles/move-base/browser/Utils.js","../node_modules/.pnpm/@tsparticles+move-base@3.9.1/node_modules/@tsparticles/move-base/browser/BaseMover.js","../node_modules/.pnpm/@tsparticles+move-base@3.9.1/node_modules/@tsparticles/move-base/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-circle@3.9.1/node_modules/@tsparticles/shape-circle/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-circle@3.9.1/node_modules/@tsparticles/shape-circle/browser/CircleDrawer.js","../node_modules/.pnpm/@tsparticles+shape-circle@3.9.1/node_modules/@tsparticles/shape-circle/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-color@3.9.1/node_modules/@tsparticles/updater-color/browser/ColorUpdater.js","../node_modules/.pnpm/@tsparticles+updater-color@3.9.1/node_modules/@tsparticles/updater-color/browser/index.js","../node_modules/.pnpm/@tsparticles+plugin-hex-color@3.9.1/node_modules/@tsparticles/plugin-hex-color/browser/HexColorManager.js","../node_modules/.pnpm/@tsparticles+plugin-hex-color@3.9.1/node_modules/@tsparticles/plugin-hex-color/browser/index.js","../node_modules/.pnpm/@tsparticles+plugin-hsl-color@3.9.1/node_modules/@tsparticles/plugin-hsl-color/browser/HslColorManager.js","../node_modules/.pnpm/@tsparticles+plugin-hsl-color@3.9.1/node_modules/@tsparticles/plugin-hsl-color/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-opacity@3.9.1/node_modules/@tsparticles/updater-opacity/browser/OpacityUpdater.js","../node_modules/.pnpm/@tsparticles+updater-opacity@3.9.1/node_modules/@tsparticles/updater-opacity/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/Utils.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/BounceOutMode.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/DestroyOutMode.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/NoneOutMode.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/OutOutMode.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/OutOfCanvasUpdater.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/index.js","../node_modules/.pnpm/@tsparticles+plugin-rgb-color@3.9.1/node_modules/@tsparticles/plugin-rgb-color/browser/RgbColorManager.js","../node_modules/.pnpm/@tsparticles+plugin-rgb-color@3.9.1/node_modules/@tsparticles/plugin-rgb-color/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-size@3.9.1/node_modules/@tsparticles/updater-size/browser/SizeUpdater.js","../node_modules/.pnpm/@tsparticles+updater-size@3.9.1/node_modules/@tsparticles/updater-size/browser/index.js","../node_modules/.pnpm/@tsparticles+basic@3.9.1/node_modules/@tsparticles/basic/browser/index.js","../node_modules/.pnpm/@tsparticles+plugin-easing-quad@3.9.1/node_modules/@tsparticles/plugin-easing-quad/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-emoji@3.9.1/node_modules/@tsparticles/shape-emoji/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-emoji@3.9.1/node_modules/@tsparticles/shape-emoji/browser/EmojiDrawer.js","../node_modules/.pnpm/@tsparticles+shape-emoji@3.9.1/node_modules/@tsparticles/shape-emoji/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-attract@3.9.1/node_modules/@tsparticles/interaction-external-attract/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-attract@3.9.1/node_modules/@tsparticles/interaction-external-attract/browser/Options/Classes/Attract.js","../node_modules/.pnpm/@tsparticles+interaction-external-attract@3.9.1/node_modules/@tsparticles/interaction-external-attract/browser/Attractor.js","../node_modules/.pnpm/@tsparticles+interaction-external-attract@3.9.1/node_modules/@tsparticles/interaction-external-attract/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-bounce@3.9.1/node_modules/@tsparticles/interaction-external-bounce/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-bounce@3.9.1/node_modules/@tsparticles/interaction-external-bounce/browser/Options/Classes/Bounce.js","../node_modules/.pnpm/@tsparticles+interaction-external-bounce@3.9.1/node_modules/@tsparticles/interaction-external-bounce/browser/Bouncer.js","../node_modules/.pnpm/@tsparticles+interaction-external-bounce@3.9.1/node_modules/@tsparticles/interaction-external-bounce/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/BubbleBase.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/BubbleDiv.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/Bubble.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Enums.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Bubbler.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/Options/Classes/ConnectLinks.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/Options/Classes/Connect.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/Connector.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/Options/Classes/GrabLinks.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/Options/Classes/Grab.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/Grabber.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-pause@3.9.1/node_modules/@tsparticles/interaction-external-pause/browser/Pauser.js","../node_modules/.pnpm/@tsparticles+interaction-external-pause@3.9.1/node_modules/@tsparticles/interaction-external-pause/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-push@3.9.1/node_modules/@tsparticles/interaction-external-push/browser/Options/Classes/Push.js","../node_modules/.pnpm/@tsparticles+interaction-external-push@3.9.1/node_modules/@tsparticles/interaction-external-push/browser/Pusher.js","../node_modules/.pnpm/@tsparticles+interaction-external-push@3.9.1/node_modules/@tsparticles/interaction-external-push/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-remove@3.9.1/node_modules/@tsparticles/interaction-external-remove/browser/Options/Classes/Remove.js","../node_modules/.pnpm/@tsparticles+interaction-external-remove@3.9.1/node_modules/@tsparticles/interaction-external-remove/browser/Remover.js","../node_modules/.pnpm/@tsparticles+interaction-external-remove@3.9.1/node_modules/@tsparticles/interaction-external-remove/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/RepulseBase.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/RepulseDiv.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/Repulse.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/Repulser.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-slow@3.9.1/node_modules/@tsparticles/interaction-external-slow/browser/Options/Classes/Slow.js","../node_modules/.pnpm/@tsparticles+interaction-external-slow@3.9.1/node_modules/@tsparticles/interaction-external-slow/browser/Slower.js","../node_modules/.pnpm/@tsparticles+interaction-external-slow@3.9.1/node_modules/@tsparticles/interaction-external-slow/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/Constants.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/ByteStream.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/Enums/DisposalMethod.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/Types/GIFDataHeaders.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/Utils.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/ImageDrawer.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/Options/Classes/Preload.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/ImagePreloader.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/Options/Classes/LifeDelay.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/Options/Classes/LifeDuration.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/Options/Classes/Life.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/Utils.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/LifeUpdater.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-line@3.9.1/node_modules/@tsparticles/shape-line/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-line@3.9.1/node_modules/@tsparticles/shape-line/browser/LineDrawer.js","../node_modules/.pnpm/@tsparticles+shape-line@3.9.1/node_modules/@tsparticles/shape-line/browser/index.js","../node_modules/.pnpm/@tsparticles+move-parallax@3.9.1/node_modules/@tsparticles/move-parallax/browser/ParallaxMover.js","../node_modules/.pnpm/@tsparticles+move-parallax@3.9.1/node_modules/@tsparticles/move-parallax/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-particles-attract@3.9.1/node_modules/@tsparticles/interaction-particles-attract/browser/Attractor.js","../node_modules/.pnpm/@tsparticles+interaction-particles-attract@3.9.1/node_modules/@tsparticles/interaction-particles-attract/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/Absorb.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/Bounce.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/Destroy.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/ResolveCollision.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/Collider.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/CircleWarp.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/LinksShadow.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/LinksTriangle.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/Links.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Linker.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/interaction.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/LinkInstance.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/LinksPlugin.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/plugin.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/PolygonDrawerBase.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/PolygonDrawer.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/TriangleDrawer.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-rotate@3.9.1/node_modules/@tsparticles/updater-rotate/browser/Options/Classes/RotateAnimation.js","../node_modules/.pnpm/@tsparticles+updater-rotate@3.9.1/node_modules/@tsparticles/updater-rotate/browser/Options/Classes/Rotate.js","../node_modules/.pnpm/@tsparticles+updater-rotate@3.9.1/node_modules/@tsparticles/updater-rotate/browser/RotateUpdater.js","../node_modules/.pnpm/@tsparticles+updater-rotate@3.9.1/node_modules/@tsparticles/updater-rotate/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-square@3.9.1/node_modules/@tsparticles/shape-square/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-square@3.9.1/node_modules/@tsparticles/shape-square/browser/SquareDrawer.js","../node_modules/.pnpm/@tsparticles+shape-square@3.9.1/node_modules/@tsparticles/shape-square/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-star@3.9.1/node_modules/@tsparticles/shape-star/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-star@3.9.1/node_modules/@tsparticles/shape-star/browser/StarDrawer.js","../node_modules/.pnpm/@tsparticles+shape-star@3.9.1/node_modules/@tsparticles/shape-star/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-stroke-color@3.9.1/node_modules/@tsparticles/updater-stroke-color/browser/StrokeColorUpdater.js","../node_modules/.pnpm/@tsparticles+updater-stroke-color@3.9.1/node_modules/@tsparticles/updater-stroke-color/browser/index.js","../node_modules/.pnpm/@tsparticles+slim@3.9.1/node_modules/@tsparticles/slim/browser/index.js","../src/themes/base.ts","../src/themes/starline.ts","../src/themes/snow.ts","../src/themes/bubble.ts","../src/themes/stars.ts","../src/themes/firefly.ts","../src/themes/geometry.ts","../src/themes/wave.ts","../src/themes/index.ts","../src/context/ParticleContext.tsx","../src/components/ParticleWave.tsx","../src/components/ParticlesBackground.tsx","../src/components/ThemeSelector.tsx"],"sourcesContent":["export const generatedAttribute = \"generated\", mouseDownEvent = \"pointerdown\", mouseUpEvent = \"pointerup\", mouseLeaveEvent = \"pointerleave\", mouseOutEvent = \"pointerout\", mouseMoveEvent = \"pointermove\", touchStartEvent = \"touchstart\", touchEndEvent = \"touchend\", touchMoveEvent = \"touchmove\", touchCancelEvent = \"touchcancel\", resizeEvent = \"resize\", visibilityChangeEvent = \"visibilitychange\", errorPrefix = \"tsParticles - Error\", percentDenominator = 100, half = 0.5, millisecondsToSeconds = 1000, originPoint = {\n x: 0,\n y: 0,\n z: 0,\n}, defaultTransform = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n}, randomColorValue = \"random\", midColorValue = \"mid\", double = 2, doublePI = Math.PI * double, defaultFps = 60, defaultAlpha = 1, generatedTrue = \"true\", generatedFalse = \"false\", canvasTag = \"canvas\", defaultRetryCount = 0, squareExp = 2, qTreeCapacity = 4, defaultRemoveQuantity = 1, defaultRatio = 1, defaultReduceFactor = 1, subdivideCount = 4, inverseFactorNumerator = 1.0, rgbMax = 255, hMax = 360, sMax = 100, lMax = 100, hMin = 0, sMin = 0, hPhase = 60, empty = 0, quarter = 0.25, threeQuarter = half + quarter, minVelocity = 0, defaultTransformValue = 1, minimumSize = 0, minimumLength = 0, zIndexFactorOffset = 1, defaultOpacity = 1, clickRadius = 1, touchEndLengthOffset = 1, minCoordinate = 0, removeDeleteCount = 1, removeMinIndex = 0, defaultFpsLimit = 120, minFpsLimit = 0, canvasFirstIndex = 0, loadRandomFactor = 10000, loadMinIndex = 0, one = 1, none = 0, decayOffset = 1, tryCountIncrement = 1, minRetries = 0, rollFactor = 1, minZ = 0, defaultRadius = 0, posOffset = -quarter, sizeFactor = 1.5, minLimit = 0, countOffset = 1, minCount = 0, minIndex = 0, manualCount = 0, lengthOffset = 1, defaultDensityFactor = 1, deleteCount = 1, touchDelay = 500, manualDefaultPosition = 50, defaultAngle = 0, identity = 1, minStrokeWidth = 0, lFactor = 1, lMin = 0, rgbFactor = 255, triple = 3, sextuple = 6, sNormalizedOffset = 1, phaseNumerator = 1, defaultRgbMin = 0, defaultVelocity = 0, defaultLoops = 0, defaultTime = 0;\n","export var MoveDirection;\n(function (MoveDirection) {\n MoveDirection[\"bottom\"] = \"bottom\";\n MoveDirection[\"bottomLeft\"] = \"bottom-left\";\n MoveDirection[\"bottomRight\"] = \"bottom-right\";\n MoveDirection[\"left\"] = \"left\";\n MoveDirection[\"none\"] = \"none\";\n MoveDirection[\"right\"] = \"right\";\n MoveDirection[\"top\"] = \"top\";\n MoveDirection[\"topLeft\"] = \"top-left\";\n MoveDirection[\"topRight\"] = \"top-right\";\n MoveDirection[\"outside\"] = \"outside\";\n MoveDirection[\"inside\"] = \"inside\";\n})(MoveDirection || (MoveDirection = {}));\n","export function isBoolean(arg) {\n return typeof arg === \"boolean\";\n}\nexport function isString(arg) {\n return typeof arg === \"string\";\n}\nexport function isNumber(arg) {\n return typeof arg === \"number\";\n}\nexport function isFunction(arg) {\n return typeof arg === \"function\";\n}\nexport function isObject(arg) {\n return typeof arg === \"object\" && arg !== null;\n}\nexport function isArray(arg) {\n return Array.isArray(arg);\n}\nexport function isNull(arg) {\n return arg === null || arg === undefined;\n}\n","import { errorPrefix, inverseFactorNumerator, none, originPoint, squareExp } from \"./Constants.js\";\nimport { isNumber } from \"../../Utils/TypeUtils.js\";\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 : originPoint.z;\n }\n else if (xOrCoords !== undefined && y !== undefined) {\n this.x = xOrCoords;\n this.y = y;\n this.z = z ?? originPoint.z;\n }\n else {\n throw new Error(`${errorPrefix} Vector3d not initialized correctly`);\n }\n }\n static get origin() {\n return Vector3d.create(originPoint.x, originPoint.y, originPoint.z);\n }\n get angle() {\n return Math.atan2(this.y, this.x);\n }\n set angle(angle) {\n this._updateFromAngle(angle, this.length);\n }\n get length() {\n return Math.sqrt(this.getLengthSq());\n }\n set length(length) {\n this._updateFromAngle(this.angle, length);\n }\n static clone(source) {\n return Vector3d.create(source.x, source.y, source.z);\n }\n static create(x, y, z) {\n return new Vector3d(x, y, z);\n }\n add(v) {\n return Vector3d.create(this.x + v.x, this.y + v.y, this.z + v.z);\n }\n addTo(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n }\n copy() {\n return Vector3d.clone(this);\n }\n distanceTo(v) {\n return this.sub(v).length;\n }\n distanceToSq(v) {\n return this.sub(v).getLengthSq();\n }\n div(n) {\n return Vector3d.create(this.x / n, this.y / n, this.z / n);\n }\n divTo(n) {\n this.x /= n;\n this.y /= n;\n this.z /= n;\n }\n getLengthSq() {\n return this.x ** squareExp + this.y ** squareExp;\n }\n mult(n) {\n return Vector3d.create(this.x * n, this.y * n, this.z * n);\n }\n multTo(n) {\n this.x *= n;\n this.y *= n;\n this.z *= n;\n }\n normalize() {\n const length = this.length;\n if (length != none) {\n this.multTo(inverseFactorNumerator / length);\n }\n }\n rotate(angle) {\n return Vector3d.create(this.x * Math.cos(angle) - this.y * Math.sin(angle), this.x * Math.sin(angle) + this.y * Math.cos(angle), originPoint.z);\n }\n setTo(c) {\n this.x = c.x;\n this.y = c.y;\n const v3d = c;\n this.z = v3d.z ? v3d.z : originPoint.z;\n }\n sub(v) {\n return Vector3d.create(this.x - v.x, this.y - v.y, this.z - v.z);\n }\n subFrom(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n }\n}\nexport class Vector extends Vector3d {\n constructor(xOrCoords, y) {\n super(xOrCoords, y, originPoint.z);\n }\n static get origin() {\n return Vector.create(originPoint.x, originPoint.y);\n }\n static clone(source) {\n return Vector.create(source.x, source.y);\n }\n static create(x, y) {\n return new Vector(x, y);\n }\n}\n","import { MoveDirection } from \"../Enums/Directions/MoveDirection.js\";\nimport { double, doublePI, empty, half, percentDenominator, quarter, threeQuarter } from \"../Core/Utils/Constants.js\";\nimport { Vector } from \"../Core/Utils/Vectors.js\";\nimport { isNumber } from \"./TypeUtils.js\";\nlet _random = Math.random;\nconst _animationLoop = {\n nextFrame: (cb) => requestAnimationFrame(cb),\n cancel: (idx) => cancelAnimationFrame(idx),\n};\nexport function setRandom(rnd = Math.random) {\n _random = rnd;\n}\nexport function getRandom() {\n const min = 0, max = 1;\n return clamp(_random(), min, max - Number.EPSILON);\n}\nexport function setAnimationFunctions(nextFrame, cancel) {\n _animationLoop.nextFrame = (callback) => nextFrame(callback);\n _animationLoop.cancel = (handle) => cancel(handle);\n}\nexport function animate(fn) {\n return _animationLoop.nextFrame(fn);\n}\nexport function cancelAnimation(handle) {\n _animationLoop.cancel(handle);\n}\nexport function clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\nexport function mix(comp1, comp2, weight1, weight2) {\n return Math.floor((comp1 * weight1 + comp2 * weight2) / (weight1 + weight2));\n}\nexport function randomInRange(r) {\n const max = getRangeMax(r), minOffset = 0;\n let min = getRangeMin(r);\n if (max === min) {\n min = minOffset;\n }\n return getRandom() * (max - min) + min;\n}\nexport function getRangeValue(value) {\n return isNumber(value) ? value : randomInRange(value);\n}\nexport function getRangeMin(value) {\n return isNumber(value) ? value : value.min;\n}\nexport function getRangeMax(value) {\n return isNumber(value) ? value : value.max;\n}\nexport function setRangeValue(source, value) {\n if (source === value || (value === undefined && isNumber(source))) {\n return source;\n }\n const min = getRangeMin(source), max = getRangeMax(source);\n return value !== undefined\n ? {\n min: Math.min(min, value),\n max: Math.max(max, value),\n }\n : setRangeValue(min, max);\n}\nexport function getDistances(pointA, pointB) {\n const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y, squareExp = 2;\n return { dx: dx, dy: dy, distance: Math.sqrt(dx ** squareExp + dy ** squareExp) };\n}\nexport function getDistance(pointA, pointB) {\n return getDistances(pointA, pointB).distance;\n}\nexport function degToRad(degrees) {\n const PIDeg = 180;\n return (degrees * Math.PI) / PIDeg;\n}\nexport function getParticleDirectionAngle(direction, position, center) {\n if (isNumber(direction)) {\n return degToRad(direction);\n }\n switch (direction) {\n case MoveDirection.top:\n return -Math.PI * half;\n case MoveDirection.topRight:\n return -Math.PI * quarter;\n case MoveDirection.right:\n return empty;\n case MoveDirection.bottomRight:\n return Math.PI * quarter;\n case MoveDirection.bottom:\n return Math.PI * half;\n case MoveDirection.bottomLeft:\n return Math.PI * threeQuarter;\n case MoveDirection.left:\n return Math.PI;\n case MoveDirection.topLeft:\n return -Math.PI * threeQuarter;\n case MoveDirection.inside:\n return Math.atan2(center.y - position.y, center.x - position.x);\n case MoveDirection.outside:\n return Math.atan2(position.y - center.y, position.x - center.x);\n default:\n return getRandom() * doublePI;\n }\n}\nexport function getParticleBaseVelocity(direction) {\n const baseVelocity = Vector.origin;\n baseVelocity.length = 1;\n baseVelocity.angle = direction;\n return baseVelocity;\n}\nexport function collisionVelocity(v1, v2, m1, m2) {\n return Vector.create((v1.x * (m1 - m2)) / (m1 + m2) + (v2.x * double * m2) / (m1 + m2), v1.y);\n}\nexport function calcPositionFromSize(data) {\n return data.position?.x !== undefined && data.position.y !== undefined\n ? {\n x: (data.position.x * data.size.width) / percentDenominator,\n y: (data.position.y * data.size.height) / percentDenominator,\n }\n : undefined;\n}\nexport function calcPositionOrRandomFromSize(data) {\n return {\n x: ((data.position?.x ?? getRandom() * percentDenominator) * data.size.width) / percentDenominator,\n y: ((data.position?.y ?? getRandom() * percentDenominator) * data.size.height) / percentDenominator,\n };\n}\nexport function calcPositionOrRandomFromSizeRanged(data) {\n const position = {\n x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,\n y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,\n };\n return calcPositionOrRandomFromSize({ size: data.size, position });\n}\nexport function calcExactPositionOrRandomFromSize(data) {\n return {\n x: data.position?.x ?? getRandom() * data.size.width,\n y: data.position?.y ?? getRandom() * data.size.height,\n };\n}\nexport function calcExactPositionOrRandomFromSizeRanged(data) {\n const position = {\n x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,\n y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,\n };\n return calcExactPositionOrRandomFromSize({ size: data.size, position });\n}\nexport function parseAlpha(input) {\n const defaultAlpha = 1;\n if (!input) {\n return defaultAlpha;\n }\n return input.endsWith(\"%\") ? parseFloat(input) / percentDenominator : parseFloat(input);\n}\n","export var AnimationMode;\n(function (AnimationMode) {\n AnimationMode[\"auto\"] = \"auto\";\n AnimationMode[\"increase\"] = \"increase\";\n AnimationMode[\"decrease\"] = \"decrease\";\n AnimationMode[\"random\"] = \"random\";\n})(AnimationMode || (AnimationMode = {}));\n","export var AnimationStatus;\n(function (AnimationStatus) {\n AnimationStatus[\"increasing\"] = \"increasing\";\n AnimationStatus[\"decreasing\"] = \"decreasing\";\n})(AnimationStatus || (AnimationStatus = {}));\n","export var DestroyType;\n(function (DestroyType) {\n DestroyType[\"none\"] = \"none\";\n DestroyType[\"max\"] = \"max\";\n DestroyType[\"min\"] = \"min\";\n})(DestroyType || (DestroyType = {}));\n","export var OutModeDirection;\n(function (OutModeDirection) {\n OutModeDirection[\"bottom\"] = \"bottom\";\n OutModeDirection[\"left\"] = \"left\";\n OutModeDirection[\"right\"] = \"right\";\n OutModeDirection[\"top\"] = \"top\";\n})(OutModeDirection || (OutModeDirection = {}));\n","export var PixelMode;\n(function (PixelMode) {\n PixelMode[\"precise\"] = \"precise\";\n PixelMode[\"percent\"] = \"percent\";\n})(PixelMode || (PixelMode = {}));\n","export var StartValueType;\n(function (StartValueType) {\n StartValueType[\"max\"] = \"max\";\n StartValueType[\"min\"] = \"min\";\n StartValueType[\"random\"] = \"random\";\n})(StartValueType || (StartValueType = {}));\n","import { clamp, collisionVelocity, getDistances, getRandom, getRangeMax, getRangeMin, getRangeValue, randomInRange, } from \"./NumberUtils.js\";\nimport { half, millisecondsToSeconds, minVelocity, percentDenominator } from \"../Core/Utils/Constants.js\";\nimport { isArray, isNull, isObject } from \"./TypeUtils.js\";\nimport { AnimationMode } from \"../Enums/Modes/AnimationMode.js\";\nimport { AnimationStatus } from \"../Enums/AnimationStatus.js\";\nimport { DestroyType } from \"../Enums/Types/DestroyType.js\";\nimport { OutModeDirection } from \"../Enums/Directions/OutModeDirection.js\";\nimport { PixelMode } from \"../Enums/Modes/PixelMode.js\";\nimport { StartValueType } from \"../Enums/Types/StartValueType.js\";\nimport { Vector } from \"../Core/Utils/Vectors.js\";\nconst _logger = {\n debug: console.debug,\n error: console.error,\n info: console.info,\n log: console.log,\n verbose: console.log,\n warning: console.warn,\n};\nexport function setLogger(logger) {\n _logger.debug = logger.debug || _logger.debug;\n _logger.error = logger.error || _logger.error;\n _logger.info = logger.info || _logger.info;\n _logger.log = logger.log || _logger.log;\n _logger.verbose = logger.verbose || _logger.verbose;\n _logger.warning = logger.warning || _logger.warning;\n}\nexport function getLogger() {\n return _logger;\n}\nfunction memoize(fn) {\n const cache = new Map();\n return (...args) => {\n const key = JSON.stringify(args);\n if (cache.has(key)) {\n return cache.get(key);\n }\n const result = fn(...args);\n cache.set(key, result);\n return result;\n };\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) * half && velocity > minVelocity) ||\n (pSide.min <= rectSide.max && pSide.min > (rectSide.max + rectSide.min) * half && velocity < minVelocity)) {\n res.velocity = velocity * -factor;\n res.bounced = true;\n }\n return res;\n}\nfunction checkSelector(element, selectors) {\n const res = executeOnSingleOrMultiple(selectors, selector => {\n return element.matches(selector);\n });\n return isArray(res) ? res.some(t => t) : res;\n}\nexport function isSsr() {\n return typeof window === \"undefined\" || !window || typeof window.document === \"undefined\" || !window.document;\n}\nexport function hasMatchMedia() {\n return !isSsr() && typeof matchMedia !== \"undefined\";\n}\nexport function safeMatchMedia(query) {\n if (!hasMatchMedia()) {\n return;\n }\n return matchMedia(query);\n}\nexport function safeIntersectionObserver(callback) {\n if (isSsr() || typeof IntersectionObserver === \"undefined\") {\n return;\n }\n return new IntersectionObserver(callback);\n}\nexport function safeMutationObserver(callback) {\n if (isSsr() || typeof MutationObserver === \"undefined\") {\n return;\n }\n return new MutationObserver(callback);\n}\nexport function isInArray(value, array) {\n const invalidIndex = -1;\n return value === array || (isArray(array) && array.indexOf(value) > invalidIndex);\n}\nexport async function loadFont(font, weight) {\n try {\n await document.fonts.load(`${weight ?? \"400\"} 36px '${font ?? \"Verdana\"}'`);\n }\n catch {\n }\n}\nexport function arrayRandomIndex(array) {\n return Math.floor(getRandom() * array.length);\n}\nexport function itemFromArray(array, index, useIndex = true) {\n return array[index !== undefined && useIndex ? index % array.length : arrayRandomIndex(array)];\n}\nexport function isPointInside(point, size, offset, radius, direction) {\n const minRadius = 0;\n return areBoundsInside(calculateBounds(point, radius ?? minRadius), size, offset, direction);\n}\nexport function areBoundsInside(bounds, size, offset, direction) {\n let inside = true;\n if (!direction || direction === OutModeDirection.bottom) {\n inside = bounds.top < size.height + offset.x;\n }\n if (inside && (!direction || direction === OutModeDirection.left)) {\n inside = bounds.right > offset.x;\n }\n if (inside && (!direction || direction === OutModeDirection.right)) {\n inside = bounds.left < size.width + offset.y;\n }\n if (inside && (!direction || direction === OutModeDirection.top)) {\n inside = bounds.bottom > offset.y;\n }\n return inside;\n}\nexport function calculateBounds(point, radius) {\n return {\n bottom: point.y + radius,\n left: point.x - radius,\n right: point.x + radius,\n top: point.y - radius,\n };\n}\nexport function deepExtend(destination, ...sources) {\n for (const source of sources) {\n if (source === undefined || source === null) {\n continue;\n }\n if (!isObject(source)) {\n destination = source;\n continue;\n }\n const sourceIsArray = Array.isArray(source);\n if (sourceIsArray && (isObject(destination) || !destination || !Array.isArray(destination))) {\n destination = [];\n }\n else if (!sourceIsArray && (isObject(destination) || !destination || Array.isArray(destination))) {\n destination = {};\n }\n for (const key in source) {\n if (key === \"__proto__\") {\n continue;\n }\n const sourceDict = source, value = sourceDict[key], destDict = destination;\n destDict[key] =\n isObject(value) && Array.isArray(value)\n ? value.map(v => deepExtend(destDict[key], v))\n : deepExtend(destDict[key], value);\n }\n }\n return destination;\n}\nexport function isDivModeEnabled(mode, divs) {\n return !!findItemFromSingleOrMultiple(divs, t => t.enable && isInArray(mode, t.mode));\n}\nexport function divModeExecute(mode, divs, callback) {\n executeOnSingleOrMultiple(divs, div => {\n const divMode = div.mode, divEnabled = div.enable;\n if (divEnabled && isInArray(mode, divMode)) {\n singleDivModeExecute(div, callback);\n }\n });\n}\nexport function singleDivModeExecute(div, callback) {\n const selectors = div.selectors;\n executeOnSingleOrMultiple(selectors, selector => {\n callback(selector, div);\n });\n}\nexport function divMode(divs, element) {\n if (!element || !divs) {\n return;\n }\n return findItemFromSingleOrMultiple(divs, div => {\n return checkSelector(element, div.selectors);\n });\n}\nexport function circleBounceDataFromParticle(p) {\n return {\n position: p.getPosition(),\n radius: p.getRadius(),\n mass: p.getMass(),\n velocity: p.velocity,\n factor: Vector.create(getRangeValue(p.options.bounce.horizontal.value), getRangeValue(p.options.bounce.vertical.value)),\n };\n}\nexport function circleBounce(p1, p2) {\n const { x: xVelocityDiff, y: yVelocityDiff } = p1.velocity.sub(p2.velocity), [pos1, pos2] = [p1.position, p2.position], { dx: xDist, dy: yDist } = getDistances(pos2, pos1), minimumDistance = 0;\n if (xVelocityDiff * xDist + yVelocityDiff * yDist < minimumDistance) {\n return;\n }\n const angle = -Math.atan2(yDist, xDist), m1 = p1.mass, m2 = p2.mass, u1 = p1.velocity.rotate(angle), u2 = p2.velocity.rotate(angle), v1 = collisionVelocity(u1, u2, m1, m2), v2 = collisionVelocity(u2, u1, m1, m2), vFinal1 = v1.rotate(-angle), vFinal2 = v2.rotate(-angle);\n p1.velocity.x = vFinal1.x * p1.factor.x;\n p1.velocity.y = vFinal1.y * p1.factor.y;\n p2.velocity.x = vFinal2.x * p2.factor.x;\n p2.velocity.y = vFinal2.y * p2.factor.y;\n}\nexport function rectBounce(particle, divBounds) {\n const pPos = particle.getPosition(), size = particle.getRadius(), bounds = calculateBounds(pPos, size), bounceOptions = particle.options.bounce, resH = rectSideBounce({\n pSide: {\n min: bounds.left,\n max: bounds.right,\n },\n pOtherSide: {\n min: bounds.top,\n max: bounds.bottom,\n },\n rectSide: {\n min: divBounds.left,\n max: divBounds.right,\n },\n rectOtherSide: {\n min: divBounds.top,\n max: divBounds.bottom,\n },\n velocity: particle.velocity.x,\n factor: getRangeValue(bounceOptions.horizontal.value),\n });\n if (resH.bounced) {\n if (resH.velocity !== undefined) {\n particle.velocity.x = resH.velocity;\n }\n if (resH.position !== undefined) {\n particle.position.x = resH.position;\n }\n }\n const resV = rectSideBounce({\n pSide: {\n min: bounds.top,\n max: bounds.bottom,\n },\n pOtherSide: {\n min: bounds.left,\n max: bounds.right,\n },\n rectSide: {\n min: divBounds.top,\n max: divBounds.bottom,\n },\n rectOtherSide: {\n min: divBounds.left,\n max: divBounds.right,\n },\n velocity: particle.velocity.y,\n factor: getRangeValue(bounceOptions.vertical.value),\n });\n if (resV.bounced) {\n if (resV.velocity !== undefined) {\n particle.velocity.y = resV.velocity;\n }\n if (resV.position !== undefined) {\n particle.position.y = resV.position;\n }\n }\n}\nexport function executeOnSingleOrMultiple(obj, callback) {\n const defaultIndex = 0;\n return isArray(obj) ? obj.map((item, index) => callback(item, index)) : callback(obj, defaultIndex);\n}\nexport function itemFromSingleOrMultiple(obj, index, useIndex) {\n return isArray(obj) ? itemFromArray(obj, index, useIndex) : obj;\n}\nexport function findItemFromSingleOrMultiple(obj, callback) {\n if (isArray(obj)) {\n return obj.find((t, index) => callback(t, index));\n }\n const defaultIndex = 0;\n return callback(obj, defaultIndex) ? obj : undefined;\n}\nexport function initParticleNumericAnimationValue(options, pxRatio) {\n const valueRange = options.value, animationOptions = options.animation, res = {\n delayTime: getRangeValue(animationOptions.delay) * millisecondsToSeconds,\n enable: animationOptions.enable,\n value: getRangeValue(options.value) * pxRatio,\n max: getRangeMax(valueRange) * pxRatio,\n min: getRangeMin(valueRange) * pxRatio,\n loops: 0,\n maxLoops: getRangeValue(animationOptions.count),\n time: 0,\n }, decayOffset = 1;\n if (animationOptions.enable) {\n res.decay = decayOffset - getRangeValue(animationOptions.decay);\n switch (animationOptions.mode) {\n case AnimationMode.increase:\n res.status = AnimationStatus.increasing;\n break;\n case AnimationMode.decrease:\n res.status = AnimationStatus.decreasing;\n break;\n case AnimationMode.random:\n res.status = getRandom() >= half ? AnimationStatus.increasing : AnimationStatus.decreasing;\n break;\n }\n const autoStatus = animationOptions.mode === AnimationMode.auto;\n switch (animationOptions.startValue) {\n case StartValueType.min:\n res.value = res.min;\n if (autoStatus) {\n res.status = AnimationStatus.increasing;\n }\n break;\n case StartValueType.max:\n res.value = res.max;\n if (autoStatus) {\n res.status = AnimationStatus.decreasing;\n }\n break;\n case StartValueType.random:\n default:\n res.value = randomInRange(res);\n if (autoStatus) {\n res.status = getRandom() >= half ? AnimationStatus.increasing : AnimationStatus.decreasing;\n }\n break;\n }\n }\n res.initialValue = res.value;\n return res;\n}\nfunction getPositionOrSize(positionOrSize, canvasSize) {\n const isPercent = positionOrSize.mode === PixelMode.percent;\n if (!isPercent) {\n const { mode: _, ...rest } = positionOrSize;\n return rest;\n }\n const isPosition = \"x\" in positionOrSize;\n if (isPosition) {\n return {\n x: (positionOrSize.x / percentDenominator) * canvasSize.width,\n y: (positionOrSize.y / percentDenominator) * canvasSize.height,\n };\n }\n else {\n return {\n width: (positionOrSize.width / percentDenominator) * canvasSize.width,\n height: (positionOrSize.height / percentDenominator) * canvasSize.height,\n };\n }\n}\nexport function getPosition(position, canvasSize) {\n return getPositionOrSize(position, canvasSize);\n}\nexport function getSize(size, canvasSize) {\n return getPositionOrSize(size, canvasSize);\n}\nfunction checkDestroy(particle, destroyType, value, minValue, maxValue) {\n switch (destroyType) {\n case DestroyType.max:\n if (value >= maxValue) {\n particle.destroy();\n }\n break;\n case DestroyType.min:\n if (value <= minValue) {\n particle.destroy();\n }\n break;\n }\n}\nexport function updateAnimation(particle, data, changeDirection, destroyType, delta) {\n const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minDecay = 1;\n if (particle.destroyed ||\n !data ||\n !data.enable ||\n ((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {\n return;\n }\n const velocity = (data.velocity ?? minVelocity) * delta.factor, minValue = data.min, maxValue = data.max, decay = data.decay ?? minDecay;\n if (!data.time) {\n data.time = 0;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n data.time += delta.value;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n return;\n }\n switch (data.status) {\n case AnimationStatus.increasing:\n if (data.value >= maxValue) {\n if (changeDirection) {\n data.status = AnimationStatus.decreasing;\n }\n else {\n data.value -= maxValue;\n }\n if (!data.loops) {\n data.loops = minLoops;\n }\n data.loops++;\n }\n else {\n data.value += velocity;\n }\n break;\n case AnimationStatus.decreasing:\n if (data.value <= minValue) {\n if (changeDirection) {\n data.status = AnimationStatus.increasing;\n }\n else {\n data.value += maxValue;\n }\n if (!data.loops) {\n data.loops = minLoops;\n }\n data.loops++;\n }\n else {\n data.value -= velocity;\n }\n }\n if (data.velocity && decay !== identity) {\n data.velocity *= decay;\n }\n checkDestroy(particle, destroyType, data.value, minValue, maxValue);\n if (!particle.destroyed) {\n data.value = clamp(data.value, minValue, maxValue);\n }\n}\nexport function cloneStyle(style) {\n const clonedStyle = document.createElement(\"div\").style;\n if (!style) {\n return clonedStyle;\n }\n for (const key in style) {\n const styleKey = style[key];\n if (!Object.prototype.hasOwnProperty.call(style, key) || isNull(styleKey)) {\n continue;\n }\n const styleValue = style.getPropertyValue?.(styleKey);\n if (!styleValue) {\n continue;\n }\n const stylePriority = style.getPropertyPriority?.(styleKey);\n if (!stylePriority) {\n clonedStyle.setProperty?.(styleKey, styleValue);\n }\n else {\n clonedStyle.setProperty?.(styleKey, styleValue, stylePriority);\n }\n }\n return clonedStyle;\n}\nfunction computeFullScreenStyle(zIndex) {\n const fullScreenStyle = document.createElement(\"div\").style, radix = 10, style = {\n width: \"100%\",\n height: \"100%\",\n margin: \"0\",\n padding: \"0\",\n borderWidth: \"0\",\n position: \"fixed\",\n zIndex: zIndex.toString(radix),\n \"z-index\": zIndex.toString(radix),\n top: \"0\",\n left: \"0\",\n };\n for (const key in style) {\n const value = style[key];\n fullScreenStyle.setProperty(key, value);\n }\n return fullScreenStyle;\n}\nexport const getFullScreenStyle = memoize(computeFullScreenStyle);\n","export var AlterType;\n(function (AlterType) {\n AlterType[\"darken\"] = \"darken\";\n AlterType[\"enlighten\"] = \"enlighten\";\n})(AlterType || (AlterType = {}));\n","import { clamp, getRandom, getRangeMax, getRangeMin, getRangeValue, mix, randomInRange, setRangeValue, } from \"./NumberUtils.js\";\nimport { decayOffset, defaultLoops, defaultOpacity, defaultRgbMin, defaultTime, defaultVelocity, double, hMax, hMin, hPhase, half, identity, lMax, lMin, midColorValue, millisecondsToSeconds, percentDenominator, phaseNumerator, randomColorValue, rgbFactor, rgbMax, sMax, sMin, sNormalizedOffset, sextuple, triple, } from \"../Core/Utils/Constants.js\";\nimport { isArray, isString } from \"./TypeUtils.js\";\nimport { AnimationStatus } from \"../Enums/AnimationStatus.js\";\nimport { itemFromArray } from \"./Utils.js\";\nfunction stringToRgba(engine, input) {\n if (!input) {\n return;\n }\n for (const manager of engine.colorManagers.values()) {\n if (input.startsWith(manager.stringPrefix)) {\n return manager.parseString(input);\n }\n }\n}\nexport function rangeColorToRgb(engine, 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(engine, color.value, index, useIndex);\n }\n if (isArray(color.value)) {\n return rangeColorToRgb(engine, {\n value: itemFromArray(color.value, index, useIndex),\n });\n }\n for (const manager of engine.colorManagers.values()) {\n const res = manager.handleRangeColor(color);\n if (res) {\n return res;\n }\n }\n}\nexport function colorToRgb(engine, 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(engine, color.value);\n }\n if (isArray(color.value)) {\n return colorToRgb(engine, {\n value: itemFromArray(color.value, index, useIndex),\n });\n }\n for (const manager of engine.colorManagers.values()) {\n const res = manager.handleColor(color);\n if (res) {\n return res;\n }\n }\n}\nexport function colorToHsl(engine, color, index, useIndex = true) {\n const rgb = colorToRgb(engine, color, index, useIndex);\n return rgb ? rgbToHsl(rgb) : undefined;\n}\nexport function rangeColorToHsl(engine, color, index, useIndex = true) {\n const rgb = rangeColorToRgb(engine, color, index, useIndex);\n return rgb ? rgbToHsl(rgb) : undefined;\n}\nexport function rgbToHsl(color) {\n const r1 = color.r / rgbMax, g1 = color.g / rgbMax, b1 = color.b / rgbMax, max = Math.max(r1, g1, b1), min = Math.min(r1, g1, b1), res = {\n h: hMin,\n l: (max + min) * half,\n s: sMin,\n };\n if (max !== min) {\n res.s = res.l < half ? (max - min) / (max + min) : (max - min) / (double - max - min);\n res.h =\n r1 === max\n ? (g1 - b1) / (max - min)\n : (res.h = g1 === max ? double + (b1 - r1) / (max - min) : double * double + (r1 - g1) / (max - min));\n }\n res.l *= lMax;\n res.s *= sMax;\n res.h *= hPhase;\n if (res.h < hMin) {\n res.h += hMax;\n }\n if (res.h >= hMax) {\n res.h -= hMax;\n }\n return res;\n}\nexport function stringToAlpha(engine, input) {\n return stringToRgba(engine, input)?.a;\n}\nexport function stringToRgb(engine, input) {\n return stringToRgba(engine, input);\n}\nexport function hslToRgb(hsl) {\n const h = ((hsl.h % hMax) + hMax) % hMax, s = Math.max(sMin, Math.min(sMax, hsl.s)), l = Math.max(lMin, Math.min(lMax, hsl.l)), hNormalized = h / hMax, sNormalized = s / sMax, lNormalized = l / lMax;\n if (s === sMin) {\n const grayscaleValue = Math.round(lNormalized * rgbFactor);\n return { r: grayscaleValue, g: grayscaleValue, b: grayscaleValue };\n }\n const channel = (temp1, temp2, temp3) => {\n const temp3Min = 0, temp3Max = 1;\n if (temp3 < temp3Min) {\n temp3++;\n }\n if (temp3 > temp3Max) {\n temp3--;\n }\n if (temp3 * sextuple < temp3Max) {\n return temp1 + (temp2 - temp1) * sextuple * temp3;\n }\n if (temp3 * double < temp3Max) {\n return temp2;\n }\n if (temp3 * triple < temp3Max * double) {\n const temp3Offset = double / triple;\n return temp1 + (temp2 - temp1) * (temp3Offset - temp3) * sextuple;\n }\n return temp1;\n }, temp1 = lNormalized < half\n ? lNormalized * (sNormalizedOffset + sNormalized)\n : lNormalized + sNormalized - lNormalized * sNormalized, temp2 = double * lNormalized - temp1, phaseThird = phaseNumerator / triple, red = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized + phaseThird)), green = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized)), blue = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized - phaseThird));\n return { r: Math.round(red), g: Math.round(green), b: Math.round(blue) };\n}\nexport function hslaToRgba(hsla) {\n const rgbResult = hslToRgb(hsla);\n return {\n a: hsla.a,\n b: rgbResult.b,\n g: rgbResult.g,\n r: rgbResult.r,\n };\n}\nexport function getRandomRgbColor(min) {\n const fixedMin = min ?? defaultRgbMin, fixedMax = rgbMax + identity;\n return {\n b: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),\n g: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),\n r: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),\n };\n}\nexport function getStyleFromRgb(color, opacity) {\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${opacity ?? defaultOpacity})`;\n}\nexport function getStyleFromHsl(color, opacity) {\n return `hsla(${color.h}, ${color.s}%, ${color.l}%, ${opacity ?? defaultOpacity})`;\n}\nexport function colorMix(color1, color2, size1, size2) {\n let rgb1 = color1, rgb2 = color2;\n if (rgb1.r === undefined) {\n rgb1 = hslToRgb(color1);\n }\n if (rgb2.r === undefined) {\n rgb2 = hslToRgb(color2);\n }\n return {\n b: mix(rgb1.b, rgb2.b, size1, size2),\n g: mix(rgb1.g, rgb2.g, size1, size2),\n r: mix(rgb1.r, rgb2.r, size1, size2),\n };\n}\nexport function getLinkColor(p1, p2, linkColor) {\n if (linkColor === randomColorValue) {\n return getRandomRgbColor();\n }\n else if (linkColor === midColorValue) {\n const sourceColor = p1.getFillColor() ?? p1.getStrokeColor(), destColor = p2?.getFillColor() ?? p2?.getStrokeColor();\n if (sourceColor && destColor && p2) {\n return colorMix(sourceColor, destColor, p1.getRadius(), p2.getRadius());\n }\n else {\n const hslColor = sourceColor ?? destColor;\n if (hslColor) {\n return hslToRgb(hslColor);\n }\n }\n }\n else {\n return linkColor;\n }\n}\nexport function getLinkRandomColor(engine, optColor, blink, consent) {\n const color = isString(optColor) ? optColor : optColor.value;\n if (color === randomColorValue) {\n if (consent) {\n return rangeColorToRgb(engine, {\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(engine, {\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) / percentDenominator) * reduceFactor;\n colorValue.decay = decayOffset - getRangeValue(colorAnimation.decay);\n colorValue.status = AnimationStatus.increasing;\n colorValue.loops = defaultLoops;\n colorValue.maxLoops = getRangeValue(colorAnimation.count);\n colorValue.time = defaultTime;\n colorValue.delayTime = getRangeValue(colorAnimation.delay) * millisecondsToSeconds;\n if (!colorAnimation.sync) {\n colorValue.velocity *= getRandom();\n colorValue.value *= getRandom();\n }\n colorValue.initialValue = colorValue.value;\n colorValue.offset = setRangeValue(colorAnimation.offset);\n }\n else {\n colorValue.velocity = defaultVelocity;\n }\n}\nexport function updateColorValue(data, range, decrease, delta) {\n const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minOffset = 0, velocityFactor = 3.6;\n if (!data ||\n !data.enable ||\n ((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {\n return;\n }\n if (!data.time) {\n data.time = 0;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n data.time += delta.value;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n return;\n }\n const offset = data.offset ? randomInRange(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = getRangeMax(range), min = getRangeMin(range);\n if (!decrease || data.status === AnimationStatus.increasing) {\n data.value += velocity;\n if (data.value > max) {\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n if (decrease) {\n data.status = AnimationStatus.decreasing;\n }\n else {\n data.value -= max;\n }\n }\n }\n else {\n data.value -= velocity;\n const minValue = 0;\n if (data.value < minValue) {\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n data.status = AnimationStatus.increasing;\n }\n }\n if (data.velocity && decay !== identity) {\n data.velocity *= decay;\n }\n data.value = clamp(data.value, min, max);\n}\nexport function updateColor(color, delta) {\n if (!color) {\n return;\n }\n const { h, s, l } = color, ranges = {\n h: { min: 0, max: 360 },\n s: { min: 0, max: 100 },\n l: { min: 0, max: 100 },\n };\n if (h) {\n updateColorValue(h, ranges.h, false, delta);\n }\n if (s) {\n updateColorValue(s, ranges.s, true, delta);\n }\n if (l) {\n updateColorValue(l, ranges.l, true, delta);\n }\n}\n","import { defaultAngle, defaultTransform, identity, lFactor, minStrokeWidth, originPoint, } from \"../Core/Utils/Constants.js\";\nimport { AlterType } from \"../Enums/Types/AlterType.js\";\nimport { getStyleFromRgb } from \"./ColorUtils.js\";\nexport function drawLine(context, begin, end) {\n context.beginPath();\n context.moveTo(begin.x, begin.y);\n context.lineTo(end.x, end.y);\n context.closePath();\n}\nexport function paintBase(context, dimension, baseColor) {\n context.fillStyle = baseColor ?? \"rgba(0,0,0,0)\";\n context.fillRect(originPoint.x, originPoint.y, dimension.width, dimension.height);\n}\nexport function paintImage(context, dimension, image, opacity) {\n if (!image) {\n return;\n }\n context.globalAlpha = opacity;\n context.drawImage(image, originPoint.x, originPoint.y, dimension.width, dimension.height);\n context.globalAlpha = 1;\n}\nexport function clear(context, dimension) {\n context.clearRect(originPoint.x, originPoint.y, dimension.width, dimension.height);\n}\nexport function drawParticle(data) {\n const { container, context, particle, delta, colorStyles, backgroundMask, composite, radius, opacity, shadow, transform, } = data, pos = particle.getPosition(), angle = particle.rotation + (particle.pathRotation ? particle.velocity.angle : defaultAngle), rotateData = {\n sin: Math.sin(angle),\n cos: Math.cos(angle),\n }, rotating = !!angle, transformData = {\n a: rotateData.cos * (transform.a ?? defaultTransform.a),\n b: rotating ? rotateData.sin * (transform.b ?? identity) : (transform.b ?? defaultTransform.b),\n c: rotating ? -rotateData.sin * (transform.c ?? identity) : (transform.c ?? defaultTransform.c),\n d: rotateData.cos * (transform.d ?? defaultTransform.d),\n };\n context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);\n if (backgroundMask) {\n context.globalCompositeOperation = composite;\n }\n const shadowColor = particle.shadowColor;\n if (shadow.enable && shadowColor) {\n context.shadowBlur = shadow.blur;\n context.shadowColor = getStyleFromRgb(shadowColor);\n context.shadowOffsetX = shadow.offset.x;\n context.shadowOffsetY = shadow.offset.y;\n }\n if (colorStyles.fill) {\n context.fillStyle = colorStyles.fill;\n }\n const strokeWidth = particle.strokeWidth ?? minStrokeWidth;\n context.lineWidth = strokeWidth;\n if (colorStyles.stroke) {\n context.strokeStyle = colorStyles.stroke;\n }\n const drawData = {\n container,\n context,\n particle,\n radius,\n opacity,\n delta,\n transformData,\n strokeWidth,\n };\n drawShape(drawData);\n drawShapeAfterDraw(drawData);\n drawEffect(drawData);\n context.globalCompositeOperation = \"source-over\";\n context.resetTransform();\n}\nexport function drawEffect(data) {\n const { container, context, particle, radius, opacity, delta, transformData } = data;\n if (!particle.effect) {\n return;\n }\n const drawer = container.effectDrawers.get(particle.effect);\n if (!drawer) {\n return;\n }\n drawer.draw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n}\nexport function drawShape(data) {\n const { container, context, particle, radius, opacity, delta, strokeWidth, transformData } = data;\n if (!particle.shape) {\n return;\n }\n const drawer = container.shapeDrawers.get(particle.shape);\n if (!drawer) {\n return;\n }\n context.beginPath();\n drawer.draw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n if (particle.shapeClose) {\n context.closePath();\n }\n if (strokeWidth > minStrokeWidth) {\n context.stroke();\n }\n if (particle.shapeFill) {\n context.fill();\n }\n}\nexport function drawShapeAfterDraw(data) {\n const { container, context, particle, radius, opacity, delta, transformData } = data;\n if (!particle.shape) {\n return;\n }\n const drawer = container.shapeDrawers.get(particle.shape);\n if (!drawer?.afterDraw) {\n return;\n }\n drawer.afterDraw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n}\nexport function drawPlugin(context, plugin, delta) {\n if (!plugin.draw) {\n return;\n }\n plugin.draw(context, delta);\n}\nexport function drawParticlePlugin(context, plugin, particle, delta) {\n if (!plugin.drawParticle) {\n return;\n }\n plugin.drawParticle(context, particle, delta);\n}\nexport function alterHsl(color, type, value) {\n return {\n h: color.h,\n s: color.s,\n l: color.l + (type === AlterType.darken ? -lFactor : lFactor) * value,\n };\n}\n","import { clear, drawParticle, drawParticlePlugin, drawPlugin, paintBase, paintImage } from \"../Utils/CanvasUtils.js\";\nimport { cloneStyle, getFullScreenStyle, getLogger, safeMutationObserver } from \"../Utils/Utils.js\";\nimport { defaultOpacity, defaultTransformValue, generatedAttribute, inverseFactorNumerator, minimumLength, minimumSize, zIndexFactorOffset, } from \"./Utils/Constants.js\";\nimport { getStyleFromHsl, getStyleFromRgb, rangeColorToHsl, rangeColorToRgb } from \"../Utils/ColorUtils.js\";\nfunction setTransformValue(factor, newFactor, key) {\n const newValue = newFactor[key];\n if (newValue !== undefined) {\n factor[key] = (factor[key] ?? defaultTransformValue) * newValue;\n }\n}\nfunction setStyle(canvas, style, important = false) {\n if (!style) {\n return;\n }\n const element = canvas;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n const keys = new Set();\n for (const key in elementStyle) {\n if (!Object.prototype.hasOwnProperty.call(elementStyle, key)) {\n continue;\n }\n keys.add(elementStyle[key]);\n }\n for (const key in style) {\n if (!Object.prototype.hasOwnProperty.call(style, key)) {\n continue;\n }\n keys.add(style[key]);\n }\n for (const key of keys) {\n const value = style.getPropertyValue(key);\n if (!value) {\n elementStyle.removeProperty(key);\n }\n else {\n elementStyle.setProperty(key, value, important ? \"important\" : \"\");\n }\n }\n}\nexport class Canvas {\n constructor(container, engine) {\n this.container = container;\n this._applyPostDrawUpdaters = particle => {\n for (const updater of this._postDrawUpdaters) {\n updater.afterDraw?.(particle);\n }\n };\n this._applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform) => {\n for (const updater of this._preDrawUpdaters) {\n if (updater.getColorStyles) {\n const { fill, stroke } = updater.getColorStyles(particle, ctx, radius, zOpacity);\n if (fill) {\n colorStyles.fill = fill;\n }\n if (stroke) {\n colorStyles.stroke = stroke;\n }\n }\n if (updater.getTransformValues) {\n const updaterTransform = updater.getTransformValues(particle);\n for (const key in updaterTransform) {\n setTransformValue(transform, updaterTransform, key);\n }\n }\n updater.beforeDraw?.(particle);\n }\n };\n this._applyResizePlugins = () => {\n for (const plugin of this._resizePlugins) {\n plugin.resize?.();\n }\n };\n this._getPluginParticleColors = particle => {\n let fColor, sColor;\n for (const plugin of this._colorPlugins) {\n if (!fColor && plugin.particleFillColor) {\n fColor = rangeColorToHsl(this._engine, plugin.particleFillColor(particle));\n }\n if (!sColor && plugin.particleStrokeColor) {\n sColor = rangeColorToHsl(this._engine, plugin.particleStrokeColor(particle));\n }\n if (fColor && sColor) {\n break;\n }\n }\n return [fColor, sColor];\n };\n this._initCover = async () => {\n const options = this.container.actualOptions, cover = options.backgroundMask.cover, color = cover.color;\n if (color) {\n const coverRgb = rangeColorToRgb(this._engine, color);\n if (coverRgb) {\n const coverColor = {\n ...coverRgb,\n a: cover.opacity,\n };\n this._coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);\n }\n }\n else {\n await new Promise((resolve, reject) => {\n if (!cover.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._coverImage = {\n image: img,\n opacity: cover.opacity,\n };\n resolve();\n });\n img.addEventListener(\"error\", evt => {\n reject(evt.error);\n });\n img.src = cover.image;\n });\n }\n };\n this._initStyle = () => {\n const element = this.element, options = this.container.actualOptions;\n if (!element) {\n return;\n }\n if (this._fullScreen) {\n this._setFullScreenStyle();\n }\n else {\n this._resetOriginalStyle();\n }\n for (const key in options.style) {\n if (!key || !options.style || !Object.prototype.hasOwnProperty.call(options.style, key)) {\n continue;\n }\n const value = options.style[key];\n if (!value) {\n continue;\n }\n element.style.setProperty(key, value, \"important\");\n }\n };\n this._initTrail = async () => {\n const options = this.container.actualOptions, trail = options.particles.move.trail, trailFill = trail.fill;\n if (!trail.enable) {\n return;\n }\n const opacity = inverseFactorNumerator / trail.length;\n if (trailFill.color) {\n const fillColor = rangeColorToRgb(this._engine, trailFill.color);\n if (!fillColor) {\n return;\n }\n this._trailFill = {\n color: {\n ...fillColor,\n },\n opacity,\n };\n }\n else {\n await new Promise((resolve, reject) => {\n if (!trailFill.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._trailFill = {\n image: img,\n opacity,\n };\n resolve();\n });\n img.addEventListener(\"error\", evt => {\n reject(evt.error);\n });\n img.src = trailFill.image;\n });\n }\n };\n this._paintBase = baseColor => {\n this.draw(ctx => paintBase(ctx, this.size, baseColor));\n };\n this._paintImage = (image, opacity) => {\n this.draw(ctx => paintImage(ctx, this.size, image, opacity));\n };\n this._repairStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n this._safeMutationObserver(observer => observer.disconnect());\n this._initStyle();\n this.initBackground();\n const pointerEvents = this._pointerEvents;\n element.style.pointerEvents = pointerEvents;\n element.setAttribute(\"pointer-events\", pointerEvents);\n this._safeMutationObserver(observer => {\n if (!element || !(element instanceof Node)) {\n return;\n }\n observer.observe(element, { attributes: true });\n });\n };\n this._resetOriginalStyle = () => {\n const element = this.element, originalStyle = this._originalStyle;\n if (!element || !originalStyle) {\n return;\n }\n setStyle(element, originalStyle, true);\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 setStyle(element, getFullScreenStyle(this.container.actualOptions.fullScreen.zIndex), true);\n };\n this._engine = engine;\n this._standardSize = {\n height: 0,\n width: 0,\n };\n const pxRatio = container.retina.pixelRatio, stdSize = this._standardSize;\n this.size = {\n height: stdSize.height * pxRatio,\n width: stdSize.width * pxRatio,\n };\n this._context = null;\n this._generated = false;\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n this._pointerEvents = \"none\";\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 > minimumLength && trailFill) {\n if (trailFill.color) {\n this._paintBase(getStyleFromRgb(trailFill.color, trailFill.opacity));\n }\n else if (trailFill.image) {\n this._paintImage(trailFill.image, trailFill.opacity);\n }\n }\n else if (options.clear) {\n this.draw(ctx => {\n clear(ctx, this.size);\n });\n }\n }\n destroy() {\n this.stop();\n if (this._generated) {\n const element = this.element;\n element?.remove();\n this.element = undefined;\n }\n else {\n this._resetOriginalStyle();\n }\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n draw(cb) {\n const ctx = this._context;\n if (!ctx) {\n return;\n }\n return cb(ctx);\n }\n drawAsync(cb) {\n const ctx = this._context;\n if (!ctx) {\n return undefined;\n }\n return cb(ctx);\n }\n drawParticle(particle, delta) {\n if (particle.spawning || particle.destroyed) {\n return;\n }\n const radius = particle.getRadius();\n if (radius <= minimumSize) {\n return;\n }\n const pfColor = particle.getFillColor(), psColor = particle.getStrokeColor() ?? pfColor;\n let [fColor, sColor] = this._getPluginParticleColors(particle);\n if (!fColor) {\n fColor = pfColor;\n }\n if (!sColor) {\n sColor = psColor;\n }\n if (!fColor && !sColor) {\n return;\n }\n this.draw((ctx) => {\n const container = this.container, options = container.actualOptions, zIndexOptions = particle.options.zIndex, zIndexFactor = zIndexFactorOffset - particle.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, opacity = particle.bubble.opacity ?? particle.opacity?.value ?? defaultOpacity, strokeOpacity = particle.strokeOpacity ?? opacity, zOpacity = opacity * zOpacityFactor, zStrokeOpacity = strokeOpacity * zOpacityFactor, transform = {}, colorStyles = {\n fill: fColor ? getStyleFromHsl(fColor, zOpacity) : undefined,\n };\n colorStyles.stroke = sColor ? getStyleFromHsl(sColor, zStrokeOpacity) : colorStyles.fill;\n this._applyPreDrawUpdaters(ctx, particle, radius, zOpacity, colorStyles, transform);\n drawParticle({\n container,\n context: ctx,\n particle,\n delta,\n colorStyles,\n backgroundMask: options.backgroundMask.enable,\n composite: options.backgroundMask.composite,\n radius: radius * zIndexFactor ** zIndexOptions.sizeRate,\n opacity: zOpacity,\n shadow: particle.options.shadow,\n transform,\n });\n this._applyPostDrawUpdaters(particle);\n });\n }\n drawParticlePlugin(plugin, particle, delta) {\n this.draw(ctx => drawParticlePlugin(ctx, plugin, particle, delta));\n }\n drawPlugin(plugin, delta) {\n this.draw(ctx => drawPlugin(ctx, plugin, delta));\n }\n async init() {\n this._safeMutationObserver(obs => obs.disconnect());\n this._mutationObserver = safeMutationObserver(records => {\n for (const record of records) {\n if (record.type === \"attributes\" && record.attributeName === \"style\") {\n this._repairStyle();\n }\n }\n });\n this.resize();\n this._initStyle();\n await this._initCover();\n try {\n await this._initTrail();\n }\n catch (e) {\n getLogger().error(e);\n }\n this.initBackground();\n this._safeMutationObserver(obs => {\n if (!this.element || !(this.element instanceof Node)) {\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(this._engine, 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.values()) {\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 = cloneStyle(this.element.style);\n const standardSize = this._standardSize;\n standardSize.height = canvas.offsetHeight;\n standardSize.width = canvas.offsetWidth;\n const pxRatio = this.container.retina.pixelRatio, retinaSize = this.size;\n canvas.height = retinaSize.height = standardSize.height * pxRatio;\n canvas.width = retinaSize.width = standardSize.width * pxRatio;\n this._context = this.element.getContext(\"2d\");\n this._safeMutationObserver(obs => obs.disconnect());\n this.container.retina.init();\n this.initBackground();\n this._safeMutationObserver(obs => {\n if (!this.element || !(this.element instanceof Node)) {\n return;\n }\n obs.observe(this.element, { attributes: true });\n });\n }\n paint() {\n const options = this.container.actualOptions;\n this.draw(ctx => {\n if (options.backgroundMask.enable && options.backgroundMask.cover) {\n clear(ctx, this.size);\n if (this._coverImage) {\n this._paintImage(this._coverImage.image, this._coverImage.opacity);\n }\n else if (this._coverColorStyle) {\n this._paintBase(this._coverColorStyle);\n }\n else {\n this._paintBase();\n }\n }\n else {\n this._paintBase();\n }\n });\n }\n resize() {\n if (!this.element) {\n return false;\n }\n const container = this.container, currentSize = container.canvas._standardSize, newSize = {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight,\n }, pxRatio = container.retina.pixelRatio, retinaSize = {\n width: newSize.width * pxRatio,\n height: newSize.height * pxRatio,\n };\n if (newSize.height === currentSize.height &&\n newSize.width === currentSize.width &&\n retinaSize.height === this.element.height &&\n retinaSize.width === this.element.width) {\n return false;\n }\n const oldSize = { ...currentSize };\n currentSize.height = newSize.height;\n currentSize.width = newSize.width;\n const canvasSize = this.size;\n this.element.width = canvasSize.width = retinaSize.width;\n this.element.height = canvasSize.height = retinaSize.height;\n if (this.container.started) {\n container.particles.setResizeFactor({\n width: currentSize.width / oldSize.width,\n height: currentSize.height / oldSize.height,\n });\n }\n return true;\n }\n setPointerEvents(type) {\n const element = this.element;\n if (!element) {\n return;\n }\n this._pointerEvents = type;\n this._repairStyle();\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","export var InteractivityDetect;\n(function (InteractivityDetect) {\n InteractivityDetect[\"canvas\"] = \"canvas\";\n InteractivityDetect[\"parent\"] = \"parent\";\n InteractivityDetect[\"window\"] = \"window\";\n})(InteractivityDetect || (InteractivityDetect = {}));\n","import { double, lengthOffset, millisecondsToSeconds, minCoordinate, mouseDownEvent, mouseLeaveEvent, mouseMoveEvent, mouseOutEvent, mouseUpEvent, resizeEvent, touchCancelEvent, touchDelay, touchEndEvent, touchMoveEvent, touchStartEvent, visibilityChangeEvent, } from \"./Constants.js\";\nimport { executeOnSingleOrMultiple, safeMatchMedia } from \"../../Utils/Utils.js\";\nimport { InteractivityDetect } from \"../../Enums/InteractivityDetect.js\";\nimport { isBoolean } from \"../../Utils/TypeUtils.js\";\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(), touchDelay);\n }\n };\n this._handleThemeChange = (e) => {\n const mediaEvent = e, container = this.container, options = container.options, defaultThemes = options.defaultThemes, themeName = mediaEvent.matches ? defaultThemes.dark : defaultThemes.light, theme = options.themes.find(theme => theme.name === themeName);\n if (theme?.default.auto) {\n void container.loadTheme(themeName);\n }\n };\n this._handleVisibilityChange = () => {\n const container = this.container, options = container.actualOptions;\n this._mouseTouchFinish();\n if (!options.pauseOnBlur) {\n return;\n }\n if (document?.hidden) {\n container.pageHidden = true;\n container.pause();\n }\n else {\n container.pageHidden = false;\n if (container.animationStatus) {\n void container.play(true);\n }\n else {\n void container.draw(true);\n }\n }\n };\n this._handleWindowResize = () => {\n if (this._resizeTimeout) {\n clearTimeout(this._resizeTimeout);\n delete this._resizeTimeout;\n }\n const handleResize = async () => {\n const canvas = this.container.canvas;\n await canvas?.windowResize();\n };\n this._resizeTimeout = setTimeout(() => void handleResize(), this.container.actualOptions.interactivity.events.resize.delay * millisecondsToSeconds);\n };\n this._manageInteractivityListeners = (mouseLeaveTmpEvent, add) => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions, interactivityEl = container.interactivity.element;\n if (!interactivityEl) {\n return;\n }\n const html = interactivityEl, canvas = container.canvas;\n canvas.setPointerEvents(html === canvas.element ? \"initial\" : \"none\");\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 === InteractivityDetect.window) {\n container.interactivity.element = window;\n mouseLeaveTmpEvent = mouseOutEvent;\n }\n else if (detectType === InteractivityDetect.parent && canvasEl) {\n container.interactivity.element = canvasEl.parentElement ?? canvasEl.parentNode;\n }\n else {\n container.interactivity.element = canvasEl;\n }\n this._manageMediaMatch(add);\n this._manageResize(add);\n this._manageInteractivityListeners(mouseLeaveTmpEvent, add);\n if (document) {\n manageListener(document, visibilityChangeEvent, handlers.visibilityChange, add, false);\n }\n };\n this._manageMediaMatch = add => {\n const handlers = this._handlers, mediaMatch = safeMatchMedia(\"(prefers-color-scheme: dark)\");\n if (!mediaMatch) {\n return;\n }\n if (mediaMatch.addEventListener !== undefined) {\n manageListener(mediaMatch, \"change\", handlers.themeChange, add);\n return;\n }\n if (mediaMatch.addListener === undefined) {\n return;\n }\n if (add) {\n mediaMatch.addListener(handlers.oldThemeChange);\n }\n else {\n mediaMatch.removeListener(handlers.oldThemeChange);\n }\n };\n this._manageResize = add => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions;\n if (!options.interactivity.events.resize) {\n return;\n }\n if (typeof ResizeObserver === \"undefined\") {\n manageListener(window, resizeEvent, handlers.resize, add);\n return;\n }\n const canvasEl = container.canvas.element;\n if (this._resizeObserver && !add) {\n if (canvasEl) {\n this._resizeObserver.unobserve(canvasEl);\n }\n this._resizeObserver.disconnect();\n delete this._resizeObserver;\n }\n else if (!this._resizeObserver && add && canvasEl) {\n this._resizeObserver = new ResizeObserver((entries) => {\n const entry = entries.find(e => e.target === canvasEl);\n if (!entry) {\n return;\n }\n this._handleWindowResize();\n });\n this._resizeObserver.observe(canvasEl);\n }\n };\n this._mouseDown = () => {\n const { interactivity } = this.container;\n if (!interactivity) {\n return;\n }\n const { mouse } = interactivity;\n mouse.clicking = true;\n mouse.downPosition = mouse.position;\n };\n this._mouseTouchClick = e => {\n const container = this.container, options = container.actualOptions, { mouse } = container.interactivity;\n mouse.inside = true;\n let handled = false;\n const mousePosition = mouse.position;\n if (!mousePosition || !options.interactivity.events.onClick.enable) {\n return;\n }\n for (const plugin of container.plugins.values()) {\n if (!plugin.clickPositionValid) {\n continue;\n }\n handled = plugin.clickPositionValid(mousePosition);\n if (handled) {\n break;\n }\n }\n if (!handled) {\n this._doMouseTouchClick(e);\n }\n mouse.clicking = false;\n };\n this._mouseTouchFinish = () => {\n const interactivity = this.container.interactivity;\n if (!interactivity) {\n return;\n }\n const mouse = interactivity.mouse;\n delete mouse.position;\n delete mouse.clickPosition;\n delete mouse.downPosition;\n interactivity.status = mouseLeaveEvent;\n mouse.inside = false;\n mouse.clicking = false;\n };\n this._mouseTouchMove = e => {\n const container = this.container, options = container.actualOptions, interactivity = container.interactivity, canvasEl = container.canvas.element;\n if (!interactivity?.element) {\n return;\n }\n interactivity.mouse.inside = true;\n let pos;\n if (e.type.startsWith(\"pointer\")) {\n this._canPush = true;\n const mouseEvent = e;\n if (interactivity.element === window) {\n if (canvasEl) {\n const clientRect = canvasEl.getBoundingClientRect();\n pos = {\n x: mouseEvent.clientX - clientRect.left,\n y: mouseEvent.clientY - clientRect.top,\n };\n }\n }\n else if (options.interactivity.detectsOn === InteractivityDetect.parent) {\n const source = mouseEvent.target, target = mouseEvent.currentTarget;\n if (source && target && canvasEl) {\n const sourceRect = source.getBoundingClientRect(), targetRect = target.getBoundingClientRect(), canvasRect = canvasEl.getBoundingClientRect();\n pos = {\n x: mouseEvent.offsetX + double * sourceRect.left - (targetRect.left + canvasRect.left),\n y: mouseEvent.offsetY + double * sourceRect.top - (targetRect.top + canvasRect.top),\n };\n }\n else {\n pos = {\n x: mouseEvent.offsetX ?? mouseEvent.clientX,\n y: mouseEvent.offsetY ?? mouseEvent.clientY,\n };\n }\n }\n else if (mouseEvent.target === canvasEl) {\n pos = {\n x: mouseEvent.offsetX ?? mouseEvent.clientX,\n y: mouseEvent.offsetY ?? mouseEvent.clientY,\n };\n }\n }\n else {\n this._canPush = e.type !== \"touchmove\";\n if (canvasEl) {\n const touchEvent = e, lastTouch = touchEvent.touches[touchEvent.touches.length - lengthOffset], canvasRect = canvasEl.getBoundingClientRect();\n pos = {\n x: lastTouch.clientX - (canvasRect.left ?? minCoordinate),\n y: lastTouch.clientY - (canvasRect.top ?? minCoordinate),\n };\n }\n }\n const pxRatio = container.retina.pixelRatio;\n if (pos) {\n pos.x *= pxRatio;\n pos.y *= pxRatio;\n }\n interactivity.mouse.position = pos;\n interactivity.status = mouseMoveEvent;\n };\n this._touchEnd = e => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.delete(touch.identifier);\n }\n this._mouseTouchFinish();\n };\n this._touchEndClick = e => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.delete(touch.identifier);\n }\n this._mouseTouchClick(e);\n };\n this._touchStart = e => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.set(touch.identifier, performance.now());\n }\n this._mouseTouchMove(e);\n };\n this._canPush = true;\n this._touches = new Map();\n this._handlers = {\n mouseDown: () => this._mouseDown(),\n mouseLeave: () => this._mouseTouchFinish(),\n mouseMove: (e) => this._mouseTouchMove(e),\n mouseUp: (e) => this._mouseTouchClick(e),\n touchStart: (e) => this._touchStart(e),\n touchMove: (e) => this._mouseTouchMove(e),\n touchEnd: (e) => this._touchEnd(e),\n touchCancel: (e) => this._touchEnd(e),\n touchEndClick: (e) => this._touchEndClick(e),\n visibilityChange: () => this._handleVisibilityChange(),\n themeChange: (e) => this._handleThemeChange(e),\n oldThemeChange: (e) => this._handleThemeChange(e),\n resize: () => {\n this._handleWindowResize();\n },\n };\n }\n addListeners() {\n this._manageListeners(true);\n }\n removeListeners() {\n this._manageListeners(false);\n }\n}\n","export var EventType;\n(function (EventType) {\n EventType[\"configAdded\"] = \"configAdded\";\n EventType[\"containerInit\"] = \"containerInit\";\n EventType[\"particlesSetup\"] = \"particlesSetup\";\n EventType[\"containerStarted\"] = \"containerStarted\";\n EventType[\"containerStopped\"] = \"containerStopped\";\n EventType[\"containerDestroyed\"] = \"containerDestroyed\";\n EventType[\"containerPaused\"] = \"containerPaused\";\n EventType[\"containerPlay\"] = \"containerPlay\";\n EventType[\"containerBuilt\"] = \"containerBuilt\";\n EventType[\"particleAdded\"] = \"particleAdded\";\n EventType[\"particleDestroyed\"] = \"particleDestroyed\";\n EventType[\"particleRemoved\"] = \"particleRemoved\";\n})(EventType || (EventType = {}));\n","import { isArray, isNull, isString } from \"../../Utils/TypeUtils.js\";\nexport class OptionsColor {\n constructor() {\n this.value = \"\";\n }\n static create(source, data) {\n const color = new OptionsColor();\n color.load(source);\n if (data !== undefined) {\n if (isString(data) || isArray(data)) {\n color.load({ value: data });\n }\n else {\n color.load(data);\n }\n }\n return color;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (!isNull(data.value)) {\n this.value = data.value;\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class Background {\n constructor() {\n this.color = new OptionsColor();\n this.color.value = \"\";\n this.image = \"\";\n this.position = \"\";\n this.repeat = \"\";\n this.size = \"\";\n this.opacity = 1;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n if (data.position !== undefined) {\n this.position = data.position;\n }\n if (data.repeat !== undefined) {\n this.repeat = data.repeat;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class BackgroundMaskCover {\n constructor() {\n this.opacity = 1;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { isNull, isString } from \"../../../Utils/TypeUtils.js\";\nimport { BackgroundMaskCover } from \"./BackgroundMaskCover.js\";\nexport class BackgroundMask {\n constructor() {\n this.composite = \"destination-out\";\n this.cover = new BackgroundMaskCover();\n this.enable = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.composite !== undefined) {\n this.composite = data.composite;\n }\n if (data.cover !== undefined) {\n const cover = data.cover, color = (isString(data.cover) ? { color: data.cover } : data.cover);\n this.cover.load(cover.color !== undefined || cover.image !== undefined ? cover : { color: color });\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n","import { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class FullScreen {\n constructor() {\n this.enable = true;\n this.zIndex = 0;\n }\n load(data) {\n if (isNull(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","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ClickEvent {\n constructor() {\n this.enable = false;\n this.mode = [];\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n }\n}\n","export var DivType;\n(function (DivType) {\n DivType[\"circle\"] = \"circle\";\n DivType[\"rectangle\"] = \"rectangle\";\n})(DivType || (DivType = {}));\n","import { DivType } from \"../../../../Enums/Types/DivType.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class DivEvent {\n constructor() {\n this.selectors = [];\n this.enable = false;\n this.mode = [];\n this.type = DivType.circle;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Parallax {\n constructor() {\n this.enable = false;\n this.force = 2;\n this.smooth = 10;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.force !== undefined) {\n this.force = data.force;\n }\n if (data.smooth !== undefined) {\n this.smooth = data.smooth;\n }\n }\n}\n","import { Parallax } from \"./Parallax.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class HoverEvent {\n constructor() {\n this.enable = false;\n this.mode = [];\n this.parallax = new Parallax();\n }\n load(data) {\n if (isNull(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","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ResizeEvent {\n constructor() {\n this.delay = 0.5;\n this.enable = true;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.delay !== undefined) {\n this.delay = data.delay;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n","import { ClickEvent } from \"./ClickEvent.js\";\nimport { DivEvent } from \"./DivEvent.js\";\nimport { HoverEvent } from \"./HoverEvent.js\";\nimport { ResizeEvent } from \"./ResizeEvent.js\";\nimport { executeOnSingleOrMultiple } from \"../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Events {\n constructor() {\n this.onClick = new ClickEvent();\n this.onDiv = new DivEvent();\n this.onHover = new HoverEvent();\n this.resize = new ResizeEvent();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.onClick.load(data.onClick);\n const onDiv = data.onDiv;\n if (onDiv !== undefined) {\n this.onDiv = executeOnSingleOrMultiple(onDiv, t => {\n const tmp = new DivEvent();\n tmp.load(t);\n return tmp;\n });\n }\n this.onHover.load(data.onHover);\n this.resize.load(data.resize);\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Modes {\n constructor(engine, container) {\n this._engine = engine;\n this._container = container;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (!this._container) {\n return;\n }\n const interactors = this._engine.interactors.get(this._container);\n if (!interactors) {\n return;\n }\n for (const interactor of interactors) {\n if (!interactor.loadModeOptions) {\n continue;\n }\n interactor.loadModeOptions(this, data);\n }\n }\n}\n","import { Events } from \"./Events/Events.js\";\nimport { InteractivityDetect } from \"../../../Enums/InteractivityDetect.js\";\nimport { Modes } from \"./Modes/Modes.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class Interactivity {\n constructor(engine, container) {\n this.detectsOn = InteractivityDetect.window;\n this.events = new Events();\n this.modes = new Modes(engine, container);\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n const detectsOn = data.detectsOn;\n if (detectsOn !== undefined) {\n this.detectsOn = detectsOn;\n }\n this.events.load(data.events);\n this.modes.load(data.modes);\n }\n}\n","import { PixelMode } from \"../../Enums/Modes/PixelMode.js\";\nimport { deepExtend } from \"../../Utils/Utils.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nimport { manualDefaultPosition } from \"../../Core/Utils/Constants.js\";\nexport class ManualParticle {\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.position) {\n this.position = {\n x: data.position.x ?? manualDefaultPosition,\n y: data.position.y ?? manualDefaultPosition,\n mode: data.position.mode ?? PixelMode.percent,\n };\n }\n if (data.options) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n","export var ResponsiveMode;\n(function (ResponsiveMode) {\n ResponsiveMode[\"screen\"] = \"screen\";\n ResponsiveMode[\"canvas\"] = \"canvas\";\n})(ResponsiveMode || (ResponsiveMode = {}));\n","import { ResponsiveMode } from \"../../Enums/Modes/ResponsiveMode.js\";\nimport { deepExtend } from \"../../Utils/Utils.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nexport class Responsive {\n constructor() {\n this.maxWidth = Infinity;\n this.options = {};\n this.mode = ResponsiveMode.canvas;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (!isNull(data.maxWidth)) {\n this.maxWidth = data.maxWidth;\n }\n if (!isNull(data.mode)) {\n if (data.mode === ResponsiveMode.screen) {\n this.mode = ResponsiveMode.screen;\n }\n else {\n this.mode = ResponsiveMode.canvas;\n }\n }\n if (!isNull(data.options)) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n","export var ThemeMode;\n(function (ThemeMode) {\n ThemeMode[\"any\"] = \"any\";\n ThemeMode[\"dark\"] = \"dark\";\n ThemeMode[\"light\"] = \"light\";\n})(ThemeMode || (ThemeMode = {}));\n","import { ThemeMode } from \"../../../Enums/Modes/ThemeMode.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class ThemeDefault {\n constructor() {\n this.auto = false;\n this.mode = ThemeMode.any;\n this.value = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.auto !== undefined) {\n this.auto = data.auto;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { ThemeDefault } from \"./ThemeDefault.js\";\nimport { deepExtend } from \"../../../Utils/Utils.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class Theme {\n constructor() {\n this.name = \"\";\n this.default = new ThemeDefault();\n }\n load(data) {\n if (isNull(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 { AnimationMode } from \"../../Enums/Modes/AnimationMode.js\";\nimport { StartValueType } from \"../../Enums/Types/StartValueType.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class AnimationOptions {\n constructor() {\n this.count = 0;\n this.enable = false;\n this.speed = 1;\n this.decay = 0;\n this.delay = 0;\n this.sync = false;\n }\n load(data) {\n if (isNull(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 = AnimationMode.auto;\n this.startValue = StartValueType.random;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.startValue !== undefined) {\n this.startValue = data.startValue;\n }\n }\n}\n","import { AnimationOptions } from \"./AnimationOptions.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class ColorAnimation extends AnimationOptions {\n constructor() {\n super();\n this.offset = 0;\n this.sync = true;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.offset !== undefined) {\n this.offset = setRangeValue(data.offset);\n }\n }\n}\n","import { ColorAnimation } from \"./ColorAnimation.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nexport class HslAnimation {\n constructor() {\n this.h = new ColorAnimation();\n this.s = new ColorAnimation();\n this.l = new ColorAnimation();\n }\n load(data) {\n if (isNull(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, isNull, isString } from \"../../Utils/TypeUtils.js\";\nimport { HslAnimation } from \"./HslAnimation.js\";\nimport { OptionsColor } from \"./OptionsColor.js\";\nexport class AnimatableColor extends OptionsColor {\n constructor() {\n super();\n this.animation = new HslAnimation();\n }\n static create(source, data) {\n const color = new AnimatableColor();\n color.load(source);\n if (data !== undefined) {\n if (isString(data) || isArray(data)) {\n color.load({ value: data });\n }\n else {\n color.load(data);\n }\n }\n return color;\n }\n load(data) {\n super.load(data);\n if (isNull(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","export var CollisionMode;\n(function (CollisionMode) {\n CollisionMode[\"absorb\"] = \"absorb\";\n CollisionMode[\"bounce\"] = \"bounce\";\n CollisionMode[\"destroy\"] = \"destroy\";\n})(CollisionMode || (CollisionMode = {}));\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class CollisionsAbsorb {\n constructor() {\n this.speed = 2;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.speed !== undefined) {\n this.speed = data.speed;\n }\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class CollisionsOverlap {\n constructor() {\n this.enable = true;\n this.retries = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.retries !== undefined) {\n this.retries = data.retries;\n }\n }\n}\n","import { AnimationOptions, RangedAnimationOptions } from \"./AnimationOptions.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class ValueWithRandom {\n constructor() {\n this.value = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (!isNull(data.value)) {\n this.value = setRangeValue(data.value);\n }\n }\n}\nexport class AnimationValueWithRandom extends ValueWithRandom {\n constructor() {\n super();\n this.animation = new AnimationOptions();\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\nexport class RangedAnimationValueWithRandom extends AnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new RangedAnimationOptions();\n }\n load(data) {\n super.load(data);\n }\n}\n","import { ValueWithRandom } from \"../../ValueWithRandom.js\";\nexport class ParticlesBounceFactor extends ValueWithRandom {\n constructor() {\n super();\n this.value = 1;\n }\n}\n","import { ParticlesBounceFactor } from \"./ParticlesBounceFactor.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ParticlesBounce {\n constructor() {\n this.horizontal = new ParticlesBounceFactor();\n this.vertical = new ParticlesBounceFactor();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.horizontal.load(data.horizontal);\n this.vertical.load(data.vertical);\n }\n}\n","import { CollisionMode } from \"../../../../Enums/Modes/CollisionMode.js\";\nimport { CollisionsAbsorb } from \"./CollisionsAbsorb.js\";\nimport { CollisionsOverlap } from \"./CollisionsOverlap.js\";\nimport { ParticlesBounce } from \"../Bounce/ParticlesBounce.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Collisions {\n constructor() {\n this.absorb = new CollisionsAbsorb();\n this.bounce = new ParticlesBounce();\n this.enable = false;\n this.maxSpeed = 50;\n this.mode = CollisionMode.bounce;\n this.overlap = new CollisionsOverlap();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.absorb.load(data.absorb);\n this.bounce.load(data.bounce);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = setRangeValue(data.maxSpeed);\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n this.overlap.load(data.overlap);\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Effect {\n constructor() {\n this.close = true;\n this.fill = true;\n this.options = {};\n this.type = [];\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n const options = data.options;\n if (options !== undefined) {\n for (const effect in options) {\n const item = options[effect];\n if (item) {\n this.options[effect] = deepExtend(this.options[effect] ?? {}, item);\n }\n }\n }\n if (data.close !== undefined) {\n this.close = data.close;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveAngle {\n constructor() {\n this.offset = 0;\n this.value = 90;\n }\n load(data) {\n if (isNull(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 { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveAttract {\n constructor() {\n this.distance = 200;\n this.enable = false;\n this.rotate = {\n x: 3000,\n y: 3000,\n };\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = setRangeValue(data.distance);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.rotate) {\n const rotateX = data.rotate.x;\n if (rotateX !== undefined) {\n this.rotate.x = rotateX;\n }\n const rotateY = data.rotate.y;\n if (rotateY !== undefined) {\n this.rotate.y = rotateY;\n }\n }\n }\n}\n","import { PixelMode } from \"../../../../Enums/Modes/PixelMode.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class MoveCenter {\n constructor() {\n this.x = 50;\n this.y = 50;\n this.mode = PixelMode.percent;\n this.radius = 0;\n }\n load(data) {\n if (isNull(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 { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveGravity {\n constructor() {\n this.acceleration = 9.81;\n this.enable = false;\n this.inverse = false;\n this.maxSpeed = 50;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.acceleration !== undefined) {\n this.acceleration = setRangeValue(data.acceleration);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.inverse !== undefined) {\n this.inverse = data.inverse;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = setRangeValue(data.maxSpeed);\n }\n }\n}\n","import { ValueWithRandom } from \"../../../ValueWithRandom.js\";\nimport { deepExtend } from \"../../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../../Utils/TypeUtils.js\";\nexport class MovePath {\n constructor() {\n this.clamp = true;\n this.delay = new ValueWithRandom();\n this.enable = false;\n this.options = {};\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.clamp !== undefined) {\n this.clamp = data.clamp;\n }\n this.delay.load(data.delay);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n this.generator = data.generator;\n if (data.options) {\n this.options = deepExtend(this.options, data.options);\n }\n }\n}\n","import { OptionsColor } from \"../../OptionsColor.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class MoveTrailFill {\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n }\n}\n","import { MoveTrailFill } from \"./MoveTrailFill.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class MoveTrail {\n constructor() {\n this.enable = false;\n this.length = 10;\n this.fill = new MoveTrailFill();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.fill !== undefined) {\n this.fill.load(data.fill);\n }\n if (data.length !== undefined) {\n this.length = data.length;\n }\n }\n}\n","export var OutMode;\n(function (OutMode) {\n OutMode[\"bounce\"] = \"bounce\";\n OutMode[\"none\"] = \"none\";\n OutMode[\"out\"] = \"out\";\n OutMode[\"destroy\"] = \"destroy\";\n OutMode[\"split\"] = \"split\";\n})(OutMode || (OutMode = {}));\n","import { OutMode } from \"../../../../Enums/Modes/OutMode.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class OutModes {\n constructor() {\n this.default = OutMode.out;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.default !== undefined) {\n this.default = data.default;\n }\n this.bottom = data.bottom ?? data.default;\n this.left = data.left ?? data.default;\n this.right = data.right ?? data.default;\n this.top = data.top ?? data.default;\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Spin {\n constructor() {\n this.acceleration = 0;\n this.enable = false;\n }\n load(data) {\n if (isNull(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 { MoveDirection } from \"../../../../Enums/Directions/MoveDirection.js\";\nimport { isNull, isNumber, isObject } from \"../../../../Utils/TypeUtils.js\";\nimport { MoveAngle } from \"./MoveAngle.js\";\nimport { MoveAttract } from \"./MoveAttract.js\";\nimport { MoveCenter } from \"./MoveCenter.js\";\nimport { MoveGravity } from \"./MoveGravity.js\";\nimport { MovePath } from \"./Path/MovePath.js\";\nimport { MoveTrail } from \"./MoveTrail.js\";\nimport { OutModes } from \"./OutModes.js\";\nimport { Spin } from \"./Spin.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Move {\n constructor() {\n this.angle = new MoveAngle();\n this.attract = new MoveAttract();\n this.center = new MoveCenter();\n this.decay = 0;\n this.distance = {};\n this.direction = MoveDirection.none;\n this.drift = 0;\n this.enable = false;\n this.gravity = new MoveGravity();\n this.path = new MovePath();\n this.outModes = new OutModes();\n this.random = false;\n this.size = false;\n this.speed = 2;\n this.spin = new Spin();\n this.straight = false;\n this.trail = new MoveTrail();\n this.vibrate = false;\n this.warp = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.angle.load(isNumber(data.angle) ? { value: data.angle } : data.angle);\n this.attract.load(data.attract);\n this.center.load(data.center);\n if (data.decay !== undefined) {\n this.decay = setRangeValue(data.decay);\n }\n if (data.direction !== undefined) {\n this.direction = data.direction;\n }\n if (data.distance !== undefined) {\n this.distance = isNumber(data.distance)\n ? {\n horizontal: data.distance,\n vertical: data.distance,\n }\n : { ...data.distance };\n }\n if (data.drift !== undefined) {\n this.drift = setRangeValue(data.drift);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n this.gravity.load(data.gravity);\n const outModes = data.outModes;\n if (outModes !== undefined) {\n if (isObject(outModes)) {\n this.outModes.load(outModes);\n }\n else {\n this.outModes.load({\n default: outModes,\n });\n }\n }\n this.path.load(data.path);\n if (data.random !== undefined) {\n this.random = data.random;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.speed !== undefined) {\n this.speed = setRangeValue(data.speed);\n }\n this.spin.load(data.spin);\n if (data.straight !== undefined) {\n this.straight = data.straight;\n }\n this.trail.load(data.trail);\n if (data.vibrate !== undefined) {\n this.vibrate = data.vibrate;\n }\n if (data.warp !== undefined) {\n this.warp = data.warp;\n }\n }\n}\n","import { DestroyType } from \"../../../../Enums/Types/DestroyType.js\";\nimport { RangedAnimationOptions } from \"../../AnimationOptions.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class OpacityAnimation extends RangedAnimationOptions {\n constructor() {\n super();\n this.destroy = DestroyType.none;\n this.speed = 2;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.destroy !== undefined) {\n this.destroy = data.destroy;\n }\n }\n}\n","import { OpacityAnimation } from \"./OpacityAnimation.js\";\nimport { RangedAnimationValueWithRandom } from \"../../ValueWithRandom.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Opacity extends RangedAnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new OpacityAnimation();\n this.value = 1;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n super.load(data);\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ParticlesDensity {\n constructor() {\n this.enable = false;\n this.width = 1920;\n this.height = 1080;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n const width = data.width;\n if (width !== undefined) {\n this.width = width;\n }\n const height = data.height;\n if (height !== undefined) {\n this.height = height;\n }\n }\n}\n","export var LimitMode;\n(function (LimitMode) {\n LimitMode[\"delete\"] = \"delete\";\n LimitMode[\"wait\"] = \"wait\";\n})(LimitMode || (LimitMode = {}));\n","import { LimitMode } from \"../../../../Enums/Modes/LimitMode.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ParticlesNumberLimit {\n constructor() {\n this.mode = LimitMode.delete;\n this.value = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { ParticlesDensity } from \"./ParticlesDensity.js\";\nimport { ParticlesNumberLimit } from \"./ParticlesNumberLimit.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ParticlesNumber {\n constructor() {\n this.density = new ParticlesDensity();\n this.limit = new ParticlesNumberLimit();\n this.value = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.density.load(data.density);\n this.limit.load(data.limit);\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class Shadow {\n constructor() {\n this.blur = 0;\n this.color = new OptionsColor();\n this.enable = false;\n this.offset = {\n x: 0,\n y: 0,\n };\n this.color.value = \"#000\";\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.blur !== undefined) {\n this.blur = data.blur;\n }\n this.color = OptionsColor.create(this.color, data.color);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.offset === undefined) {\n return;\n }\n if (data.offset.x !== undefined) {\n this.offset.x = data.offset.x;\n }\n if (data.offset.y !== undefined) {\n this.offset.y = data.offset.y;\n }\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Shape {\n constructor() {\n this.close = true;\n this.fill = true;\n this.options = {};\n this.type = \"circle\";\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n const options = data.options;\n if (options !== undefined) {\n for (const shape in options) {\n const item = options[shape];\n if (item) {\n this.options[shape] = deepExtend(this.options[shape] ?? {}, item);\n }\n }\n }\n if (data.close !== undefined) {\n this.close = data.close;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","import { DestroyType } from \"../../../../Enums/Types/DestroyType.js\";\nimport { RangedAnimationOptions } from \"../../AnimationOptions.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class SizeAnimation extends RangedAnimationOptions {\n constructor() {\n super();\n this.destroy = DestroyType.none;\n this.speed = 5;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.destroy !== undefined) {\n this.destroy = data.destroy;\n }\n }\n}\n","import { RangedAnimationValueWithRandom } from \"../../ValueWithRandom.js\";\nimport { SizeAnimation } from \"./SizeAnimation.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Size extends RangedAnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new SizeAnimation();\n this.value = 3;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\n","import { AnimatableColor } from \"../AnimatableColor.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../Utils/NumberUtils.js\";\nexport class Stroke {\n constructor() {\n this.width = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = AnimatableColor.create(this.color, data.color);\n }\n if (data.width !== undefined) {\n this.width = setRangeValue(data.width);\n }\n if (data.opacity !== undefined) {\n this.opacity = setRangeValue(data.opacity);\n }\n }\n}\n","import { ValueWithRandom } from \"../../ValueWithRandom.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ZIndex extends ValueWithRandom {\n constructor() {\n super();\n this.opacityRate = 1;\n this.sizeRate = 1;\n this.velocityRate = 1;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.opacityRate !== undefined) {\n this.opacityRate = data.opacityRate;\n }\n if (data.sizeRate !== undefined) {\n this.sizeRate = data.sizeRate;\n }\n if (data.velocityRate !== undefined) {\n this.velocityRate = data.velocityRate;\n }\n }\n}\n","import { deepExtend, executeOnSingleOrMultiple } from \"../../../Utils/Utils.js\";\nimport { AnimatableColor } from \"../AnimatableColor.js\";\nimport { Collisions } from \"./Collisions/Collisions.js\";\nimport { Effect } from \"./Effect/Effect.js\";\nimport { Move } from \"./Move/Move.js\";\nimport { Opacity } from \"./Opacity/Opacity.js\";\nimport { ParticlesBounce } from \"./Bounce/ParticlesBounce.js\";\nimport { ParticlesNumber } from \"./Number/ParticlesNumber.js\";\nimport { Shadow } from \"./Shadow.js\";\nimport { Shape } from \"./Shape/Shape.js\";\nimport { Size } from \"./Size/Size.js\";\nimport { Stroke } from \"./Stroke.js\";\nimport { ZIndex } from \"./ZIndex/ZIndex.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class ParticlesOptions {\n constructor(engine, container) {\n this._engine = engine;\n this._container = container;\n this.bounce = new ParticlesBounce();\n this.collisions = new Collisions();\n this.color = new AnimatableColor();\n this.color.value = \"#fff\";\n this.effect = new Effect();\n this.groups = {};\n this.move = new Move();\n this.number = new ParticlesNumber();\n this.opacity = new Opacity();\n this.reduceDuplicates = false;\n this.shadow = new Shadow();\n this.shape = new Shape();\n this.size = new Size();\n this.stroke = new Stroke();\n this.zIndex = new ZIndex();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.groups !== undefined) {\n for (const group of Object.keys(data.groups)) {\n if (!Object.hasOwn(data.groups, group)) {\n continue;\n }\n const item = data.groups[group];\n if (item !== undefined) {\n this.groups[group] = deepExtend(this.groups[group] ?? {}, item);\n }\n }\n }\n if (data.reduceDuplicates !== undefined) {\n this.reduceDuplicates = data.reduceDuplicates;\n }\n this.bounce.load(data.bounce);\n this.color.load(AnimatableColor.create(this.color, data.color));\n this.effect.load(data.effect);\n this.move.load(data.move);\n this.number.load(data.number);\n this.opacity.load(data.opacity);\n this.shape.load(data.shape);\n this.size.load(data.size);\n this.shadow.load(data.shadow);\n this.zIndex.load(data.zIndex);\n this.collisions.load(data.collisions);\n if (data.interactivity !== undefined) {\n this.interactivity = deepExtend({}, data.interactivity);\n }\n const strokeToLoad = data.stroke;\n if (strokeToLoad) {\n this.stroke = executeOnSingleOrMultiple(strokeToLoad, t => {\n const tmp = new Stroke();\n tmp.load(t);\n return tmp;\n });\n }\n if (this._container) {\n const updaters = this._engine.updaters.get(this._container);\n if (updaters) {\n for (const updater of updaters) {\n if (updater.loadOptions) {\n updater.loadOptions(this, data);\n }\n }\n }\n const interactors = this._engine.interactors.get(this._container);\n if (interactors) {\n for (const interactor of interactors) {\n if (interactor.loadParticlesOptions) {\n interactor.loadParticlesOptions(this, data);\n }\n }\n }\n }\n }\n}\n","import { ParticlesOptions } from \"../Options/Classes/Particles/ParticlesOptions.js\";\nexport function loadOptions(options, ...sourceOptionsArr) {\n for (const sourceOptions of sourceOptionsArr) {\n options.load(sourceOptions);\n }\n}\nexport function loadParticlesOptions(engine, container, ...sourceOptionsArr) {\n const options = new ParticlesOptions(engine, container);\n loadOptions(options, ...sourceOptionsArr);\n return options;\n}\n","import { deepExtend, executeOnSingleOrMultiple, safeMatchMedia } from \"../../Utils/Utils.js\";\nimport { isBoolean, isNull } from \"../../Utils/TypeUtils.js\";\nimport { Background } from \"./Background/Background.js\";\nimport { BackgroundMask } from \"./BackgroundMask/BackgroundMask.js\";\nimport { FullScreen } from \"./FullScreen/FullScreen.js\";\nimport { Interactivity } from \"./Interactivity/Interactivity.js\";\nimport { ManualParticle } from \"./ManualParticle.js\";\nimport { Responsive } from \"./Responsive.js\";\nimport { ResponsiveMode } from \"../../Enums/Modes/ResponsiveMode.js\";\nimport { Theme } from \"./Theme/Theme.js\";\nimport { ThemeMode } from \"../../Enums/Modes/ThemeMode.js\";\nimport { loadParticlesOptions } from \"../../Utils/OptionsUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class Options {\n constructor(engine, container) {\n this._findDefaultTheme = mode => {\n return (this.themes.find(theme => theme.default.value && theme.default.mode === mode) ??\n this.themes.find(theme => theme.default.value && theme.default.mode === ThemeMode.any));\n };\n this._importPreset = preset => {\n this.load(this._engine.getPreset(preset));\n };\n this._engine = engine;\n this._container = container;\n this.autoPlay = true;\n this.background = new Background();\n this.backgroundMask = new BackgroundMask();\n this.clear = true;\n this.defaultThemes = {};\n this.delay = 0;\n this.fullScreen = new FullScreen();\n this.detectRetina = true;\n this.duration = 0;\n this.fpsLimit = 120;\n this.interactivity = new Interactivity(engine, container);\n this.manualParticles = [];\n this.particles = loadParticlesOptions(this._engine, this._container);\n this.pauseOnBlur = true;\n this.pauseOnOutsideViewport = true;\n this.responsive = [];\n this.smooth = false;\n this.style = {};\n this.themes = [];\n this.zLayers = 100;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.preset !== undefined) {\n executeOnSingleOrMultiple(data.preset, preset => this._importPreset(preset));\n }\n if (data.autoPlay !== undefined) {\n this.autoPlay = data.autoPlay;\n }\n if (data.clear !== undefined) {\n this.clear = data.clear;\n }\n if (data.key !== undefined) {\n this.key = data.key;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n if (data.delay !== undefined) {\n this.delay = setRangeValue(data.delay);\n }\n const detectRetina = data.detectRetina;\n if (detectRetina !== undefined) {\n this.detectRetina = detectRetina;\n }\n if (data.duration !== undefined) {\n this.duration = setRangeValue(data.duration);\n }\n const fpsLimit = data.fpsLimit;\n if (fpsLimit !== undefined) {\n this.fpsLimit = fpsLimit;\n }\n if (data.pauseOnBlur !== undefined) {\n this.pauseOnBlur = data.pauseOnBlur;\n }\n if (data.pauseOnOutsideViewport !== undefined) {\n this.pauseOnOutsideViewport = data.pauseOnOutsideViewport;\n }\n if (data.zLayers !== undefined) {\n this.zLayers = data.zLayers;\n }\n this.background.load(data.background);\n const fullScreen = data.fullScreen;\n if (isBoolean(fullScreen)) {\n this.fullScreen.enable = fullScreen;\n }\n else {\n this.fullScreen.load(fullScreen);\n }\n this.backgroundMask.load(data.backgroundMask);\n this.interactivity.load(data.interactivity);\n if (data.manualParticles) {\n this.manualParticles = data.manualParticles.map(t => {\n const tmp = new ManualParticle();\n tmp.load(t);\n return tmp;\n });\n }\n this.particles.load(data.particles);\n this.style = deepExtend(this.style, data.style);\n this._engine.loadOptions(this, data);\n if (data.smooth !== undefined) {\n this.smooth = data.smooth;\n }\n const interactors = this._engine.interactors.get(this._container);\n if (interactors) {\n for (const interactor of interactors) {\n if (interactor.loadOptions) {\n interactor.loadOptions(this, data);\n }\n }\n }\n if (data.responsive !== undefined) {\n for (const responsive of data.responsive) {\n const optResponsive = new Responsive();\n optResponsive.load(responsive);\n this.responsive.push(optResponsive);\n }\n }\n this.responsive.sort((a, b) => a.maxWidth - b.maxWidth);\n if (data.themes !== undefined) {\n for (const theme of data.themes) {\n const existingTheme = this.themes.find(t => t.name === theme.name);\n if (!existingTheme) {\n const optTheme = new Theme();\n optTheme.load(theme);\n this.themes.push(optTheme);\n }\n else {\n existingTheme.load(theme);\n }\n }\n }\n this.defaultThemes.dark = this._findDefaultTheme(ThemeMode.dark)?.name;\n this.defaultThemes.light = this._findDefaultTheme(ThemeMode.light)?.name;\n }\n setResponsive(width, pxRatio, defaultOptions) {\n this.load(defaultOptions);\n const responsiveOptions = this.responsive.find(t => t.mode === ResponsiveMode.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?.matches, defaultTheme = this._findDefaultTheme(clientDarkMode ? ThemeMode.dark : ThemeMode.light);\n if (defaultTheme) {\n this.load(defaultTheme.options);\n }\n }\n }\n}\n","export var InteractorType;\n(function (InteractorType) {\n InteractorType[\"external\"] = \"external\";\n InteractorType[\"particles\"] = \"particles\";\n})(InteractorType || (InteractorType = {}));\n","import { InteractorType } from \"../../Enums/Types/InteractorType.js\";\nexport class InteractionManager {\n constructor(engine, container) {\n this.container = container;\n this._engine = engine;\n this._interactors = [];\n this._externalInteractors = [];\n this._particleInteractors = [];\n }\n externalInteract(delta) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.interact(delta);\n }\n }\n }\n handleClickMode(mode) {\n for (const interactor of this._externalInteractors) {\n interactor.handleClickMode?.(mode);\n }\n }\n async init() {\n this._interactors = await this._engine.getInteractors(this.container, true);\n this._externalInteractors = [];\n this._particleInteractors = [];\n for (const interactor of this._interactors) {\n switch (interactor.type) {\n case InteractorType.external:\n this._externalInteractors.push(interactor);\n break;\n case InteractorType.particles:\n this._particleInteractors.push(interactor);\n break;\n }\n interactor.init();\n }\n }\n particlesInteract(particle, delta) {\n for (const interactor of this._externalInteractors) {\n interactor.clear(particle, delta);\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.interact(particle, delta);\n }\n }\n }\n reset(particle) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.reset(particle);\n }\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.reset(particle);\n }\n }\n }\n}\n","export var ParticleOutType;\n(function (ParticleOutType) {\n ParticleOutType[\"normal\"] = \"normal\";\n ParticleOutType[\"inside\"] = \"inside\";\n ParticleOutType[\"outside\"] = \"outside\";\n})(ParticleOutType || (ParticleOutType = {}));\n","import { Vector, Vector3d } from \"./Utils/Vectors.js\";\nimport { calcExactPositionOrRandomFromSize, clamp, degToRad, getDistance, getParticleBaseVelocity, getParticleDirectionAngle, getRandom, getRangeValue, randomInRange, setRangeValue, } from \"../Utils/NumberUtils.js\";\nimport { decayOffset, defaultRadius, defaultRetryCount, double, errorPrefix, half, millisecondsToSeconds, minRetries, minZ, none, randomColorValue, rollFactor, squareExp, tryCountIncrement, } from \"./Utils/Constants.js\";\nimport { deepExtend, getPosition, initParticleNumericAnimationValue, isInArray, itemFromSingleOrMultiple, } from \"../Utils/Utils.js\";\nimport { getHslFromAnimation, rangeColorToRgb } from \"../Utils/ColorUtils.js\";\nimport { EventType } from \"../Enums/Types/EventType.js\";\nimport { Interactivity } from \"../Options/Classes/Interactivity/Interactivity.js\";\nimport { MoveDirection } from \"../Enums/Directions/MoveDirection.js\";\nimport { OutMode } from \"../Enums/Modes/OutMode.js\";\nimport { ParticleOutType } from \"../Enums/Types/ParticleOutType.js\";\nimport { PixelMode } from \"../Enums/Modes/PixelMode.js\";\nimport { alterHsl } from \"../Utils/CanvasUtils.js\";\nimport { loadParticlesOptions } from \"../Utils/OptionsUtils.js\";\nfunction loadEffectData(effect, effectOptions, id, reduceDuplicates) {\n const effectData = effectOptions.options[effect];\n if (!effectData) {\n return;\n }\n return deepExtend({\n close: effectOptions.close,\n fill: effectOptions.fill,\n }, itemFromSingleOrMultiple(effectData, id, reduceDuplicates));\n}\nfunction loadShapeData(shape, shapeOptions, id, reduceDuplicates) {\n const shapeData = shapeOptions.options[shape];\n if (!shapeData) {\n return;\n }\n return deepExtend({\n close: shapeOptions.close,\n fill: shapeOptions.fill,\n }, itemFromSingleOrMultiple(shapeData, id, reduceDuplicates));\n}\nfunction fixOutMode(data) {\n if (!isInArray(data.outMode, data.checkModes)) {\n return;\n }\n const diameter = data.radius * double;\n if (data.coord > data.maxCoord - diameter) {\n data.setCb(-data.radius);\n }\n else if (data.coord < diameter) {\n data.setCb(data.radius);\n }\n}\nexport class Particle {\n constructor(engine, container) {\n this.container = container;\n this._calcPosition = (container, position, zIndex, tryCount = defaultRetryCount) => {\n for (const plugin of container.plugins.values()) {\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: [OutMode.bounce],\n coord: pos.x,\n maxCoord: container.canvas.size.width,\n setCb: (value) => (pos.x += value),\n radius,\n });\n }, fixVertical = (outMode) => {\n fixOutMode({\n outMode,\n checkModes: [OutMode.bounce],\n coord: pos.y,\n maxCoord: container.canvas.size.height,\n setCb: (value) => (pos.y += value),\n radius,\n });\n };\n fixHorizontal(outModes.left ?? outModes.default);\n fixHorizontal(outModes.right ?? outModes.default);\n fixVertical(outModes.top ?? outModes.default);\n fixVertical(outModes.bottom ?? outModes.default);\n if (this._checkOverlap(pos, tryCount)) {\n return this._calcPosition(container, undefined, zIndex, tryCount + tryCountIncrement);\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 === MoveDirection.inside || moveOptions.direction === MoveDirection.outside) {\n return res;\n }\n const rad = degToRad(getRangeValue(moveOptions.angle.value)), radOffset = degToRad(getRangeValue(moveOptions.angle.offset)), range = {\n left: radOffset - rad * half,\n right: radOffset + rad * half,\n };\n if (!moveOptions.straight) {\n res.angle += randomInRange(setRangeValue(range.left, range.right));\n }\n if (moveOptions.random && typeof moveOptions.speed === \"number\") {\n res.length *= getRandom();\n }\n return res;\n };\n this._checkOverlap = (pos, tryCount = defaultRetryCount) => {\n const collisionsOptions = this.options.collisions, radius = this.getRadius();\n if (!collisionsOptions.enable) {\n return false;\n }\n const overlapOptions = collisionsOptions.overlap;\n if (overlapOptions.enable) {\n return false;\n }\n const retries = overlapOptions.retries;\n if (retries >= minRetries && tryCount > retries) {\n throw new Error(`${errorPrefix} particle is overlapping and can't be placed`);\n }\n return !!this.container.particles.find(particle => getDistance(pos, particle.position) < radius + particle.getRadius());\n };\n this._getRollColor = color => {\n if (!color || !this.roll || (!this.backColor && !this.roll.alter)) {\n return color;\n }\n const backFactor = this.roll.horizontal && this.roll.vertical ? double * rollFactor : rollFactor, backSum = this.roll.horizontal ? Math.PI * half : none, rolled = Math.floor(((this.roll.angle ?? none) + backSum) / (Math.PI / backFactor)) % double;\n if (!rolled) {\n return color;\n }\n if (this.backColor) {\n return this.backColor;\n }\n if (this.roll.alter) {\n return alterHsl(color, this.roll.alter.type, this.roll.alter.value);\n }\n return color;\n };\n this._initPosition = position => {\n const container = this.container, zIndexValue = getRangeValue(this.options.zIndex.value);\n this.position = this._calcPosition(container, position, clamp(zIndexValue, minZ, 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 ?? defaultRadius,\n mode: this.options.move.center.mode ?? PixelMode.percent,\n };\n this.direction = getParticleDirectionAngle(this.options.move.direction, this.position, this.moveCenter);\n switch (this.options.move.direction) {\n case MoveDirection.inside:\n this.outType = ParticleOutType.inside;\n break;\n case MoveDirection.outside:\n this.outType = ParticleOutType.outside;\n break;\n }\n this.offset = Vector.origin;\n };\n this._engine = engine;\n }\n destroy(override) {\n if (this.unbreakable || this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.bubble.inRange = false;\n this.slow.inRange = false;\n const container = this.container, pathGenerator = this.pathGenerator, shapeDrawer = container.shapeDrawers.get(this.shape);\n shapeDrawer?.particleDestroy?.(this);\n for (const plugin of container.plugins.values()) {\n plugin.particleDestroyed?.(this, override);\n }\n for (const updater of container.particles.updaters) {\n updater.particleDestroyed?.(this, override);\n }\n pathGenerator?.reset(this);\n this._engine.dispatchEvent(EventType.particleDestroyed, {\n container: this.container,\n data: {\n particle: this,\n },\n });\n }\n draw(delta) {\n const container = this.container, canvas = container.canvas;\n for (const plugin of container.plugins.values()) {\n canvas.drawParticlePlugin(plugin, this, delta);\n }\n canvas.drawParticle(this, delta);\n }\n getFillColor() {\n return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.color));\n }\n getMass() {\n return this.getRadius() ** squareExp * Math.PI * half;\n }\n getPosition() {\n return {\n x: this.position.x + this.offset.x,\n y: this.position.y + this.offset.y,\n z: this.position.z,\n };\n }\n getRadius() {\n return this.bubble.radius ?? this.size.value;\n }\n getStrokeColor() {\n return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.strokeColor));\n }\n init(id, position, overrideOptions, group) {\n const container = this.container, engine = this._engine;\n this.id = id;\n this.group = group;\n this.effectClose = true;\n this.effectFill = true;\n this.shapeClose = true;\n this.shapeFill = true;\n this.pathRotation = false;\n this.lastPathTime = 0;\n this.destroyed = false;\n this.unbreakable = false;\n this.isRotating = false;\n this.rotation = 0;\n this.misplaced = false;\n this.retina = {\n maxDistance: {},\n };\n this.outType = ParticleOutType.normal;\n this.ignoresResizeRatio = true;\n const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = loadParticlesOptions(this._engine, container, mainOptions.particles), { reduceDuplicates } = particlesOptions, effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type;\n this.effect = itemFromSingleOrMultiple(effectType, this.id, reduceDuplicates);\n this.shape = itemFromSingleOrMultiple(shapeType, this.id, reduceDuplicates);\n const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;\n if (overrideOptions) {\n if (overrideOptions.effect?.type) {\n const overrideEffectType = overrideOptions.effect.type, effect = itemFromSingleOrMultiple(overrideEffectType, this.id, reduceDuplicates);\n if (effect) {\n this.effect = effect;\n effectOptions.load(overrideOptions.effect);\n }\n }\n if (overrideOptions.shape?.type) {\n const overrideShapeType = overrideOptions.shape.type, shape = itemFromSingleOrMultiple(overrideShapeType, this.id, reduceDuplicates);\n if (shape) {\n this.shape = shape;\n shapeOptions.load(overrideOptions.shape);\n }\n }\n }\n if (this.effect === randomColorValue) {\n const availableEffects = [...this.container.effectDrawers.keys()];\n this.effect = availableEffects[Math.floor(getRandom() * availableEffects.length)];\n }\n if (this.shape === randomColorValue) {\n const availableShapes = [...this.container.shapeDrawers.keys()];\n this.shape = availableShapes[Math.floor(getRandom() * availableShapes.length)];\n }\n this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);\n this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);\n particlesOptions.load(overrideOptions);\n const effectData = this.effectData;\n if (effectData) {\n particlesOptions.load(effectData.particles);\n }\n const shapeData = this.shapeData;\n if (shapeData) {\n particlesOptions.load(shapeData.particles);\n }\n const interactivity = new Interactivity(engine, container);\n interactivity.load(container.actualOptions.interactivity);\n interactivity.load(particlesOptions.interactivity);\n this.interactivity = interactivity;\n this.effectFill = effectData?.fill ?? particlesOptions.effect.fill;\n this.effectClose = effectData?.close ?? particlesOptions.effect.close;\n this.shapeFill = shapeData?.fill ?? particlesOptions.shape.fill;\n this.shapeClose = shapeData?.close ?? particlesOptions.shape.close;\n this.options = particlesOptions;\n const pathOptions = this.options.move.path;\n this.pathDelay = getRangeValue(pathOptions.delay.value) * millisecondsToSeconds;\n if (pathOptions.generator) {\n this.pathGenerator = this._engine.getPathGenerator(pathOptions.generator);\n if (this.pathGenerator && container.addPath(pathOptions.generator, this.pathGenerator)) {\n this.pathGenerator.init(container);\n }\n }\n container.retina.initParticle(this);\n this.size = initParticleNumericAnimationValue(this.options.size, pxRatio);\n this.bubble = {\n inRange: false,\n };\n this.slow = {\n inRange: false,\n factor: 1,\n };\n this._initPosition(position);\n this.initialVelocity = this._calculateVelocity();\n this.velocity = this.initialVelocity.copy();\n this.moveDecay = decayOffset - getRangeValue(this.options.move.decay);\n const particles = container.particles;\n particles.setLastZIndex(this.position.z);\n this.zIndexFactor = this.position.z / container.zLayers;\n this.sides = 24;\n let effectDrawer = container.effectDrawers.get(this.effect);\n if (!effectDrawer) {\n effectDrawer = this._engine.getEffectDrawer(this.effect);\n if (effectDrawer) {\n container.effectDrawers.set(this.effect, effectDrawer);\n }\n }\n if (effectDrawer?.loadEffect) {\n effectDrawer.loadEffect(this);\n }\n let shapeDrawer = container.shapeDrawers.get(this.shape);\n if (!shapeDrawer) {\n shapeDrawer = this._engine.getShapeDrawer(this.shape);\n if (shapeDrawer) {\n container.shapeDrawers.set(this.shape, shapeDrawer);\n }\n }\n if (shapeDrawer?.loadShape) {\n shapeDrawer.loadShape(this);\n }\n const sideCountFunc = shapeDrawer?.getSidesCount;\n if (sideCountFunc) {\n this.sides = sideCountFunc(this);\n }\n this.spawning = false;\n this.shadowColor = rangeColorToRgb(this._engine, this.options.shadow.color);\n for (const updater of particles.updaters) {\n updater.init(this);\n }\n for (const mover of particles.movers) {\n mover.init?.(this);\n }\n effectDrawer?.particleInit?.(container, this);\n shapeDrawer?.particleInit?.(container, this);\n for (const plugin of container.plugins.values()) {\n plugin.particleCreated?.(this);\n }\n }\n isInsideCanvas() {\n const radius = this.getRadius(), canvasSize = this.container.canvas.size, position = this.position;\n return (position.x >= -radius &&\n position.y >= -radius &&\n position.y <= canvasSize.height + radius &&\n position.x <= canvasSize.width + radius);\n }\n isVisible() {\n return !this.destroyed && !this.spawning && this.isInsideCanvas();\n }\n reset() {\n for (const updater of this.container.particles.updaters) {\n updater.reset?.(this);\n }\n }\n}\n","export class Point {\n constructor(position, particle) {\n this.position = position;\n this.particle = particle;\n }\n}\n","export var RangeType;\n(function (RangeType) {\n RangeType[\"circle\"] = \"circle\";\n RangeType[\"rectangle\"] = \"rectangle\";\n})(RangeType || (RangeType = {}));\n","import { RangeType } from \"../../Types/RangeType.js\";\nimport { getDistance } from \"../../Utils/NumberUtils.js\";\nimport { squareExp } from \"./Constants.js\";\nexport class BaseRange {\n constructor(x, y, type) {\n this.position = {\n x: x,\n y: y,\n };\n this.type = type;\n }\n}\nexport class Circle extends BaseRange {\n constructor(x, y, radius) {\n super(x, y, RangeType.circle);\n this.radius = radius;\n }\n contains(point) {\n return getDistance(point, this.position) <= this.radius;\n }\n intersects(range) {\n const pos1 = this.position, pos2 = range.position, distPos = { x: Math.abs(pos2.x - pos1.x), y: Math.abs(pos2.y - pos1.y) }, r = this.radius;\n if (range instanceof Circle || range.type === RangeType.circle) {\n const circleRange = range, rSum = r + circleRange.radius, dist = Math.sqrt(distPos.x ** squareExp + distPos.y ** squareExp);\n return rSum > dist;\n }\n else if (range instanceof Rectangle || range.type === RangeType.rectangle) {\n const rectRange = range, { width, height } = rectRange.size, edges = Math.pow(distPos.x - width, squareExp) + Math.pow(distPos.y - height, squareExp);\n return (edges <= r ** squareExp ||\n (distPos.x <= r + width && distPos.y <= r + height) ||\n distPos.x <= width ||\n distPos.y <= height);\n }\n return false;\n }\n}\nexport class Rectangle extends BaseRange {\n constructor(x, y, width, height) {\n super(x, y, RangeType.rectangle);\n this.size = {\n height: height,\n width: width,\n };\n }\n contains(point) {\n const w = this.size.width, h = this.size.height, pos = this.position;\n return point.x >= pos.x && point.x <= pos.x + w && point.y >= pos.y && point.y <= pos.y + h;\n }\n intersects(range) {\n if (range instanceof Circle) {\n return range.intersects(this);\n }\n const w = this.size.width, h = this.size.height, pos1 = this.position, pos2 = range.position, size2 = range instanceof Rectangle ? range.size : { width: 0, height: 0 }, w2 = size2.width, h2 = size2.height;\n return pos2.x < pos1.x + w && pos2.x + w2 > pos1.x && pos2.y < pos1.y + h && pos2.y + h2 > pos1.y;\n }\n}\n","import { Circle, Rectangle } from \"./Ranges.js\";\nimport { double, half, subdivideCount } from \"./Constants.js\";\nimport { getDistance } from \"../../Utils/NumberUtils.js\";\nexport class QuadTree {\n constructor(rectangle, capacity) {\n this.rectangle = rectangle;\n this.capacity = capacity;\n this._subdivide = () => {\n const { x, y } = this.rectangle.position, { width, height } = this.rectangle.size, { capacity } = this;\n for (let i = 0; i < subdivideCount; i++) {\n const fixedIndex = i % double;\n this._subs.push(new QuadTree(new Rectangle(x + width * half * fixedIndex, y + height * half * (Math.round(i * half) - fixedIndex), width * half, height * half), capacity));\n }\n this._divided = true;\n };\n this._points = [];\n this._divided = false;\n this._subs = [];\n }\n insert(point) {\n if (!this.rectangle.contains(point.position)) {\n return false;\n }\n if (this._points.length < this.capacity) {\n this._points.push(point);\n return true;\n }\n if (!this._divided) {\n this._subdivide();\n }\n return this._subs.some(sub => sub.insert(point));\n }\n query(range, check) {\n const res = [];\n if (!range.intersects(this.rectangle)) {\n return [];\n }\n for (const p of this._points) {\n if (!range.contains(p.position) &&\n getDistance(range.position, p.position) > p.particle.getRadius() &&\n (!check || check(p.particle))) {\n continue;\n }\n res.push(p.particle);\n }\n if (this._divided) {\n for (const sub of this._subs) {\n res.push(...sub.query(range, check));\n }\n }\n return res;\n }\n queryCircle(position, radius, check) {\n return this.query(new Circle(position.x, position.y, radius), check);\n }\n queryRectangle(position, size, check) {\n return this.query(new Rectangle(position.x, position.y, size.width, size.height), check);\n }\n}\n","import { countOffset, defaultDensityFactor, defaultRemoveQuantity, deleteCount, errorPrefix, lengthOffset, minCount, minIndex, minLimit, posOffset, qTreeCapacity, sizeFactor, squareExp, } from \"./Utils/Constants.js\";\nimport { getLogger, getPosition } from \"../Utils/Utils.js\";\nimport { EventType } from \"../Enums/Types/EventType.js\";\nimport { InteractionManager } from \"./Utils/InteractionManager.js\";\nimport { LimitMode } from \"../Enums/Modes/LimitMode.js\";\nimport { Particle } from \"./Particle.js\";\nimport { Point } from \"./Utils/Point.js\";\nimport { QuadTree } from \"./Utils/QuadTree.js\";\nimport { Rectangle } from \"./Utils/Ranges.js\";\nconst qTreeRectangle = (canvasSize) => {\n const { height, width } = canvasSize;\n return new Rectangle(posOffset * width, posOffset * height, sizeFactor * width, sizeFactor * height);\n};\nexport class Particles {\n constructor(engine, container) {\n this._addToPool = (...particles) => {\n this._pool.push(...particles);\n };\n this._applyDensity = (options, manualCount, group, groupOptions) => {\n const numberOptions = options.number;\n if (!options.number.density?.enable) {\n if (group === undefined) {\n this._limit = numberOptions.limit.value;\n }\n else if (groupOptions?.number.limit?.value ?? numberOptions.limit.value) {\n this._groupLimits.set(group, groupOptions?.number.limit?.value ?? numberOptions.limit.value);\n }\n return;\n }\n const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter(t => t.group === group).length);\n if (group === undefined) {\n this._limit = numberOptions.limit.value * densityFactor;\n }\n else {\n this._groupLimits.set(group, numberOptions.limit.value * densityFactor);\n }\n if (particlesCount < particlesNumber) {\n this.push(Math.abs(particlesNumber - particlesCount), undefined, options, group);\n }\n else if (particlesCount > particlesNumber) {\n this.removeQuantity(particlesCount - particlesNumber, group);\n }\n };\n this._initDensityFactor = densityOptions => {\n const container = this._container;\n if (!container.canvas.element || !densityOptions.enable) {\n return defaultDensityFactor;\n }\n const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;\n return (canvas.width * canvas.height) / (densityOptions.height * densityOptions.width * pxRatio ** squareExp);\n };\n this._pushParticle = (position, overrideOptions, group, initializer) => {\n try {\n let particle = this._pool.pop();\n if (!particle) {\n particle = new Particle(this._engine, this._container);\n }\n particle.init(this._nextId, position, overrideOptions, group);\n let canAdd = true;\n if (initializer) {\n canAdd = initializer(particle);\n }\n if (!canAdd) {\n return;\n }\n this._array.push(particle);\n this._zArray.push(particle);\n this._nextId++;\n this._engine.dispatchEvent(EventType.particleAdded, {\n container: this._container,\n data: {\n particle,\n },\n });\n return particle;\n }\n catch (e) {\n getLogger().warning(`${errorPrefix} adding particle: ${e}`);\n }\n };\n this._removeParticle = (index, group, override) => {\n const particle = this._array[index];\n if (!particle || particle.group !== group) {\n return false;\n }\n const zIdx = this._zArray.indexOf(particle);\n this._array.splice(index, deleteCount);\n this._zArray.splice(zIdx, deleteCount);\n particle.destroy(override);\n this._engine.dispatchEvent(EventType.particleRemoved, {\n container: this._container,\n data: {\n particle,\n },\n });\n this._addToPool(particle);\n return true;\n };\n this._engine = engine;\n this._container = container;\n this._nextId = 0;\n this._array = [];\n this._zArray = [];\n this._pool = [];\n this._limit = 0;\n this._groupLimits = new Map();\n this._needsSort = false;\n this._lastZIndex = 0;\n this._interactionManager = new InteractionManager(engine, container);\n this._pluginsInitialized = false;\n const canvasSize = container.canvas.size;\n this.quadTree = new QuadTree(qTreeRectangle(canvasSize), qTreeCapacity);\n this.movers = [];\n this.updaters = [];\n }\n get count() {\n return this._array.length;\n }\n addManualParticles() {\n const container = this._container, options = container.actualOptions;\n options.manualParticles.forEach(p => this.addParticle(p.position ? getPosition(p.position, container.canvas.size) : undefined, p.options));\n }\n addParticle(position, overrideOptions, group, initializer) {\n const limitMode = this._container.actualOptions.particles.number.limit.mode, limit = group === undefined ? this._limit : (this._groupLimits.get(group) ?? this._limit), currentCount = this.count;\n if (limit > minLimit) {\n switch (limitMode) {\n case LimitMode.delete: {\n const countToRemove = currentCount + countOffset - limit;\n if (countToRemove > minCount) {\n this.removeQuantity(countToRemove);\n }\n break;\n }\n case LimitMode.wait:\n if (currentCount >= limit) {\n return;\n }\n break;\n }\n }\n return this._pushParticle(position, overrideOptions, group, initializer);\n }\n clear() {\n this._array = [];\n this._zArray = [];\n this._pluginsInitialized = false;\n }\n destroy() {\n this._array = [];\n this._zArray = [];\n this.movers = [];\n this.updaters = [];\n }\n draw(delta) {\n const container = this._container, canvas = container.canvas;\n canvas.clear();\n this.update(delta);\n for (const plugin of container.plugins.values()) {\n canvas.drawPlugin(plugin, delta);\n }\n for (const p of this._zArray) {\n p.draw(delta);\n }\n }\n filter(condition) {\n return this._array.filter(condition);\n }\n find(condition) {\n return this._array.find(condition);\n }\n get(index) {\n return this._array[index];\n }\n handleClickMode(mode) {\n this._interactionManager.handleClickMode(mode);\n }\n async init() {\n const container = this._container, options = container.actualOptions;\n this._lastZIndex = 0;\n this._needsSort = false;\n await this.initPlugins();\n let handled = false;\n for (const plugin of container.plugins.values()) {\n handled = plugin.particlesInitialization?.() ?? handled;\n if (handled) {\n break;\n }\n }\n this.addManualParticles();\n if (!handled) {\n const particlesOptions = options.particles, groups = particlesOptions.groups;\n for (const group in groups) {\n const groupOptions = groups[group];\n for (let i = this.count, j = 0; j < groupOptions.number?.value && i < particlesOptions.number.value; i++, j++) {\n this.addParticle(undefined, groupOptions, group);\n }\n }\n for (let i = this.count; i < particlesOptions.number.value; i++) {\n this.addParticle();\n }\n }\n }\n async initPlugins() {\n if (this._pluginsInitialized) {\n return;\n }\n const container = this._container;\n this.movers = await this._engine.getMovers(container, true);\n this.updaters = await this._engine.getUpdaters(container, true);\n await this._interactionManager.init();\n for (const pathGenerator of container.pathGenerators.values()) {\n pathGenerator.init(container);\n }\n }\n push(nb, mouse, overrideOptions, group) {\n for (let i = 0; i < nb; i++) {\n this.addParticle(mouse?.position, overrideOptions, group);\n }\n }\n async redraw() {\n this.clear();\n await this.init();\n this.draw({ value: 0, factor: 0 });\n }\n remove(particle, group, override) {\n this.removeAt(this._array.indexOf(particle), undefined, group, override);\n }\n removeAt(index, quantity = defaultRemoveQuantity, group, override) {\n if (index < minIndex || index > this.count) {\n return;\n }\n let deleted = 0;\n for (let i = index; deleted < quantity && i < this.count; i++) {\n if (this._removeParticle(i, group, override)) {\n i--;\n deleted++;\n }\n }\n }\n removeQuantity(quantity, group) {\n this.removeAt(minIndex, quantity, group);\n }\n setDensity() {\n const options = this._container.actualOptions, groups = options.particles.groups, manualCount = options.manualParticles.length;\n for (const group in groups) {\n this._applyDensity(groups[group], manualCount, group);\n }\n this._applyDensity(options.particles, manualCount);\n }\n setLastZIndex(zIndex) {\n this._lastZIndex = zIndex;\n this._needsSort = this._needsSort || this._lastZIndex < zIndex;\n }\n setResizeFactor(factor) {\n this._resizeFactor = factor;\n }\n update(delta) {\n const container = this._container, particlesToDelete = new Set();\n this.quadTree = new QuadTree(qTreeRectangle(container.canvas.size), qTreeCapacity);\n for (const pathGenerator of container.pathGenerators.values()) {\n pathGenerator.update();\n }\n for (const plugin of container.plugins.values()) {\n plugin.update?.(delta);\n }\n const resizeFactor = this._resizeFactor;\n for (const particle of this._array) {\n if (resizeFactor && !particle.ignoresResizeRatio) {\n particle.position.x *= resizeFactor.width;\n particle.position.y *= resizeFactor.height;\n particle.initialPosition.x *= resizeFactor.width;\n particle.initialPosition.y *= resizeFactor.height;\n }\n particle.ignoresResizeRatio = false;\n this._interactionManager.reset(particle);\n for (const plugin of this._container.plugins.values()) {\n if (particle.destroyed) {\n break;\n }\n plugin.particleUpdate?.(particle, delta);\n }\n for (const mover of this.movers) {\n if (mover.isEnabled(particle)) {\n mover.move(particle, delta);\n }\n }\n if (particle.destroyed) {\n particlesToDelete.add(particle);\n continue;\n }\n this.quadTree.insert(new Point(particle.getPosition(), particle));\n }\n if (particlesToDelete.size) {\n const checkDelete = (p) => !particlesToDelete.has(p);\n this._array = this.filter(checkDelete);\n this._zArray = this._zArray.filter(checkDelete);\n for (const particle of particlesToDelete) {\n this._engine.dispatchEvent(EventType.particleRemoved, {\n container: this._container,\n data: {\n particle,\n },\n });\n }\n this._addToPool(...particlesToDelete);\n }\n this._interactionManager.externalInteract(delta);\n for (const particle of this._array) {\n for (const updater of this.updaters) {\n updater.update(particle, delta);\n }\n if (!particle.destroyed && !particle.spawning) {\n this._interactionManager.particlesInteract(particle, delta);\n }\n }\n delete this._resizeFactor;\n if (this._needsSort) {\n const zArray = this._zArray;\n zArray.sort((a, b) => b.position.z - a.position.z || a.id - b.id);\n this._lastZIndex = zArray[zArray.length - lengthOffset].position.z;\n this._needsSort = false;\n }\n }\n}\n","import { defaultRatio, defaultReduceFactor } from \"./Utils/Constants.js\";\nimport { getRangeValue } from \"../Utils/NumberUtils.js\";\nimport { isSsr } from \"../Utils/Utils.js\";\nexport class Retina {\n constructor(container) {\n this.container = container;\n this.pixelRatio = defaultRatio;\n this.reduceFactor = defaultReduceFactor;\n }\n init() {\n const container = this.container, options = container.actualOptions;\n this.pixelRatio = !options.detectRetina || isSsr() ? defaultRatio : devicePixelRatio;\n this.reduceFactor = defaultReduceFactor;\n const ratio = this.pixelRatio, canvas = container.canvas;\n if (canvas.element) {\n const element = canvas.element;\n canvas.size.width = element.offsetWidth * ratio;\n canvas.size.height = element.offsetHeight * ratio;\n }\n const particles = options.particles, moveOptions = particles.move;\n this.maxSpeed = getRangeValue(moveOptions.gravity.maxSpeed) * ratio;\n this.sizeAnimationSpeed = getRangeValue(particles.size.animation.speed) * ratio;\n }\n initParticle(particle) {\n const options = particle.options, ratio = this.pixelRatio, moveOptions = options.move, moveDistance = moveOptions.distance, props = particle.retina;\n props.moveDrift = getRangeValue(moveOptions.drift) * ratio;\n props.moveSpeed = getRangeValue(moveOptions.speed) * ratio;\n props.sizeAnimationSpeed = getRangeValue(options.size.animation.speed) * ratio;\n const maxDistance = props.maxDistance;\n maxDistance.horizontal = moveDistance.horizontal !== undefined ? moveDistance.horizontal * ratio : undefined;\n maxDistance.vertical = moveDistance.vertical !== undefined ? moveDistance.vertical * ratio : undefined;\n props.maxSpeed = getRangeValue(moveOptions.gravity.maxSpeed) * ratio;\n }\n}\n","import { animate, cancelAnimation, getRangeValue } from \"../Utils/NumberUtils.js\";\nimport { clickRadius, defaultFps, defaultFpsLimit, errorPrefix, millisecondsToSeconds, minCoordinate, minFpsLimit, removeDeleteCount, removeMinIndex, touchEndLengthOffset, } from \"./Utils/Constants.js\";\nimport { getLogger, safeIntersectionObserver } from \"../Utils/Utils.js\";\nimport { Canvas } from \"./Canvas.js\";\nimport { EventListeners } from \"./Utils/EventListeners.js\";\nimport { EventType } from \"../Enums/Types/EventType.js\";\nimport { Options } from \"../Options/Classes/Options.js\";\nimport { Particles } from \"./Particles.js\";\nimport { Retina } from \"./Retina.js\";\nimport { loadOptions } from \"../Utils/OptionsUtils.js\";\nfunction guardCheck(container) {\n return container && !container.destroyed;\n}\nfunction initDelta(value, fpsLimit = defaultFps, smooth = false) {\n return {\n value,\n factor: smooth ? defaultFps / fpsLimit : (defaultFps * value) / millisecondsToSeconds,\n };\n}\nfunction loadContainerOptions(engine, container, ...sourceOptionsArr) {\n const options = new Options(engine, container);\n loadOptions(options, ...sourceOptionsArr);\n return options;\n}\nexport class Container {\n constructor(engine, id, sourceOptions) {\n this._intersectionManager = entries => {\n if (!guardCheck(this) || !this.actualOptions.pauseOnOutsideViewport) {\n return;\n }\n for (const entry of entries) {\n if (entry.target !== this.interactivity.element) {\n continue;\n }\n if (entry.isIntersecting) {\n void this.play();\n }\n else {\n this.pause();\n }\n }\n };\n this._nextFrame = (timestamp) => {\n try {\n if (!this._smooth &&\n this._lastFrameTime !== undefined &&\n timestamp < this._lastFrameTime + millisecondsToSeconds / this.fpsLimit) {\n this.draw(false);\n return;\n }\n this._lastFrameTime ??= timestamp;\n const delta = initDelta(timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);\n this.addLifeTime(delta.value);\n this._lastFrameTime = timestamp;\n if (delta.value > millisecondsToSeconds) {\n this.draw(false);\n return;\n }\n this.particles.draw(delta);\n if (!this.alive()) {\n this.destroy();\n return;\n }\n if (this.animationStatus) {\n this.draw(false);\n }\n }\n catch (e) {\n getLogger().error(`${errorPrefix} in animation loop`, e);\n }\n };\n this._engine = engine;\n this.id = Symbol(id);\n this.fpsLimit = 120;\n this._smooth = false;\n this._delay = 0;\n this._duration = 0;\n this._lifeTime = 0;\n this._firstStart = true;\n this.started = false;\n this.destroyed = false;\n this._paused = true;\n this._lastFrameTime = 0;\n this.zLayers = 100;\n this.pageHidden = false;\n this._clickHandlers = new Map();\n this._sourceOptions = sourceOptions;\n this._initialSourceOptions = sourceOptions;\n this.retina = new Retina(this);\n this.canvas = new Canvas(this, this._engine);\n this.particles = new Particles(this._engine, this);\n this.pathGenerators = new Map();\n this.interactivity = {\n mouse: {\n clicking: false,\n inside: false,\n },\n };\n this.plugins = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this);\n this._eventListeners = new EventListeners(this);\n this._intersectionObserver = safeIntersectionObserver(entries => this._intersectionManager(entries));\n this._engine.dispatchEvent(EventType.containerBuilt, { container: this });\n }\n get animationStatus() {\n return !this._paused && !this.pageHidden && guardCheck(this);\n }\n get options() {\n return this._options;\n }\n get sourceOptions() {\n return this._sourceOptions;\n }\n addClickHandler(callback) {\n if (!guardCheck(this)) {\n return;\n }\n const el = this.interactivity.element;\n if (!el) {\n return;\n }\n const clickOrTouchHandler = (e, pos, radius) => {\n if (!guardCheck(this)) {\n return;\n }\n const pxRatio = this.retina.pixelRatio, posRetina = {\n x: pos.x * pxRatio,\n y: pos.y * pxRatio,\n }, particles = this.particles.quadTree.queryCircle(posRetina, radius * pxRatio);\n callback(e, particles);\n }, 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, clickRadius);\n }, touchStartHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = true;\n touchMoved = false;\n }, touchMoveHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touchMoved = true;\n }, 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 - touchEndLengthOffset];\n if (!lastTouch) {\n lastTouch = touchEvent.changedTouches[touchEvent.changedTouches.length - touchEndLengthOffset];\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 : minCoordinate),\n y: lastTouch.clientY - (canvasRect ? canvasRect.top : minCoordinate),\n };\n clickOrTouchHandler(e, pos, Math.max(lastTouch.radiusX, lastTouch.radiusY));\n }\n touched = false;\n touchMoved = false;\n }, touchCancelHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = false;\n touchMoved = false;\n };\n let touched = false, touchMoved = false;\n this._clickHandlers.set(\"click\", clickHandler);\n this._clickHandlers.set(\"touchstart\", touchStartHandler);\n this._clickHandlers.set(\"touchmove\", touchMoveHandler);\n this._clickHandlers.set(\"touchend\", touchEndHandler);\n this._clickHandlers.set(\"touchcancel\", touchCancelHandler);\n for (const [key, handler] of this._clickHandlers) {\n el.addEventListener(key, handler);\n }\n }\n addLifeTime(value) {\n this._lifeTime += value;\n }\n addPath(key, generator, override = false) {\n if (!guardCheck(this) || (!override && this.pathGenerators.has(key))) {\n return false;\n }\n this.pathGenerators.set(key, generator);\n return true;\n }\n alive() {\n return !this._duration || this._lifeTime <= this._duration;\n }\n clearClickHandlers() {\n if (!guardCheck(this)) {\n return;\n }\n for (const [key, handler] of this._clickHandlers) {\n this.interactivity.element?.removeEventListener(key, handler);\n }\n this._clickHandlers.clear();\n }\n destroy(remove = true) {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n this.clearClickHandlers();\n this.particles.destroy();\n this.canvas.destroy();\n for (const effectDrawer of this.effectDrawers.values()) {\n effectDrawer.destroy?.(this);\n }\n for (const shapeDrawer of this.shapeDrawers.values()) {\n shapeDrawer.destroy?.(this);\n }\n for (const key of this.effectDrawers.keys()) {\n this.effectDrawers.delete(key);\n }\n for (const key of this.shapeDrawers.keys()) {\n this.shapeDrawers.delete(key);\n }\n this._engine.clearPlugins(this);\n this.destroyed = true;\n if (remove) {\n const mainArr = this._engine.items, idx = mainArr.findIndex(t => t === this);\n if (idx >= removeMinIndex) {\n mainArr.splice(idx, removeDeleteCount);\n }\n }\n this._engine.dispatchEvent(EventType.containerDestroyed, { container: this });\n }\n draw(force) {\n if (!guardCheck(this)) {\n return;\n }\n let refreshTime = force;\n const frame = (timestamp) => {\n if (refreshTime) {\n this._lastFrameTime = undefined;\n refreshTime = false;\n }\n this._nextFrame(timestamp);\n };\n this._drawAnimationFrame = animate(timestamp => frame(timestamp));\n }\n async export(type, options = {}) {\n for (const plugin of this.plugins.values()) {\n if (!plugin.export) {\n continue;\n }\n const res = await plugin.export(type, options);\n if (!res.supported) {\n continue;\n }\n return res.blob;\n }\n getLogger().error(`${errorPrefix} - Export plugin with type ${type} not found`);\n }\n handleClickMode(mode) {\n if (!guardCheck(this)) {\n return;\n }\n this.particles.handleClickMode(mode);\n for (const plugin of this.plugins.values()) {\n plugin.handleClickMode?.(mode);\n }\n }\n async init() {\n if (!guardCheck(this)) {\n return;\n }\n const effects = this._engine.getSupportedEffects();\n for (const type of effects) {\n const drawer = this._engine.getEffectDrawer(type);\n if (drawer) {\n this.effectDrawers.set(type, drawer);\n }\n }\n const shapes = this._engine.getSupportedShapes();\n for (const type of shapes) {\n const drawer = this._engine.getShapeDrawer(type);\n if (drawer) {\n this.shapeDrawers.set(type, drawer);\n }\n }\n await this.particles.initPlugins();\n this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n const availablePlugins = await this._engine.getAvailablePlugins(this);\n for (const [id, plugin] of availablePlugins) {\n this.plugins.set(id, plugin);\n }\n this.retina.init();\n await this.canvas.init();\n this.updateActualOptions();\n this.canvas.initBackground();\n this.canvas.resize();\n const { zLayers, duration, delay, fpsLimit, smooth } = this.actualOptions;\n this.zLayers = zLayers;\n this._duration = getRangeValue(duration) * millisecondsToSeconds;\n this._delay = getRangeValue(delay) * millisecondsToSeconds;\n this._lifeTime = 0;\n this.fpsLimit = fpsLimit > minFpsLimit ? fpsLimit : defaultFpsLimit;\n this._smooth = smooth;\n for (const drawer of this.effectDrawers.values()) {\n await drawer.init?.(this);\n }\n for (const drawer of this.shapeDrawers.values()) {\n await drawer.init?.(this);\n }\n for (const plugin of this.plugins.values()) {\n await plugin.init?.();\n }\n this._engine.dispatchEvent(EventType.containerInit, { container: this });\n await this.particles.init();\n this.particles.setDensity();\n for (const plugin of this.plugins.values()) {\n plugin.particlesSetup?.();\n }\n this._engine.dispatchEvent(EventType.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 cancelAnimation(this._drawAnimationFrame);\n delete this._drawAnimationFrame;\n }\n if (this._paused) {\n return;\n }\n for (const plugin of this.plugins.values()) {\n plugin.pause?.();\n }\n if (!this.pageHidden) {\n this._paused = true;\n }\n this._engine.dispatchEvent(EventType.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.values()) {\n if (plugin.play) {\n plugin.play();\n }\n }\n }\n this._engine.dispatchEvent(EventType.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(sourceOptions) {\n if (!guardCheck(this)) {\n return;\n }\n this._initialSourceOptions = sourceOptions;\n this._sourceOptions = sourceOptions;\n this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n return this.refresh();\n }\n async start() {\n if (!guardCheck(this) || this.started) {\n return;\n }\n await this.init();\n this.started = true;\n await new Promise(resolve => {\n const start = async () => {\n this._eventListeners.addListeners();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.observe(this.interactivity.element);\n }\n for (const plugin of this.plugins.values()) {\n await plugin.start?.();\n }\n this._engine.dispatchEvent(EventType.containerStarted, { container: this });\n this.play();\n resolve();\n };\n this._delayTimeout = setTimeout(() => void start(), this._delay);\n });\n }\n stop() {\n if (!guardCheck(this) || !this.started) {\n return;\n }\n if (this._delayTimeout) {\n clearTimeout(this._delayTimeout);\n delete this._delayTimeout;\n }\n this._firstStart = true;\n this.started = false;\n this._eventListeners.removeListeners();\n this.pause();\n this.particles.clear();\n this.canvas.stop();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.unobserve(this.interactivity.element);\n }\n for (const plugin of this.plugins.values()) {\n plugin.stop?.();\n }\n for (const key of this.plugins.keys()) {\n this.plugins.delete(key);\n }\n this._sourceOptions = this._options;\n this._engine.dispatchEvent(EventType.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","import { deleteCount, minIndex } from \"../Core/Utils/Constants.js\";\nexport class EventDispatcher {\n constructor() {\n this._listeners = new Map();\n }\n addEventListener(type, listener) {\n this.removeEventListener(type, listener);\n let arr = this._listeners.get(type);\n if (!arr) {\n arr = [];\n this._listeners.set(type, arr);\n }\n arr.push(listener);\n }\n dispatchEvent(type, args) {\n const listeners = this._listeners.get(type);\n listeners?.forEach(handler => handler(args));\n }\n hasEventListener(type) {\n return !!this._listeners.get(type);\n }\n removeAllEventListeners(type) {\n if (!type) {\n this._listeners = new Map();\n }\n else {\n this._listeners.delete(type);\n }\n }\n removeEventListener(type, listener) {\n const arr = this._listeners.get(type);\n if (!arr) {\n return;\n }\n const length = arr.length, idx = arr.indexOf(listener);\n if (idx < minIndex) {\n return;\n }\n if (length === deleteCount) {\n this._listeners.delete(type);\n }\n else {\n arr.splice(idx, deleteCount);\n }\n }\n}\n","import { canvasFirstIndex, canvasTag, errorPrefix, generatedAttribute, generatedFalse, generatedTrue, loadMinIndex, loadRandomFactor, none, one, removeDeleteCount, } from \"./Utils/Constants.js\";\nimport { executeOnSingleOrMultiple, getLogger, itemFromSingleOrMultiple } from \"../Utils/Utils.js\";\nimport { Container } from \"./Container.js\";\nimport { EventDispatcher } from \"../Utils/EventDispatcher.js\";\nimport { EventType } from \"../Enums/Types/EventType.js\";\nimport { getRandom } from \"../Utils/NumberUtils.js\";\nasync function getItemsFromInitializer(container, map, initializers, force = false) {\n let res = map.get(container);\n if (!res || force) {\n res = await Promise.all([...initializers.values()].map(t => t(container)));\n map.set(container, res);\n }\n return res;\n}\nasync function getDataFromUrl(data) {\n const url = itemFromSingleOrMultiple(data.url, data.index);\n if (!url) {\n return data.fallback;\n }\n const response = await fetch(url);\n if (response.ok) {\n return (await response.json());\n }\n getLogger().error(`${errorPrefix} ${response.status} while retrieving config file`);\n return data.fallback;\n}\nconst getCanvasFromContainer = (domContainer) => {\n let canvasEl;\n if (domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag) {\n canvasEl = domContainer;\n if (!canvasEl.dataset[generatedAttribute]) {\n canvasEl.dataset[generatedAttribute] = generatedFalse;\n }\n }\n else {\n const existingCanvases = domContainer.getElementsByTagName(canvasTag);\n if (existingCanvases.length) {\n canvasEl = existingCanvases[canvasFirstIndex];\n canvasEl.dataset[generatedAttribute] = generatedFalse;\n }\n else {\n canvasEl = document.createElement(canvasTag);\n canvasEl.dataset[generatedAttribute] = generatedTrue;\n domContainer.appendChild(canvasEl);\n }\n }\n const fullPercent = \"100%\";\n if (!canvasEl.style.width) {\n canvasEl.style.width = fullPercent;\n }\n if (!canvasEl.style.height) {\n canvasEl.style.height = fullPercent;\n }\n return canvasEl;\n}, getDomContainer = (id, source) => {\n let domContainer = source ?? document.getElementById(id);\n if (domContainer) {\n return domContainer;\n }\n domContainer = document.createElement(\"div\");\n domContainer.id = id;\n domContainer.dataset[generatedAttribute] = generatedTrue;\n document.body.append(domContainer);\n return domContainer;\n};\nexport class Engine {\n constructor() {\n this._configs = new Map();\n this._domArray = [];\n this._eventDispatcher = new EventDispatcher();\n this._initialized = false;\n this.plugins = [];\n this.colorManagers = new Map();\n this.easingFunctions = new Map();\n this._initializers = {\n interactors: new Map(),\n movers: new Map(),\n updaters: new Map(),\n };\n this.interactors = new Map();\n this.movers = new Map();\n this.updaters = new Map();\n this.presets = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this.pathGenerators = new Map();\n }\n get configs() {\n const res = {};\n for (const [name, config] of this._configs) {\n res[name] = config;\n }\n return res;\n }\n get items() {\n return this._domArray;\n }\n get version() {\n return \"3.9.1\";\n }\n async addColorManager(manager, refresh = true) {\n this.colorManagers.set(manager.key, manager);\n await this.refresh(refresh);\n }\n addConfig(config) {\n const key = config.key ?? config.name ?? \"default\";\n this._configs.set(key, config);\n this._eventDispatcher.dispatchEvent(EventType.configAdded, { data: { name: key, config } });\n }\n async addEasing(name, easing, refresh = true) {\n if (this.getEasing(name)) {\n return;\n }\n this.easingFunctions.set(name, easing);\n await this.refresh(refresh);\n }\n async addEffect(effect, drawer, refresh = true) {\n executeOnSingleOrMultiple(effect, type => {\n if (!this.getEffectDrawer(type)) {\n this.effectDrawers.set(type, drawer);\n }\n });\n await this.refresh(refresh);\n }\n addEventListener(type, listener) {\n this._eventDispatcher.addEventListener(type, listener);\n }\n async addInteractor(name, interactorInitializer, refresh = true) {\n this._initializers.interactors.set(name, interactorInitializer);\n await this.refresh(refresh);\n }\n async addMover(name, moverInitializer, refresh = true) {\n this._initializers.movers.set(name, moverInitializer);\n await this.refresh(refresh);\n }\n async addParticleUpdater(name, updaterInitializer, refresh = true) {\n this._initializers.updaters.set(name, updaterInitializer);\n await this.refresh(refresh);\n }\n async addPathGenerator(name, generator, refresh = true) {\n if (!this.getPathGenerator(name)) {\n this.pathGenerators.set(name, generator);\n }\n await this.refresh(refresh);\n }\n async addPlugin(plugin, refresh = true) {\n if (!this.getPlugin(plugin.id)) {\n this.plugins.push(plugin);\n }\n await this.refresh(refresh);\n }\n async addPreset(preset, options, override = false, refresh = true) {\n if (override || !this.getPreset(preset)) {\n this.presets.set(preset, options);\n }\n await this.refresh(refresh);\n }\n async addShape(drawer, refresh = true) {\n for (const validType of drawer.validTypes) {\n if (this.getShapeDrawer(validType)) {\n continue;\n }\n this.shapeDrawers.set(validType, drawer);\n }\n await this.refresh(refresh);\n }\n checkVersion(pluginVersion) {\n if (this.version === pluginVersion) {\n return;\n }\n throw new Error(`The tsParticles version is different from the loaded plugins version. Engine version: ${this.version}. Plugin version: ${pluginVersion}`);\n }\n clearPlugins(container) {\n this.updaters.delete(container);\n this.movers.delete(container);\n this.interactors.delete(container);\n }\n dispatchEvent(type, args) {\n this._eventDispatcher.dispatchEvent(type, args);\n }\n dom() {\n return this.items;\n }\n domItem(index) {\n return this.item(index);\n }\n async getAvailablePlugins(container) {\n const res = new Map();\n for (const plugin of this.plugins) {\n if (plugin.needsPlugin(container.actualOptions)) {\n res.set(plugin.id, await plugin.getPlugin(container));\n }\n }\n return res;\n }\n getEasing(name) {\n return this.easingFunctions.get(name) ?? ((value) => value);\n }\n getEffectDrawer(type) {\n return this.effectDrawers.get(type);\n }\n async getInteractors(container, force = false) {\n return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);\n }\n async 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.shapeDrawers.get(type);\n }\n getSupportedEffects() {\n return this.effectDrawers.keys();\n }\n getSupportedShapes() {\n return this.shapeDrawers.keys();\n }\n async getUpdaters(container, force = false) {\n return getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);\n }\n init() {\n if (this._initialized) {\n return;\n }\n this._initialized = true;\n }\n item(index) {\n const { items } = this, item = items[index];\n if (!item || item.destroyed) {\n items.splice(index, removeDeleteCount);\n return;\n }\n return item;\n }\n async load(params) {\n const id = params.id ?? params.element?.id ?? `tsparticles${Math.floor(getRandom() * loadRandomFactor)}`, { index, url } = params, options = url ? await getDataFromUrl({ fallback: params.options, url, index }) : params.options, currentOptions = itemFromSingleOrMultiple(options, index), { items } = this, oldIndex = items.findIndex(v => v.id.description === id), newItem = new Container(this, id, currentOptions);\n if (oldIndex >= loadMinIndex) {\n const old = this.item(oldIndex), deleteCount = old ? one : none;\n if (old && !old.destroyed) {\n old.destroy(false);\n }\n items.splice(oldIndex, deleteCount, newItem);\n }\n else {\n items.push(newItem);\n }\n const domContainer = getDomContainer(id, params.element), canvasEl = getCanvasFromContainer(domContainer);\n newItem.canvas.loadCanvas(canvasEl);\n await newItem.start();\n return newItem;\n }\n loadOptions(options, sourceOptions) {\n this.plugins.forEach(plugin => plugin.loadOptions?.(options, sourceOptions));\n }\n loadParticlesOptions(container, options, ...sourceOptions) {\n const updaters = this.updaters.get(container);\n if (!updaters) {\n return;\n }\n updaters.forEach(updater => updater.loadOptions?.(options, ...sourceOptions));\n }\n async refresh(refresh = true) {\n if (!refresh) {\n return;\n }\n await Promise.all(this.items.map(t => t.refresh()));\n }\n removeEventListener(type, listener) {\n this._eventDispatcher.removeEventListener(type, listener);\n }\n setOnClickHandler(callback) {\n const { items } = this;\n if (!items.length) {\n throw new Error(`${errorPrefix} can only set click handlers after calling tsParticles.load()`);\n }\n items.forEach(item => item.addClickHandler(callback));\n }\n}\n","import { Engine } from \"./Core/Engine.js\";\nexport function init() {\n const engine = new Engine();\n engine.init();\n return engine;\n}\n","import { InteractorType } from \"../../Enums/Types/InteractorType.js\";\nexport class ExternalInteractorBase {\n constructor(container) {\n this.type = InteractorType.external;\n this.container = container;\n }\n}\n","import { InteractorType } from \"../../Enums/Types/InteractorType.js\";\nexport class ParticlesInteractorBase {\n constructor(container) {\n this.type = InteractorType.particles;\n this.container = container;\n }\n}\n","export var RotateDirection;\n(function (RotateDirection) {\n RotateDirection[\"clockwise\"] = \"clockwise\";\n RotateDirection[\"counterClockwise\"] = \"counter-clockwise\";\n RotateDirection[\"random\"] = \"random\";\n})(RotateDirection || (RotateDirection = {}));\n","export var GradientType;\n(function (GradientType) {\n GradientType[\"linear\"] = \"linear\";\n GradientType[\"radial\"] = \"radial\";\n GradientType[\"random\"] = \"random\";\n})(GradientType || (GradientType = {}));\n","export var EasingType;\n(function (EasingType) {\n EasingType[\"easeInBack\"] = \"ease-in-back\";\n EasingType[\"easeInCirc\"] = \"ease-in-circ\";\n EasingType[\"easeInCubic\"] = \"ease-in-cubic\";\n EasingType[\"easeInLinear\"] = \"ease-in-linear\";\n EasingType[\"easeInQuad\"] = \"ease-in-quad\";\n EasingType[\"easeInQuart\"] = \"ease-in-quart\";\n EasingType[\"easeInQuint\"] = \"ease-in-quint\";\n EasingType[\"easeInExpo\"] = \"ease-in-expo\";\n EasingType[\"easeInSine\"] = \"ease-in-sine\";\n EasingType[\"easeOutBack\"] = \"ease-out-back\";\n EasingType[\"easeOutCirc\"] = \"ease-out-circ\";\n EasingType[\"easeOutCubic\"] = \"ease-out-cubic\";\n EasingType[\"easeOutLinear\"] = \"ease-out-linear\";\n EasingType[\"easeOutQuad\"] = \"ease-out-quad\";\n EasingType[\"easeOutQuart\"] = \"ease-out-quart\";\n EasingType[\"easeOutQuint\"] = \"ease-out-quint\";\n EasingType[\"easeOutExpo\"] = \"ease-out-expo\";\n EasingType[\"easeOutSine\"] = \"ease-out-sine\";\n EasingType[\"easeInOutBack\"] = \"ease-in-out-back\";\n EasingType[\"easeInOutCirc\"] = \"ease-in-out-circ\";\n EasingType[\"easeInOutCubic\"] = \"ease-in-out-cubic\";\n EasingType[\"easeInOutLinear\"] = \"ease-in-out-linear\";\n EasingType[\"easeInOutQuad\"] = \"ease-in-out-quad\";\n EasingType[\"easeInOutQuart\"] = \"ease-in-out-quart\";\n EasingType[\"easeInOutQuint\"] = \"ease-in-out-quint\";\n EasingType[\"easeInOutExpo\"] = \"ease-in-out-expo\";\n EasingType[\"easeInOutSine\"] = \"ease-in-out-sine\";\n})(EasingType || (EasingType = {}));\n","import { init } from \"./init.js\";\nimport { isSsr } from \"./Utils/Utils.js\";\nconst tsParticles = init();\nif (!isSsr()) {\n window.tsParticles = tsParticles;\n}\nexport * from \"./exports.js\";\nexport * from \"./export-types.js\";\nexport { tsParticles };\n","import { jsx as d } from \"react/jsx-runtime\";\nimport { useEffect as m } from \"react\";\nimport { tsParticles as s } from \"@tsparticles/engine\";\nconst f = (t) => {\n const i = t.id ?? \"tsparticles\";\n return m(() => {\n let e;\n return s.load({ id: i, url: t.url, options: t.options }).then((l) => {\n var a;\n e = l, (a = t.particlesLoaded) == null || a.call(t, l);\n }), () => {\n e == null || e.destroy();\n };\n }, [i, t, t.url, t.options]), /* @__PURE__ */ d(\"div\", { id: i, className: t.className });\n};\nexport {\n f as default\n};\n","import { tsParticles as i } from \"@tsparticles/engine\";\nimport o from \"./Particles.js\";\nimport \"react/jsx-runtime\";\nimport \"react\";\nasync function n(t) {\n await t(i);\n}\nexport {\n o as Particles,\n o as default,\n n as initParticlesEngine\n};\n","import { RotateDirection, clamp, getDistance, getDistances, getRandom, getRangeValue, } from \"@tsparticles/engine\";\nconst half = 0.5, double = 2, minVelocity = 0, identity = 1, moveSpeedFactor = 60, minSpinRadius = 0, spinFactor = 0.01, doublePI = Math.PI * double;\nexport function applyDistance(particle) {\n const initialPosition = particle.initialPosition, { dx, dy } = getDistances(initialPosition, particle.position), dxFixed = Math.abs(dx), dyFixed = Math.abs(dy), { maxDistance } = particle.retina, hDistance = maxDistance.horizontal, vDistance = maxDistance.vertical;\n if (!hDistance && !vDistance) {\n return;\n }\n const hasHDistance = (hDistance && dxFixed >= hDistance) ?? false, hasVDistance = (vDistance && dyFixed >= vDistance) ?? false;\n if ((hasHDistance || hasVDistance) && !particle.misplaced) {\n particle.misplaced = (!!hDistance && dxFixed > hDistance) || (!!vDistance && dyFixed > vDistance);\n if (hDistance) {\n particle.velocity.x = particle.velocity.y * half - particle.velocity.x;\n }\n if (vDistance) {\n particle.velocity.y = particle.velocity.x * half - particle.velocity.y;\n }\n }\n else if ((!hDistance || dxFixed < hDistance) && (!vDistance || dyFixed < vDistance) && particle.misplaced) {\n particle.misplaced = false;\n }\n else if (particle.misplaced) {\n const pos = particle.position, vel = particle.velocity;\n if (hDistance &&\n ((pos.x < initialPosition.x && vel.x < minVelocity) || (pos.x > initialPosition.x && vel.x > minVelocity))) {\n vel.x *= -getRandom();\n }\n if (vDistance &&\n ((pos.y < initialPosition.y && vel.y < minVelocity) || (pos.y > initialPosition.y && vel.y > minVelocity))) {\n vel.y *= -getRandom();\n }\n }\n}\nexport function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, reduceFactor, delta) {\n applyPath(particle, delta);\n const gravityOptions = particle.gravity, gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -identity : identity;\n if (moveDrift && moveSpeed) {\n particle.velocity.x += (moveDrift * delta.factor) / (moveSpeedFactor * moveSpeed);\n }\n if (gravityOptions?.enable && moveSpeed) {\n particle.velocity.y +=\n (gravityFactor * (gravityOptions.acceleration * delta.factor)) / (moveSpeedFactor * moveSpeed);\n }\n const decay = particle.moveDecay;\n particle.velocity.multTo(decay);\n const velocity = particle.velocity.mult(moveSpeed);\n if (gravityOptions?.enable &&\n maxSpeed > minVelocity &&\n ((!gravityOptions.inverse && velocity.y >= minVelocity && velocity.y >= maxSpeed) ||\n (gravityOptions.inverse && velocity.y <= minVelocity && velocity.y <= -maxSpeed))) {\n velocity.y = gravityFactor * maxSpeed;\n if (moveSpeed) {\n particle.velocity.y = velocity.y / moveSpeed;\n }\n }\n const zIndexOptions = particle.options.zIndex, zVelocityFactor = (identity - particle.zIndexFactor) ** zIndexOptions.velocityRate;\n velocity.multTo(zVelocityFactor);\n velocity.multTo(reduceFactor);\n const { position } = particle;\n position.addTo(velocity);\n if (moveOptions.vibrate) {\n position.x += Math.sin(position.x * Math.cos(position.y)) * reduceFactor;\n position.y += Math.cos(position.y * Math.sin(position.x)) * reduceFactor;\n }\n}\nexport function spin(particle, moveSpeed, reduceFactor) {\n const container = particle.container;\n if (!particle.spin) {\n return;\n }\n const spinClockwise = particle.spin.direction === RotateDirection.clockwise, updateFunc = {\n x: spinClockwise ? Math.cos : Math.sin,\n y: spinClockwise ? Math.sin : Math.cos,\n };\n particle.position.x =\n particle.spin.center.x + particle.spin.radius * updateFunc.x(particle.spin.angle) * reduceFactor;\n particle.position.y =\n particle.spin.center.y + particle.spin.radius * updateFunc.y(particle.spin.angle) * reduceFactor;\n particle.spin.radius += particle.spin.acceleration * reduceFactor;\n const maxCanvasSize = Math.max(container.canvas.size.width, container.canvas.size.height), halfMaxSize = maxCanvasSize * half;\n if (particle.spin.radius > halfMaxSize) {\n particle.spin.radius = halfMaxSize;\n particle.spin.acceleration *= -identity;\n }\n else if (particle.spin.radius < minSpinRadius) {\n particle.spin.radius = minSpinRadius;\n particle.spin.acceleration *= -identity;\n }\n particle.spin.angle += moveSpeed * spinFactor * (identity - particle.spin.radius / maxCanvasSize);\n}\nexport function applyPath(particle, delta) {\n const particlesOptions = particle.options, pathOptions = particlesOptions.move.path, pathEnabled = pathOptions.enable;\n if (!pathEnabled) {\n return;\n }\n if (particle.lastPathTime <= particle.pathDelay) {\n particle.lastPathTime += delta.value;\n return;\n }\n const path = particle.pathGenerator?.generate(particle, delta);\n if (path) {\n particle.velocity.addTo(path);\n }\n if (pathOptions.clamp) {\n particle.velocity.x = clamp(particle.velocity.x, -identity, identity);\n particle.velocity.y = clamp(particle.velocity.y, -identity, identity);\n }\n particle.lastPathTime -= particle.pathDelay;\n}\nexport function getProximitySpeedFactor(particle) {\n return particle.slow.inRange ? particle.slow.factor : identity;\n}\nexport function initSpin(particle) {\n const container = particle.container, options = particle.options, spinOptions = options.move.spin;\n if (!spinOptions.enable) {\n return;\n }\n const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {\n x: spinPos.x * spinFactor * container.canvas.size.width,\n y: spinPos.y * spinFactor * container.canvas.size.height,\n }, pos = particle.getPosition(), distance = getDistance(pos, spinCenter), spinAcceleration = getRangeValue(spinOptions.acceleration);\n particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;\n particle.spin = {\n center: spinCenter,\n direction: particle.velocity.x >= minVelocity ? RotateDirection.clockwise : RotateDirection.counterClockwise,\n angle: getRandom() * doublePI,\n radius: distance,\n acceleration: particle.retina.spinAcceleration,\n };\n}\n","import { getRangeMax, getRangeValue } from \"@tsparticles/engine\";\nimport { applyDistance, getProximitySpeedFactor, initSpin, move, spin } from \"./Utils.js\";\nconst diffFactor = 2, defaultSizeFactor = 1, defaultDeltaFactor = 1;\nexport class BaseMover {\n init(particle) {\n const options = particle.options, gravityOptions = options.move.gravity;\n particle.gravity = {\n enable: gravityOptions.enable,\n acceleration: getRangeValue(gravityOptions.acceleration),\n inverse: gravityOptions.inverse,\n };\n initSpin(particle);\n }\n isEnabled(particle) {\n return !particle.destroyed && particle.options.move.enable;\n }\n move(particle, delta) {\n const particleOptions = particle.options, moveOptions = particleOptions.move;\n if (!moveOptions.enable) {\n return;\n }\n const container = particle.container, pxRatio = container.retina.pixelRatio;\n particle.retina.moveSpeed ??= getRangeValue(moveOptions.speed) * pxRatio;\n particle.retina.moveDrift ??= getRangeValue(particle.options.move.drift) * pxRatio;\n const slowFactor = getProximitySpeedFactor(particle), reduceFactor = container.retina.reduceFactor, baseSpeed = particle.retina.moveSpeed, moveDrift = particle.retina.moveDrift, maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor, deltaFactor = delta.factor || defaultDeltaFactor, moveSpeed = (baseSpeed * sizeFactor * slowFactor * deltaFactor) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;\n if (moveOptions.spin.enable) {\n spin(particle, moveSpeed, reduceFactor);\n }\n else {\n move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, reduceFactor, delta);\n }\n applyDistance(particle);\n }\n}\n","import { BaseMover } from \"./BaseMover.js\";\nexport async function loadBaseMover(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addMover(\"base\", () => {\n return Promise.resolve(new BaseMover());\n }, refresh);\n}\n","const double = 2, doublePI = Math.PI * double, minAngle = 0, origin = { x: 0, y: 0 };\nexport function drawCircle(data) {\n const { context, particle, radius } = data;\n if (!particle.circleRange) {\n particle.circleRange = { min: minAngle, max: doublePI };\n }\n const circleRange = particle.circleRange;\n context.arc(origin.x, origin.y, radius, circleRange.min, circleRange.max, false);\n}\n","import { degToRad, isObject } from \"@tsparticles/engine\";\nimport { drawCircle } from \"./Utils.js\";\nconst sides = 12, maxAngle = 360, minAngle = 0;\nexport class CircleDrawer {\n constructor() {\n this.validTypes = [\"circle\"];\n }\n draw(data) {\n drawCircle(data);\n }\n getSidesCount() {\n return sides;\n }\n particleInit(container, particle) {\n const shapeData = particle.shapeData, angle = shapeData?.angle ?? {\n max: maxAngle,\n min: minAngle,\n };\n particle.circleRange = !isObject(angle)\n ? {\n min: minAngle,\n max: degToRad(angle),\n }\n : { min: degToRad(angle.min), max: degToRad(angle.max) };\n }\n}\n","import { CircleDrawer } from \"./CircleDrawer.js\";\nexport async function loadCircleShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new CircleDrawer(), refresh);\n}\n","import { getHslAnimationFromHsl, rangeColorToHsl, updateColor, } from \"@tsparticles/engine\";\nexport class ColorUpdater {\n constructor(container, engine) {\n this._container = container;\n this._engine = engine;\n }\n init(particle) {\n const hslColor = rangeColorToHsl(this._engine, particle.options.color, particle.id, particle.options.reduceDuplicates);\n if (hslColor) {\n particle.color = getHslAnimationFromHsl(hslColor, particle.options.color.animation, this._container.retina.reduceFactor);\n }\n }\n isEnabled(particle) {\n const { h: hAnimation, s: sAnimation, l: lAnimation } = particle.options.color.animation, { color } = particle;\n return (!particle.destroyed &&\n !particle.spawning &&\n ((color?.h.value !== undefined && hAnimation.enable) ||\n (color?.s.value !== undefined && sAnimation.enable) ||\n (color?.l.value !== undefined && lAnimation.enable)));\n }\n update(particle, delta) {\n updateColor(particle.color, delta);\n }\n}\n","import { ColorUpdater } from \"./ColorUpdater.js\";\nexport async function loadColorUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"color\", container => {\n return Promise.resolve(new ColorUpdater(container, engine));\n }, refresh);\n}\n","var RgbIndexes;\n(function (RgbIndexes) {\n RgbIndexes[RgbIndexes[\"r\"] = 1] = \"r\";\n RgbIndexes[RgbIndexes[\"g\"] = 2] = \"g\";\n RgbIndexes[RgbIndexes[\"b\"] = 3] = \"b\";\n RgbIndexes[RgbIndexes[\"a\"] = 4] = \"a\";\n})(RgbIndexes || (RgbIndexes = {}));\nconst shorthandHexRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i, hexRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i, hexRadix = 16, defaultAlpha = 1, alphaFactor = 0xff;\nexport class HexColorManager {\n constructor() {\n this.key = \"hex\";\n this.stringPrefix = \"#\";\n }\n handleColor(color) {\n return this._parseString(color.value);\n }\n handleRangeColor(color) {\n return this._parseString(color.value);\n }\n parseString(input) {\n return this._parseString(input);\n }\n _parseString(hexColor) {\n if (typeof hexColor !== \"string\") {\n return;\n }\n if (!hexColor?.startsWith(this.stringPrefix)) {\n return;\n }\n const hexFixed = hexColor.replace(shorthandHexRegex, (_, r, g, b, a) => {\n return r + r + g + g + b + b + (a !== undefined ? a + a : \"\");\n }), result = hexRegex.exec(hexFixed);\n return result\n ? {\n a: result[RgbIndexes.a] !== undefined\n ? parseInt(result[RgbIndexes.a], hexRadix) / alphaFactor\n : defaultAlpha,\n b: parseInt(result[RgbIndexes.b], hexRadix),\n g: parseInt(result[RgbIndexes.g], hexRadix),\n r: parseInt(result[RgbIndexes.r], hexRadix),\n }\n : undefined;\n }\n}\n","import { HexColorManager } from \"./HexColorManager.js\";\nexport async function loadHexColorPlugin(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addColorManager(new HexColorManager(), refresh);\n}\n","import { getRangeValue, hslToRgb, hslaToRgba, parseAlpha, } from \"@tsparticles/engine\";\nvar HslIndexes;\n(function (HslIndexes) {\n HslIndexes[HslIndexes[\"h\"] = 1] = \"h\";\n HslIndexes[HslIndexes[\"s\"] = 2] = \"s\";\n HslIndexes[HslIndexes[\"l\"] = 3] = \"l\";\n HslIndexes[HslIndexes[\"a\"] = 5] = \"a\";\n})(HslIndexes || (HslIndexes = {}));\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,]\\s*(\\d+)%\\s*[\\s,]\\s*(\\d+)%\\s*([\\s,]\\s*(0|1|0?\\.\\d+|(\\d{1,3})%)\\s*)?\\)/i, result = regex.exec(input), minLength = 4, defaultAlpha = 1, radix = 10;\n return result\n ? hslaToRgba({\n a: result.length > minLength ? parseAlpha(result[HslIndexes.a]) : defaultAlpha,\n h: parseInt(result[HslIndexes.h], radix),\n l: parseInt(result[HslIndexes.l], radix),\n s: parseInt(result[HslIndexes.s], radix),\n })\n : undefined;\n }\n}\n","import { HslColorManager } from \"./HslColorManager.js\";\nexport async function loadHslColorPlugin(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addColorManager(new HslColorManager(), refresh);\n}\n","import { getRandom, getRangeValue, initParticleNumericAnimationValue, percentDenominator, updateAnimation, } from \"@tsparticles/engine\";\nexport class OpacityUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const opacityOptions = particle.options.opacity, pxRatio = 1;\n particle.opacity = initParticleNumericAnimationValue(opacityOptions, pxRatio);\n const opacityAnimation = opacityOptions.animation;\n if (opacityAnimation.enable) {\n particle.opacity.velocity =\n (getRangeValue(opacityAnimation.speed) / percentDenominator) * this.container.retina.reduceFactor;\n if (!opacityAnimation.sync) {\n particle.opacity.velocity *= getRandom();\n }\n }\n }\n isEnabled(particle) {\n const none = 0;\n return (!particle.destroyed &&\n !particle.spawning &&\n !!particle.opacity &&\n particle.opacity.enable &&\n ((particle.opacity.maxLoops ?? none) <= none ||\n ((particle.opacity.maxLoops ?? none) > none &&\n (particle.opacity.loops ?? none) < (particle.opacity.maxLoops ?? none))));\n }\n reset(particle) {\n if (particle.opacity) {\n particle.opacity.time = 0;\n particle.opacity.loops = 0;\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle) || !particle.opacity) {\n return;\n }\n updateAnimation(particle, particle.opacity, true, particle.options.opacity.animation.destroy, delta);\n }\n}\n","import { OpacityUpdater } from \"./OpacityUpdater.js\";\nexport async function loadOpacityUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"opacity\", container => {\n return Promise.resolve(new OpacityUpdater(container));\n }, refresh);\n}\n","import { OutMode, OutModeDirection, getRangeValue } from \"@tsparticles/engine\";\nconst minVelocity = 0, boundsMin = 0;\nexport function bounceHorizontal(data) {\n if ((data.outMode !== OutMode.bounce && data.outMode !== OutMode.split) ||\n (data.direction !== OutModeDirection.left && data.direction !== OutModeDirection.right)) {\n return;\n }\n if (data.bounds.right < boundsMin && data.direction === OutModeDirection.left) {\n data.particle.position.x = data.size + data.offset.x;\n }\n else if (data.bounds.left > data.canvasSize.width && data.direction === OutModeDirection.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 === OutModeDirection.right &&\n data.bounds.right >= data.canvasSize.width &&\n velocity > minVelocity) ||\n (data.direction === OutModeDirection.left && data.bounds.left <= boundsMin && velocity < minVelocity)) {\n const newVelocity = getRangeValue(data.particle.options.bounce.horizontal.value);\n data.particle.velocity.x *= -newVelocity;\n bounced = true;\n }\n if (!bounced) {\n return;\n }\n const minPos = data.offset.x + data.size;\n if (data.bounds.right >= data.canvasSize.width && data.direction === OutModeDirection.right) {\n data.particle.position.x = data.canvasSize.width - minPos;\n }\n else if (data.bounds.left <= boundsMin && data.direction === OutModeDirection.left) {\n data.particle.position.x = minPos;\n }\n if (data.outMode === OutMode.split) {\n data.particle.destroy();\n }\n}\nexport function bounceVertical(data) {\n if ((data.outMode !== OutMode.bounce && data.outMode !== OutMode.split) ||\n (data.direction !== OutModeDirection.bottom && data.direction !== OutModeDirection.top)) {\n return;\n }\n if (data.bounds.bottom < boundsMin && data.direction === OutModeDirection.top) {\n data.particle.position.y = data.size + data.offset.y;\n }\n else if (data.bounds.top > data.canvasSize.height && data.direction === OutModeDirection.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 === OutModeDirection.bottom &&\n data.bounds.bottom >= data.canvasSize.height &&\n velocity > minVelocity) ||\n (data.direction === OutModeDirection.top && data.bounds.top <= boundsMin && velocity < minVelocity)) {\n const newVelocity = getRangeValue(data.particle.options.bounce.vertical.value);\n data.particle.velocity.y *= -newVelocity;\n bounced = true;\n }\n if (!bounced) {\n return;\n }\n const minPos = data.offset.y + data.size;\n if (data.bounds.bottom >= data.canvasSize.height && data.direction === OutModeDirection.bottom) {\n data.particle.position.y = data.canvasSize.height - minPos;\n }\n else if (data.bounds.top <= boundsMin && data.direction === OutModeDirection.top) {\n data.particle.position.y = minPos;\n }\n if (data.outMode === OutMode.split) {\n data.particle.destroy();\n }\n}\n","import { OutMode, calculateBounds, } from \"@tsparticles/engine\";\nimport { bounceHorizontal, bounceVertical } from \"./Utils.js\";\nexport class BounceOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\n OutMode.bounce,\n OutMode.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.values()) {\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 { OutMode, ParticleOutType, Vector, getDistances, isPointInside, } from \"@tsparticles/engine\";\nconst minVelocity = 0;\nexport class DestroyOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [OutMode.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 ParticleOutType.normal:\n case ParticleOutType.outside:\n if (isPointInside(particle.position, container.canvas.size, Vector.origin, particle.getRadius(), direction)) {\n return;\n }\n break;\n case ParticleOutType.inside: {\n const { dx, dy } = getDistances(particle.position, particle.moveCenter), { x: vx, y: vy } = particle.velocity;\n if ((vx < minVelocity && dx > particle.moveCenter.radius) ||\n (vy < minVelocity && dy > particle.moveCenter.radius) ||\n (vx >= minVelocity && dx < -particle.moveCenter.radius) ||\n (vy >= minVelocity && dy < -particle.moveCenter.radius)) {\n return;\n }\n break;\n }\n }\n container.particles.remove(particle, particle.group, true);\n }\n}\n","import { OutMode, OutModeDirection, Vector, isPointInside, } from \"@tsparticles/engine\";\nconst minVelocity = 0;\nexport class NoneOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [OutMode.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 === OutModeDirection.left || direction === OutModeDirection.right)) ??\n (particle.options.move.distance.vertical &&\n (direction === OutModeDirection.top || direction === OutModeDirection.bottom))) {\n return;\n }\n const gravityOptions = particle.options.move.gravity, container = this.container, canvasSize = container.canvas.size, pRadius = particle.getRadius();\n if (!gravityOptions.enable) {\n if ((particle.velocity.y > minVelocity && particle.position.y <= canvasSize.height + pRadius) ||\n (particle.velocity.y < minVelocity && particle.position.y >= -pRadius) ||\n (particle.velocity.x > minVelocity && particle.position.x <= canvasSize.width + pRadius) ||\n (particle.velocity.x < minVelocity && particle.position.x >= -pRadius)) {\n return;\n }\n if (!isPointInside(particle.position, container.canvas.size, Vector.origin, pRadius, direction)) {\n container.particles.remove(particle);\n }\n }\n else {\n const position = particle.position;\n if ((!gravityOptions.inverse &&\n position.y > canvasSize.height + pRadius &&\n direction === OutModeDirection.bottom) ||\n (gravityOptions.inverse && position.y < -pRadius && direction === OutModeDirection.top)) {\n container.particles.remove(particle);\n }\n }\n }\n}\n","import { OutMode, OutModeDirection, ParticleOutType, Vector, calculateBounds, getDistances, getRandom, isPointInside, randomInRange, } from \"@tsparticles/engine\";\nconst minVelocity = 0, minDistance = 0;\nexport class OutOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [OutMode.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 ParticleOutType.inside: {\n const { x: vx, y: vy } = particle.velocity;\n const circVec = Vector.origin;\n circVec.length = particle.moveCenter.radius;\n circVec.angle = particle.velocity.angle + Math.PI;\n circVec.addTo(Vector.create(particle.moveCenter));\n const { dx, dy } = getDistances(particle.position, circVec);\n if ((vx <= minVelocity && dx >= minDistance) ||\n (vy <= minVelocity && dy >= minDistance) ||\n (vx >= minVelocity && dx <= minDistance) ||\n (vy >= minVelocity && dy <= minDistance)) {\n return;\n }\n particle.position.x = Math.floor(randomInRange({\n min: 0,\n max: container.canvas.size.width,\n }));\n particle.position.y = Math.floor(randomInRange({\n min: 0,\n max: container.canvas.size.height,\n }));\n const { dx: newDx, dy: newDy } = getDistances(particle.position, particle.moveCenter);\n particle.direction = Math.atan2(-newDy, -newDx);\n particle.velocity.angle = particle.direction;\n break;\n }\n default: {\n if (isPointInside(particle.position, container.canvas.size, Vector.origin, particle.getRadius(), direction)) {\n return;\n }\n switch (particle.outType) {\n case ParticleOutType.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 ParticleOutType.normal: {\n const warp = particle.options.move.warp, canvasSize = container.canvas.size, newPos = {\n bottom: canvasSize.height + particle.getRadius() + particle.offset.y,\n left: -particle.getRadius() - particle.offset.x,\n right: canvasSize.width + particle.getRadius() + particle.offset.x,\n top: -particle.getRadius() - particle.offset.y,\n }, sizeValue = particle.getRadius(), nextBounds = calculateBounds(particle.position, sizeValue);\n if (direction === OutModeDirection.right &&\n nextBounds.left > canvasSize.width + particle.offset.x) {\n particle.position.x = newPos.left;\n particle.initialPosition.x = particle.position.x;\n if (!warp) {\n particle.position.y = getRandom() * canvasSize.height;\n particle.initialPosition.y = particle.position.y;\n }\n }\n else if (direction === OutModeDirection.left && nextBounds.right < -particle.offset.x) {\n particle.position.x = newPos.right;\n particle.initialPosition.x = particle.position.x;\n if (!warp) {\n particle.position.y = getRandom() * canvasSize.height;\n particle.initialPosition.y = particle.position.y;\n }\n }\n if (direction === OutModeDirection.bottom &&\n nextBounds.top > canvasSize.height + particle.offset.y) {\n if (!warp) {\n particle.position.x = getRandom() * canvasSize.width;\n particle.initialPosition.x = particle.position.x;\n }\n particle.position.y = newPos.top;\n particle.initialPosition.y = particle.position.y;\n }\n else if (direction === OutModeDirection.top && nextBounds.bottom < -particle.offset.y) {\n if (!warp) {\n particle.position.x = getRandom() * canvasSize.width;\n particle.initialPosition.x = particle.position.x;\n }\n particle.position.y = newPos.bottom;\n particle.initialPosition.y = particle.position.y;\n }\n break;\n }\n }\n break;\n }\n }\n }\n}\n","import { OutMode, OutModeDirection, } from \"@tsparticles/engine\";\nimport { BounceOutMode } from \"./BounceOutMode.js\";\nimport { DestroyOutMode } from \"./DestroyOutMode.js\";\nimport { NoneOutMode } from \"./NoneOutMode.js\";\nimport { OutOutMode } from \"./OutOutMode.js\";\nconst checkOutMode = (outModes, outMode) => {\n return (outModes.default === outMode ||\n outModes.bottom === outMode ||\n outModes.left === outMode ||\n outModes.right === outMode ||\n outModes.top === outMode);\n};\nexport class OutOfCanvasUpdater {\n constructor(container) {\n this._addUpdaterIfMissing = (particle, outMode, getUpdater) => {\n const outModes = particle.options.move.outModes;\n if (!this.updaters.has(outMode) && checkOutMode(outModes, outMode)) {\n this.updaters.set(outMode, getUpdater(this.container));\n }\n };\n this._updateOutMode = (particle, delta, outMode, direction) => {\n for (const updater of this.updaters.values()) {\n updater.update(particle, direction, delta, outMode);\n }\n };\n this.container = container;\n this.updaters = new Map();\n }\n init(particle) {\n this._addUpdaterIfMissing(particle, OutMode.bounce, container => new BounceOutMode(container));\n this._addUpdaterIfMissing(particle, OutMode.out, container => new OutOutMode(container));\n this._addUpdaterIfMissing(particle, OutMode.destroy, container => new DestroyOutMode(container));\n this._addUpdaterIfMissing(particle, OutMode.none, container => new NoneOutMode(container));\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, OutModeDirection.bottom);\n this._updateOutMode(particle, delta, outModes.left ?? outModes.default, OutModeDirection.left);\n this._updateOutMode(particle, delta, outModes.right ?? outModes.default, OutModeDirection.right);\n this._updateOutMode(particle, delta, outModes.top ?? outModes.default, OutModeDirection.top);\n }\n}\n","import { OutOfCanvasUpdater } from \"./OutOfCanvasUpdater.js\";\nexport async function loadOutModesUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"outModes\", container => {\n return Promise.resolve(new OutOfCanvasUpdater(container));\n }, refresh);\n}\n","import { getRangeValue, parseAlpha, } from \"@tsparticles/engine\";\nvar RgbIndexes;\n(function (RgbIndexes) {\n RgbIndexes[RgbIndexes[\"r\"] = 1] = \"r\";\n RgbIndexes[RgbIndexes[\"g\"] = 2] = \"g\";\n RgbIndexes[RgbIndexes[\"b\"] = 3] = \"b\";\n RgbIndexes[RgbIndexes[\"a\"] = 5] = \"a\";\n})(RgbIndexes || (RgbIndexes = {}));\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{1,3})\\s*[\\s,]\\s*(\\d{1,3})\\s*[\\s,]\\s*(\\d{1,3})\\s*([\\s,]\\s*(0|1|0?\\.\\d+|(\\d{1,3})%)\\s*)?\\)/i, result = regex.exec(input), radix = 10, minLength = 4, defaultAlpha = 1;\n return result\n ? {\n a: result.length > minLength ? parseAlpha(result[RgbIndexes.a]) : defaultAlpha,\n b: parseInt(result[RgbIndexes.b], radix),\n g: parseInt(result[RgbIndexes.g], radix),\n r: parseInt(result[RgbIndexes.r], radix),\n }\n : undefined;\n }\n}\n","import { RgbColorManager } from \"./RgbColorManager.js\";\nexport async function loadRgbColorPlugin(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addColorManager(new RgbColorManager(), refresh);\n}\n","import { getRandom, percentDenominator, updateAnimation, } from \"@tsparticles/engine\";\nconst minLoops = 0;\nexport class SizeUpdater {\n init(particle) {\n const container = particle.container, sizeOptions = particle.options.size, sizeAnimation = sizeOptions.animation;\n if (sizeAnimation.enable) {\n particle.size.velocity =\n ((particle.retina.sizeAnimationSpeed ?? container.retina.sizeAnimationSpeed) / percentDenominator) *\n container.retina.reduceFactor;\n if (!sizeAnimation.sync) {\n particle.size.velocity *= getRandom();\n }\n }\n }\n isEnabled(particle) {\n return (!particle.destroyed &&\n !particle.spawning &&\n particle.size.enable &&\n ((particle.size.maxLoops ?? minLoops) <= minLoops ||\n ((particle.size.maxLoops ?? minLoops) > minLoops &&\n (particle.size.loops ?? minLoops) < (particle.size.maxLoops ?? minLoops))));\n }\n reset(particle) {\n particle.size.loops = minLoops;\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateAnimation(particle, particle.size, true, particle.options.size.animation.destroy, delta);\n }\n}\n","import { SizeUpdater } from \"./SizeUpdater.js\";\nexport async function loadSizeUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"size\", () => {\n return Promise.resolve(new SizeUpdater());\n }, refresh);\n}\n","import { loadBaseMover } from \"@tsparticles/move-base\";\nimport { loadCircleShape } from \"@tsparticles/shape-circle\";\nimport { loadColorUpdater } from \"@tsparticles/updater-color\";\nimport { loadHexColorPlugin } from \"@tsparticles/plugin-hex-color\";\nimport { loadHslColorPlugin } from \"@tsparticles/plugin-hsl-color\";\nimport { loadOpacityUpdater } from \"@tsparticles/updater-opacity\";\nimport { loadOutModesUpdater } from \"@tsparticles/updater-out-modes\";\nimport { loadRgbColorPlugin } from \"@tsparticles/plugin-rgb-color\";\nimport { loadSizeUpdater } from \"@tsparticles/updater-size\";\nexport async function loadBasic(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await loadHexColorPlugin(engine, false);\n await loadHslColorPlugin(engine, false);\n await loadRgbColorPlugin(engine, false);\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 { EasingType } from \"@tsparticles/engine\";\nexport async function loadEasingQuadPlugin(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addEasing(EasingType.easeInQuad, value => value ** 2, false);\n await engine.addEasing(EasingType.easeOutQuad, value => 1 - (1 - value) ** 2, false);\n await engine.addEasing(EasingType.easeInOutQuad, value => (value < 0.5 ? 2 * value ** 2 : 1 - (-2 * value + 2) ** 2 / 2), false);\n await engine.refresh(refresh);\n}\n","export function drawEmoji(data, image) {\n const { context, opacity } = data, half = 0.5, previousAlpha = context.globalAlpha;\n if (!image) {\n return;\n }\n const diameter = image.width, radius = diameter * half;\n context.globalAlpha = opacity;\n context.drawImage(image, -radius, -radius, diameter, diameter);\n context.globalAlpha = previousAlpha;\n}\n","import { executeOnSingleOrMultiple, getRangeMax, isInArray, itemFromSingleOrMultiple, loadFont, } from \"@tsparticles/engine\";\nimport { drawEmoji } from \"./Utils.js\";\nconst defaultFont = '\"Twemoji Mozilla\", Apple Color Emoji, \"Segoe UI Emoji\", \"Noto Color Emoji\", \"EmojiOne Color\"', noPadding = 0;\nexport class EmojiDrawer {\n constructor() {\n this.validTypes = [\"emoji\"];\n this._emojiShapeDict = new Map();\n }\n destroy() {\n for (const [key, data] of this._emojiShapeDict) {\n if (data instanceof ImageBitmap) {\n data?.close();\n }\n this._emojiShapeDict.delete(key);\n }\n }\n draw(data) {\n const key = data.particle.emojiDataKey;\n if (!key) {\n return;\n }\n const image = this._emojiShapeDict.get(key);\n if (!image) {\n return;\n }\n drawEmoji(data, image);\n }\n async init(container) {\n const options = container.actualOptions, { validTypes } = this;\n if (!validTypes.find(t => isInArray(t, options.particles.shape.type))) {\n return;\n }\n const promises = [loadFont(defaultFont)], shapeOptions = validTypes\n .map(t => options.particles.shape.options[t])\n .find(t => !!t);\n if (shapeOptions) {\n executeOnSingleOrMultiple(shapeOptions, shape => {\n if (shape.font) {\n promises.push(loadFont(shape.font));\n }\n });\n }\n await Promise.all(promises);\n }\n particleDestroy(particle) {\n particle.emojiDataKey = undefined;\n }\n particleInit(_container, particle) {\n const double = 2, shapeData = particle.shapeData;\n if (!shapeData?.value) {\n return;\n }\n const emoji = itemFromSingleOrMultiple(shapeData.value, particle.randomIndexData);\n if (!emoji) {\n return;\n }\n const emojiOptions = typeof emoji === \"string\"\n ? {\n font: shapeData.font ?? defaultFont,\n padding: shapeData.padding ?? noPadding,\n value: emoji,\n }\n : {\n font: defaultFont,\n padding: noPadding,\n ...shapeData,\n ...emoji,\n }, font = emojiOptions.font, value = emojiOptions.value;\n const key = `${value}_${font}`;\n if (this._emojiShapeDict.has(key)) {\n particle.emojiDataKey = key;\n return;\n }\n const padding = emojiOptions.padding * double, maxSize = getRangeMax(particle.size.value), fullSize = maxSize + padding, canvasSize = fullSize * double;\n let image;\n if (typeof OffscreenCanvas !== \"undefined\") {\n const canvas = new OffscreenCanvas(canvasSize, canvasSize), context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(value, fullSize, fullSize);\n image = canvas.transferToImageBitmap();\n }\n else {\n const canvas = document.createElement(\"canvas\");\n canvas.width = canvasSize;\n canvas.height = canvasSize;\n const context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(value, fullSize, fullSize);\n image = canvas;\n }\n this._emojiShapeDict.set(key, image);\n particle.emojiDataKey = key;\n }\n}\n","import { EmojiDrawer } from \"./EmojiDrawer.js\";\nexport async function loadEmojiShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new EmojiDrawer(), refresh);\n}\n","import { Circle, Vector, clamp, getDistances, } from \"@tsparticles/engine\";\nconst minFactor = 1, identity = 1, minRadius = 0;\nfunction processAttract(engine, container, position, attractRadius, area, queryCb) {\n const attractOptions = container.actualOptions.interactivity.modes.attract;\n if (!attractOptions) {\n return;\n }\n const query = container.particles.quadTree.query(area, queryCb);\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(particle.position, position), velocity = attractOptions.speed * attractOptions.factor, attractFactor = clamp(engine.getEasing(attractOptions.easing)(identity - distance / attractRadius) * velocity, minFactor, attractOptions.maxSpeed), normVec = Vector.create(!distance ? velocity : (dx / distance) * attractFactor, !distance ? velocity : (dy / distance) * attractFactor);\n particle.position.subFrom(normVec);\n }\n}\nexport function clickAttract(engine, container, enabledCb) {\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n const { attract } = container;\n if (!attract.finish) {\n if (!attract.count) {\n attract.count = 0;\n }\n attract.count++;\n if (attract.count === container.particles.count) {\n attract.finish = true;\n }\n }\n if (attract.clicking) {\n const mousePos = container.interactivity.mouse.clickPosition, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(engine, container, mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius), (p) => enabledCb(p));\n }\n else if (attract.clicking === false) {\n attract.particles = [];\n }\n}\nexport function hoverAttract(engine, container, enabledCb) {\n const mousePos = container.interactivity.mouse.position, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(engine, container, mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius), (p) => enabledCb(p));\n}\n","import { EasingType, isNull } from \"@tsparticles/engine\";\nexport class Attract {\n constructor() {\n this.distance = 200;\n this.duration = 0.4;\n this.easing = EasingType.easeOutQuad;\n this.factor = 1;\n this.maxSpeed = 50;\n this.speed = 1;\n }\n load(data) {\n if (isNull(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 { ExternalInteractorBase, isInArray, millisecondsToSeconds, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { clickAttract, hoverAttract } from \"./Utils.js\";\nimport { Attract } from \"./Options/Classes/Attract.js\";\nconst attractMode = \"attract\";\nexport class Attractor extends ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._engine = engine;\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n this.handleClickMode = (mode) => {\n const options = this.container.actualOptions, attract = options.interactivity.modes.attract;\n if (!attract || mode !== attractMode) {\n return;\n }\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n container.attract.clicking = true;\n container.attract.count = 0;\n for (const particle of container.attract.particles) {\n if (!this.isEnabled(particle)) {\n continue;\n }\n particle.velocity.setTo(particle.initialVelocity);\n }\n container.attract.particles = [];\n container.attract.finish = false;\n setTimeout(() => {\n if (container.destroyed) {\n return;\n }\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n container.attract.clicking = false;\n }, attract.duration * millisecondsToSeconds);\n };\n }\n clear() {\n }\n init() {\n const container = this.container, attract = container.actualOptions.interactivity.modes.attract;\n if (!attract) {\n return;\n }\n container.retina.attractModeDistance = attract.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, { enable: hoverEnabled, mode: hoverMode } = events.onHover, { enable: clickEnabled, mode: clickMode } = events.onClick;\n if (mouseMoveStatus && hoverEnabled && isInArray(attractMode, hoverMode)) {\n hoverAttract(this._engine, this.container, p => this.isEnabled(p));\n }\n else if (clickEnabled && isInArray(attractMode, clickMode)) {\n clickAttract(this._engine, this.container, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events;\n if ((!mouse.position || !events.onHover.enable) && (!mouse.clickPosition || !events.onClick.enable)) {\n return false;\n }\n const hoverMode = events.onHover.mode, clickMode = events.onClick.mode;\n return isInArray(attractMode, hoverMode) || isInArray(attractMode, clickMode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.attract) {\n options.attract = new Attract();\n }\n for (const source of sources) {\n options.attract.load(source?.attract);\n }\n }\n reset() {\n }\n}\n","import { Attractor } from \"./Attractor.js\";\nexport async function loadExternalAttractInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalAttract\", container => {\n return Promise.resolve(new Attractor(engine, container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Attract.js\";\nexport * from \"./Options/Interfaces/IAttract.js\";\n","import { Circle, DivType, Rectangle, Vector, calculateBounds, circleBounce, circleBounceDataFromParticle, divModeExecute, rectBounce, } from \"@tsparticles/engine\";\nconst squareExp = 2, half = 0.5, halfPI = Math.PI * half, double = 2, toleranceFactor = 10, minRadius = 0;\nfunction processBounce(container, position, radius, area, enabledCb) {\n const query = container.particles.quadTree.query(area, enabledCb);\n for (const particle of query) {\n if (area instanceof Circle) {\n circleBounce(circleBounceDataFromParticle(particle), {\n position,\n radius,\n mass: radius ** squareExp * halfPI,\n velocity: Vector.origin,\n factor: Vector.origin,\n });\n }\n else if (area instanceof Rectangle) {\n rectBounce(particle, calculateBounds(position, radius));\n }\n }\n}\nfunction singleSelectorBounce(container, selector, div, bounceCb) {\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach(item => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === DivType.circle\n ? new Circle(pos.x, pos.y, radius + tolerance)\n : new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);\n bounceCb(pos, radius, area);\n });\n}\nexport function divBounce(container, divs, bounceMode, enabledCb) {\n divModeExecute(bounceMode, divs, (selector, div) => singleSelectorBounce(container, selector, div, (pos, radius, area) => processBounce(container, pos, radius, area, enabledCb)));\n}\nexport function mouseBounce(container, enabledCb) {\n const pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;\n if (!radius || radius < minRadius || !mousePos) {\n return;\n }\n processBounce(container, mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance), enabledCb);\n}\n","import { isNull } from \"@tsparticles/engine\";\nexport class Bounce {\n constructor() {\n this.distance = 200;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n }\n}\n","import { ExternalInteractorBase, isDivModeEnabled, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { divBounce, mouseBounce } from \"./Utils.js\";\nimport { Bounce } from \"./Options/Classes/Bounce.js\";\nconst bounceMode = \"bounce\";\nexport class Bouncer extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, bounce = container.actualOptions.interactivity.modes.bounce;\n if (!bounce) {\n return;\n }\n container.retina.bounceModeDistance = bounce.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, events = options.interactivity.events, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && isInArray(bounceMode, hoverMode)) {\n mouseBounce(this.container, p => this.isEnabled(p));\n }\n else {\n divBounce(this.container, divs, bounceMode, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv;\n return ((!!mouse.position && events.onHover.enable && isInArray(bounceMode, events.onHover.mode)) ||\n isDivModeEnabled(bounceMode, divs));\n }\n loadModeOptions(options, ...sources) {\n if (!options.bounce) {\n options.bounce = new Bounce();\n }\n for (const source of sources) {\n options.bounce.load(source?.bounce);\n }\n }\n reset() {\n }\n}\n","import { Bouncer } from \"./Bouncer.js\";\nexport async function loadExternalBounceInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalBounce\", container => {\n return Promise.resolve(new Bouncer(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Bounce.js\";\nexport * from \"./Options/Interfaces/IBounce.js\";\n","import { OptionsColor, executeOnSingleOrMultiple, isArray, isNull, } 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 (isNull(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 { isNull } from \"@tsparticles/engine\";\nimport { BubbleBase } from \"./BubbleBase.js\";\nexport class BubbleDiv extends BubbleBase {\n constructor() {\n super();\n this.selectors = [];\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n }\n}\n","import { executeOnSingleOrMultiple, isNull, } from \"@tsparticles/engine\";\nimport { BubbleBase } from \"./BubbleBase.js\";\nimport { BubbleDiv } from \"./BubbleDiv.js\";\nexport class Bubble extends BubbleBase {\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n this.divs = executeOnSingleOrMultiple(data.divs, div => {\n const tmp = new BubbleDiv();\n tmp.load(div);\n return tmp;\n });\n }\n}\n","export var ProcessBubbleType;\n(function (ProcessBubbleType) {\n ProcessBubbleType[\"color\"] = \"color\";\n ProcessBubbleType[\"opacity\"] = \"opacity\";\n ProcessBubbleType[\"size\"] = \"size\";\n})(ProcessBubbleType || (ProcessBubbleType = {}));\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, DivType, ExternalInteractorBase, Rectangle, colorMix, divMode, divModeExecute, getDistance, getRangeMax, isDivModeEnabled, isInArray, itemFromSingleOrMultiple, millisecondsToSeconds, mouseLeaveEvent, mouseMoveEvent, rangeColorToHsl, rgbToHsl, } from \"@tsparticles/engine\";\nimport { Bubble } from \"./Options/Classes/Bubble.js\";\nimport { ProcessBubbleType } from \"./Enums.js\";\nimport { calculateBubbleValue } from \"./Utils.js\";\nconst bubbleMode = \"bubble\", minDistance = 0, defaultClickTime = 0, double = 2, defaultOpacity = 1, ratioOffset = 1, defaultBubbleValue = 0, minRatio = 0, half = 0.5, defaultRatio = 1;\nexport class Bubbler extends ExternalInteractorBase {\n constructor(container, engine) {\n super(container);\n this._clickBubble = () => {\n const container = this.container, options = container.actualOptions, mouseClickPos = container.interactivity.mouse.clickPosition, bubbleOptions = options.interactivity.modes.bubble;\n if (!bubbleOptions || !mouseClickPos) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n const distance = container.retina.bubbleModeDistance;\n if (!distance || distance < minDistance) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mouseClickPos, distance, p => this.isEnabled(p)), { bubble } = container;\n for (const particle of query) {\n if (!bubble.clicking) {\n continue;\n }\n particle.bubble.inRange = !bubble.durationEnd;\n const pos = particle.getPosition(), distMouse = getDistance(pos, mouseClickPos), timeSpent = (new Date().getTime() - (container.interactivity.mouse.clickTime ?? defaultClickTime)) /\n millisecondsToSeconds;\n if (timeSpent > bubbleOptions.duration) {\n bubble.durationEnd = true;\n }\n if (timeSpent > bubbleOptions.duration * double) {\n bubble.clicking = false;\n bubble.durationEnd = false;\n }\n const sizeData = {\n bubbleObj: {\n optValue: container.retina.bubbleModeSize,\n value: particle.bubble.radius,\n },\n particlesObj: {\n optValue: getRangeMax(particle.options.size.value) * container.retina.pixelRatio,\n value: particle.size.value,\n },\n type: ProcessBubbleType.size,\n };\n this._process(particle, distMouse, timeSpent, sizeData);\n const opacityData = {\n bubbleObj: {\n optValue: bubbleOptions.opacity,\n value: particle.bubble.opacity,\n },\n particlesObj: {\n optValue: getRangeMax(particle.options.opacity.value),\n value: particle.opacity?.value ?? defaultOpacity,\n },\n type: ProcessBubbleType.opacity,\n };\n this._process(particle, distMouse, timeSpent, opacityData);\n if (!bubble.durationEnd && distMouse <= distance) {\n this._hoverBubbleColor(particle, distMouse);\n }\n else {\n delete particle.bubble.color;\n }\n }\n };\n this._hoverBubble = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, distance = container.retina.bubbleModeDistance;\n if (!distance || distance < minDistance || !mousePos) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mousePos, distance, p => this.isEnabled(p));\n for (const particle of query) {\n particle.bubble.inRange = true;\n const pos = particle.getPosition(), pointDistance = getDistance(pos, mousePos), ratio = ratioOffset - pointDistance / distance;\n if (pointDistance <= distance) {\n if (ratio >= minRatio && container.interactivity.status === mouseMoveEvent) {\n this._hoverBubbleSize(particle, ratio);\n this._hoverBubbleOpacity(particle, ratio);\n this._hoverBubbleColor(particle, ratio);\n }\n }\n else {\n this.reset(particle);\n }\n if (container.interactivity.status === mouseLeaveEvent) {\n this.reset(particle);\n }\n }\n };\n this._hoverBubbleColor = (particle, ratio, divBubble) => {\n const options = this.container.actualOptions, bubbleOptions = divBubble ?? options.interactivity.modes.bubble;\n if (!bubbleOptions) {\n return;\n }\n if (!particle.bubble.finalColor) {\n const modeColor = bubbleOptions.color;\n if (!modeColor) {\n return;\n }\n const bubbleColor = itemFromSingleOrMultiple(modeColor);\n particle.bubble.finalColor = rangeColorToHsl(this._engine, bubbleColor);\n }\n if (!particle.bubble.finalColor) {\n return;\n }\n if (bubbleOptions.mix) {\n particle.bubble.color = undefined;\n const pColor = particle.getFillColor();\n particle.bubble.color = pColor\n ? rgbToHsl(colorMix(pColor, particle.bubble.finalColor, ratioOffset - ratio, ratio))\n : particle.bubble.finalColor;\n }\n else {\n particle.bubble.color = particle.bubble.finalColor;\n }\n };\n this._hoverBubbleOpacity = (particle, ratio, divBubble) => {\n const container = this.container, options = container.actualOptions, modeOpacity = divBubble?.opacity ?? options.interactivity.modes.bubble?.opacity;\n if (!modeOpacity) {\n return;\n }\n const optOpacity = particle.options.opacity.value, pOpacity = particle.opacity?.value ?? defaultOpacity, opacity = calculateBubbleValue(pOpacity, modeOpacity, getRangeMax(optOpacity), ratio);\n if (opacity !== undefined) {\n particle.bubble.opacity = opacity;\n }\n };\n this._hoverBubbleSize = (particle, ratio, divBubble) => {\n const container = this.container, modeSize = divBubble?.size ? divBubble.size * container.retina.pixelRatio : container.retina.bubbleModeSize;\n if (modeSize === undefined) {\n return;\n }\n const optSize = getRangeMax(particle.options.size.value) * container.retina.pixelRatio, pSize = particle.size.value, size = calculateBubbleValue(pSize, modeSize, optSize, ratio);\n if (size !== undefined) {\n particle.bubble.radius = size;\n }\n };\n this._process = (particle, distMouse, timeSpent, data) => {\n const container = this.container, bubbleParam = data.bubbleObj.optValue, options = container.actualOptions, bubbleOptions = options.interactivity.modes.bubble;\n if (!bubbleOptions || bubbleParam === undefined) {\n return;\n }\n const bubbleDuration = bubbleOptions.duration, bubbleDistance = container.retina.bubbleModeDistance, particlesParam = data.particlesObj.optValue, pObjBubble = data.bubbleObj.value, pObj = data.particlesObj.value ?? defaultBubbleValue, type = data.type;\n if (!bubbleDistance || bubbleDistance < minDistance || bubbleParam === particlesParam) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n if (container.bubble.durationEnd) {\n if (pObjBubble) {\n if (type === ProcessBubbleType.size) {\n delete particle.bubble.radius;\n }\n if (type === ProcessBubbleType.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 === ProcessBubbleType.size) {\n particle.bubble.radius = value;\n }\n if (type === ProcessBubbleType.opacity) {\n particle.bubble.opacity = value;\n }\n }\n }\n else {\n if (type === ProcessBubbleType.size) {\n delete particle.bubble.radius;\n }\n if (type === ProcessBubbleType.opacity) {\n delete particle.bubble.opacity;\n }\n }\n }\n };\n this._singleSelectorHover = (delta, selector, div) => {\n const container = this.container, selectors = document.querySelectorAll(selector), bubble = container.actualOptions.interactivity.modes.bubble;\n if (!bubble || !selectors.length) {\n return;\n }\n selectors.forEach(item => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, repulseRadius = elem.offsetWidth * half * pxRatio, area = div.type === DivType.circle\n ? new Circle(pos.x, pos.y, repulseRadius)\n : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio), query = container.particles.quadTree.query(area, p => this.isEnabled(p));\n for (const particle of query) {\n if (!area.contains(particle.getPosition())) {\n continue;\n }\n particle.bubble.inRange = true;\n const divs = bubble.divs, divBubble = divMode(divs, elem);\n if (!particle.bubble.div || particle.bubble.div !== elem) {\n this.clear(particle, delta, true);\n particle.bubble.div = elem;\n }\n this._hoverBubbleSize(particle, defaultRatio, divBubble);\n this._hoverBubbleOpacity(particle, defaultRatio, divBubble);\n this._hoverBubbleColor(particle, defaultRatio, divBubble);\n }\n });\n };\n this._engine = engine;\n if (!container.bubble) {\n container.bubble = {};\n }\n this.handleClickMode = (mode) => {\n if (mode !== bubbleMode) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n container.bubble.clicking = true;\n };\n }\n clear(particle, delta, force) {\n if (particle.bubble.inRange && !force) {\n return;\n }\n delete particle.bubble.div;\n delete particle.bubble.opacity;\n delete particle.bubble.radius;\n delete particle.bubble.color;\n }\n init() {\n const container = this.container, bubble = container.actualOptions.interactivity.modes.bubble;\n if (!bubble) {\n return;\n }\n container.retina.bubbleModeDistance = bubble.distance * container.retina.pixelRatio;\n if (bubble.size !== undefined) {\n container.retina.bubbleModeSize = bubble.size * container.retina.pixelRatio;\n }\n }\n interact(delta) {\n const options = this.container.actualOptions, events = options.interactivity.events, onHover = events.onHover, onClick = events.onClick, hoverEnabled = onHover.enable, hoverMode = onHover.mode, clickEnabled = onClick.enable, clickMode = onClick.mode, divs = events.onDiv;\n if (hoverEnabled && isInArray(bubbleMode, hoverMode)) {\n this._hoverBubble();\n }\n else if (clickEnabled && isInArray(bubbleMode, clickMode)) {\n this._clickBubble();\n }\n else {\n divModeExecute(bubbleMode, divs, (selector, div) => this._singleSelectorHover(delta, selector, div));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, { onClick, onDiv, onHover } = events, divBubble = isDivModeEnabled(bubbleMode, onDiv);\n if (!(divBubble || (onHover.enable && !!mouse.position) || (onClick.enable && mouse.clickPosition))) {\n return false;\n }\n return isInArray(bubbleMode, onHover.mode) || isInArray(bubbleMode, onClick.mode) || divBubble;\n }\n loadModeOptions(options, ...sources) {\n if (!options.bubble) {\n options.bubble = new Bubble();\n }\n for (const source of sources) {\n options.bubble.load(source?.bubble);\n }\n }\n reset(particle) {\n particle.bubble.inRange = false;\n }\n}\n","import { Bubbler } from \"./Bubbler.js\";\nexport async function loadExternalBubbleInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalBubble\", container => {\n return Promise.resolve(new Bubbler(container, engine));\n }, refresh);\n}\nexport * from \"./Options/Classes/BubbleBase.js\";\nexport * from \"./Options/Classes/BubbleDiv.js\";\nexport * from \"./Options/Classes/Bubble.js\";\nexport * from \"./Options/Interfaces/IBubbleBase.js\";\nexport * from \"./Options/Interfaces/IBubbleDiv.js\";\nexport * from \"./Options/Interfaces/IBubble.js\";\n","import { isNull } from \"@tsparticles/engine\";\nexport class ConnectLinks {\n constructor() {\n this.opacity = 0.5;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { isNull } from \"@tsparticles/engine\";\nimport { ConnectLinks } from \"./ConnectLinks.js\";\nexport class Connect {\n constructor() {\n this.distance = 80;\n this.links = new ConnectLinks();\n this.radius = 60;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n this.links.load(data.links);\n if (data.radius !== undefined) {\n this.radius = data.radius;\n }\n }\n}\n","import { clamp, colorMix, drawLine, getStyleFromHsl, getStyleFromRgb, } from \"@tsparticles/engine\";\nconst gradientMin = 0, gradientMax = 1, defaultLinksWidth = 0;\nexport function gradient(context, p1, p2, opacity) {\n const gradStop = Math.floor(p2.getRadius() / p1.getRadius()), color1 = p1.getFillColor(), color2 = p2.getFillColor();\n if (!color1 || !color2) {\n return;\n }\n const sourcePos = p1.getPosition(), destPos = p2.getPosition(), midRgb = colorMix(color1, color2, p1.getRadius(), p2.getRadius()), grad = context.createLinearGradient(sourcePos.x, sourcePos.y, destPos.x, destPos.y);\n grad.addColorStop(gradientMin, getStyleFromHsl(color1, opacity));\n grad.addColorStop(clamp(gradStop, gradientMin, gradientMax), getStyleFromRgb(midRgb, opacity));\n grad.addColorStop(gradientMax, getStyleFromHsl(color2, opacity));\n return grad;\n}\nexport function drawConnectLine(context, width, lineStyle, begin, end) {\n drawLine(context, begin, end);\n context.lineWidth = width;\n context.strokeStyle = lineStyle;\n context.stroke();\n}\nexport function lineStyle(container, ctx, p1, p2) {\n const options = container.actualOptions, connectOptions = options.interactivity.modes.connect;\n if (!connectOptions) {\n return;\n }\n return gradient(ctx, p1, p2, connectOptions.links.opacity);\n}\nexport function drawConnection(container, p1, p2) {\n container.canvas.draw(ctx => {\n const ls = lineStyle(container, ctx, p1, p2);\n if (!ls) {\n return;\n }\n const pos1 = p1.getPosition(), pos2 = p2.getPosition();\n drawConnectLine(ctx, p1.retina.linksWidth ?? defaultLinksWidth, ls, pos1, pos2);\n });\n}\n","import { ExternalInteractorBase, isInArray, } from \"@tsparticles/engine\";\nimport { Connect } from \"./Options/Classes/Connect.js\";\nimport { drawConnection } from \"./Utils.js\";\nconst connectMode = \"connect\", minDistance = 0;\nexport class Connector extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, connect = container.actualOptions.interactivity.modes.connect;\n if (!connect) {\n return;\n }\n container.retina.connectModeDistance = connect.distance * container.retina.pixelRatio;\n container.retina.connectModeRadius = connect.radius * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions;\n if (options.interactivity.events.onHover.enable && container.interactivity.status === \"pointermove\") {\n const mousePos = container.interactivity.mouse.position, { connectModeDistance, connectModeRadius } = container.retina;\n if (!connectModeDistance ||\n connectModeDistance < minDistance ||\n !connectModeRadius ||\n connectModeRadius < minDistance ||\n !mousePos) {\n return;\n }\n const distance = Math.abs(connectModeRadius), query = container.particles.quadTree.queryCircle(mousePos, distance, p => this.isEnabled(p));\n query.forEach((p1, i) => {\n const pos1 = p1.getPosition(), indexOffset = 1;\n for (const p2 of query.slice(i + indexOffset)) {\n const pos2 = p2.getPosition(), distMax = Math.abs(connectModeDistance), xDiff = Math.abs(pos1.x - pos2.x), yDiff = Math.abs(pos1.y - pos2.y);\n if (xDiff < distMax && yDiff < distMax) {\n drawConnection(container, p1, p2);\n }\n }\n });\n }\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n if (!(events.onHover.enable && mouse.position)) {\n return false;\n }\n return isInArray(connectMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.connect) {\n options.connect = new Connect();\n }\n for (const source of sources) {\n options.connect.load(source?.connect);\n }\n }\n reset() {\n }\n}\n","import { Connector } from \"./Connector.js\";\nexport async function loadExternalConnectInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalConnect\", container => {\n return Promise.resolve(new Connector(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Connect.js\";\nexport * from \"./Options/Classes/ConnectLinks.js\";\nexport * from \"./Options/Interfaces/IConnect.js\";\nexport * from \"./Options/Interfaces/IConnectLinks.js\";\n","import { OptionsColor, isNull } 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 (isNull(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 { isNull } from \"@tsparticles/engine\";\nimport { GrabLinks } from \"./GrabLinks.js\";\nexport class Grab {\n constructor() {\n this.distance = 100;\n this.links = new GrabLinks();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n this.links.load(data.links);\n }\n}\n","import { drawLine, getStyleFromRgb } from \"@tsparticles/engine\";\nconst defaultWidth = 0;\nexport function drawGrabLine(context, width, begin, end, colorLine, opacity) {\n drawLine(context, begin, end);\n context.strokeStyle = getStyleFromRgb(colorLine, opacity);\n context.lineWidth = width;\n context.stroke();\n}\nexport function drawGrab(container, particle, lineColor, opacity, mousePos) {\n container.canvas.draw(ctx => {\n const beginPos = particle.getPosition();\n drawGrabLine(ctx, particle.retina.linksWidth ?? defaultWidth, beginPos, mousePos, lineColor, opacity);\n });\n}\n","import { ExternalInteractorBase, getDistance, getLinkColor, getLinkRandomColor, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Grab } from \"./Options/Classes/Grab.js\";\nimport { drawGrab } from \"./Utils.js\";\nconst grabMode = \"grab\", minDistance = 0, minOpacity = 0;\nexport class Grabber extends ExternalInteractorBase {\n constructor(container, engine) {\n super(container);\n this._engine = engine;\n }\n clear() {\n }\n init() {\n const container = this.container, grab = container.actualOptions.interactivity.modes.grab;\n if (!grab) {\n return;\n }\n container.retina.grabModeDistance = grab.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, interactivity = options.interactivity;\n if (!interactivity.modes.grab ||\n !interactivity.events.onHover.enable ||\n container.interactivity.status !== mouseMoveEvent) {\n return;\n }\n const mousePos = container.interactivity.mouse.position;\n if (!mousePos) {\n return;\n }\n const distance = container.retina.grabModeDistance;\n if (!distance || distance < minDistance) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mousePos, distance, p => this.isEnabled(p));\n for (const particle of query) {\n const pos = particle.getPosition(), pointDistance = getDistance(pos, mousePos);\n if (pointDistance > distance) {\n continue;\n }\n const grabLineOptions = interactivity.modes.grab.links, lineOpacity = grabLineOptions.opacity, opacityLine = lineOpacity - (pointDistance * lineOpacity) / distance;\n if (opacityLine <= minOpacity) {\n continue;\n }\n const optColor = grabLineOptions.color ?? particle.options.links?.color;\n if (!container.particles.grabLineColor && optColor) {\n const linksOptions = interactivity.modes.grab.links;\n container.particles.grabLineColor = getLinkRandomColor(this._engine, optColor, linksOptions.blink, linksOptions.consent);\n }\n const colorLine = getLinkColor(particle, undefined, container.particles.grabLineColor);\n if (!colorLine) {\n continue;\n }\n drawGrab(container, particle, colorLine, opacityLine, mousePos);\n }\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n return events.onHover.enable && !!mouse.position && isInArray(grabMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.grab) {\n options.grab = new Grab();\n }\n for (const source of sources) {\n options.grab.load(source?.grab);\n }\n }\n reset() {\n }\n}\n","import { Grabber } from \"./Grabber.js\";\nexport async function loadExternalGrabInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalGrab\", container => {\n return Promise.resolve(new Grabber(container, engine));\n }, refresh);\n}\nexport * from \"./Options/Classes/Grab.js\";\nexport * from \"./Options/Classes/GrabLinks.js\";\nexport * from \"./Options/Interfaces/IGrab.js\";\nexport * from \"./Options/Interfaces/IGrabLinks.js\";\n","import { ExternalInteractorBase } from \"@tsparticles/engine\";\nconst pauseMode = \"pause\";\nexport class Pauser extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n if (mode !== pauseMode) {\n return;\n }\n const container = this.container;\n if (container.animationStatus) {\n container.pause();\n }\n else {\n container.play();\n }\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n reset() {\n }\n}\n","import { Pauser } from \"./Pauser.js\";\nexport async function loadExternalPauseInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalPause\", container => {\n return Promise.resolve(new Pauser(container));\n }, refresh);\n}\n","import { deepExtend, executeOnSingleOrMultiple, isNull, setRangeValue, } from \"@tsparticles/engine\";\nexport class Push {\n constructor() {\n this.default = true;\n this.groups = [];\n this.quantity = 4;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.default !== undefined) {\n this.default = data.default;\n }\n if (data.groups !== undefined) {\n this.groups = data.groups.map(t => t);\n }\n if (!this.groups.length) {\n this.default = true;\n }\n const quantity = data.quantity;\n if (quantity !== undefined) {\n this.quantity = setRangeValue(quantity);\n }\n this.particles = executeOnSingleOrMultiple(data.particles, particles => {\n return deepExtend({}, particles);\n });\n }\n}\n","import { ExternalInteractorBase, deepExtend, getRangeValue, itemFromArray, itemFromSingleOrMultiple, } from \"@tsparticles/engine\";\nimport { Push } from \"./Options/Classes/Push.js\";\nconst pushMode = \"push\", minQuantity = 0;\nexport class Pusher extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n if (mode !== pushMode) {\n return;\n }\n const container = this.container, options = container.actualOptions, pushOptions = options.interactivity.modes.push;\n if (!pushOptions) {\n return;\n }\n const quantity = getRangeValue(pushOptions.quantity);\n if (quantity <= minQuantity) {\n return;\n }\n const group = itemFromArray([undefined, ...pushOptions.groups]), groupOptions = group !== undefined ? container.actualOptions.particles.groups[group] : undefined, particlesOptions = itemFromSingleOrMultiple(pushOptions.particles), overrideOptions = deepExtend(groupOptions, particlesOptions);\n void container.particles.push(quantity, container.interactivity.mouse, overrideOptions, group);\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n loadModeOptions(options, ...sources) {\n if (!options.push) {\n options.push = new Push();\n }\n for (const source of sources) {\n options.push.load(source?.push);\n }\n }\n reset() {\n }\n}\n","import { Pusher } from \"./Pusher.js\";\nexport async function loadExternalPushInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalPush\", container => {\n return Promise.resolve(new Pusher(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Push.js\";\nexport * from \"./Options/Interfaces/IPush.js\";\n","import { isNull, setRangeValue } from \"@tsparticles/engine\";\nexport class Remove {\n constructor() {\n this.quantity = 2;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n const quantity = data.quantity;\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.js\";\nconst removeMode = \"remove\";\nexport class Remover extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n const container = this.container, options = container.actualOptions;\n if (!options.interactivity.modes.remove || mode !== removeMode) {\n return;\n }\n const removeNb = getRangeValue(options.interactivity.modes.remove.quantity);\n container.particles.removeQuantity(removeNb);\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n loadModeOptions(options, ...sources) {\n if (!options.remove) {\n options.remove = new Remove();\n }\n for (const source of sources) {\n options.remove.load(source?.remove);\n }\n }\n reset() {\n }\n}\n","import { Remover } from \"./Remover.js\";\nexport async function loadExternalRemoveInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalRemove\", container => {\n return Promise.resolve(new Remover(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Remove.js\";\nexport * from \"./Options/Interfaces/IRemove.js\";\n","import { EasingType, isNull } from \"@tsparticles/engine\";\nexport 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 = EasingType.easeOutQuad;\n }\n load(data) {\n if (isNull(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 { isNull } from \"@tsparticles/engine\";\nimport { RepulseBase } from \"./RepulseBase.js\";\nexport class RepulseDiv extends RepulseBase {\n constructor() {\n super();\n this.selectors = [];\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n }\n}\n","import { executeOnSingleOrMultiple, isNull, } from \"@tsparticles/engine\";\nimport { RepulseBase } from \"./RepulseBase.js\";\nimport { RepulseDiv } from \"./RepulseDiv.js\";\nexport class Repulse extends RepulseBase {\n load(data) {\n super.load(data);\n if (isNull(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, DivType, ExternalInteractorBase, Rectangle, Vector, clamp, divMode, divModeExecute, getDistances, isDivModeEnabled, isInArray, millisecondsToSeconds, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Repulse } from \"./Options/Classes/Repulse.js\";\nconst repulseMode = \"repulse\", minDistance = 0, repulseRadiusFactor = 6, repulseRadiusPower = 3, squarePower = 2, minRadius = 0, minSpeed = 0, easingOffset = 1, half = 0.5;\nexport class Repulser extends ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._clickRepulse = () => {\n const container = this.container, repulseOptions = container.actualOptions.interactivity.modes.repulse;\n if (!repulseOptions) {\n return;\n }\n const repulse = container.repulse ?? { particles: [] };\n if (!repulse.finish) {\n if (!repulse.count) {\n repulse.count = 0;\n }\n repulse.count++;\n if (repulse.count === container.particles.count) {\n repulse.finish = true;\n }\n }\n if (repulse.clicking) {\n const repulseDistance = container.retina.repulseModeDistance;\n if (!repulseDistance || repulseDistance < minDistance) {\n return;\n }\n const repulseRadius = Math.pow(repulseDistance / repulseRadiusFactor, repulseRadiusPower), mouseClickPos = container.interactivity.mouse.clickPosition;\n if (mouseClickPos === undefined) {\n return;\n }\n const range = new Circle(mouseClickPos.x, mouseClickPos.y, repulseRadius), query = container.particles.quadTree.query(range, p => this.isEnabled(p));\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(mouseClickPos, particle.position), d = distance ** squarePower, velocity = repulseOptions.speed, force = (-repulseRadius * velocity) / d;\n if (d <= repulseRadius) {\n repulse.particles.push(particle);\n const vect = Vector.create(dx, dy);\n vect.length = force;\n particle.velocity.setTo(vect);\n }\n }\n }\n else if (repulse.clicking === false) {\n for (const particle of repulse.particles) {\n particle.velocity.setTo(particle.initialVelocity);\n }\n repulse.particles = [];\n }\n };\n this._hoverRepulse = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, repulseRadius = container.retina.repulseModeDistance;\n if (!repulseRadius || repulseRadius < minRadius || !mousePos) {\n return;\n }\n this._processRepulse(mousePos, repulseRadius, new Circle(mousePos.x, mousePos.y, repulseRadius));\n };\n this._processRepulse = (position, repulseRadius, area, divRepulse) => {\n const container = this.container, query = container.particles.quadTree.query(area, p => this.isEnabled(p)), repulseOptions = container.actualOptions.interactivity.modes.repulse;\n if (!repulseOptions) {\n return;\n }\n const { easing, speed, factor, maxSpeed } = repulseOptions, easingFunc = this._engine.getEasing(easing), velocity = (divRepulse?.speed ?? speed) * factor;\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(particle.position, position), repulseFactor = clamp(easingFunc(easingOffset - distance / repulseRadius) * velocity, minSpeed, maxSpeed), normVec = Vector.create(!distance ? velocity : (dx / distance) * repulseFactor, !distance ? velocity : (dy / distance) * repulseFactor);\n particle.position.addTo(normVec);\n }\n };\n this._singleSelectorRepulse = (selector, div) => {\n const container = this.container, repulse = container.actualOptions.interactivity.modes.repulse;\n if (!repulse) {\n return;\n }\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach(item => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, repulseRadius = elem.offsetWidth * half * pxRatio, area = div.type === DivType.circle\n ? new Circle(pos.x, pos.y, repulseRadius)\n : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio), divs = repulse.divs, divRepulse = divMode(divs, elem);\n this._processRepulse(pos, repulseRadius, area, divRepulse);\n });\n };\n this._engine = engine;\n if (!container.repulse) {\n container.repulse = { particles: [] };\n }\n this.handleClickMode = (mode) => {\n const options = this.container.actualOptions, repulseOpts = options.interactivity.modes.repulse;\n if (!repulseOpts || mode !== repulseMode) {\n return;\n }\n if (!container.repulse) {\n container.repulse = { particles: [] };\n }\n const repulse = container.repulse;\n repulse.clicking = true;\n repulse.count = 0;\n for (const particle of container.repulse.particles) {\n if (!this.isEnabled(particle)) {\n continue;\n }\n particle.velocity.setTo(particle.initialVelocity);\n }\n repulse.particles = [];\n repulse.finish = false;\n setTimeout(() => {\n if (container.destroyed) {\n return;\n }\n repulse.clicking = false;\n }, repulseOpts.duration * millisecondsToSeconds);\n };\n }\n clear() {\n }\n init() {\n const container = this.container, repulse = container.actualOptions.interactivity.modes.repulse;\n if (!repulse) {\n return;\n }\n container.retina.repulseModeDistance = repulse.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, hover = events.onHover, hoverEnabled = hover.enable, hoverMode = hover.mode, click = events.onClick, clickEnabled = click.enable, clickMode = click.mode, divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && isInArray(repulseMode, hoverMode)) {\n this._hoverRepulse();\n }\n else if (clickEnabled && isInArray(repulseMode, clickMode)) {\n this._clickRepulse();\n }\n else {\n divModeExecute(repulseMode, divs, (selector, div) => this._singleSelectorRepulse(selector, div));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv, hover = events.onHover, click = events.onClick, divRepulse = isDivModeEnabled(repulseMode, divs);\n if (!(divRepulse || (hover.enable && !!mouse.position) || (click.enable && mouse.clickPosition))) {\n return false;\n }\n const hoverMode = hover.mode, clickMode = click.mode;\n return isInArray(repulseMode, hoverMode) || isInArray(repulseMode, clickMode) || divRepulse;\n }\n loadModeOptions(options, ...sources) {\n if (!options.repulse) {\n options.repulse = new Repulse();\n }\n for (const source of sources) {\n options.repulse.load(source?.repulse);\n }\n }\n reset() {\n }\n}\n","import { Repulser } from \"./Repulser.js\";\nexport async function loadExternalRepulseInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalRepulse\", container => {\n return Promise.resolve(new Repulser(engine, container));\n }, refresh);\n}\nexport * from \"./Options/Classes/RepulseBase.js\";\nexport * from \"./Options/Classes/RepulseDiv.js\";\nexport * from \"./Options/Classes/Repulse.js\";\nexport * from \"./Options/Interfaces/IRepulseBase.js\";\nexport * from \"./Options/Interfaces/IRepulseDiv.js\";\nexport * from \"./Options/Interfaces/IRepulse.js\";\n","import { isNull } from \"@tsparticles/engine\";\nexport class Slow {\n constructor() {\n this.factor = 3;\n this.radius = 200;\n }\n load(data) {\n if (isNull(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.js\";\nconst slowMode = \"slow\", minRadius = 0;\nexport class Slower extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear(particle, delta, force) {\n if (particle.slow.inRange && !force) {\n return;\n }\n particle.slow.factor = 1;\n }\n init() {\n const container = this.container, slow = container.actualOptions.interactivity.modes.slow;\n if (!slow) {\n return;\n }\n container.retina.slowModeRadius = slow.radius * container.retina.pixelRatio;\n }\n interact() {\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n return events.onHover.enable && !!mouse.position && isInArray(slowMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.slow) {\n options.slow = new Slow();\n }\n for (const source of sources) {\n options.slow.load(source?.slow);\n }\n }\n reset(particle) {\n particle.slow.inRange = false;\n const container = this.container, options = container.actualOptions, mousePos = container.interactivity.mouse.position, radius = container.retina.slowModeRadius, slowOptions = options.interactivity.modes.slow;\n if (!slowOptions || !radius || radius < minRadius || !mousePos) {\n return;\n }\n const particlePos = particle.getPosition(), dist = getDistance(mousePos, particlePos), proximityFactor = dist / radius, slowFactor = slowOptions.factor, { slow } = particle;\n if (dist > radius) {\n return;\n }\n slow.inRange = true;\n slow.factor = proximityFactor / slowFactor;\n }\n}\n","import { Slower } from \"./Slower.js\";\nexport async function loadExternalSlowInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalSlow\", container => {\n return Promise.resolve(new Slower(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Slow.js\";\nexport * from \"./Options/Interfaces/ISlow.js\";\n","import { errorPrefix, getLogger, getStyleFromHsl } from \"@tsparticles/engine\";\nconst stringStart = 0, defaultOpacity = 1;\nconst currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d.]+%?\\))|currentcolor/gi;\nfunction replaceColorSvg(imageShape, color, opacity) {\n const { svgData } = imageShape;\n if (!svgData) {\n return \"\";\n }\n const colorStyle = getStyleFromHsl(color, opacity);\n if (svgData.includes(\"fill\")) {\n return svgData.replace(currentColorRegex, () => colorStyle);\n }\n const preFillIndex = svgData.indexOf(\">\");\n return `${svgData.substring(stringStart, preFillIndex)} fill=\"${colorStyle}\"${svgData.substring(preFillIndex)}`;\n}\nexport async function loadImage(image) {\n return new Promise((resolve) => {\n image.loading = true;\n const img = new Image();\n image.element = img;\n img.addEventListener(\"load\", () => {\n image.loading = false;\n resolve();\n });\n img.addEventListener(\"error\", () => {\n image.element = undefined;\n image.error = true;\n image.loading = false;\n getLogger().error(`${errorPrefix} loading image: ${image.source}`);\n resolve();\n });\n img.src = image.source;\n });\n}\nexport async function downloadSvgImage(image) {\n if (image.type !== \"svg\") {\n await loadImage(image);\n return;\n }\n image.loading = true;\n const response = await fetch(image.source);\n if (!response.ok) {\n getLogger().error(`${errorPrefix} Image not found`);\n image.error = true;\n }\n else {\n image.svgData = await response.text();\n }\n image.loading = false;\n}\nexport function replaceImageColor(image, imageData, color, particle) {\n const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? defaultOpacity), imageRes = {\n color,\n gif: imageData.gif,\n data: {\n ...image,\n svgData: svgColoredData,\n },\n loaded: false,\n ratio: imageData.width / imageData.height,\n replaceColor: imageData.replaceColor,\n source: imageData.src,\n };\n return new Promise(resolve => {\n const svg = new Blob([svgColoredData], { type: \"image/svg+xml\" }), domUrl = URL || window.URL || window.webkitURL || window, url = domUrl.createObjectURL(svg), img = new Image();\n img.addEventListener(\"load\", () => {\n imageRes.loaded = true;\n imageRes.element = img;\n resolve(imageRes);\n domUrl.revokeObjectURL(url);\n });\n const errorHandler = async () => {\n domUrl.revokeObjectURL(url);\n const img2 = {\n ...image,\n error: false,\n loading: true,\n };\n await loadImage(img2);\n imageRes.loaded = true;\n imageRes.element = img2.element;\n resolve(imageRes);\n };\n img.addEventListener(\"error\", () => void errorHandler());\n img.src = url;\n });\n}\n","export const InterlaceOffsets = [0, 4, 2, 1];\nexport const InterlaceSteps = [8, 8, 4, 2];\n","export class ByteStream {\n constructor(bytes) {\n this.pos = 0;\n this.data = new Uint8ClampedArray(bytes);\n }\n getString(count) {\n const slice = this.data.slice(this.pos, this.pos + count);\n this.pos += slice.length;\n return slice.reduce((acc, curr) => acc + String.fromCharCode(curr), \"\");\n }\n nextByte() {\n return this.data[this.pos++];\n }\n nextTwoBytes() {\n const increment = 2, previous = 1, shift = 8;\n this.pos += increment;\n return this.data[this.pos - increment] + (this.data[this.pos - previous] << shift);\n }\n readSubBlocks() {\n let blockString = \"\", size = 0;\n const minCount = 0, emptySize = 0;\n do {\n size = this.data[this.pos++];\n for (let count = size; --count >= minCount; blockString += String.fromCharCode(this.data[this.pos++])) {\n }\n } while (size !== emptySize);\n return blockString;\n }\n readSubBlocksBin() {\n let size = this.data[this.pos], len = 0;\n const emptySize = 0, increment = 1;\n for (let offset = 0; size !== emptySize; offset += size + increment, size = this.data[this.pos + offset]) {\n len += size;\n }\n const blockData = new Uint8Array(len);\n size = this.data[this.pos++];\n for (let i = 0; size !== emptySize; size = this.data[this.pos++]) {\n for (let count = size; --count >= emptySize; blockData[i++] = this.data[this.pos++]) {\n }\n }\n return blockData;\n }\n skipSubBlocks() {\n for (const increment = 1, noData = 0; this.data[this.pos] !== noData; this.pos += this.data[this.pos] + increment) {\n }\n this.pos++;\n }\n}\n","export var DisposalMethod;\n(function (DisposalMethod) {\n DisposalMethod[DisposalMethod[\"Replace\"] = 0] = \"Replace\";\n DisposalMethod[DisposalMethod[\"Combine\"] = 1] = \"Combine\";\n DisposalMethod[DisposalMethod[\"RestoreBackground\"] = 2] = \"RestoreBackground\";\n DisposalMethod[DisposalMethod[\"RestorePrevious\"] = 3] = \"RestorePrevious\";\n DisposalMethod[DisposalMethod[\"UndefinedA\"] = 4] = \"UndefinedA\";\n DisposalMethod[DisposalMethod[\"UndefinedB\"] = 5] = \"UndefinedB\";\n DisposalMethod[DisposalMethod[\"UndefinedC\"] = 6] = \"UndefinedC\";\n DisposalMethod[DisposalMethod[\"UndefinedD\"] = 7] = \"UndefinedD\";\n})(DisposalMethod || (DisposalMethod = {}));\n","export var GIFDataHeaders;\n(function (GIFDataHeaders) {\n GIFDataHeaders[GIFDataHeaders[\"Extension\"] = 33] = \"Extension\";\n GIFDataHeaders[GIFDataHeaders[\"ApplicationExtension\"] = 255] = \"ApplicationExtension\";\n GIFDataHeaders[GIFDataHeaders[\"GraphicsControlExtension\"] = 249] = \"GraphicsControlExtension\";\n GIFDataHeaders[GIFDataHeaders[\"PlainTextExtension\"] = 1] = \"PlainTextExtension\";\n GIFDataHeaders[GIFDataHeaders[\"CommentExtension\"] = 254] = \"CommentExtension\";\n GIFDataHeaders[GIFDataHeaders[\"Image\"] = 44] = \"Image\";\n GIFDataHeaders[GIFDataHeaders[\"EndOfFile\"] = 59] = \"EndOfFile\";\n})(GIFDataHeaders || (GIFDataHeaders = {}));\n","import { loadImage } from \"../Utils.js\";\nimport { InterlaceOffsets, InterlaceSteps } from \"./Constants.js\";\nimport { ByteStream } from \"./ByteStream.js\";\nimport { DisposalMethod } from \"./Enums/DisposalMethod.js\";\nimport { GIFDataHeaders } from \"./Types/GIFDataHeaders.js\";\nconst origin = {\n x: 0,\n y: 0,\n}, defaultFrame = 0, half = 0.5, initialTime = 0, firstIndex = 0, defaultLoopCount = 0;\nfunction parseColorTable(byteStream, count) {\n const colors = [];\n for (let i = 0; i < count; i++) {\n colors.push({\n r: byteStream.data[byteStream.pos],\n g: byteStream.data[byteStream.pos + 1],\n b: byteStream.data[byteStream.pos + 2],\n });\n byteStream.pos += 3;\n }\n return colors;\n}\nfunction parseExtensionBlock(byteStream, gif, getFrameIndex, getTransparencyIndex) {\n switch (byteStream.nextByte()) {\n case GIFDataHeaders.GraphicsControlExtension: {\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 GIFDataHeaders.ApplicationExtension: {\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 GIFDataHeaders.CommentExtension: {\n gif.comments.push([getFrameIndex(false), byteStream.readSubBlocks()]);\n break;\n }\n case GIFDataHeaders.PlainTextExtension: {\n if (gif.globalColorTable.length === 0) {\n throw new EvalError(\"plain text extension without global color table\");\n }\n byteStream.pos++;\n gif.frames[getFrameIndex(false)].plainTextData = {\n left: byteStream.nextTwoBytes(),\n top: byteStream.nextTwoBytes(),\n width: byteStream.nextTwoBytes(),\n height: byteStream.nextTwoBytes(),\n charSize: {\n width: byteStream.nextTwoBytes(),\n height: byteStream.nextTwoBytes(),\n },\n foregroundColor: byteStream.nextByte(),\n backgroundColor: byteStream.nextByte(),\n text: byteStream.readSubBlocks(),\n };\n break;\n }\n default:\n byteStream.skipSubBlocks();\n break;\n }\n}\nasync function parseImageBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback) {\n const frame = gif.frames[getFrameIndex(true)];\n frame.left = byteStream.nextTwoBytes();\n frame.top = byteStream.nextTwoBytes();\n frame.width = byteStream.nextTwoBytes();\n frame.height = byteStream.nextTwoBytes();\n const packedByte = byteStream.nextByte(), localColorTableFlag = (packedByte & 0x80) === 0x80, interlacedFlag = (packedByte & 0x40) === 0x40;\n frame.sortFlag = (packedByte & 0x20) === 0x20;\n frame.reserved = (packedByte & 0x18) >>> 3;\n const localColorCount = 1 << ((packedByte & 7) + 1);\n if (localColorTableFlag) {\n frame.localColorTable = parseColorTable(byteStream, localColorCount);\n }\n const getColor = (index) => {\n const { r, g, b } = (localColorTableFlag ? frame.localColorTable : gif.globalColorTable)[index];\n if (index !== getTransparencyIndex(null)) {\n return { r, g, b, a: 255 };\n }\n return { r, g, b, a: avgAlpha ? ~~((r + g + b) / 3) : 0 };\n };\n const image = (() => {\n try {\n return new ImageData(frame.width, frame.height, { colorSpace: \"srgb\" });\n }\n catch (error) {\n if (error instanceof DOMException && error.name === \"IndexSizeError\") {\n return null;\n }\n throw error;\n }\n })();\n if (image == null) {\n throw new EvalError(\"GIF frame size is to large\");\n }\n const minCodeSize = byteStream.nextByte(), imageData = byteStream.readSubBlocksBin(), clearCode = 1 << minCodeSize;\n const readBits = (pos, len) => {\n const bytePos = pos >>> 3, bitPos = pos & 7;\n return (((imageData[bytePos] + (imageData[bytePos + 1] << 8) + (imageData[bytePos + 2] << 16)) &\n (((1 << len) - 1) << bitPos)) >>>\n bitPos);\n };\n if (interlacedFlag) {\n for (let code = 0, size = minCodeSize + 1, pos = 0, dic = [[0]], pass = 0; pass < 4; pass++) {\n if (InterlaceOffsets[pass] < frame.height) {\n let pixelPos = 0, lineIndex = 0, exit = false;\n while (!exit) {\n const last = code;\n code = readBits(pos, size);\n pos += size + 1;\n if (code === clearCode) {\n size = minCodeSize + 1;\n dic.length = clearCode + 2;\n for (let i = 0; i < dic.length; i++) {\n dic[i] = i < clearCode ? [i] : [];\n }\n }\n else {\n if (code >= dic.length) {\n dic.push(dic[last].concat(dic[last][0]));\n }\n else if (last !== clearCode) {\n dic.push(dic[last].concat(dic[code][0]));\n }\n for (const item of dic[code]) {\n const { r, g, b, a } = getColor(item);\n image.data.set([r, g, b, a], InterlaceOffsets[pass] * frame.width +\n InterlaceSteps[pass] * lineIndex +\n (pixelPos % (frame.width * 4)));\n pixelPos += 4;\n }\n if (dic.length === 1 << size && size < 0xc) {\n size++;\n }\n }\n if (pixelPos === frame.width * 4 * (lineIndex + 1)) {\n lineIndex++;\n if (InterlaceOffsets[pass] + InterlaceSteps[pass] * lineIndex >= frame.height) {\n exit = true;\n }\n }\n }\n }\n progressCallback?.(byteStream.pos / (byteStream.data.length - 1), getFrameIndex(false) + 1, image, { x: frame.left, y: frame.top }, { width: gif.width, height: gif.height });\n }\n frame.image = image;\n frame.bitmap = await createImageBitmap(image);\n }\n else {\n let code = 0, size = minCodeSize + 1, pos = 0, pixelPos = -4, exit = false;\n const dic = [[0]];\n while (!exit) {\n const last = code;\n code = readBits(pos, size);\n pos += size;\n if (code === clearCode) {\n size = minCodeSize + 1;\n dic.length = clearCode + 2;\n for (let i = 0; i < dic.length; i++) {\n dic[i] = i < clearCode ? [i] : [];\n }\n }\n else {\n if (code === clearCode + 1) {\n exit = true;\n break;\n }\n if (code >= dic.length) {\n dic.push(dic[last].concat(dic[last][0]));\n }\n else if (last !== clearCode) {\n dic.push(dic[last].concat(dic[code][0]));\n }\n for (const item of dic[code]) {\n const { r, g, b, a } = getColor(item);\n image.data.set([r, g, b, a], (pixelPos += 4));\n }\n if (dic.length >= 1 << size && size < 0xc) {\n size++;\n }\n }\n }\n frame.image = image;\n frame.bitmap = await createImageBitmap(image);\n progressCallback?.((byteStream.pos + 1) / byteStream.data.length, getFrameIndex(false) + 1, frame.image, { x: frame.left, y: frame.top }, { width: gif.width, height: gif.height });\n }\n}\nasync function parseBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback) {\n switch (byteStream.nextByte()) {\n case GIFDataHeaders.EndOfFile:\n return true;\n case GIFDataHeaders.Image:\n await parseImageBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback);\n break;\n case GIFDataHeaders.Extension:\n parseExtensionBlock(byteStream, gif, getFrameIndex, getTransparencyIndex);\n break;\n default:\n throw new EvalError(\"undefined block found\");\n }\n return false;\n}\nexport function getGIFLoopAmount(gif) {\n for (const extension of gif.applicationExtensions) {\n if (extension.identifier + extension.authenticationCode !== \"NETSCAPE2.0\") {\n continue;\n }\n return extension.data[1] + (extension.data[2] << 8);\n }\n return NaN;\n}\nexport async function decodeGIF(gifURL, progressCallback, avgAlpha) {\n if (!avgAlpha)\n avgAlpha = false;\n const res = await fetch(gifURL);\n if (!res.ok && res.status === 404) {\n throw new EvalError(\"file not found\");\n }\n const buffer = await res.arrayBuffer();\n const gif = {\n width: 0,\n height: 0,\n totalTime: 0,\n colorRes: 0,\n pixelAspectRatio: 0,\n frames: [],\n sortFlag: false,\n globalColorTable: [],\n backgroundImage: new ImageData(1, 1, { colorSpace: \"srgb\" }),\n comments: [],\n applicationExtensions: [],\n }, byteStream = new ByteStream(new Uint8ClampedArray(buffer));\n if (byteStream.getString(6) !== \"GIF89a\") {\n throw new Error(\"not a supported GIF file\");\n }\n gif.width = byteStream.nextTwoBytes();\n gif.height = byteStream.nextTwoBytes();\n const packedByte = byteStream.nextByte(), globalColorTableFlag = (packedByte & 0x80) === 0x80;\n gif.colorRes = (packedByte & 0x70) >>> 4;\n gif.sortFlag = (packedByte & 8) === 8;\n const globalColorCount = 1 << ((packedByte & 7) + 1), backgroundColorIndex = byteStream.nextByte();\n gif.pixelAspectRatio = byteStream.nextByte();\n if (gif.pixelAspectRatio !== 0) {\n gif.pixelAspectRatio = (gif.pixelAspectRatio + 0xf) / 0x40;\n }\n if (globalColorTableFlag) {\n gif.globalColorTable = parseColorTable(byteStream, globalColorCount);\n }\n const backgroundImage = (() => {\n try {\n return new ImageData(gif.width, gif.height, { colorSpace: \"srgb\" });\n }\n catch (error) {\n if (error instanceof DOMException && error.name === \"IndexSizeError\") {\n return null;\n }\n throw error;\n }\n })();\n if (backgroundImage == null) {\n throw new Error(\"GIF frame size is to large\");\n }\n const { r, g, b } = gif.globalColorTable[backgroundColorIndex];\n backgroundImage.data.set(globalColorTableFlag ? [r, g, b, 255] : [0, 0, 0, 0]);\n for (let i = 4; i < backgroundImage.data.length; i *= 2) {\n backgroundImage.data.copyWithin(i, 0, i);\n }\n gif.backgroundImage = backgroundImage;\n let frameIndex = -1, incrementFrameIndex = true, transparencyIndex = -1;\n const getframeIndex = (increment) => {\n if (increment) {\n incrementFrameIndex = true;\n }\n return frameIndex;\n };\n const getTransparencyIndex = (newValue) => {\n if (newValue != null) {\n transparencyIndex = newValue;\n }\n return transparencyIndex;\n };\n try {\n do {\n if (incrementFrameIndex) {\n gif.frames.push({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n disposalMethod: DisposalMethod.Replace,\n image: new ImageData(1, 1, { colorSpace: \"srgb\" }),\n plainTextData: null,\n userInputDelayFlag: false,\n delayTime: 0,\n sortFlag: false,\n localColorTable: [],\n reserved: 0,\n GCreserved: 0,\n });\n frameIndex++;\n transparencyIndex = -1;\n incrementFrameIndex = false;\n }\n } while (!(await parseBlock(byteStream, gif, avgAlpha, getframeIndex, getTransparencyIndex, progressCallback)));\n gif.frames.length--;\n for (const frame of gif.frames) {\n if (frame.userInputDelayFlag && frame.delayTime === 0) {\n gif.totalTime = Infinity;\n break;\n }\n gif.totalTime += frame.delayTime;\n }\n return gif;\n }\n catch (error) {\n if (error instanceof EvalError) {\n throw new Error(`error while parsing frame ${frameIndex} \"${error.message}\"`);\n }\n throw error;\n }\n}\nexport function drawGif(data) {\n const { context, radius, particle, delta } = data, image = particle.image;\n if (!image?.gifData || !image.gif) {\n return;\n }\n const offscreenCanvas = new OffscreenCanvas(image.gifData.width, image.gifData.height), offscreenContext = offscreenCanvas.getContext(\"2d\");\n if (!offscreenContext) {\n throw new Error(\"could not create offscreen canvas context\");\n }\n offscreenContext.imageSmoothingQuality = \"low\";\n offscreenContext.imageSmoothingEnabled = false;\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n if (particle.gifLoopCount === undefined) {\n particle.gifLoopCount = image.gifLoopCount ?? defaultLoopCount;\n }\n let frameIndex = particle.gifFrame ?? defaultFrame;\n const pos = { x: -image.gifData.width * half, y: -image.gifData.height * half }, frame = image.gifData.frames[frameIndex];\n if (particle.gifTime === undefined) {\n particle.gifTime = initialTime;\n }\n if (!frame.bitmap) {\n return;\n }\n context.scale(radius / image.gifData.width, radius / image.gifData.height);\n switch (frame.disposalMethod) {\n case DisposalMethod.UndefinedA:\n case DisposalMethod.UndefinedB:\n case DisposalMethod.UndefinedC:\n case DisposalMethod.UndefinedD:\n case DisposalMethod.Replace:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n break;\n case DisposalMethod.Combine:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n break;\n case DisposalMethod.RestoreBackground:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n if (!image.gifData.globalColorTable.length) {\n offscreenContext.putImageData(image.gifData.frames[firstIndex].image, pos.x + frame.left, pos.y + frame.top);\n }\n else {\n offscreenContext.putImageData(image.gifData.backgroundImage, pos.x, pos.y);\n }\n break;\n case DisposalMethod.RestorePrevious:\n {\n const previousImageData = offscreenContext.getImageData(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n offscreenContext.putImageData(previousImageData, origin.x, origin.y);\n }\n break;\n }\n particle.gifTime += delta.value;\n if (particle.gifTime > frame.delayTime) {\n particle.gifTime -= frame.delayTime;\n if (++frameIndex >= image.gifData.frames.length) {\n if (--particle.gifLoopCount <= defaultLoopCount) {\n return;\n }\n frameIndex = firstIndex;\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n }\n particle.gifFrame = frameIndex;\n }\n context.scale(image.gifData.width / radius, image.gifData.height / radius);\n}\nexport async function loadGifImage(image) {\n if (image.type !== \"gif\") {\n await loadImage(image);\n return;\n }\n image.loading = true;\n try {\n image.gifData = await decodeGIF(image.source);\n image.gifLoopCount = getGIFLoopAmount(image.gifData) ?? defaultLoopCount;\n if (!image.gifLoopCount) {\n image.gifLoopCount = Infinity;\n }\n }\n catch {\n image.error = true;\n }\n image.loading = false;\n}\n","import { errorPrefix } from \"@tsparticles/engine\";\nimport { replaceImageColor } from \"./Utils.js\";\nimport { drawGif } from \"./GifUtils/Utils.js\";\nconst double = 2, defaultAlpha = 1, sides = 12, defaultRatio = 1;\nexport class ImageDrawer {\n constructor(engine) {\n this.validTypes = [\"image\", \"images\"];\n this.loadImageShape = async (imageShape) => {\n if (!this._engine.loadImage) {\n throw new Error(`${errorPrefix} image shape not initialized`);\n }\n await this._engine.loadImage({\n gif: imageShape.gif,\n name: imageShape.name,\n replaceColor: imageShape.replaceColor ?? false,\n src: imageShape.src,\n });\n };\n this._engine = engine;\n }\n addImage(image) {\n if (!this._engine.images) {\n this._engine.images = [];\n }\n this._engine.images.push(image);\n }\n draw(data) {\n const { context, radius, particle, opacity } = data, image = particle.image, element = image?.element;\n if (!image) {\n return;\n }\n context.globalAlpha = opacity;\n if (image.gif && image.gifData) {\n drawGif(data);\n }\n else if (element) {\n const ratio = image.ratio, pos = {\n x: -radius,\n y: -radius,\n }, diameter = radius * double;\n context.drawImage(element, pos.x, pos.y, diameter, diameter / ratio);\n }\n context.globalAlpha = defaultAlpha;\n }\n getSidesCount() {\n return sides;\n }\n async init(container) {\n const options = container.actualOptions;\n if (!options.preload || !this._engine.loadImage) {\n return;\n }\n for (const imageData of options.preload) {\n await this._engine.loadImage(imageData);\n }\n }\n loadShape(particle) {\n if (particle.shape !== \"image\" && particle.shape !== \"images\") {\n return;\n }\n if (!this._engine.images) {\n this._engine.images = [];\n }\n const imageData = particle.shapeData;\n if (!imageData) {\n return;\n }\n const image = this._engine.images.find((t) => t.name === imageData.name || t.source === imageData.src);\n if (!image) {\n void this.loadImageShape(imageData).then(() => {\n this.loadShape(particle);\n });\n }\n }\n particleInit(container, particle) {\n if (particle.shape !== \"image\" && particle.shape !== \"images\") {\n return;\n }\n if (!this._engine.images) {\n this._engine.images = [];\n }\n const images = this._engine.images, imageData = particle.shapeData;\n if (!imageData) {\n return;\n }\n const color = particle.getFillColor(), image = images.find((t) => t.name === imageData.name || t.source === imageData.src);\n if (!image) {\n return;\n }\n const replaceColor = imageData.replaceColor ?? image.replaceColor;\n if (image.loading) {\n setTimeout(() => {\n this.particleInit(container, particle);\n });\n return;\n }\n void (async () => {\n let imageRes;\n if (image.svgData && color) {\n imageRes = await replaceImageColor(image, imageData, color, particle);\n }\n else {\n imageRes = {\n color,\n data: image,\n element: image.element,\n gif: image.gif,\n gifData: image.gifData,\n gifLoopCount: image.gifLoopCount,\n loaded: true,\n ratio: imageData.width && imageData.height\n ? imageData.width / imageData.height\n : (image.ratio ?? defaultRatio),\n replaceColor: replaceColor,\n source: imageData.src,\n };\n }\n if (!imageRes.ratio) {\n imageRes.ratio = 1;\n }\n const fill = imageData.fill ?? particle.shapeFill, close = imageData.close ?? particle.shapeClose, imageShape = {\n image: imageRes,\n fill,\n close,\n };\n particle.image = imageShape.image;\n particle.shapeFill = imageShape.fill;\n particle.shapeClose = imageShape.close;\n })();\n }\n}\n","import { isNull } from \"@tsparticles/engine\";\nexport class Preload {\n constructor() {\n this.src = \"\";\n this.gif = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.gif !== undefined) {\n this.gif = data.gif;\n }\n if (data.height !== undefined) {\n this.height = data.height;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n if (data.replaceColor !== undefined) {\n this.replaceColor = data.replaceColor;\n }\n if (data.src !== undefined) {\n this.src = data.src;\n }\n if (data.width !== undefined) {\n this.width = data.width;\n }\n }\n}\n","import { Preload } from \"./Options/Classes/Preload.js\";\nexport class ImagePreloaderPlugin {\n constructor(engine) {\n this.id = \"imagePreloader\";\n this._engine = engine;\n }\n async getPlugin() {\n await Promise.resolve();\n return {};\n }\n loadOptions(options, source) {\n if (!source?.preload) {\n return;\n }\n if (!options.preload) {\n options.preload = [];\n }\n const preloadOptions = options.preload;\n for (const item of source.preload) {\n const existing = preloadOptions.find(t => t.name === item.name || t.src === item.src);\n if (existing) {\n existing.load(item);\n }\n else {\n const preload = new Preload();\n preload.load(item);\n preloadOptions.push(preload);\n }\n }\n }\n needsPlugin() {\n return true;\n }\n}\n","import { downloadSvgImage, loadImage } from \"./Utils.js\";\nimport { ImageDrawer } from \"./ImageDrawer.js\";\nimport { ImagePreloaderPlugin } from \"./ImagePreloader.js\";\nimport { errorPrefix } from \"@tsparticles/engine\";\nimport { loadGifImage } from \"./GifUtils/Utils.js\";\nconst extLength = 3;\nfunction addLoadImageToEngine(engine) {\n if (engine.loadImage) {\n return;\n }\n engine.loadImage = async (data) => {\n if (!data.name && !data.src) {\n throw new Error(`${errorPrefix} no image source provided`);\n }\n if (!engine.images) {\n engine.images = [];\n }\n if (engine.images.find((t) => t.name === data.name || t.source === data.src)) {\n return;\n }\n try {\n const image = {\n gif: data.gif ?? false,\n name: data.name ?? data.src,\n source: data.src,\n type: data.src.substring(data.src.length - extLength),\n error: false,\n loading: true,\n replaceColor: data.replaceColor,\n ratio: data.width && data.height ? data.width / data.height : undefined,\n };\n engine.images.push(image);\n let imageFunc;\n if (data.gif) {\n imageFunc = loadGifImage;\n }\n else {\n imageFunc = data.replaceColor ? downloadSvgImage : loadImage;\n }\n await imageFunc(image);\n }\n catch {\n throw new Error(`${errorPrefix} ${data.name ?? data.src} not found`);\n }\n };\n}\nexport async function loadImageShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n addLoadImageToEngine(engine);\n const preloader = new ImagePreloaderPlugin(engine);\n await engine.addPlugin(preloader, refresh);\n await engine.addShape(new ImageDrawer(engine), refresh);\n}\n","import { ValueWithRandom, isNull } from \"@tsparticles/engine\";\nexport class LifeDelay extends ValueWithRandom {\n constructor() {\n super();\n this.sync = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n super.load(data);\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n","import { ValueWithRandom, isNull } from \"@tsparticles/engine\";\nexport class LifeDuration extends ValueWithRandom {\n constructor() {\n super();\n this.sync = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n super.load(data);\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n","import { isNull } from \"@tsparticles/engine\";\nimport { LifeDelay } from \"./LifeDelay.js\";\nimport { LifeDuration } from \"./LifeDuration.js\";\nexport class Life {\n constructor() {\n this.count = 0;\n this.delay = new LifeDelay();\n this.duration = new LifeDuration();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.count !== undefined) {\n this.count = data.count;\n }\n this.delay.load(data.delay);\n this.duration.load(data.duration);\n }\n}\n","import { getRangeValue, millisecondsToSeconds, randomInRange, setRangeValue, } from \"@tsparticles/engine\";\nconst noTime = 0, infiniteValue = -1, noLife = 0, minCanvasSize = 0;\nexport function updateLife(particle, delta, canvasSize) {\n if (!particle.life) {\n return;\n }\n const life = particle.life;\n let justSpawned = false;\n if (particle.spawning) {\n life.delayTime += delta.value;\n if (life.delayTime >= particle.life.delay) {\n justSpawned = true;\n particle.spawning = false;\n life.delayTime = noTime;\n life.time = noTime;\n }\n else {\n return;\n }\n }\n if (life.duration === infiniteValue) {\n return;\n }\n if (particle.spawning) {\n return;\n }\n if (justSpawned) {\n life.time = noTime;\n }\n else {\n life.time += delta.value;\n }\n if (life.time < life.duration) {\n return;\n }\n life.time = noTime;\n if (particle.life.count > noLife) {\n particle.life.count--;\n }\n if (particle.life.count === noLife) {\n particle.destroy();\n return;\n }\n const widthRange = setRangeValue(minCanvasSize, canvasSize.width), heightRange = setRangeValue(minCanvasSize, canvasSize.width);\n particle.position.x = randomInRange(widthRange);\n particle.position.y = randomInRange(heightRange);\n particle.spawning = true;\n life.delayTime = noTime;\n life.time = noTime;\n particle.reset();\n const lifeOptions = particle.options.life;\n if (lifeOptions) {\n life.delay = getRangeValue(lifeOptions.delay.value) * millisecondsToSeconds;\n life.duration = getRangeValue(lifeOptions.duration.value) * millisecondsToSeconds;\n }\n}\n","import { getRandom, getRangeValue, millisecondsToSeconds, } from \"@tsparticles/engine\";\nimport { Life } from \"./Options/Classes/Life.js\";\nimport { updateLife } from \"./Utils.js\";\nconst noTime = 0, identity = 1, infiniteValue = -1;\nexport class LifeUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const container = this.container, particlesOptions = particle.options, lifeOptions = particlesOptions.life;\n if (!lifeOptions) {\n return;\n }\n particle.life = {\n delay: container.retina.reduceFactor\n ? ((getRangeValue(lifeOptions.delay.value) * (lifeOptions.delay.sync ? identity : getRandom())) /\n container.retina.reduceFactor) *\n millisecondsToSeconds\n : noTime,\n delayTime: noTime,\n duration: container.retina.reduceFactor\n ? ((getRangeValue(lifeOptions.duration.value) * (lifeOptions.duration.sync ? identity : getRandom())) /\n container.retina.reduceFactor) *\n millisecondsToSeconds\n : noTime,\n time: noTime,\n count: lifeOptions.count,\n };\n if (particle.life.duration <= noTime) {\n particle.life.duration = infiniteValue;\n }\n if (particle.life.count <= noTime) {\n particle.life.count = infiniteValue;\n }\n if (particle.life) {\n particle.spawning = particle.life.delay > noTime;\n }\n }\n isEnabled(particle) {\n return !particle.destroyed;\n }\n loadOptions(options, ...sources) {\n if (!options.life) {\n options.life = new Life();\n }\n for (const source of sources) {\n options.life.load(source?.life);\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle) || !particle.life) {\n return;\n }\n updateLife(particle, delta, this.container.canvas.size);\n }\n}\n","import { LifeUpdater } from \"./LifeUpdater.js\";\nexport async function loadLifeUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"life\", async (container) => {\n return Promise.resolve(new LifeUpdater(container));\n }, refresh);\n}\n","export function drawLine(data) {\n const { context, particle, radius } = data, shapeData = particle.shapeData, centerY = 0;\n context.moveTo(-radius, centerY);\n context.lineTo(radius, centerY);\n context.lineCap = shapeData?.cap ?? \"butt\";\n}\n","import { drawLine } from \"./Utils.js\";\nconst sides = 1;\nexport class LineDrawer {\n constructor() {\n this.validTypes = [\"line\"];\n }\n draw(data) {\n drawLine(data);\n }\n getSidesCount() {\n return sides;\n }\n}\n","import { LineDrawer } from \"./LineDrawer.js\";\nexport async function loadLineShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new LineDrawer(), refresh);\n}\n","import { isSsr } from \"@tsparticles/engine\";\nconst half = 0.5;\nexport class ParallaxMover {\n init() {\n }\n isEnabled(particle) {\n return (!isSsr() &&\n !particle.destroyed &&\n particle.container.actualOptions.interactivity.events.onHover.parallax.enable);\n }\n move(particle) {\n const container = particle.container, options = container.actualOptions, parallaxOptions = options.interactivity.events.onHover.parallax;\n if (isSsr() || !parallaxOptions.enable) {\n return;\n }\n const parallaxForce = parallaxOptions.force, mousePos = container.interactivity.mouse.position;\n if (!mousePos) {\n return;\n }\n const canvasSize = container.canvas.size, canvasCenter = {\n x: canvasSize.width * half,\n y: canvasSize.height * half,\n }, parallaxSmooth = parallaxOptions.smooth, factor = particle.getRadius() / parallaxForce, centerDistance = {\n x: (mousePos.x - canvasCenter.x) * factor,\n y: (mousePos.y - canvasCenter.y) * factor,\n }, { offset } = particle;\n offset.x += (centerDistance.x - offset.x) / parallaxSmooth;\n offset.y += (centerDistance.y - offset.y) / parallaxSmooth;\n }\n}\n","import { ParallaxMover } from \"./ParallaxMover.js\";\nexport async function loadParallaxMover(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addMover(\"parallax\", () => {\n return Promise.resolve(new ParallaxMover());\n }, refresh);\n}\n","import { ParticlesInteractorBase, getDistances, getRangeValue, } from \"@tsparticles/engine\";\nconst attractFactor = 1000, identity = 1;\nexport class Attractor extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n }\n interact(p1) {\n const container = this.container;\n if (p1.attractDistance === undefined) {\n p1.attractDistance = getRangeValue(p1.options.move.attract.distance) * container.retina.pixelRatio;\n }\n const distance = p1.attractDistance, pos1 = p1.getPosition(), query = container.particles.quadTree.queryCircle(pos1, distance);\n for (const p2 of query) {\n if (p1 === p2 || !p2.options.move.attract.enable || p2.destroyed || p2.spawning) {\n continue;\n }\n const pos2 = p2.getPosition(), { dx, dy } = getDistances(pos1, pos2), rotate = p1.options.move.attract.rotate, ax = dx / (rotate.x * attractFactor), ay = dy / (rotate.y * attractFactor), p1Factor = p2.size.value / p1.size.value, p2Factor = identity / p1Factor;\n p1.velocity.x -= ax * p1Factor;\n p1.velocity.y -= ay * p1Factor;\n p2.velocity.x += ax * p2Factor;\n p2.velocity.y += ay * p2Factor;\n }\n }\n isEnabled(particle) {\n return particle.options.move.attract.enable;\n }\n reset() {\n }\n}\n","import { Attractor } from \"./Attractor.js\";\nexport async function loadParticlesAttractInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"particlesAttract\", container => {\n return Promise.resolve(new Attractor(container));\n }, refresh);\n}\n","import { clamp } from \"@tsparticles/engine\";\nconst half = 0.5, absorbFactor = 10, minAbsorbFactor = 0;\nfunction updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {\n const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) / absorbFactor, minAbsorbFactor, r2);\n p1.size.value += factor * half;\n p2.size.value -= factor;\n if (r2 <= pixelRatio) {\n p2.size.value = 0;\n p2.destroy();\n }\n}\nexport function absorb(p1, p2, delta, pixelRatio) {\n const r1 = p1.getRadius(), r2 = p2.getRadius();\n if (r1 === undefined && r2 !== undefined) {\n p1.destroy();\n }\n else if (r1 !== undefined && r2 === undefined) {\n p2.destroy();\n }\n else if (r1 !== undefined && r2 !== undefined) {\n if (r1 >= r2) {\n updateAbsorb(p1, r1, p2, r2, delta, pixelRatio);\n }\n else {\n updateAbsorb(p2, r2, p1, r1, delta, pixelRatio);\n }\n }\n}\n","import { circleBounce, circleBounceDataFromParticle, getRangeValue } from \"@tsparticles/engine\";\nconst fixBounceSpeed = (p) => {\n if (p.collisionMaxSpeed === undefined) {\n p.collisionMaxSpeed = getRangeValue(p.options.collisions.maxSpeed);\n }\n if (p.velocity.length > p.collisionMaxSpeed) {\n p.velocity.length = p.collisionMaxSpeed;\n }\n};\nexport function bounce(p1, p2) {\n circleBounce(circleBounceDataFromParticle(p1), circleBounceDataFromParticle(p2));\n fixBounceSpeed(p1);\n fixBounceSpeed(p2);\n}\n","import { bounce } from \"./Bounce.js\";\nexport function destroy(p1, p2) {\n if (!p1.unbreakable && !p2.unbreakable) {\n bounce(p1, p2);\n }\n if (p1.getRadius() === undefined && p2.getRadius() !== undefined) {\n p1.destroy();\n }\n else if (p1.getRadius() !== undefined && p2.getRadius() === undefined) {\n p2.destroy();\n }\n else if (p1.getRadius() !== undefined && p2.getRadius() !== undefined) {\n const deleteP = p1.getRadius() >= p2.getRadius() ? p2 : p1;\n deleteP.destroy();\n }\n}\n","import { CollisionMode } from \"@tsparticles/engine\";\nimport { absorb } from \"./Absorb.js\";\nimport { bounce } from \"./Bounce.js\";\nimport { destroy } from \"./Destroy.js\";\nexport function resolveCollision(p1, p2, delta, pixelRatio) {\n switch (p1.options.collisions.mode) {\n case CollisionMode.absorb: {\n absorb(p1, p2, delta, pixelRatio);\n break;\n }\n case CollisionMode.bounce: {\n bounce(p1, p2);\n break;\n }\n case CollisionMode.destroy: {\n destroy(p1, p2);\n break;\n }\n }\n}\n","import { ParticlesInteractorBase, getDistance } from \"@tsparticles/engine\";\nimport { resolveCollision } from \"./ResolveCollision.js\";\nconst double = 2;\nexport class Collider extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n }\n interact(p1, delta) {\n if (p1.destroyed || p1.spawning) {\n return;\n }\n const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * double);\n for (const p2 of query) {\n if (p1 === p2 ||\n !p2.options.collisions.enable ||\n p1.options.collisions.mode !== p2.options.collisions.mode ||\n p2.destroyed ||\n p2.spawning) {\n continue;\n }\n const pos2 = p2.getPosition(), radius2 = p2.getRadius();\n if (Math.abs(Math.round(pos1.z) - Math.round(pos2.z)) > radius1 + radius2) {\n continue;\n }\n const dist = getDistance(pos1, pos2), distP = radius1 + radius2;\n if (dist > distP) {\n continue;\n }\n resolveCollision(p1, p2, delta, container.retina.pixelRatio);\n }\n }\n isEnabled(particle) {\n return particle.options.collisions.enable;\n }\n reset() {\n }\n}\n","import { Collider } from \"./Collider.js\";\nexport async function loadParticlesCollisionsInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"particlesCollisions\", container => {\n return Promise.resolve(new Collider(container));\n }, refresh);\n}\n","import { Circle, Rectangle } from \"@tsparticles/engine\";\nconst double = 2;\nexport class CircleWarp extends Circle {\n constructor(x, y, radius, canvasSize) {\n super(x, y, radius);\n this.canvasSize = canvasSize;\n this.canvasSize = { ...canvasSize };\n }\n contains(point) {\n const { width, height } = this.canvasSize, { x, y } = point;\n return (super.contains(point) ||\n super.contains({ x: x - width, y }) ||\n super.contains({ x: x - width, y: y - height }) ||\n super.contains({ x, y: y - height }));\n }\n intersects(range) {\n if (super.intersects(range)) {\n return true;\n }\n const rect = range, circle = range, newPos = {\n x: range.position.x - this.canvasSize.width,\n y: range.position.y - this.canvasSize.height,\n };\n if (circle.radius !== undefined) {\n const biggerCircle = new Circle(newPos.x, newPos.y, circle.radius * double);\n return super.intersects(biggerCircle);\n }\n else if (rect.size !== undefined) {\n const rectSW = new Rectangle(newPos.x, newPos.y, rect.size.width * double, rect.size.height * double);\n return super.intersects(rectSW);\n }\n return false;\n }\n}\n","import { OptionsColor, isNull } 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 (isNull(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, isNull } from \"@tsparticles/engine\";\nexport class LinksTriangle {\n constructor() {\n this.enable = false;\n this.frequency = 1;\n }\n load(data) {\n if (isNull(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, isNull } from \"@tsparticles/engine\";\nimport { LinksShadow } from \"./LinksShadow.js\";\nimport { LinksTriangle } from \"./LinksTriangle.js\";\nexport class Links {\n constructor() {\n this.blink = false;\n this.color = new OptionsColor();\n this.color.value = \"#fff\";\n this.consent = false;\n this.distance = 100;\n this.enable = false;\n this.frequency = 1;\n this.opacity = 1;\n this.shadow = new LinksShadow();\n this.triangles = new LinksTriangle();\n this.width = 1;\n this.warp = false;\n }\n load(data) {\n if (isNull(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.js\";\nimport { Links } from \"./Options/Classes/Links.js\";\nconst squarePower = 2, opacityOffset = 1, origin = {\n x: 0,\n y: 0,\n}, minDistance = 0;\nfunction getLinkDistance(pos1, pos2, optDistance, canvasSize, warp) {\n const { dx, dy, distance } = getDistances(pos1, pos2);\n if (!warp || distance <= optDistance) {\n return distance;\n }\n const absDiffs = {\n x: Math.abs(dx),\n y: Math.abs(dy),\n }, warpDistances = {\n x: Math.min(absDiffs.x, canvasSize.width - absDiffs.x),\n y: Math.min(absDiffs.y, canvasSize.height - absDiffs.y),\n };\n return Math.sqrt(warpDistances.x ** squarePower + warpDistances.y ** squarePower);\n}\nexport class Linker extends ParticlesInteractorBase {\n constructor(container, engine) {\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(this._engine, 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 this._engine = engine;\n }\n clear() {\n }\n init() {\n this._linkContainer.particles.linksColor = undefined;\n this._linkContainer.particles.linksColors = new Map();\n }\n interact(p1) {\n if (!p1.options.links) {\n return;\n }\n p1.links = [];\n const pos1 = p1.getPosition(), container = this.container, canvasSize = container.canvas.size;\n if (pos1.x < origin.x || pos1.y < origin.y || pos1.x > canvasSize.width || pos1.y > canvasSize.height) {\n return;\n }\n const linkOpt1 = p1.options.links, optOpacity = linkOpt1.opacity, optDistance = p1.retina.linksDistance ?? minDistance, warp = linkOpt1.warp;\n let range;\n if (warp) {\n range = new CircleWarp(pos1.x, pos1.y, optDistance, canvasSize);\n }\n else {\n range = new Circle(pos1.x, pos1.y, optDistance);\n }\n const query = container.particles.quadTree.query(range);\n for (const p2 of query) {\n const linkOpt2 = p2.options.links;\n if (p1 === p2 ||\n !linkOpt2?.enable ||\n linkOpt1.id !== linkOpt2.id ||\n p2.spawning ||\n p2.destroyed ||\n !p2.links ||\n p1.links.some(t => t.destination === p2) ||\n p2.links.some(t => t.destination === p1)) {\n continue;\n }\n const pos2 = p2.getPosition();\n if (pos2.x < origin.x || pos2.y < origin.y || pos2.x > canvasSize.width || pos2.y > canvasSize.height) {\n continue;\n }\n const distance = getLinkDistance(pos1, pos2, optDistance, canvasSize, warp && linkOpt2.warp);\n if (distance > optDistance) {\n continue;\n }\n const opacityLine = (opacityOffset - distance / optDistance) * optOpacity;\n this._setColor(p1);\n p1.links.push({\n destination: p2,\n opacity: opacityLine,\n });\n }\n }\n isEnabled(particle) {\n return !!particle.options.links?.enable;\n }\n loadParticlesOptions(options, ...sources) {\n if (!options.links) {\n options.links = new Links();\n }\n for (const source of sources) {\n options.links.load(source?.links);\n }\n }\n reset() {\n }\n}\n","import { Linker } from \"./Linker.js\";\nexport async function loadLinksInteraction(engine, refresh = true) {\n await engine.addInteractor(\"particlesLinks\", async (container) => {\n return Promise.resolve(new Linker(container, engine));\n }, refresh);\n}\n","import { drawLine, getDistance, getDistances, getRandom, getStyleFromRgb, rangeColorToRgb, } from \"@tsparticles/engine\";\nexport function drawTriangle(context, p1, p2, p3) {\n context.beginPath();\n context.moveTo(p1.x, p1.y);\n context.lineTo(p2.x, p2.y);\n context.lineTo(p3.x, p3.y);\n context.closePath();\n}\nexport function drawLinkLine(params) {\n let drawn = false;\n const { begin, end, engine, 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(engine, shadow.color);\n if (shadowColor) {\n context.shadowBlur = shadow.blur;\n context.shadowColor = getStyleFromRgb(shadowColor);\n }\n }\n context.stroke();\n}\nexport function drawLinkTriangle(params) {\n const { context, pos1, pos2, pos3, backgroundMask, colorTriangle, opacityTriangle } = params;\n drawTriangle(context, pos1, pos2, pos3);\n if (backgroundMask.enable) {\n context.globalCompositeOperation = backgroundMask.composite;\n }\n context.fillStyle = getStyleFromRgb(colorTriangle, opacityTriangle);\n context.fill();\n}\nexport function getLinkKey(ids) {\n ids.sort((a, b) => a - b);\n return ids.join(\"_\");\n}\nexport function setLinkFrequency(particles, dictionary) {\n const key = getLinkKey(particles.map(t => t.id));\n let res = dictionary.get(key);\n if (res === undefined) {\n res = getRandom();\n dictionary.set(key, res);\n }\n return res;\n}\n","import { getDistance, getLinkColor, getRandom, getRangeValue, rangeColorToRgb, } from \"@tsparticles/engine\";\nimport { drawLinkLine, drawLinkTriangle, setLinkFrequency } from \"./Utils.js\";\nconst minOpacity = 0, minWidth = 0, minDistance = 0, half = 0.5, maxFrequency = 1;\nexport class LinkInstance {\n constructor(container, engine) {\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(this._engine, twinkle.color), twinkling = getRandom() < twinkleFreq;\n if (twinkling && twinkleRgb) {\n colorLine = twinkleRgb;\n opacity = getRangeValue(twinkle.opacity);\n }\n }\n if (!colorLine) {\n const linkColor = p1LinksOptions.id !== undefined\n ? container.particles.linksColors.get(p1LinksOptions.id)\n : container.particles.linksColor;\n colorLine = getLinkColor(p1, p2, linkColor);\n }\n if (!colorLine) {\n return;\n }\n const width = p1.retina.linksWidth ?? minWidth, maxDistance = p1.retina.linksDistance ?? minDistance, { backgroundMask } = options;\n drawLinkLine({\n context: ctx,\n width,\n begin: pos1,\n end: pos2,\n engine: this._engine,\n maxDistance,\n canvasSize: container.canvas.size,\n links: p1LinksOptions,\n backgroundMask: backgroundMask,\n colorLine,\n opacity,\n });\n });\n };\n this._drawLinkTriangle = (p1, link1, link2) => {\n const linksOptions = p1.options.links;\n if (!linksOptions?.enable) {\n return;\n }\n const triangleOptions = linksOptions.triangles;\n if (!triangleOptions.enable) {\n return;\n }\n const container = this._container, options = container.actualOptions, p2 = link1.destination, p3 = link2.destination, opacityTriangle = triangleOptions.opacity ?? (link1.opacity + link2.opacity) * half;\n if (opacityTriangle <= minOpacity) {\n return;\n }\n container.canvas.draw(ctx => {\n const pos1 = p1.getPosition(), pos2 = p2.getPosition(), pos3 = p3.getPosition(), linksDistance = p1.retina.linksDistance ?? minDistance;\n if (getDistance(pos1, pos2) > linksDistance ||\n getDistance(pos3, pos2) > linksDistance ||\n getDistance(pos3, pos1) > linksDistance) {\n return;\n }\n let colorTriangle = rangeColorToRgb(this._engine, triangleOptions.color);\n if (!colorTriangle) {\n const linkColor = linksOptions.id !== undefined\n ? container.particles.linksColors.get(linksOptions.id)\n : container.particles.linksColor;\n colorTriangle = getLinkColor(p1, p2, linkColor);\n }\n if (!colorTriangle) {\n return;\n }\n drawLinkTriangle({\n context: ctx,\n pos1,\n pos2,\n pos3,\n backgroundMask: options.backgroundMask,\n colorTriangle,\n opacityTriangle,\n });\n });\n };\n this._drawTriangles = (options, p1, link, p1Links) => {\n const p2 = link.destination;\n if (!(options.links?.triangles.enable && p2.options.links?.triangles.enable)) {\n return;\n }\n const vertices = p2.links?.filter(t => {\n const linkFreq = this._getLinkFrequency(p2, t.destination), minCount = 0;\n return (p2.options.links &&\n linkFreq <= p2.options.links.frequency &&\n p1Links.findIndex(l => l.destination === t.destination) >= minCount);\n });\n if (!vertices?.length) {\n return;\n }\n for (const vertex of vertices) {\n const p3 = vertex.destination, triangleFreq = this._getTriangleFrequency(p1, p2, p3);\n if (triangleFreq > options.links.triangles.frequency) {\n continue;\n }\n this._drawLinkTriangle(p1, link, vertex);\n }\n };\n this._getLinkFrequency = (p1, p2) => {\n return setLinkFrequency([p1, p2], this._freqs.links);\n };\n this._getTriangleFrequency = (p1, p2, p3) => {\n return setLinkFrequency([p1, p2, p3], this._freqs.triangles);\n };\n this._container = container;\n this._engine = engine;\n this._freqs = {\n links: new Map(),\n triangles: new Map(),\n };\n }\n drawParticle(context, particle) {\n const { links, options } = particle;\n if (!links?.length) {\n return;\n }\n const p1Links = links.filter(l => options.links &&\n (options.links.frequency >= maxFrequency ||\n this._getLinkFrequency(particle, l.destination) <= options.links.frequency));\n for (const link of p1Links) {\n this._drawTriangles(options, particle, link, p1Links);\n if (link.opacity > minOpacity && (particle.retina.linksWidth ?? minWidth) > minWidth) {\n this._drawLinkLine(particle, link);\n }\n }\n }\n async init() {\n this._freqs.links = new Map();\n this._freqs.triangles = new Map();\n await Promise.resolve();\n }\n particleCreated(particle) {\n particle.links = [];\n if (!particle.options.links) {\n return;\n }\n const ratio = this._container.retina.pixelRatio, { retina } = particle, { distance, width } = particle.options.links;\n retina.linksDistance = distance * ratio;\n retina.linksWidth = width * ratio;\n }\n particleDestroyed(particle) {\n particle.links = [];\n }\n}\n","import { LinkInstance } from \"./LinkInstance.js\";\nexport class LinksPlugin {\n constructor(engine) {\n this.id = \"links\";\n this._engine = engine;\n }\n getPlugin(container) {\n return Promise.resolve(new LinkInstance(container, this._engine));\n }\n loadOptions() {\n }\n needsPlugin() {\n return true;\n }\n}\n","import { LinksPlugin } from \"./LinksPlugin.js\";\nexport async function loadLinksPlugin(engine, refresh = true) {\n const plugin = new LinksPlugin(engine);\n await engine.addPlugin(plugin, refresh);\n}\n","import { loadLinksInteraction } from \"./interaction.js\";\nimport { loadLinksPlugin } from \"./plugin.js\";\nexport async function loadParticlesLinksInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await loadLinksInteraction(engine, refresh);\n await loadLinksPlugin(engine, refresh);\n}\nexport * from \"./Options/Classes/Links.js\";\nexport * from \"./Options/Classes/LinksShadow.js\";\nexport * from \"./Options/Classes/LinksTriangle.js\";\nexport * from \"./Options/Interfaces/ILinks.js\";\nexport * from \"./Options/Interfaces/ILinksShadow.js\";\nexport * from \"./Options/Interfaces/ILinksTriangle.js\";\n","import { degToRad } from \"@tsparticles/engine\";\nconst piDeg = 180, origin = { x: 0, y: 0 }, sidesOffset = 2;\nexport function drawPolygon(data, start, side) {\n const { context } = data, sideCount = side.count.numerator * side.count.denominator, decimalSides = side.count.numerator / side.count.denominator, interiorAngleDegrees = (piDeg * (decimalSides - sidesOffset)) / decimalSides, interiorAngle = Math.PI - degToRad(interiorAngleDegrees);\n if (!context) {\n return;\n }\n context.beginPath();\n context.translate(start.x, start.y);\n context.moveTo(origin.x, origin.y);\n for (let i = 0; i < sideCount; i++) {\n context.lineTo(side.length, origin.y);\n context.translate(side.length, origin.y);\n context.rotate(interiorAngle);\n }\n}\n","import { getRangeValue, } from \"@tsparticles/engine\";\nimport { drawPolygon } from \"./Utils.js\";\nconst defaultSides = 5;\nexport class PolygonDrawerBase {\n draw(data) {\n const { particle, radius } = data, start = this.getCenter(particle, radius), side = this.getSidesData(particle, radius);\n drawPolygon(data, start, side);\n }\n getSidesCount(particle) {\n const polygon = particle.shapeData;\n return Math.round(getRangeValue(polygon?.sides ?? defaultSides));\n }\n}\n","import { PolygonDrawerBase } from \"./PolygonDrawerBase.js\";\nconst sidesCenterFactor = 3.5, yFactor = 2.66, sidesFactor = 3;\nexport class PolygonDrawer extends PolygonDrawerBase {\n constructor() {\n super(...arguments);\n this.validTypes = [\"polygon\"];\n }\n getCenter(particle, radius) {\n return {\n x: -radius / (particle.sides / sidesCenterFactor),\n y: -radius / (yFactor / sidesCenterFactor),\n };\n }\n getSidesData(particle, radius) {\n const sides = particle.sides;\n return {\n count: {\n denominator: 1,\n numerator: sides,\n },\n length: (radius * yFactor) / (sides / sidesFactor),\n };\n }\n}\n","import { PolygonDrawerBase } from \"./PolygonDrawerBase.js\";\nconst yFactor = 1.66, sides = 3, double = 2;\nexport class TriangleDrawer extends PolygonDrawerBase {\n constructor() {\n super(...arguments);\n this.validTypes = [\"triangle\"];\n }\n getCenter(particle, radius) {\n return {\n x: -radius,\n y: radius / yFactor,\n };\n }\n getSidesCount() {\n return sides;\n }\n getSidesData(particle, radius) {\n const diameter = radius * double;\n return {\n count: {\n denominator: 2,\n numerator: 3,\n },\n length: diameter,\n };\n }\n}\n","import { PolygonDrawer } from \"./PolygonDrawer.js\";\nimport { TriangleDrawer } from \"./TriangleDrawer.js\";\nexport async function loadGenericPolygonShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new PolygonDrawer(), refresh);\n}\nexport async function loadTriangleShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new TriangleDrawer(), refresh);\n}\nexport async function loadPolygonShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await loadGenericPolygonShape(engine, refresh);\n await loadTriangleShape(engine, refresh);\n}\n","import { isNull, 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 (isNull(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 { RotateDirection, ValueWithRandom, isNull, } from \"@tsparticles/engine\";\nimport { RotateAnimation } from \"./RotateAnimation.js\";\nexport class Rotate extends ValueWithRandom {\n constructor() {\n super();\n this.animation = new RotateAnimation();\n this.direction = RotateDirection.clockwise;\n this.path = false;\n this.value = 0;\n }\n load(data) {\n if (isNull(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 { AnimationStatus, DestroyType, RotateDirection, degToRad, getRandom, getRangeValue, updateAnimation, } from \"@tsparticles/engine\";\nimport { Rotate } from \"./Options/Classes/Rotate.js\";\nconst double = 2, doublePI = Math.PI * double, identity = 1, doublePIDeg = 360;\nexport class RotateUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const rotateOptions = particle.options.rotate;\n if (!rotateOptions) {\n return;\n }\n particle.rotate = {\n enable: rotateOptions.animation.enable,\n value: degToRad(getRangeValue(rotateOptions.value)),\n min: 0,\n max: doublePI,\n };\n particle.pathRotation = rotateOptions.path;\n let rotateDirection = rotateOptions.direction;\n if (rotateDirection === RotateDirection.random) {\n const index = Math.floor(getRandom() * double), minIndex = 0;\n rotateDirection = index > minIndex ? RotateDirection.counterClockwise : RotateDirection.clockwise;\n }\n switch (rotateDirection) {\n case RotateDirection.counterClockwise:\n case \"counterClockwise\":\n particle.rotate.status = AnimationStatus.decreasing;\n break;\n case RotateDirection.clockwise:\n particle.rotate.status = AnimationStatus.increasing;\n break;\n }\n const rotateAnimation = rotateOptions.animation;\n if (rotateAnimation.enable) {\n particle.rotate.decay = identity - getRangeValue(rotateAnimation.decay);\n particle.rotate.velocity =\n (getRangeValue(rotateAnimation.speed) / doublePIDeg) * this.container.retina.reduceFactor;\n if (!rotateAnimation.sync) {\n particle.rotate.velocity *= getRandom();\n }\n }\n particle.rotation = particle.rotate.value;\n }\n isEnabled(particle) {\n const rotate = particle.options.rotate;\n if (!rotate) {\n return false;\n }\n return !particle.destroyed && !particle.spawning && (!!rotate.value || 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 particle.isRotating = !!particle.rotate;\n if (!particle.rotate) {\n return;\n }\n updateAnimation(particle, particle.rotate, false, DestroyType.none, delta);\n particle.rotation = particle.rotate.value;\n }\n}\n","import { RotateUpdater } from \"./RotateUpdater.js\";\nexport async function loadRotateUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"rotate\", container => {\n return Promise.resolve(new RotateUpdater(container));\n }, refresh);\n}\n","const fixFactorSquared = 2, fixFactor = Math.sqrt(fixFactorSquared), double = 2;\nexport function drawSquare(data) {\n const { context, radius } = data, fixedRadius = radius / fixFactor, fixedDiameter = fixedRadius * double;\n context.rect(-fixedRadius, -fixedRadius, fixedDiameter, fixedDiameter);\n}\n","import { drawSquare } from \"./Utils.js\";\nconst sides = 4;\nexport class SquareDrawer {\n constructor() {\n this.validTypes = [\"edge\", \"square\"];\n }\n draw(data) {\n drawSquare(data);\n }\n getSidesCount() {\n return sides;\n }\n}\n","import { SquareDrawer } from \"./SquareDrawer.js\";\nexport async function loadSquareShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new SquareDrawer(), refresh);\n}\n","const defaultInset = 2, origin = { x: 0, y: 0 };\nexport function drawStar(data) {\n const { context, particle, radius } = data, sides = particle.sides, inset = particle.starInset ?? defaultInset;\n context.moveTo(origin.x, origin.y - radius);\n for (let i = 0; i < sides; i++) {\n context.rotate(Math.PI / sides);\n context.lineTo(origin.x, origin.y - radius * inset);\n context.rotate(Math.PI / sides);\n context.lineTo(origin.x, origin.y - radius);\n }\n}\n","import { getRangeValue, } from \"@tsparticles/engine\";\nimport { drawStar } from \"./Utils.js\";\nconst defaultInset = 2, defaultSides = 5;\nexport class StarDrawer {\n constructor() {\n this.validTypes = [\"star\"];\n }\n draw(data) {\n drawStar(data);\n }\n getSidesCount(particle) {\n const star = particle.shapeData;\n return Math.round(getRangeValue(star?.sides ?? defaultSides));\n }\n particleInit(container, particle) {\n const star = particle.shapeData;\n particle.starInset = getRangeValue(star?.inset ?? defaultInset);\n }\n}\n","import { StarDrawer } from \"./StarDrawer.js\";\nexport async function loadStarShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new StarDrawer(), refresh);\n}\n","import { getHslAnimationFromHsl, getRangeValue, itemFromSingleOrMultiple, rangeColorToHsl, updateColor, } from \"@tsparticles/engine\";\nconst defaultOpacity = 1;\nexport class StrokeColorUpdater {\n constructor(container, engine) {\n this._container = container;\n this._engine = engine;\n }\n init(particle) {\n const container = this._container, options = particle.options;\n const stroke = itemFromSingleOrMultiple(options.stroke, particle.id, options.reduceDuplicates);\n particle.strokeWidth = getRangeValue(stroke.width) * container.retina.pixelRatio;\n particle.strokeOpacity = getRangeValue(stroke.opacity ?? defaultOpacity);\n particle.strokeAnimation = stroke.color?.animation;\n const strokeHslColor = rangeColorToHsl(this._engine, stroke.color) ?? particle.getFillColor();\n if (strokeHslColor) {\n particle.strokeColor = getHslAnimationFromHsl(strokeHslColor, particle.strokeAnimation, container.retina.reduceFactor);\n }\n }\n isEnabled(particle) {\n const color = particle.strokeAnimation, { strokeColor } = particle;\n return (!particle.destroyed &&\n !particle.spawning &&\n !!color &&\n ((strokeColor?.h.value !== undefined && strokeColor.h.enable) ||\n (strokeColor?.s.value !== undefined && strokeColor.s.enable) ||\n (strokeColor?.l.value !== undefined && strokeColor.l.enable)));\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateColor(particle.strokeColor, delta);\n }\n}\n","import { StrokeColorUpdater } from \"./StrokeColorUpdater.js\";\nexport async function loadStrokeColorUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"strokeColor\", container => {\n return Promise.resolve(new StrokeColorUpdater(container, engine));\n }, refresh);\n}\n","import { loadBasic } from \"@tsparticles/basic\";\nimport { loadEasingQuadPlugin } from \"@tsparticles/plugin-easing-quad\";\nimport { loadEmojiShape } from \"@tsparticles/shape-emoji\";\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\";\nexport async function loadSlim(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\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(engine, false);\n await loadEmojiShape(engine, false);\n await loadImageShape(engine, false);\n await loadLineShape(engine, false);\n await loadPolygonShape(engine, false);\n await loadSquareShape(engine, false);\n await loadStarShape(engine, false);\n await loadLifeUpdater(engine, false);\n await loadRotateUpdater(engine, false);\n await loadStrokeColorUpdater(engine, false);\n await loadBasic(engine, refresh);\n}\n","import type { ISourceOptions } from '@tsparticles/engine';\n\nexport const baseConfig: Partial<ISourceOptions> = {\n fullScreen: {\n enable: true,\n zIndex: 0,\n },\n background: {\n color: { value: 'transparent' },\n },\n fpsLimit: 120,\n detectRetina: true,\n};\n\n/** 支持多色粒子的主题所使用的默认强调色 */\nexport const DEFAULT_COLORS = [\n '#ffb3d9', '#f43f5e', '#a78bfa', '#3b82f6',\n '#10b981', '#f59e0b', '#ff6b6b', '#8b5cf6',\n '#06b6d4', '#fb7185',\n];\n","import type { ParticleTheme } from './types';\nimport { baseConfig, DEFAULT_COLORS } from './base';\n\nexport const starlineTheme: ParticleTheme = {\n id: 'starline',\n name: '星链',\n icon: '✨',\n description: '经典粒子连线效果',\n backgroundGradient: 'linear-gradient(180deg, #0f172a 0%, #1e293b 50%, #334155 100%)',\n options: (isDark: boolean) => {\n const colors = DEFAULT_COLORS;\n return {\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onClick: { enable: true, mode: 'push' },\n onHover: { enable: true, mode: 'grab' },\n resize: { enable: true },\n },\n modes: {\n // 快速点击会触发 push 不断增加粒子和连线,限制触发强度和最大粒子数量可避免性能问题\n push: { quantity: 2 },\n grab: {\n distance: 200,\n links: { opacity: 1, color: colors },\n },\n },\n },\n particles: {\n color: { value: colors },\n links: {\n color: colors,\n distance: 150,\n enable: true,\n opacity: 0.5,\n width: 1,\n },\n move: {\n direction: 'none',\n enable: true,\n outModes: { default: 'out' },\n random: false,\n speed: 2,\n straight: false,\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 100,\n // 限制粒子总量,防止快速点击后粒子与连线无限增长\n limit: { value: 130, mode: 'delete' },\n },\n opacity: { value: 0.7 },\n shape: { type: 'circle' },\n size: { value: { min: 2, max: 6 } },\n shadow: {\n blur: 8,\n color: { value: colors },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n };\n },\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const snowTheme: ParticleTheme = {\n id: 'snow',\n name: '飘雪',\n icon: '❄️',\n description: '浪漫飘落雪花',\n backgroundGradient: 'linear-gradient(180deg, #1e3a5f 0%, #2d4a6b 50%, #3d5a7b 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onHover: { enable: true, mode: 'repulse' },\n resize: { enable: true },\n },\n modes: {\n repulse: { distance: 100, duration: 0.4 },\n },\n },\n particles: {\n color: { value: isDark ? '#ffffff' : '#87CEEB' },\n move: {\n direction: 'bottom',\n enable: true,\n outModes: { default: 'out' },\n speed: { min: 1, max: 3 },\n straight: false,\n drift: { min: -0.5, max: 0.5 },\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 80,\n },\n opacity: {\n value: { min: 0.3, max: 0.8 },\n animation: { enable: true, speed: 1, minimumValue: 0.3, sync: false },\n },\n shape: { type: 'circle' },\n size: { value: { min: 2, max: 6 } },\n wobble: {\n enable: true,\n distance: 10,\n speed: { min: -5, max: 5 },\n },\n shadow: {\n blur: 5,\n color: { value: isDark ? '#ffffff' : '#87CEEB' },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const bubbleTheme: ParticleTheme = {\n id: 'bubble',\n name: '气泡',\n icon: '🫧',\n description: '梦幻上升气泡',\n backgroundGradient: 'linear-gradient(180deg, #0a2647 0%, #144272 50%, #205295 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onClick: { enable: true, mode: 'pop' },\n onHover: { enable: true, mode: 'bubble' },\n resize: { enable: true },\n },\n modes: {\n bubble: { distance: 200, size: 15, duration: 2, opacity: 0.8 },\n pop: {},\n },\n },\n particles: {\n color: {\n value: isDark\n ? ['#00d9ff', '#00ff9d', '#ff00e6', '#ffee00']\n : ['#ffb3d9', '#ff91c7', '#ffc0e5', '#ffd6e8'],\n },\n move: {\n direction: 'top',\n enable: true,\n outModes: { default: 'out' },\n speed: { min: 1, max: 2 },\n straight: false,\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 50,\n },\n opacity: {\n value: { min: 0.2, max: 0.6 },\n animation: { enable: true, speed: 0.5, minimumValue: 0.1, sync: false },\n },\n shape: { type: 'circle' },\n size: {\n value: { min: 5, max: 15 },\n animation: { enable: true, speed: 3, minimumValue: 3, sync: false },\n },\n stroke: {\n width: 1,\n color: { value: isDark ? 'rgba(255,255,255,0.3)' : 'rgba(0,0,0,0.1)' },\n },\n shadow: {\n blur: 10,\n color: { value: isDark ? '#ffb3d9' : '#ff91c7' },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const starsTheme: ParticleTheme = {\n id: 'stars',\n name: '繁星',\n icon: '⭐',\n description: '闪烁星空效果',\n backgroundGradient: 'linear-gradient(180deg, #000000 0%, #1a1a2e 50%, #16213e 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onClick: { enable: true, mode: 'push' },\n onHover: { enable: true, mode: 'connect' },\n resize: { enable: true },\n },\n modes: {\n // 限制快速点击触发的粒子 push 强度,避免连线过多造成卡顿\n push: { quantity: 1 },\n connect: { distance: 100, links: { opacity: 0.3 }, radius: 150 },\n },\n },\n particles: {\n color: {\n value: isDark\n ? ['#ffffff', '#ffffd4', '#ffecd2', '#d4f1ff']\n : ['#ffd700', '#ffb347', '#ff6b6b', '#4ecdc4'],\n },\n move: {\n direction: 'none',\n enable: true,\n outModes: { default: 'out' },\n random: true,\n speed: 0.5,\n straight: false,\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 120,\n // 限制粒子总量,避免快速点击后连线无限累积\n limit: { value: 150, mode: 'delete' },\n },\n opacity: {\n value: { min: 0.2, max: 1 },\n animation: {\n enable: true,\n speed: 1,\n minimumValue: 0.1,\n sync: false,\n },\n },\n shape: { type: 'star', options: { star: { sides: 5 } } },\n size: { value: { min: 1, max: 4 } },\n twinkle: {\n lines: { enable: false },\n particles: {\n enable: true,\n frequency: 0.05,\n opacity: 1,\n color: { value: isDark ? '#ffffff' : '#ffd700' },\n },\n },\n shadow: {\n blur: 6,\n color: { value: isDark ? '#ffffff' : '#ffd700' },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const fireflyTheme: ParticleTheme = {\n id: 'firefly',\n name: '萤火虫',\n icon: '🪲',\n description: '温暖的萤火虫光效',\n backgroundGradient: 'linear-gradient(180deg, #1a1a1a 0%, #2d2d2d 50%, #1a1a1a 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onHover: { enable: true, mode: 'slow' },\n resize: { enable: true },\n },\n modes: {\n slow: { factor: 3, radius: 200 },\n },\n },\n particles: {\n color: {\n value: isDark\n ? ['#ffff00', '#adff2f', '#7fff00', '#00ff7f']\n : ['#ffc107', '#ff9800', '#ff5722', '#4caf50'],\n },\n move: {\n direction: 'none',\n enable: true,\n outModes: { default: 'bounce' },\n random: true,\n speed: 1,\n straight: false,\n trail: {\n enable: true,\n length: 5,\n fill: { color: 'transparent' },\n },\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 40,\n },\n opacity: {\n value: { min: 0.3, max: 1 },\n animation: {\n enable: true,\n speed: 2,\n minimumValue: 0.1,\n sync: false,\n },\n },\n shape: { type: 'circle' },\n size: { value: { min: 2, max: 5 } },\n shadow: {\n blur: 15,\n color: { value: isDark ? '#adff2f' : '#ffc107' },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const geometryTheme: ParticleTheme = {\n id: 'geometry',\n name: '几何',\n icon: '🔷',\n description: '漂浮的抽象几何图形',\n backgroundGradient: 'linear-gradient(180deg, #0f0c29 0%, #302b63 50%, #24243e 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onClick: { enable: true, mode: 'push' },\n onHover: { enable: true, mode: 'repulse' },\n resize: { enable: true },\n },\n modes: {\n // 快速点击会持续触发 push,限制强度有助于降低连线/粒子带来的开销\n push: { quantity: 1 },\n repulse: { distance: 150, duration: 0.4 },\n },\n },\n particles: {\n color: {\n value: ['#ffb3d9', '#ff91c7', '#ffc0e5', '#ffd6e8'],\n },\n move: {\n direction: 'none',\n enable: true,\n outModes: { default: 'bounce' },\n random: false,\n speed: 1.5,\n straight: false,\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 30,\n // 限制粒子总量,避免连续点击时粒子无限增加\n limit: { value: 60, mode: 'delete' },\n },\n opacity: {\n value: { min: 0.3, max: 0.7 },\n },\n rotate: {\n value: { min: 0, max: 360 },\n direction: 'random',\n animation: { enable: true, speed: 5 },\n },\n shape: {\n type: ['triangle', 'square', 'polygon'],\n options: {\n polygon: { sides: 6 },\n },\n },\n size: { value: { min: 10, max: 25 } },\n stroke: {\n width: 1,\n color: { value: isDark ? 'rgba(255,255,255,0.5)' : 'rgba(0,0,0,0.2)' },\n },\n shadow: {\n blur: 10,\n color: { value: isDark ? '#ffb3d9' : '#ff91c7' },\n enable: true,\n offset: { x: 2, y: 2 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const waveTheme: ParticleTheme = {\n id: 'wave',\n name: '粒子海洋',\n icon: '🌊',\n description: '3D 粒子波浪效果(需要 three.js)',\n isThreeJS: true,\n backgroundGradient: 'linear-gradient(180deg, #000000 0%, #0a1628 50%, #0d1f3c 100%)',\n options: () => ({\n ...baseConfig,\n particles: {\n number: { value: 0 },\n },\n }),\n};\n","export type { ParticleTheme, ThemeId } from './types';\nexport { baseConfig, DEFAULT_COLORS } from './base';\nexport { starlineTheme } from './starline';\nexport { snowTheme } from './snow';\nexport { bubbleTheme } from './bubble';\nexport { starsTheme } from './stars';\nexport { fireflyTheme } from './firefly';\nexport { geometryTheme } from './geometry';\nexport { waveTheme } from './wave';\n\nimport { starlineTheme } from './starline';\nimport { snowTheme } from './snow';\nimport { bubbleTheme } from './bubble';\nimport { starsTheme } from './stars';\nimport { fireflyTheme } from './firefly';\nimport { geometryTheme } from './geometry';\nimport { waveTheme } from './wave';\nimport type { ParticleTheme } from './types';\n\n/** 所有内置粒子主题(不包含 \"none\") */\nexport const particleThemes: ParticleTheme[] = [\n starlineTheme,\n snowTheme,\n bubbleTheme,\n starsTheme,\n fireflyTheme,\n geometryTheme,\n waveTheme,\n];\n\n/** 根据 ID 获取主题。找不到时回退到 starline。 */\nexport const getThemeById = (id: string): ParticleTheme => {\n return particleThemes.find((theme) => theme.id === id) || starlineTheme;\n};\n\nexport const DEFAULT_THEME_ID = 'starline';\n","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport type { ThemeId } from '../themes/types';\nimport { DEFAULT_THEME_ID } from '../themes';\n\ninterface ParticleContextValue {\n themeId: string;\n isDark: boolean;\n setTheme: (id: string) => void;\n setDark: (dark: boolean) => void;\n}\n\nconst ParticleContext = createContext<ParticleContextValue | null>(null);\n\nconst STORAGE_KEY = 'rpb-theme-id';\n\nexport interface ParticleProviderProps {\n /** 初始/默认主题 ID */\n defaultTheme?: ThemeId | string;\n /** 是否使用深色模式粒子颜色 */\n isDark?: boolean;\n /** 是否将主题选择持久化到 localStorage */\n persist?: boolean;\n children: React.ReactNode;\n}\n\n/**\n * 为子组件提供粒子主题状态。\n * 用此 Provider 包裹你的应用(或子树),即可无需显式传参地使用\n * `<ParticlesBackground />` 和 `<ThemeSelector />`。\n */\nexport const ParticleProvider: React.FC<ParticleProviderProps> = ({\n defaultTheme = DEFAULT_THEME_ID,\n isDark: isDarkProp = true,\n persist = true,\n children,\n}) => {\n const [themeId, setThemeId] = useState<string>(() => {\n if (persist && typeof window !== 'undefined') {\n return localStorage.getItem(STORAGE_KEY) || defaultTheme;\n }\n return defaultTheme;\n });\n const [isDark, setDark] = useState(isDarkProp);\n\n useEffect(() => {\n setDark(isDarkProp);\n }, [isDarkProp]);\n\n const setTheme = useCallback((id: string) => {\n setThemeId(id);\n if (persist && typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, id);\n }\n }, [persist]);\n\n return (\n <ParticleContext.Provider value={{ themeId, isDark, setTheme, setDark }}>\n {children}\n </ParticleContext.Provider>\n );\n};\n\n/** 访问当前粒子主题上下文。必须在 `<ParticleProvider>` 内使用。 */\nexport const useParticleTheme = (): ParticleContextValue => {\n const ctx = useContext(ParticleContext);\n if (!ctx) {\n throw new Error('useParticleTheme must be used within a <ParticleProvider>');\n }\n return ctx;\n};\n\n/**\n * 内部 Hook:如果上下文可用则返回上下文,否则回退到 props。\n * 这允许组件在有或没有 Provider 的情况下都能正常工作。\n */\nexport const useParticleThemeOptional = () => {\n return useContext(ParticleContext);\n};\n","import React, { useRef, useEffect } from 'react';\n\ninterface ParticleWaveProps {\n /** 波浪背后的 CSS 渐变或纯色背景 */\n background?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * 使用 Three.js 渲染的 3D 粒子海洋波浪。\n * Three.js 以动态方式加载 — 如果未安装,此组件不会渲染任何内容。\n */\nconst ParticleWave: React.FC<ParticleWaveProps> = ({\n background = 'linear-gradient(180deg, #000000 0%, #0a1628 50%, #0d1f3c 100%)',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const animationRef = useRef<number>();\n const hasThree = useRef(true);\n\n useEffect(() => {\n let disposed = false;\n let cleanup: (() => void) | undefined;\n\n void (async () => {\n let THREE: any;\n try {\n const req = (globalThis as unknown as { require?: (id: string) => unknown }).require;\n if (typeof req === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n THREE = req('three');\n } else {\n const mod = await import('three');\n THREE = (mod as { default?: typeof mod }).default ?? mod;\n }\n } catch {\n hasThree.current = false;\n console.warn('[react-particle-backgrounds] 未安装 \"three\"。波浪主题需要它作为 peer dependency。');\n return;\n }\n\n if (disposed || !containerRef.current) return;\n\n const container = containerRef.current;\n const width = container.clientWidth;\n const height = container.clientHeight;\n\n const scene = new THREE.Scene();\n scene.background = null;\n\n const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);\n camera.position.set(0, 50, 100);\n camera.lookAt(0, 0, 0);\n\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setSize(width, height);\n renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n container.appendChild(renderer.domElement);\n\n const particleCount = 15000;\n const waveWidth = 200;\n const waveDepth = 100;\n\n const geometry = new THREE.BufferGeometry();\n const positions = new Float32Array(particleCount * 3);\n const colors = new Float32Array(particleCount * 3);\n const sizes = new Float32Array(particleCount);\n\n for (let i = 0; i < particleCount; i++) {\n const i3 = i * 3;\n positions[i3] = (Math.random() - 0.5) * waveWidth;\n positions[i3 + 1] = 0;\n positions[i3 + 2] = (Math.random() - 0.5) * waveDepth;\n\n const colorChoice = Math.random();\n if (colorChoice < 0.5) {\n colors[i3] = 0; colors[i3 + 1] = 0.8 + Math.random() * 0.2; colors[i3 + 2] = 1;\n } else if (colorChoice < 0.8) {\n colors[i3] = 0.1; colors[i3 + 1] = 0.3 + Math.random() * 0.3; colors[i3 + 2] = 0.9 + Math.random() * 0.1;\n } else {\n colors[i3] = 0.8 + Math.random() * 0.2; colors[i3 + 1] = 0.9 + Math.random() * 0.1; colors[i3 + 2] = 1;\n }\n sizes[i] = Math.random() * 2 + 0.5;\n }\n\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));\n geometry.setAttribute('size', new THREE.BufferAttribute(sizes, 1));\n\n const vertexShader = `\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n gl_PointSize = size * (300.0 / -mvPosition.z);\n gl_Position = projectionMatrix * mvPosition;\n }\n `;\n\n const fragmentShader = `\n varying vec3 vColor;\n void main() {\n float dist = length(gl_PointCoord - vec2(0.5));\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.0, 0.5, dist);\n float glow = exp(-dist * 3.0);\n vec3 finalColor = vColor + glow * 0.5;\n gl_FragColor = vec4(finalColor, alpha * 0.8);\n }\n `;\n\n const material = new THREE.ShaderMaterial({\n vertexShader, fragmentShader,\n transparent: true, vertexColors: true,\n blending: THREE.AdditiveBlending, depthWrite: false,\n });\n\n const particles = new THREE.Points(geometry, material);\n scene.add(particles);\n\n const bokehCount = 100;\n const bokehGeometry = new THREE.BufferGeometry();\n const bokehPositions = new Float32Array(bokehCount * 3);\n const bokehColors = new Float32Array(bokehCount * 3);\n const bokehSizes = new Float32Array(bokehCount);\n\n for (let i = 0; i < bokehCount; i++) {\n const i3 = i * 3;\n bokehPositions[i3] = (Math.random() - 0.5) * waveWidth * 1.5;\n bokehPositions[i3 + 1] = Math.random() * -30 - 10;\n bokehPositions[i3 + 2] = (Math.random() - 0.5) * waveDepth * 2;\n bokehColors[i3] = 0.2; bokehColors[i3 + 1] = 0.5 + Math.random() * 0.3; bokehColors[i3 + 2] = 1;\n bokehSizes[i] = Math.random() * 15 + 8;\n }\n\n bokehGeometry.setAttribute('position', new THREE.BufferAttribute(bokehPositions, 3));\n bokehGeometry.setAttribute('color', new THREE.BufferAttribute(bokehColors, 3));\n bokehGeometry.setAttribute('size', new THREE.BufferAttribute(bokehSizes, 1));\n\n const bokehMaterial = new THREE.ShaderMaterial({\n vertexShader,\n fragmentShader: `\n varying vec3 vColor;\n void main() {\n float dist = length(gl_PointCoord - vec2(0.5));\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.2, 0.5, dist);\n gl_FragColor = vec4(vColor, alpha * 0.3);\n }\n `,\n transparent: true, vertexColors: true,\n blending: THREE.AdditiveBlending, depthWrite: false,\n });\n\n const bokehParticles = new THREE.Points(bokehGeometry, bokehMaterial);\n scene.add(bokehParticles);\n\n const dropCount = 150;\n const trailLength = 12;\n\n interface RainDrop {\n x: number; z: number; y: number;\n velocity: number; active: boolean;\n maxHeight: number; trail: number[];\n opacity: number;\n }\n\n const rainDrops: RainDrop[] = [];\n for (let i = 0; i < dropCount; i++) {\n const shouldActivate = Math.random() < 0.1;\n const x = (Math.random() - 0.5) * waveWidth * 0.9;\n const z = (Math.random() - 0.5) * waveDepth * 0.7;\n const waveHeight = Math.sin(x * 0.05) * 8 + Math.sin(z * 0.08) * 5;\n const startHeight = shouldActivate ? waveHeight + Math.random() * 40 : -200;\n rainDrops.push({\n x, z, y: startHeight,\n velocity: shouldActivate ? 0.5 + Math.random() * 0.7 : 0,\n active: shouldActivate,\n maxHeight: waveHeight + 80 + Math.random() * 120,\n trail: new Array(trailLength).fill(startHeight),\n opacity: shouldActivate ? 1.0 : 0,\n });\n }\n\n const trailPointCount = dropCount * trailLength;\n const dropTrailGeometry = new THREE.BufferGeometry();\n const dropTrailPositions = new Float32Array(trailPointCount * 3);\n const dropTrailColors = new Float32Array(trailPointCount * 3);\n const dropTrailSizes = new Float32Array(trailPointCount);\n\n for (let i = 0; i < dropCount; i++) {\n for (let j = 0; j < trailLength; j++) {\n dropTrailSizes[i * trailLength + j] = 4 * (1 - j / trailLength) * 0.5;\n }\n }\n\n dropTrailGeometry.setAttribute('position', new THREE.BufferAttribute(dropTrailPositions, 3));\n dropTrailGeometry.setAttribute('color', new THREE.BufferAttribute(dropTrailColors, 3));\n dropTrailGeometry.setAttribute('size', new THREE.BufferAttribute(dropTrailSizes, 1));\n\n const dropTrailMaterial = new THREE.ShaderMaterial({\n vertexShader,\n fragmentShader: `\n varying vec3 vColor;\n void main() {\n float dist = length(gl_PointCoord - vec2(0.5));\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.0, 0.5, dist);\n gl_FragColor = vec4(vColor, alpha * 0.8);\n }\n `,\n transparent: true, vertexColors: true,\n blending: THREE.AdditiveBlending, depthWrite: false,\n });\n\n const dropTrailParticles = new THREE.Points(dropTrailGeometry, dropTrailMaterial);\n scene.add(dropTrailParticles);\n\n const dropHeadGeometry = new THREE.BufferGeometry();\n const dropHeadPositions = new Float32Array(dropCount * 3);\n const dropHeadColors = new Float32Array(dropCount * 3);\n const dropHeadSizes = new Float32Array(dropCount);\n for (let i = 0; i < dropCount; i++) {\n dropHeadSizes[i] = (6 + Math.random() * 4) * 0.5;\n }\n\n dropHeadGeometry.setAttribute('position', new THREE.BufferAttribute(dropHeadPositions, 3));\n dropHeadGeometry.setAttribute('color', new THREE.BufferAttribute(dropHeadColors, 3));\n dropHeadGeometry.setAttribute('size', new THREE.BufferAttribute(dropHeadSizes, 1));\n\n const dropHeadMaterial = new THREE.ShaderMaterial({\n vertexShader,\n fragmentShader: `\n varying vec3 vColor;\n void main() {\n float dist = length(gl_PointCoord - vec2(0.5));\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.0, 0.5, dist);\n float glow = exp(-dist * 2.0);\n vec3 finalColor = vColor + glow * 0.8;\n gl_FragColor = vec4(finalColor, alpha);\n }\n `,\n transparent: true, vertexColors: true,\n blending: THREE.AdditiveBlending, depthWrite: false,\n });\n\n const dropHeadParticles = new THREE.Points(dropHeadGeometry, dropHeadMaterial);\n scene.add(dropHeadParticles);\n\n let time = 0;\n let lastSpawnTime = 0;\n\n const getWaveHeight = (x: number, z: number, t: number) =>\n Math.sin(x * 0.05 + t) * 8 + Math.sin(z * 0.08 + t * 0.8) * 5 + Math.sin((x + z) * 0.03 + t * 1.2) * 3;\n\n const activateDrop = (drop: RainDrop) => {\n drop.x = (Math.random() - 0.5) * waveWidth * 0.9;\n drop.z = (Math.random() - 0.5) * waveDepth * 0.7;\n const wh = getWaveHeight(drop.x, drop.z, time);\n drop.y = wh;\n drop.velocity = 0.5 + Math.random() * 0.7;\n drop.maxHeight = wh + 80 + Math.random() * 120;\n drop.active = true;\n drop.opacity = 0.5;\n drop.trail.fill(wh);\n };\n\n const animate = () => {\n time += 0.02;\n const wavePos = particles.geometry.attributes.position.array as Float32Array;\n for (let i = 0; i < particleCount; i++) {\n const i3 = i * 3;\n wavePos[i3 + 1] = getWaveHeight(wavePos[i3], wavePos[i3 + 2], time);\n }\n particles.geometry.attributes.position.needsUpdate = true;\n\n const tPos = dropTrailParticles.geometry.attributes.position.array as Float32Array;\n const tCol = dropTrailParticles.geometry.attributes.color.array as Float32Array;\n const hPos = dropHeadParticles.geometry.attributes.position.array as Float32Array;\n const hCol = dropHeadParticles.geometry.attributes.color.array as Float32Array;\n\n let activeCount = 0;\n const inactiveIndices: number[] = [];\n\n for (let i = 0; i < dropCount; i++) {\n const drop = rainDrops[i];\n if (drop.active) {\n activeCount++;\n for (let j = trailLength - 1; j > 0; j--) drop.trail[j] = drop.trail[j - 1];\n drop.trail[0] = drop.y;\n drop.velocity = Math.max(drop.velocity * 0.995, 0.3);\n drop.y += drop.velocity;\n if (drop.opacity < 1) drop.opacity = Math.min(drop.opacity + 0.05, 1);\n if (drop.y > drop.maxHeight) {\n drop.opacity -= 0.03;\n if (drop.opacity <= 0) {\n drop.active = false; drop.y = -200; drop.trail.fill(-200);\n inactiveIndices.push(i);\n }\n }\n } else {\n inactiveIndices.push(i);\n }\n }\n\n if (time - lastSpawnTime >= 0.1 && inactiveIndices.length > 0) {\n const spawnCount = Math.min(2 + Math.floor(Math.random() * 2), inactiveIndices.length);\n const shuffled = [...inactiveIndices].sort(() => Math.random() - 0.5);\n for (let n = 0; n < spawnCount; n++) activateDrop(rainDrops[shuffled[n]]);\n lastSpawnTime = time;\n }\n\n const targetActive = 20;\n const needActivate = Math.max(3, targetActive - activeCount);\n const remaining = inactiveIndices.filter(i => !rainDrops[i].active);\n if (remaining.length > 0) {\n const shuffled = [...remaining].sort(() => Math.random() - 0.5);\n for (let n = 0; n < Math.min(needActivate, shuffled.length); n++) activateDrop(rainDrops[shuffled[n]]);\n }\n\n for (let i = 0; i < dropCount; i++) {\n if (!rainDrops[i].active && Math.random() < 0.25) activateDrop(rainDrops[i]);\n }\n\n for (let i = 0; i < dropCount; i++) {\n const drop = rainDrops[i];\n const hi3 = i * 3;\n hPos[hi3] = drop.x; hPos[hi3 + 1] = drop.y; hPos[hi3 + 2] = drop.z;\n const brightness = drop.active ? (0.8 + Math.sin(time * 5 + i) * 0.2) : 0;\n hCol[hi3] = 0.5 * brightness * drop.opacity;\n hCol[hi3 + 1] = 1.0 * brightness * drop.opacity;\n hCol[hi3 + 2] = 1.0 * brightness * drop.opacity;\n\n for (let j = 0; j < trailLength; j++) {\n const pi = (i * trailLength + j) * 3;\n tPos[pi] = drop.x; tPos[pi + 1] = drop.trail[j]; tPos[pi + 2] = drop.z;\n const fade = 1 - (j / trailLength);\n tCol[pi] = 0.6 * fade * drop.opacity;\n tCol[pi + 1] = 1.0 * fade * drop.opacity;\n tCol[pi + 2] = 1.0 * fade * drop.opacity;\n }\n }\n\n dropTrailParticles.geometry.attributes.position.needsUpdate = true;\n dropTrailParticles.geometry.attributes.color.needsUpdate = true;\n dropHeadParticles.geometry.attributes.position.needsUpdate = true;\n dropHeadParticles.geometry.attributes.color.needsUpdate = true;\n\n camera.position.x = Math.sin(time * 0.3) * 5;\n camera.lookAt(0, 0, 0);\n renderer.render(scene, camera);\n animationRef.current = requestAnimationFrame(animate);\n };\n\n animate();\n\n const handleResize = () => {\n const w = container.clientWidth;\n const h = container.clientHeight;\n camera.aspect = w / h;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n };\n window.addEventListener('resize', handleResize);\n\n cleanup = () => {\n window.removeEventListener('resize', handleResize);\n if (animationRef.current) cancelAnimationFrame(animationRef.current);\n if (renderer.domElement.parentNode === container) {\n container.removeChild(renderer.domElement);\n }\n geometry.dispose(); material.dispose();\n bokehGeometry.dispose(); bokehMaterial.dispose();\n dropTrailGeometry.dispose(); dropTrailMaterial.dispose();\n dropHeadGeometry.dispose(); dropHeadMaterial.dispose();\n renderer.dispose();\n };\n })();\n\n return () => {\n disposed = true;\n cleanup?.();\n };\n }, [background]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: 1,\n pointerEvents: 'none',\n background,\n ...style,\n }}\n />\n );\n};\n\nexport default ParticleWave;\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport Particles, { initParticlesEngine } from '@tsparticles/react';\nimport { loadSlim } from '@tsparticles/slim';\nimport type { Container } from '@tsparticles/engine';\nimport { getThemeById, DEFAULT_THEME_ID } from '../themes';\nimport type { ThemeId } from '../themes/types';\nimport { useParticleThemeOptional } from '../context/ParticleContext';\nimport ParticleWave from './ParticleWave';\n\nlet instanceCounter = 0;\n\nexport interface ParticlesBackgroundProps {\n /**\n * 要显示的主题 ID。如果在 `<ParticleProvider>` 内使用,\n * 此属性可选,会自动使用 Provider 中的主题。\n */\n theme?: ThemeId | string;\n /** 深色模式开关 — 影响支持的主题的粒子颜色 */\n isDark?: boolean;\n /** 粒子加载完成的回调 */\n onLoaded?: (container?: Container) => void;\n /** 自定义 CSS 类名 */\n className?: string;\n /** 自定义行内样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * 渲染全屏粒子背景。\n *\n * 可以通过 props 独立使用:\n * ```tsx\n * <ParticlesBackground theme=\"starline\" isDark />\n * ```\n *\n * 也可以在 `<ParticleProvider>` 内使用以共享状态:\n * ```tsx\n * <ParticleProvider defaultTheme=\"snow\">\n * <ParticlesBackground />\n * </ParticleProvider>\n * ```\n */\nconst ParticlesBackground: React.FC<ParticlesBackgroundProps> = ({\n theme: themeProp,\n isDark: isDarkProp,\n onLoaded,\n className,\n style,\n}) => {\n const [init, setInit] = useState(false);\n const [instanceId, setInstanceId] = useState(() => ++instanceCounter);\n const containerRef = useRef<Container | undefined>(undefined);\n const isFirstMount = useRef(true);\n const ctx = useParticleThemeOptional();\n\n const themeId = themeProp ?? ctx?.themeId ?? DEFAULT_THEME_ID;\n const isDark = isDarkProp ?? ctx?.isDark ?? true;\n const theme = getThemeById(themeId);\n\n useEffect(() => {\n initParticlesEngine(async (engine) => {\n await loadSlim(engine);\n }).then(() => {\n setInit(true);\n }).catch(() => {\n setInit(true);\n });\n }, []);\n\n useEffect(() => {\n if (!isFirstMount.current) {\n setInstanceId(++instanceCounter);\n }\n isFirstMount.current = false;\n\n return () => {\n if (containerRef.current) {\n containerRef.current.destroy();\n containerRef.current = undefined;\n }\n };\n }, [themeId, isDark]);\n\n const particlesLoaded = useCallback(async (container?: Container) => {\n if (containerRef.current && containerRef.current !== container) {\n containerRef.current.destroy();\n }\n containerRef.current = container;\n onLoaded?.(container);\n }, [onLoaded]);\n\n const options = useMemo(() => theme.options(isDark), [theme, isDark]);\n\n if (themeId === 'none') return null;\n\n if (theme.isThreeJS) {\n return (\n <ParticleWave\n background={theme.backgroundGradient || theme.backgroundColor}\n className={className}\n style={style}\n />\n );\n }\n\n if (!init) return null;\n\n const particlesId = `rpb-tsparticles-${instanceId}`;\n\n return (\n <Particles\n id={particlesId}\n key={particlesId}\n className={className}\n style={style}\n particlesLoaded={particlesLoaded}\n options={options}\n />\n );\n};\n\nexport default ParticlesBackground;\n","import React, { useState, useMemo, useCallback } from 'react';\nimport { particleThemes, getThemeById } from '../themes';\nimport { useParticleTheme } from '../context/ParticleContext';\n\nexport interface ThemeSelectorProps {\n /** 在屏幕上的位置 */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n /** 激活状态的强调色 */\n accentColor?: string;\n}\n\nconst POSITION_STYLES: Record<string, React.CSSProperties> = {\n 'bottom-right': { bottom: 80, right: 16 },\n 'bottom-left': { bottom: 80, left: 16 },\n 'top-right': { top: 80, right: 16 },\n 'top-left': { top: 80, left: 16 },\n};\n\nconst BUTTON_BASE_STYLE: React.CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n width: 44,\n height: 44,\n borderRadius: 12,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'rgba(255, 255, 255, 0.7)',\n backdropFilter: 'blur(12px)',\n WebkitBackdropFilter: 'blur(12px)',\n border: '1px solid rgba(255, 255, 255, 0.5)',\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.08)',\n cursor: 'pointer',\n fontSize: 20,\n transition: 'transform 0.3s, box-shadow 0.3s',\n};\n\nconst BACKDROP_STYLE: React.CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 10000,\n background: 'rgba(0, 0, 0, 0.3)',\n transition: 'opacity 0.3s',\n};\n\nconst DRAWER_BASE_STYLE: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n width: 320,\n maxWidth: '85vw',\n height: '100vh',\n zIndex: 10001,\n background: '#fff',\n boxShadow: '-4px 0 24px rgba(0, 0, 0, 0.12)',\n transition: 'transform 0.3s ease',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n};\n\nconst HEADER_STYLE: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid #f0f0f0',\n};\n\nconst CLOSE_BUTTON_STYLE: React.CSSProperties = {\n background: 'none',\n border: 'none',\n fontSize: 20,\n cursor: 'pointer',\n color: '#999',\n padding: 4,\n};\n\nconst LIST_STYLE: React.CSSProperties = {\n padding: 16,\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n};\n\nconst TIP_CONTAINER_STYLE: React.CSSProperties = {\n padding: '0 16px 16px',\n marginTop: 'auto',\n};\n\nconst TIP_STYLE: React.CSSProperties = {\n padding: 16,\n background: '#f9fafb',\n borderRadius: 12,\n fontSize: 13,\n color: '#6b7280',\n lineHeight: 1.6,\n};\n\nconst THEME_LIST = [...particleThemes, {\n id: 'none',\n name: '无',\n icon: '🚫',\n description: '关闭粒子效果',\n}];\n\n/**\n * 浮动主题选择器按钮 + 抽屉面板。\n * 必须在 `<ParticleProvider>` 内使用。\n *\n * ```tsx\n * <ParticleProvider>\n * <ParticlesBackground />\n * <ThemeSelector />\n * </ParticleProvider>\n * ```\n */\nconst ThemeSelector: React.FC<ThemeSelectorProps> = ({\n position = 'bottom-right',\n accentColor = '#3b82f6',\n}) => {\n const [open, setOpen] = useState(false);\n const { themeId, setTheme } = useParticleTheme();\n const currentTheme = getThemeById(themeId);\n\n const drawerSide = position.includes('right') ? 'right' : 'left';\n\n const buttonStyle = useMemo(() => ({\n ...BUTTON_BASE_STYLE,\n ...POSITION_STYLES[position],\n }), [position]);\n\n const drawerStyle = useMemo(() => ({\n ...DRAWER_BASE_STYLE,\n [drawerSide]: 0,\n transform: open ? 'translateX(0)' : `translateX(${drawerSide === 'right' ? '100%' : '-100%'})`,\n }), [drawerSide, open]);\n\n const handleOpen = useCallback(() => setOpen(true), []);\n const handleClose = useCallback(() => setOpen(false), []);\n const handleThemeClick = useCallback((id: string) => {\n setTheme(id);\n }, [setTheme]);\n\n return (\n <>\n <style>{`\n .rpb-trigger-button:hover {\n transform: scale(1.05) translateY(-2px);\n }\n .rpb-theme-item:hover {\n border-color: #e0e0e0 !important;\n }\n .rpb-theme-item.active:hover {\n border-color: ${accentColor} !important;\n }\n `}</style>\n\n <button\n className=\"rpb-trigger-button\"\n onClick={handleOpen}\n title=\"主题设置\"\n style={buttonStyle}\n >\n {currentTheme.icon}\n </button>\n\n {open && <div onClick={handleClose} style={BACKDROP_STYLE} />}\n\n <div style={drawerStyle}>\n <div style={HEADER_STYLE}>\n <span style={{ fontWeight: 600, fontSize: 16 }}>粒子主题</span>\n <button onClick={handleClose} style={CLOSE_BUTTON_STYLE}>\n &times;\n </button>\n </div>\n\n <div style={LIST_STYLE}>\n {THEME_LIST.map((theme) => {\n const isActive = theme.id === themeId;\n return (\n <div\n key={theme.id}\n className={`rpb-theme-item${isActive ? ' active' : ''}`}\n onClick={() => handleThemeClick(theme.id)}\n style={{\n padding: 16,\n borderRadius: 12,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n transition: 'all 0.2s',\n border: `2px solid ${isActive ? accentColor : 'transparent'}`,\n background: isActive ? `${accentColor}10` : '#f5f5f5',\n }}\n >\n <div\n style={{\n width: 48,\n height: 48,\n borderRadius: 12,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 24,\n background: isActive ? accentColor : '#e5e5e5',\n flexShrink: 0,\n }}\n >\n {theme.icon}\n </div>\n\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 600, fontSize: 14, color: '#1f2937' }}>\n {theme.name}\n </div>\n <div style={{ fontSize: 12, color: '#9ca3af', marginTop: 2 }}>\n {theme.description}\n </div>\n </div>\n\n {isActive && (\n <div\n style={{\n width: 24,\n height: 24,\n borderRadius: '50%',\n background: accentColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n <div style={TIP_CONTAINER_STYLE}>\n <div style={TIP_STYLE}>\n 你的主题选择会自动保存,下次访问时将自动恢复。\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ThemeSelector;\n"],"names":["generatedAttribute","mouseDownEvent","mouseUpEvent","mouseLeaveEvent","mouseOutEvent","mouseMoveEvent","touchStartEvent","touchEndEvent","touchMoveEvent","touchCancelEvent","resizeEvent","visibilityChangeEvent","errorPrefix","percentDenominator","half","millisecondsToSeconds","originPoint","defaultTransform","randomColorValue","midColorValue","double","doublePI","defaultFps","generatedTrue","generatedFalse","canvasTag","defaultRetryCount","squareExp","qTreeCapacity","defaultRemoveQuantity","defaultRatio","defaultReduceFactor","subdivideCount","inverseFactorNumerator","rgbMax","hMax","sMax","lMax","hMin","sMin","hPhase","empty","quarter","threeQuarter","minVelocity","defaultTransformValue","minimumSize","minimumLength","zIndexFactorOffset","defaultOpacity","clickRadius","touchEndLengthOffset","minCoordinate","removeDeleteCount","removeMinIndex","defaultFpsLimit","minFpsLimit","canvasFirstIndex","loadRandomFactor","loadMinIndex","one","none","decayOffset","tryCountIncrement","minRetries","rollFactor","minZ","defaultRadius","posOffset","sizeFactor","minLimit","countOffset","minCount","minIndex","lengthOffset","defaultDensityFactor","deleteCount","touchDelay","manualDefaultPosition","defaultAngle","identity","minStrokeWidth","lFactor","lMin","rgbFactor","triple","sextuple","sNormalizedOffset","phaseNumerator","defaultRgbMin","defaultVelocity","defaultLoops","defaultTime","MoveDirection","isBoolean","arg","isString","isNumber","isObject","isArray","isNull","Vector3d","xOrCoords","y","z","angle","length","coords3d","source","x","v","n","c","v3d","Vector","_random","_animationLoop","cb","idx","getRandom","clamp","animate","fn","cancelAnimation","handle","num","min","max","mix","comp1","comp2","weight1","weight2","randomInRange","r","getRangeMax","minOffset","getRangeMin","getRangeValue","value","setRangeValue","getDistances","pointA","pointB","dx","dy","getDistance","degToRad","degrees","getParticleDirectionAngle","direction","position","center","getParticleBaseVelocity","baseVelocity","collisionVelocity","v1","v2","m1","m2","calcExactPositionOrRandomFromSize","data","_a","_b","parseAlpha","input","AnimationMode","AnimationStatus","DestroyType","OutModeDirection","PixelMode","StartValueType","_logger","getLogger","memoize","cache","args","key","result","rectSideBounce","res","pSide","pOtherSide","rectSide","rectOtherSide","velocity","factor","checkSelector","element","selectors","executeOnSingleOrMultiple","selector","t","isSsr","hasMatchMedia","safeMatchMedia","query","safeIntersectionObserver","callback","safeMutationObserver","isInArray","array","loadFont","font","weight","arrayRandomIndex","itemFromArray","index","useIndex","isPointInside","point","size","offset","radius","areBoundsInside","calculateBounds","bounds","inside","deepExtend","destination","sources","sourceIsArray","sourceDict","destDict","isDivModeEnabled","mode","divs","findItemFromSingleOrMultiple","divModeExecute","div","divMode","singleDivModeExecute","circleBounceDataFromParticle","p","circleBounce","p1","p2","xVelocityDiff","yVelocityDiff","pos1","pos2","xDist","yDist","u1","u2","vFinal1","vFinal2","rectBounce","particle","divBounds","pPos","bounceOptions","resH","resV","obj","item","itemFromSingleOrMultiple","initParticleNumericAnimationValue","options","pxRatio","valueRange","animationOptions","autoStatus","getPositionOrSize","positionOrSize","canvasSize","_","rest","getPosition","checkDestroy","destroyType","minValue","maxValue","updateAnimation","changeDirection","delta","decay","cloneStyle","style","clonedStyle","styleKey","styleValue","stylePriority","_d","_c","computeFullScreenStyle","zIndex","fullScreenStyle","radix","getFullScreenStyle","AlterType","stringToRgba","engine","manager","rangeColorToRgb","color","colorToRgb","getRandomRgbColor","stringToRgb","rangeColorToHsl","rgb","rgbToHsl","r1","g1","b1","hslToRgb","hsl","h","s","l","hNormalized","sNormalized","lNormalized","grayscaleValue","channel","temp1","temp2","temp3","temp3Offset","phaseThird","red","green","blue","hslaToRgba","hsla","rgbResult","fixedMin","fixedMax","getStyleFromRgb","opacity","getStyleFromHsl","colorMix","color1","color2","size1","size2","rgb1","rgb2","getLinkColor","linkColor","sourceColor","destColor","hslColor","getLinkRandomColor","optColor","blink","consent","getHslFromAnimation","animation","getHslAnimationFromHsl","reduceFactor","resColor","setColorAnimation","colorValue","colorAnimation","updateColorValue","range","decrease","updateColor","ranges","drawLine","context","begin","end","paintBase","dimension","baseColor","paintImage","image","clear","drawParticle","container","colorStyles","backgroundMask","composite","shadow","transform","pos","rotateData","rotating","transformData","shadowColor","strokeWidth","drawData","drawShape","drawShapeAfterDraw","drawEffect","drawer","drawPlugin","plugin","drawParticlePlugin","alterHsl","type","setTransformValue","newFactor","newValue","setStyle","canvas","important","elementStyle","keys","Canvas","updater","ctx","zOpacity","fill","stroke","updaterTransform","fColor","sColor","cover","coverRgb","coverColor","resolve","reject","img","evt","trail","trailFill","fillColor","observer","pointerEvents","originalStyle","stdSize","pfColor","psColor","zIndexOptions","zIndexFactor","zOpacityFactor","strokeOpacity","zStrokeOpacity","obs","records","record","background","standardSize","retinaSize","currentSize","newSize","oldSize","needsRefresh","InteractivityDetect","manageListener","event","handler","add","addOptions","removeOptions","EventListeners","e","mouseInteractivity","mousePos","onClick","mediaEvent","defaultThemes","themeName","theme","handleResize","mouseLeaveTmpEvent","handlers","interactivityEl","html","detectType","canvasEl","mediaMatch","entries","interactivity","mouse","handled","mousePosition","mouseEvent","clientRect","target","sourceRect","targetRect","canvasRect","touchEvent","lastTouch","touches","touch","EventType","OptionsColor","Background","BackgroundMaskCover","BackgroundMask","FullScreen","ClickEvent","DivType","DivEvent","Parallax","HoverEvent","ResizeEvent","Events","onDiv","tmp","Modes","interactors","interactor","Interactivity","detectsOn","ManualParticle","ResponsiveMode","Responsive","ThemeMode","ThemeDefault","Theme","AnimationOptions","RangedAnimationOptions","ColorAnimation","HslAnimation","AnimatableColor","CollisionMode","CollisionsAbsorb","CollisionsOverlap","ValueWithRandom","AnimationValueWithRandom","RangedAnimationValueWithRandom","ParticlesBounceFactor","ParticlesBounce","Collisions","Effect","effect","MoveAngle","MoveAttract","rotateX","rotateY","MoveCenter","MoveGravity","MovePath","MoveTrailFill","MoveTrail","OutMode","OutModes","Spin","Move","outModes","OpacityAnimation","Opacity","ParticlesDensity","width","height","LimitMode","ParticlesNumberLimit","ParticlesNumber","Shadow","Shape","shape","SizeAnimation","Size","Stroke","ZIndex","ParticlesOptions","group","strokeToLoad","updaters","loadOptions","sourceOptionsArr","sourceOptions","loadParticlesOptions","Options","preset","detectRetina","fpsLimit","fullScreen","responsive","optResponsive","a","b","existingTheme","optTheme","defaultOptions","responsiveOptions","name","chosenTheme","clientDarkMode","defaultTheme","InteractorType","InteractionManager","ParticleOutType","loadEffectData","effectOptions","id","reduceDuplicates","effectData","loadShapeData","shapeOptions","shapeData","fixOutMode","diameter","Particle","tryCount","pluginPos","exactPosition","fixHorizontal","outMode","fixVertical","moveOptions","rad","radOffset","collisionsOptions","overlapOptions","retries","backFactor","backSum","zIndexValue","override","pathGenerator","shapeDrawer","overrideOptions","mainOptions","particlesOptions","effectType","shapeType","overrideEffectType","overrideShapeType","availableEffects","availableShapes","pathOptions","particles","effectDrawer","sideCountFunc","mover","_e","_f","Point","RangeType","BaseRange","Circle","distPos","circleRange","rSum","dist","Rectangle","rectRange","w","w2","h2","QuadTree","rectangle","capacity","i","fixedIndex","sub","check","qTreeRectangle","Particles","manualCount","groupOptions","numberOptions","densityFactor","optParticlesNumber","optParticlesLimit","particlesNumber","particlesCount","densityOptions","initializer","canAdd","zIdx","limitMode","limit","currentCount","countToRemove","condition","groups","j","nb","quantity","deleted","particlesToDelete","resizeFactor","checkDelete","zArray","Retina","ratio","moveDistance","props","maxDistance","guardCheck","initDelta","smooth","loadContainerOptions","Container","entry","timestamp","el","clickOrTouchHandler","posRetina","clickHandler","touchStartHandler","touched","touchMoved","touchMoveHandler","touchEndHandler","touchCancelHandler","generator","remove","mainArr","force","refreshTime","frame","effects","shapes","availablePlugins","zLayers","duration","delay","needsUpdate","start","newMaxWidth","EventDispatcher","listener","arr","listeners","getItemsFromInitializer","map","initializers","getDataFromUrl","url","response","getCanvasFromContainer","domContainer","existingCanvases","fullPercent","getDomContainer","Engine","config","refresh","easing","interactorInitializer","moverInitializer","updaterInitializer","validType","pluginVersion","items","params","currentOptions","oldIndex","newItem","old","init","ExternalInteractorBase","ParticlesInteractorBase","RotateDirection","GradientType","EasingType","tsParticles","f","m","d","moveSpeedFactor","minSpinRadius","spinFactor","applyDistance","initialPosition","dxFixed","dyFixed","hDistance","vDistance","hasHDistance","hasVDistance","vel","move","moveSpeed","maxSpeed","moveDrift","applyPath","gravityOptions","gravityFactor","zVelocityFactor","spin","spinClockwise","updateFunc","maxCanvasSize","halfMaxSize","path","getProximitySpeedFactor","initSpin","spinOptions","spinPos","spinCenter","distance","spinAcceleration","diffFactor","defaultSizeFactor","defaultDeltaFactor","BaseMover","particleOptions","slowFactor","baseSpeed","maxSize","deltaFactor","loadBaseMover","minAngle","origin","drawCircle","sides","maxAngle","CircleDrawer","loadCircleShape","ColorUpdater","hAnimation","sAnimation","lAnimation","loadColorUpdater","RgbIndexes","shorthandHexRegex","hexRegex","hexRadix","defaultAlpha","alphaFactor","HexColorManager","hexColor","hexFixed","g","loadHexColorPlugin","HslIndexes","HslColorManager","regex","minLength","loadHslColorPlugin","OpacityUpdater","opacityOptions","opacityAnimation","loadOpacityUpdater","boundsMin","bounceHorizontal","bounced","newVelocity","minPos","bounceVertical","BounceOutMode","DestroyOutMode","_delta","vx","vy","NoneOutMode","pRadius","minDistance","OutOutMode","circVec","newDx","newDy","warp","newPos","sizeValue","nextBounds","checkOutMode","OutOfCanvasUpdater","getUpdater","loadOutModesUpdater","RgbColorManager","rgbColor","loadRgbColorPlugin","minLoops","SizeUpdater","sizeOptions","sizeAnimation","loadSizeUpdater","loadBasic","loadEasingQuadPlugin","drawEmoji","previousAlpha","defaultFont","noPadding","EmojiDrawer","validTypes","promises","_container","emoji","emojiOptions","padding","fullSize","loadEmojiShape","minFactor","minRadius","processAttract","attractRadius","area","queryCb","attractOptions","attractFactor","normVec","clickAttract","enabledCb","attract","hoverAttract","Attract","attractMode","mouseMoveStatus","events","hoverEnabled","hoverMode","clickEnabled","clickMode","loadExternalAttractInteraction","Attractor","halfPI","toleranceFactor","processBounce","singleSelectorBounce","bounceCb","elem","tolerance","divBounce","bounceMode","mouseBounce","Bounce","Bouncer","bounce","loadExternalBounceInteraction","BubbleBase","BubbleDiv","Bubble","ProcessBubbleType","calculateBubbleValue","particleValue","modeValue","optionsValue","bubbleMode","defaultClickTime","ratioOffset","defaultBubbleValue","minRatio","Bubbler","mouseClickPos","bubbleOptions","bubble","distMouse","timeSpent","sizeData","opacityData","pointDistance","divBubble","modeColor","bubbleColor","pColor","modeOpacity","optOpacity","pOpacity","modeSize","optSize","pSize","bubbleParam","bubbleDuration","bubbleDistance","particlesParam","pObjBubble","pObj","repulseRadius","onHover","loadExternalBubbleInteraction","ConnectLinks","Connect","gradientMin","gradientMax","defaultLinksWidth","gradient","gradStop","sourcePos","destPos","midRgb","grad","drawConnectLine","lineStyle","connectOptions","drawConnection","ls","connectMode","Connector","connect","connectModeDistance","connectModeRadius","indexOffset","distMax","xDiff","yDiff","loadExternalConnectInteraction","GrabLinks","Grab","defaultWidth","drawGrabLine","colorLine","drawGrab","lineColor","beginPos","grabMode","minOpacity","Grabber","grab","grabLineOptions","lineOpacity","opacityLine","linksOptions","loadExternalGrabInteraction","pauseMode","Pauser","loadExternalPauseInteraction","Push","pushMode","minQuantity","Pusher","pushOptions","loadExternalPushInteraction","Remove","removeMode","Remover","removeNb","loadExternalRemoveInteraction","RepulseBase","RepulseDiv","Repulse","repulseMode","repulseRadiusFactor","repulseRadiusPower","squarePower","minSpeed","easingOffset","Repulser","repulseOptions","repulse","repulseDistance","vect","divRepulse","speed","easingFunc","repulseFactor","repulseOpts","hover","click","loadExternalRepulseInteraction","Slow","slowMode","Slower","slow","slowOptions","particlePos","proximityFactor","loadExternalSlowInteraction","stringStart","currentColorRegex","replaceColorSvg","imageShape","svgData","colorStyle","preFillIndex","loadImage","downloadSvgImage","replaceImageColor","imageData","svgColoredData","imageRes","svg","domUrl","errorHandler","img2","InterlaceOffsets","InterlaceSteps","ByteStream","bytes","count","slice","acc","curr","blockString","emptySize","len","increment","blockData","noData","DisposalMethod","GIFDataHeaders","defaultFrame","initialTime","firstIndex","defaultLoopCount","parseColorTable","byteStream","colors","parseExtensionBlock","gif","getFrameIndex","getTransparencyIndex","packedByte","transparencyFlag","transparencyIndex","applicationExtension","parseImageBlock","avgAlpha","progressCallback","localColorTableFlag","interlacedFlag","localColorCount","getColor","error","minCodeSize","clearCode","readBits","bytePos","bitPos","code","dic","pass","pixelPos","lineIndex","exit","last","parseBlock","getGIFLoopAmount","extension","decodeGIF","gifURL","buffer","globalColorTableFlag","globalColorCount","backgroundColorIndex","backgroundImage","frameIndex","incrementFrameIndex","getframeIndex","drawGif","offscreenCanvas","offscreenContext","previousImageData","loadGifImage","ImageDrawer","images","replaceColor","close","Preload","ImagePreloaderPlugin","preloadOptions","existing","preload","extLength","addLoadImageToEngine","imageFunc","loadImageShape","preloader","LifeDelay","LifeDuration","Life","noTime","infiniteValue","noLife","minCanvasSize","updateLife","life","justSpawned","widthRange","heightRange","lifeOptions","LifeUpdater","loadLifeUpdater","centerY","LineDrawer","loadLineShape","ParallaxMover","parallaxOptions","parallaxForce","canvasCenter","parallaxSmooth","centerDistance","loadParallaxMover","rotate","ax","ay","p1Factor","p2Factor","loadParticlesAttractInteraction","absorbFactor","minAbsorbFactor","updateAbsorb","r2","pixelRatio","absorb","fixBounceSpeed","destroy","resolveCollision","Collider","radius1","radius2","distP","loadParticlesCollisionsInteraction","CircleWarp","rect","circle","biggerCircle","rectSW","LinksShadow","LinksTriangle","Links","opacityOffset","getLinkDistance","optDistance","absDiffs","warpDistances","Linker","linkOpt1","linkOpt2","loadLinksInteraction","drawTriangle","p3","drawLinkLine","drawn","links","pi1","pi2","endNE","d1","yi","endSW","d2","xi","endSE","d3","drawLinkTriangle","pos3","colorTriangle","opacityTriangle","getLinkKey","ids","setLinkFrequency","dictionary","minWidth","maxFrequency","LinkInstance","link","p1LinksOptions","twinkle","twinkleFreq","twinkleRgb","link1","link2","triangleOptions","linksDistance","p1Links","vertices","linkFreq","vertex","retina","LinksPlugin","loadLinksPlugin","loadParticlesLinksInteraction","piDeg","sidesOffset","drawPolygon","side","sideCount","decimalSides","interiorAngleDegrees","interiorAngle","defaultSides","PolygonDrawerBase","polygon","sidesCenterFactor","yFactor","sidesFactor","PolygonDrawer","TriangleDrawer","loadGenericPolygonShape","loadTriangleShape","loadPolygonShape","RotateAnimation","Rotate","doublePIDeg","RotateUpdater","rotateOptions","rotateDirection","rotateAnimation","loadRotateUpdater","fixFactorSquared","fixFactor","drawSquare","fixedRadius","fixedDiameter","SquareDrawer","loadSquareShape","defaultInset","drawStar","inset","StarDrawer","star","loadStarShape","StrokeColorUpdater","strokeHslColor","strokeColor","loadStrokeColorUpdater","loadSlim","baseConfig","DEFAULT_COLORS","starlineTheme","isDark","snowTheme","bubbleTheme","starsTheme","fireflyTheme","geometryTheme","waveTheme","particleThemes","getThemeById","DEFAULT_THEME_ID","ParticleContext","createContext","STORAGE_KEY","ParticleProvider","isDarkProp","persist","children","themeId","setThemeId","useState","setDark","useEffect","setTheme","useCallback","jsx","useParticleTheme","useContext","useParticleThemeOptional","ParticleWave","className","containerRef","useRef","animationRef","hasThree","disposed","cleanup","THREE","req","mod","scene","camera","renderer","particleCount","waveWidth","waveDepth","geometry","positions","sizes","i3","colorChoice","vertexShader","fragmentShader","material","bokehCount","bokehGeometry","bokehPositions","bokehColors","bokehSizes","bokehMaterial","bokehParticles","dropCount","trailLength","rainDrops","shouldActivate","waveHeight","startHeight","trailPointCount","dropTrailGeometry","dropTrailPositions","dropTrailColors","dropTrailSizes","dropTrailMaterial","dropTrailParticles","dropHeadGeometry","dropHeadPositions","dropHeadColors","dropHeadSizes","dropHeadMaterial","dropHeadParticles","time","lastSpawnTime","getWaveHeight","activateDrop","drop","wh","wavePos","tPos","tCol","hPos","hCol","activeCount","inactiveIndices","spawnCount","shuffled","needActivate","remaining","hi3","brightness","pi","fade","instanceCounter","ParticlesBackground","themeProp","onLoaded","setInit","instanceId","setInstanceId","isFirstMount","initParticlesEngine","particlesLoaded","useMemo","particlesId","POSITION_STYLES","BUTTON_BASE_STYLE","BACKDROP_STYLE","DRAWER_BASE_STYLE","HEADER_STYLE","CLOSE_BUTTON_STYLE","LIST_STYLE","TIP_CONTAINER_STYLE","TIP_STYLE","THEME_LIST","ThemeSelector","accentColor","open","setOpen","currentTheme","drawerSide","buttonStyle","drawerStyle","handleOpen","handleClose","handleThemeClick","jsxs","Fragment","isActive"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/Constants.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Directions/MoveDirection.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/TypeUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/Vectors.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/NumberUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/AnimationMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/AnimationStatus.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/DestroyType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Directions/OutModeDirection.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/PixelMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/StartValueType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/Utils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/AlterType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/ColorUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/CanvasUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Canvas.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/InteractivityDetect.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/EventListeners.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/EventType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/OptionsColor.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Background/Background.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/BackgroundMask/BackgroundMaskCover.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/BackgroundMask/BackgroundMask.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/FullScreen/FullScreen.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/ClickEvent.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/DivType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/DivEvent.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/Parallax.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/HoverEvent.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/ResizeEvent.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/Events.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Modes/Modes.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Interactivity.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/ManualParticle.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/ResponsiveMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Responsive.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/ThemeMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Theme/ThemeDefault.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Theme/Theme.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/AnimationOptions.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/ColorAnimation.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/HslAnimation.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/AnimatableColor.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/CollisionMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/CollisionsAbsorb.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/CollisionsOverlap.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/ValueWithRandom.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Bounce/ParticlesBounce.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/Collisions.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Effect/Effect.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveAngle.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveAttract.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveCenter.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveGravity.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Path/MovePath.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveTrailFill.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveTrail.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/OutMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/OutModes.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Spin.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Move.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Opacity/Opacity.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesDensity.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Modes/LimitMode.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesNumber.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Shadow.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Shape/Shape.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Size/SizeAnimation.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Size/Size.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Stroke.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/ZIndex/ZIndex.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Particles/ParticlesOptions.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/OptionsUtils.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Options/Classes/Options.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/InteractorType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/InteractionManager.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/ParticleOutType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Particle.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/Point.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Types/RangeType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/Ranges.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/QuadTree.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Particles.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Retina.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Container.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Utils/EventDispatcher.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Engine.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/init.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/ExternalInteractorBase.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Core/Utils/ParticlesInteractorBase.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Directions/RotateDirection.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/GradientType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/Enums/Types/EasingType.js","../node_modules/.pnpm/@tsparticles+engine@3.9.1/node_modules/@tsparticles/engine/browser/index.js","../node_modules/.pnpm/@tsparticles+react@3.0.0_@tsparticles+engine@3.9.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tsparticles/react/dist/Particles.js","../node_modules/.pnpm/@tsparticles+react@3.0.0_@tsparticles+engine@3.9.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tsparticles/react/dist/index.js","../node_modules/.pnpm/@tsparticles+move-base@3.9.1/node_modules/@tsparticles/move-base/browser/Utils.js","../node_modules/.pnpm/@tsparticles+move-base@3.9.1/node_modules/@tsparticles/move-base/browser/BaseMover.js","../node_modules/.pnpm/@tsparticles+move-base@3.9.1/node_modules/@tsparticles/move-base/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-circle@3.9.1/node_modules/@tsparticles/shape-circle/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-circle@3.9.1/node_modules/@tsparticles/shape-circle/browser/CircleDrawer.js","../node_modules/.pnpm/@tsparticles+shape-circle@3.9.1/node_modules/@tsparticles/shape-circle/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-color@3.9.1/node_modules/@tsparticles/updater-color/browser/ColorUpdater.js","../node_modules/.pnpm/@tsparticles+updater-color@3.9.1/node_modules/@tsparticles/updater-color/browser/index.js","../node_modules/.pnpm/@tsparticles+plugin-hex-color@3.9.1/node_modules/@tsparticles/plugin-hex-color/browser/HexColorManager.js","../node_modules/.pnpm/@tsparticles+plugin-hex-color@3.9.1/node_modules/@tsparticles/plugin-hex-color/browser/index.js","../node_modules/.pnpm/@tsparticles+plugin-hsl-color@3.9.1/node_modules/@tsparticles/plugin-hsl-color/browser/HslColorManager.js","../node_modules/.pnpm/@tsparticles+plugin-hsl-color@3.9.1/node_modules/@tsparticles/plugin-hsl-color/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-opacity@3.9.1/node_modules/@tsparticles/updater-opacity/browser/OpacityUpdater.js","../node_modules/.pnpm/@tsparticles+updater-opacity@3.9.1/node_modules/@tsparticles/updater-opacity/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/Utils.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/BounceOutMode.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/DestroyOutMode.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/NoneOutMode.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/OutOutMode.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/OutOfCanvasUpdater.js","../node_modules/.pnpm/@tsparticles+updater-out-modes@3.9.1/node_modules/@tsparticles/updater-out-modes/browser/index.js","../node_modules/.pnpm/@tsparticles+plugin-rgb-color@3.9.1/node_modules/@tsparticles/plugin-rgb-color/browser/RgbColorManager.js","../node_modules/.pnpm/@tsparticles+plugin-rgb-color@3.9.1/node_modules/@tsparticles/plugin-rgb-color/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-size@3.9.1/node_modules/@tsparticles/updater-size/browser/SizeUpdater.js","../node_modules/.pnpm/@tsparticles+updater-size@3.9.1/node_modules/@tsparticles/updater-size/browser/index.js","../node_modules/.pnpm/@tsparticles+basic@3.9.1/node_modules/@tsparticles/basic/browser/index.js","../node_modules/.pnpm/@tsparticles+plugin-easing-quad@3.9.1/node_modules/@tsparticles/plugin-easing-quad/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-emoji@3.9.1/node_modules/@tsparticles/shape-emoji/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-emoji@3.9.1/node_modules/@tsparticles/shape-emoji/browser/EmojiDrawer.js","../node_modules/.pnpm/@tsparticles+shape-emoji@3.9.1/node_modules/@tsparticles/shape-emoji/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-attract@3.9.1/node_modules/@tsparticles/interaction-external-attract/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-attract@3.9.1/node_modules/@tsparticles/interaction-external-attract/browser/Options/Classes/Attract.js","../node_modules/.pnpm/@tsparticles+interaction-external-attract@3.9.1/node_modules/@tsparticles/interaction-external-attract/browser/Attractor.js","../node_modules/.pnpm/@tsparticles+interaction-external-attract@3.9.1/node_modules/@tsparticles/interaction-external-attract/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-bounce@3.9.1/node_modules/@tsparticles/interaction-external-bounce/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-bounce@3.9.1/node_modules/@tsparticles/interaction-external-bounce/browser/Options/Classes/Bounce.js","../node_modules/.pnpm/@tsparticles+interaction-external-bounce@3.9.1/node_modules/@tsparticles/interaction-external-bounce/browser/Bouncer.js","../node_modules/.pnpm/@tsparticles+interaction-external-bounce@3.9.1/node_modules/@tsparticles/interaction-external-bounce/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/BubbleBase.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/BubbleDiv.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/Bubble.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Enums.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/Bubbler.js","../node_modules/.pnpm/@tsparticles+interaction-external-bubble@3.9.1/node_modules/@tsparticles/interaction-external-bubble/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/Options/Classes/ConnectLinks.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/Options/Classes/Connect.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/Connector.js","../node_modules/.pnpm/@tsparticles+interaction-external-connect@3.9.1/node_modules/@tsparticles/interaction-external-connect/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/Options/Classes/GrabLinks.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/Options/Classes/Grab.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/Grabber.js","../node_modules/.pnpm/@tsparticles+interaction-external-grab@3.9.1/node_modules/@tsparticles/interaction-external-grab/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-pause@3.9.1/node_modules/@tsparticles/interaction-external-pause/browser/Pauser.js","../node_modules/.pnpm/@tsparticles+interaction-external-pause@3.9.1/node_modules/@tsparticles/interaction-external-pause/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-push@3.9.1/node_modules/@tsparticles/interaction-external-push/browser/Options/Classes/Push.js","../node_modules/.pnpm/@tsparticles+interaction-external-push@3.9.1/node_modules/@tsparticles/interaction-external-push/browser/Pusher.js","../node_modules/.pnpm/@tsparticles+interaction-external-push@3.9.1/node_modules/@tsparticles/interaction-external-push/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-remove@3.9.1/node_modules/@tsparticles/interaction-external-remove/browser/Options/Classes/Remove.js","../node_modules/.pnpm/@tsparticles+interaction-external-remove@3.9.1/node_modules/@tsparticles/interaction-external-remove/browser/Remover.js","../node_modules/.pnpm/@tsparticles+interaction-external-remove@3.9.1/node_modules/@tsparticles/interaction-external-remove/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/RepulseBase.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/RepulseDiv.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/Repulse.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/Repulser.js","../node_modules/.pnpm/@tsparticles+interaction-external-repulse@3.9.1/node_modules/@tsparticles/interaction-external-repulse/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-external-slow@3.9.1/node_modules/@tsparticles/interaction-external-slow/browser/Options/Classes/Slow.js","../node_modules/.pnpm/@tsparticles+interaction-external-slow@3.9.1/node_modules/@tsparticles/interaction-external-slow/browser/Slower.js","../node_modules/.pnpm/@tsparticles+interaction-external-slow@3.9.1/node_modules/@tsparticles/interaction-external-slow/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/Constants.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/ByteStream.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/Enums/DisposalMethod.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/Types/GIFDataHeaders.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/GifUtils/Utils.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/ImageDrawer.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/Options/Classes/Preload.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/ImagePreloader.js","../node_modules/.pnpm/@tsparticles+shape-image@3.9.1/node_modules/@tsparticles/shape-image/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/Options/Classes/LifeDelay.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/Options/Classes/LifeDuration.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/Options/Classes/Life.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/Utils.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/LifeUpdater.js","../node_modules/.pnpm/@tsparticles+updater-life@3.9.1/node_modules/@tsparticles/updater-life/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-line@3.9.1/node_modules/@tsparticles/shape-line/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-line@3.9.1/node_modules/@tsparticles/shape-line/browser/LineDrawer.js","../node_modules/.pnpm/@tsparticles+shape-line@3.9.1/node_modules/@tsparticles/shape-line/browser/index.js","../node_modules/.pnpm/@tsparticles+move-parallax@3.9.1/node_modules/@tsparticles/move-parallax/browser/ParallaxMover.js","../node_modules/.pnpm/@tsparticles+move-parallax@3.9.1/node_modules/@tsparticles/move-parallax/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-particles-attract@3.9.1/node_modules/@tsparticles/interaction-particles-attract/browser/Attractor.js","../node_modules/.pnpm/@tsparticles+interaction-particles-attract@3.9.1/node_modules/@tsparticles/interaction-particles-attract/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/Absorb.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/Bounce.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/Destroy.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/ResolveCollision.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/Collider.js","../node_modules/.pnpm/@tsparticles+interaction-particles-collisions@3.9.1/node_modules/@tsparticles/interaction-particles-collisions/browser/index.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/CircleWarp.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/LinksShadow.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/LinksTriangle.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/Links.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Linker.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/interaction.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/Utils.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/LinkInstance.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/LinksPlugin.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/plugin.js","../node_modules/.pnpm/@tsparticles+interaction-particles-links@3.9.1/node_modules/@tsparticles/interaction-particles-links/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/PolygonDrawerBase.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/PolygonDrawer.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/TriangleDrawer.js","../node_modules/.pnpm/@tsparticles+shape-polygon@3.9.1/node_modules/@tsparticles/shape-polygon/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-rotate@3.9.1/node_modules/@tsparticles/updater-rotate/browser/Options/Classes/RotateAnimation.js","../node_modules/.pnpm/@tsparticles+updater-rotate@3.9.1/node_modules/@tsparticles/updater-rotate/browser/Options/Classes/Rotate.js","../node_modules/.pnpm/@tsparticles+updater-rotate@3.9.1/node_modules/@tsparticles/updater-rotate/browser/RotateUpdater.js","../node_modules/.pnpm/@tsparticles+updater-rotate@3.9.1/node_modules/@tsparticles/updater-rotate/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-square@3.9.1/node_modules/@tsparticles/shape-square/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-square@3.9.1/node_modules/@tsparticles/shape-square/browser/SquareDrawer.js","../node_modules/.pnpm/@tsparticles+shape-square@3.9.1/node_modules/@tsparticles/shape-square/browser/index.js","../node_modules/.pnpm/@tsparticles+shape-star@3.9.1/node_modules/@tsparticles/shape-star/browser/Utils.js","../node_modules/.pnpm/@tsparticles+shape-star@3.9.1/node_modules/@tsparticles/shape-star/browser/StarDrawer.js","../node_modules/.pnpm/@tsparticles+shape-star@3.9.1/node_modules/@tsparticles/shape-star/browser/index.js","../node_modules/.pnpm/@tsparticles+updater-stroke-color@3.9.1/node_modules/@tsparticles/updater-stroke-color/browser/StrokeColorUpdater.js","../node_modules/.pnpm/@tsparticles+updater-stroke-color@3.9.1/node_modules/@tsparticles/updater-stroke-color/browser/index.js","../node_modules/.pnpm/@tsparticles+slim@3.9.1/node_modules/@tsparticles/slim/browser/index.js","../src/themes/base.ts","../src/themes/starline.ts","../src/themes/snow.ts","../src/themes/bubble.ts","../src/themes/stars.ts","../src/themes/firefly.ts","../src/themes/geometry.ts","../src/themes/wave.ts","../src/themes/wave2d.ts","../src/themes/index.ts","../src/context/ParticleContext.tsx","../src/components/ParticleWave.tsx","../src/components/ParticleWave2D.tsx","../src/components/ParticlesBackground.tsx","../src/components/ThemeSelector.tsx"],"sourcesContent":["export const generatedAttribute = \"generated\", mouseDownEvent = \"pointerdown\", mouseUpEvent = \"pointerup\", mouseLeaveEvent = \"pointerleave\", mouseOutEvent = \"pointerout\", mouseMoveEvent = \"pointermove\", touchStartEvent = \"touchstart\", touchEndEvent = \"touchend\", touchMoveEvent = \"touchmove\", touchCancelEvent = \"touchcancel\", resizeEvent = \"resize\", visibilityChangeEvent = \"visibilitychange\", errorPrefix = \"tsParticles - Error\", percentDenominator = 100, half = 0.5, millisecondsToSeconds = 1000, originPoint = {\n x: 0,\n y: 0,\n z: 0,\n}, defaultTransform = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n}, randomColorValue = \"random\", midColorValue = \"mid\", double = 2, doublePI = Math.PI * double, defaultFps = 60, defaultAlpha = 1, generatedTrue = \"true\", generatedFalse = \"false\", canvasTag = \"canvas\", defaultRetryCount = 0, squareExp = 2, qTreeCapacity = 4, defaultRemoveQuantity = 1, defaultRatio = 1, defaultReduceFactor = 1, subdivideCount = 4, inverseFactorNumerator = 1.0, rgbMax = 255, hMax = 360, sMax = 100, lMax = 100, hMin = 0, sMin = 0, hPhase = 60, empty = 0, quarter = 0.25, threeQuarter = half + quarter, minVelocity = 0, defaultTransformValue = 1, minimumSize = 0, minimumLength = 0, zIndexFactorOffset = 1, defaultOpacity = 1, clickRadius = 1, touchEndLengthOffset = 1, minCoordinate = 0, removeDeleteCount = 1, removeMinIndex = 0, defaultFpsLimit = 120, minFpsLimit = 0, canvasFirstIndex = 0, loadRandomFactor = 10000, loadMinIndex = 0, one = 1, none = 0, decayOffset = 1, tryCountIncrement = 1, minRetries = 0, rollFactor = 1, minZ = 0, defaultRadius = 0, posOffset = -quarter, sizeFactor = 1.5, minLimit = 0, countOffset = 1, minCount = 0, minIndex = 0, manualCount = 0, lengthOffset = 1, defaultDensityFactor = 1, deleteCount = 1, touchDelay = 500, manualDefaultPosition = 50, defaultAngle = 0, identity = 1, minStrokeWidth = 0, lFactor = 1, lMin = 0, rgbFactor = 255, triple = 3, sextuple = 6, sNormalizedOffset = 1, phaseNumerator = 1, defaultRgbMin = 0, defaultVelocity = 0, defaultLoops = 0, defaultTime = 0;\n","export var MoveDirection;\n(function (MoveDirection) {\n MoveDirection[\"bottom\"] = \"bottom\";\n MoveDirection[\"bottomLeft\"] = \"bottom-left\";\n MoveDirection[\"bottomRight\"] = \"bottom-right\";\n MoveDirection[\"left\"] = \"left\";\n MoveDirection[\"none\"] = \"none\";\n MoveDirection[\"right\"] = \"right\";\n MoveDirection[\"top\"] = \"top\";\n MoveDirection[\"topLeft\"] = \"top-left\";\n MoveDirection[\"topRight\"] = \"top-right\";\n MoveDirection[\"outside\"] = \"outside\";\n MoveDirection[\"inside\"] = \"inside\";\n})(MoveDirection || (MoveDirection = {}));\n","export function isBoolean(arg) {\n return typeof arg === \"boolean\";\n}\nexport function isString(arg) {\n return typeof arg === \"string\";\n}\nexport function isNumber(arg) {\n return typeof arg === \"number\";\n}\nexport function isFunction(arg) {\n return typeof arg === \"function\";\n}\nexport function isObject(arg) {\n return typeof arg === \"object\" && arg !== null;\n}\nexport function isArray(arg) {\n return Array.isArray(arg);\n}\nexport function isNull(arg) {\n return arg === null || arg === undefined;\n}\n","import { errorPrefix, inverseFactorNumerator, none, originPoint, squareExp } from \"./Constants.js\";\nimport { isNumber } from \"../../Utils/TypeUtils.js\";\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 : originPoint.z;\n }\n else if (xOrCoords !== undefined && y !== undefined) {\n this.x = xOrCoords;\n this.y = y;\n this.z = z ?? originPoint.z;\n }\n else {\n throw new Error(`${errorPrefix} Vector3d not initialized correctly`);\n }\n }\n static get origin() {\n return Vector3d.create(originPoint.x, originPoint.y, originPoint.z);\n }\n get angle() {\n return Math.atan2(this.y, this.x);\n }\n set angle(angle) {\n this._updateFromAngle(angle, this.length);\n }\n get length() {\n return Math.sqrt(this.getLengthSq());\n }\n set length(length) {\n this._updateFromAngle(this.angle, length);\n }\n static clone(source) {\n return Vector3d.create(source.x, source.y, source.z);\n }\n static create(x, y, z) {\n return new Vector3d(x, y, z);\n }\n add(v) {\n return Vector3d.create(this.x + v.x, this.y + v.y, this.z + v.z);\n }\n addTo(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n }\n copy() {\n return Vector3d.clone(this);\n }\n distanceTo(v) {\n return this.sub(v).length;\n }\n distanceToSq(v) {\n return this.sub(v).getLengthSq();\n }\n div(n) {\n return Vector3d.create(this.x / n, this.y / n, this.z / n);\n }\n divTo(n) {\n this.x /= n;\n this.y /= n;\n this.z /= n;\n }\n getLengthSq() {\n return this.x ** squareExp + this.y ** squareExp;\n }\n mult(n) {\n return Vector3d.create(this.x * n, this.y * n, this.z * n);\n }\n multTo(n) {\n this.x *= n;\n this.y *= n;\n this.z *= n;\n }\n normalize() {\n const length = this.length;\n if (length != none) {\n this.multTo(inverseFactorNumerator / length);\n }\n }\n rotate(angle) {\n return Vector3d.create(this.x * Math.cos(angle) - this.y * Math.sin(angle), this.x * Math.sin(angle) + this.y * Math.cos(angle), originPoint.z);\n }\n setTo(c) {\n this.x = c.x;\n this.y = c.y;\n const v3d = c;\n this.z = v3d.z ? v3d.z : originPoint.z;\n }\n sub(v) {\n return Vector3d.create(this.x - v.x, this.y - v.y, this.z - v.z);\n }\n subFrom(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n }\n}\nexport class Vector extends Vector3d {\n constructor(xOrCoords, y) {\n super(xOrCoords, y, originPoint.z);\n }\n static get origin() {\n return Vector.create(originPoint.x, originPoint.y);\n }\n static clone(source) {\n return Vector.create(source.x, source.y);\n }\n static create(x, y) {\n return new Vector(x, y);\n }\n}\n","import { MoveDirection } from \"../Enums/Directions/MoveDirection.js\";\nimport { double, doublePI, empty, half, percentDenominator, quarter, threeQuarter } from \"../Core/Utils/Constants.js\";\nimport { Vector } from \"../Core/Utils/Vectors.js\";\nimport { isNumber } from \"./TypeUtils.js\";\nlet _random = Math.random;\nconst _animationLoop = {\n nextFrame: (cb) => requestAnimationFrame(cb),\n cancel: (idx) => cancelAnimationFrame(idx),\n};\nexport function setRandom(rnd = Math.random) {\n _random = rnd;\n}\nexport function getRandom() {\n const min = 0, max = 1;\n return clamp(_random(), min, max - Number.EPSILON);\n}\nexport function setAnimationFunctions(nextFrame, cancel) {\n _animationLoop.nextFrame = (callback) => nextFrame(callback);\n _animationLoop.cancel = (handle) => cancel(handle);\n}\nexport function animate(fn) {\n return _animationLoop.nextFrame(fn);\n}\nexport function cancelAnimation(handle) {\n _animationLoop.cancel(handle);\n}\nexport function clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\nexport function mix(comp1, comp2, weight1, weight2) {\n return Math.floor((comp1 * weight1 + comp2 * weight2) / (weight1 + weight2));\n}\nexport function randomInRange(r) {\n const max = getRangeMax(r), minOffset = 0;\n let min = getRangeMin(r);\n if (max === min) {\n min = minOffset;\n }\n return getRandom() * (max - min) + min;\n}\nexport function getRangeValue(value) {\n return isNumber(value) ? value : randomInRange(value);\n}\nexport function getRangeMin(value) {\n return isNumber(value) ? value : value.min;\n}\nexport function getRangeMax(value) {\n return isNumber(value) ? value : value.max;\n}\nexport function setRangeValue(source, value) {\n if (source === value || (value === undefined && isNumber(source))) {\n return source;\n }\n const min = getRangeMin(source), max = getRangeMax(source);\n return value !== undefined\n ? {\n min: Math.min(min, value),\n max: Math.max(max, value),\n }\n : setRangeValue(min, max);\n}\nexport function getDistances(pointA, pointB) {\n const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y, squareExp = 2;\n return { dx: dx, dy: dy, distance: Math.sqrt(dx ** squareExp + dy ** squareExp) };\n}\nexport function getDistance(pointA, pointB) {\n return getDistances(pointA, pointB).distance;\n}\nexport function degToRad(degrees) {\n const PIDeg = 180;\n return (degrees * Math.PI) / PIDeg;\n}\nexport function getParticleDirectionAngle(direction, position, center) {\n if (isNumber(direction)) {\n return degToRad(direction);\n }\n switch (direction) {\n case MoveDirection.top:\n return -Math.PI * half;\n case MoveDirection.topRight:\n return -Math.PI * quarter;\n case MoveDirection.right:\n return empty;\n case MoveDirection.bottomRight:\n return Math.PI * quarter;\n case MoveDirection.bottom:\n return Math.PI * half;\n case MoveDirection.bottomLeft:\n return Math.PI * threeQuarter;\n case MoveDirection.left:\n return Math.PI;\n case MoveDirection.topLeft:\n return -Math.PI * threeQuarter;\n case MoveDirection.inside:\n return Math.atan2(center.y - position.y, center.x - position.x);\n case MoveDirection.outside:\n return Math.atan2(position.y - center.y, position.x - center.x);\n default:\n return getRandom() * doublePI;\n }\n}\nexport function getParticleBaseVelocity(direction) {\n const baseVelocity = Vector.origin;\n baseVelocity.length = 1;\n baseVelocity.angle = direction;\n return baseVelocity;\n}\nexport function collisionVelocity(v1, v2, m1, m2) {\n return Vector.create((v1.x * (m1 - m2)) / (m1 + m2) + (v2.x * double * m2) / (m1 + m2), v1.y);\n}\nexport function calcPositionFromSize(data) {\n return data.position?.x !== undefined && data.position.y !== undefined\n ? {\n x: (data.position.x * data.size.width) / percentDenominator,\n y: (data.position.y * data.size.height) / percentDenominator,\n }\n : undefined;\n}\nexport function calcPositionOrRandomFromSize(data) {\n return {\n x: ((data.position?.x ?? getRandom() * percentDenominator) * data.size.width) / percentDenominator,\n y: ((data.position?.y ?? getRandom() * percentDenominator) * data.size.height) / percentDenominator,\n };\n}\nexport function calcPositionOrRandomFromSizeRanged(data) {\n const position = {\n x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,\n y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,\n };\n return calcPositionOrRandomFromSize({ size: data.size, position });\n}\nexport function calcExactPositionOrRandomFromSize(data) {\n return {\n x: data.position?.x ?? getRandom() * data.size.width,\n y: data.position?.y ?? getRandom() * data.size.height,\n };\n}\nexport function calcExactPositionOrRandomFromSizeRanged(data) {\n const position = {\n x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,\n y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,\n };\n return calcExactPositionOrRandomFromSize({ size: data.size, position });\n}\nexport function parseAlpha(input) {\n const defaultAlpha = 1;\n if (!input) {\n return defaultAlpha;\n }\n return input.endsWith(\"%\") ? parseFloat(input) / percentDenominator : parseFloat(input);\n}\n","export var AnimationMode;\n(function (AnimationMode) {\n AnimationMode[\"auto\"] = \"auto\";\n AnimationMode[\"increase\"] = \"increase\";\n AnimationMode[\"decrease\"] = \"decrease\";\n AnimationMode[\"random\"] = \"random\";\n})(AnimationMode || (AnimationMode = {}));\n","export var AnimationStatus;\n(function (AnimationStatus) {\n AnimationStatus[\"increasing\"] = \"increasing\";\n AnimationStatus[\"decreasing\"] = \"decreasing\";\n})(AnimationStatus || (AnimationStatus = {}));\n","export var DestroyType;\n(function (DestroyType) {\n DestroyType[\"none\"] = \"none\";\n DestroyType[\"max\"] = \"max\";\n DestroyType[\"min\"] = \"min\";\n})(DestroyType || (DestroyType = {}));\n","export var OutModeDirection;\n(function (OutModeDirection) {\n OutModeDirection[\"bottom\"] = \"bottom\";\n OutModeDirection[\"left\"] = \"left\";\n OutModeDirection[\"right\"] = \"right\";\n OutModeDirection[\"top\"] = \"top\";\n})(OutModeDirection || (OutModeDirection = {}));\n","export var PixelMode;\n(function (PixelMode) {\n PixelMode[\"precise\"] = \"precise\";\n PixelMode[\"percent\"] = \"percent\";\n})(PixelMode || (PixelMode = {}));\n","export var StartValueType;\n(function (StartValueType) {\n StartValueType[\"max\"] = \"max\";\n StartValueType[\"min\"] = \"min\";\n StartValueType[\"random\"] = \"random\";\n})(StartValueType || (StartValueType = {}));\n","import { clamp, collisionVelocity, getDistances, getRandom, getRangeMax, getRangeMin, getRangeValue, randomInRange, } from \"./NumberUtils.js\";\nimport { half, millisecondsToSeconds, minVelocity, percentDenominator } from \"../Core/Utils/Constants.js\";\nimport { isArray, isNull, isObject } from \"./TypeUtils.js\";\nimport { AnimationMode } from \"../Enums/Modes/AnimationMode.js\";\nimport { AnimationStatus } from \"../Enums/AnimationStatus.js\";\nimport { DestroyType } from \"../Enums/Types/DestroyType.js\";\nimport { OutModeDirection } from \"../Enums/Directions/OutModeDirection.js\";\nimport { PixelMode } from \"../Enums/Modes/PixelMode.js\";\nimport { StartValueType } from \"../Enums/Types/StartValueType.js\";\nimport { Vector } from \"../Core/Utils/Vectors.js\";\nconst _logger = {\n debug: console.debug,\n error: console.error,\n info: console.info,\n log: console.log,\n verbose: console.log,\n warning: console.warn,\n};\nexport function setLogger(logger) {\n _logger.debug = logger.debug || _logger.debug;\n _logger.error = logger.error || _logger.error;\n _logger.info = logger.info || _logger.info;\n _logger.log = logger.log || _logger.log;\n _logger.verbose = logger.verbose || _logger.verbose;\n _logger.warning = logger.warning || _logger.warning;\n}\nexport function getLogger() {\n return _logger;\n}\nfunction memoize(fn) {\n const cache = new Map();\n return (...args) => {\n const key = JSON.stringify(args);\n if (cache.has(key)) {\n return cache.get(key);\n }\n const result = fn(...args);\n cache.set(key, result);\n return result;\n };\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) * half && velocity > minVelocity) ||\n (pSide.min <= rectSide.max && pSide.min > (rectSide.max + rectSide.min) * half && velocity < minVelocity)) {\n res.velocity = velocity * -factor;\n res.bounced = true;\n }\n return res;\n}\nfunction checkSelector(element, selectors) {\n const res = executeOnSingleOrMultiple(selectors, selector => {\n return element.matches(selector);\n });\n return isArray(res) ? res.some(t => t) : res;\n}\nexport function isSsr() {\n return typeof window === \"undefined\" || !window || typeof window.document === \"undefined\" || !window.document;\n}\nexport function hasMatchMedia() {\n return !isSsr() && typeof matchMedia !== \"undefined\";\n}\nexport function safeMatchMedia(query) {\n if (!hasMatchMedia()) {\n return;\n }\n return matchMedia(query);\n}\nexport function safeIntersectionObserver(callback) {\n if (isSsr() || typeof IntersectionObserver === \"undefined\") {\n return;\n }\n return new IntersectionObserver(callback);\n}\nexport function safeMutationObserver(callback) {\n if (isSsr() || typeof MutationObserver === \"undefined\") {\n return;\n }\n return new MutationObserver(callback);\n}\nexport function isInArray(value, array) {\n const invalidIndex = -1;\n return value === array || (isArray(array) && array.indexOf(value) > invalidIndex);\n}\nexport async function loadFont(font, weight) {\n try {\n await document.fonts.load(`${weight ?? \"400\"} 36px '${font ?? \"Verdana\"}'`);\n }\n catch {\n }\n}\nexport function arrayRandomIndex(array) {\n return Math.floor(getRandom() * array.length);\n}\nexport function itemFromArray(array, index, useIndex = true) {\n return array[index !== undefined && useIndex ? index % array.length : arrayRandomIndex(array)];\n}\nexport function isPointInside(point, size, offset, radius, direction) {\n const minRadius = 0;\n return areBoundsInside(calculateBounds(point, radius ?? minRadius), size, offset, direction);\n}\nexport function areBoundsInside(bounds, size, offset, direction) {\n let inside = true;\n if (!direction || direction === OutModeDirection.bottom) {\n inside = bounds.top < size.height + offset.x;\n }\n if (inside && (!direction || direction === OutModeDirection.left)) {\n inside = bounds.right > offset.x;\n }\n if (inside && (!direction || direction === OutModeDirection.right)) {\n inside = bounds.left < size.width + offset.y;\n }\n if (inside && (!direction || direction === OutModeDirection.top)) {\n inside = bounds.bottom > offset.y;\n }\n return inside;\n}\nexport function calculateBounds(point, radius) {\n return {\n bottom: point.y + radius,\n left: point.x - radius,\n right: point.x + radius,\n top: point.y - radius,\n };\n}\nexport function deepExtend(destination, ...sources) {\n for (const source of sources) {\n if (source === undefined || source === null) {\n continue;\n }\n if (!isObject(source)) {\n destination = source;\n continue;\n }\n const sourceIsArray = Array.isArray(source);\n if (sourceIsArray && (isObject(destination) || !destination || !Array.isArray(destination))) {\n destination = [];\n }\n else if (!sourceIsArray && (isObject(destination) || !destination || Array.isArray(destination))) {\n destination = {};\n }\n for (const key in source) {\n if (key === \"__proto__\") {\n continue;\n }\n const sourceDict = source, value = sourceDict[key], destDict = destination;\n destDict[key] =\n isObject(value) && Array.isArray(value)\n ? value.map(v => deepExtend(destDict[key], v))\n : deepExtend(destDict[key], value);\n }\n }\n return destination;\n}\nexport function isDivModeEnabled(mode, divs) {\n return !!findItemFromSingleOrMultiple(divs, t => t.enable && isInArray(mode, t.mode));\n}\nexport function divModeExecute(mode, divs, callback) {\n executeOnSingleOrMultiple(divs, div => {\n const divMode = div.mode, divEnabled = div.enable;\n if (divEnabled && isInArray(mode, divMode)) {\n singleDivModeExecute(div, callback);\n }\n });\n}\nexport function singleDivModeExecute(div, callback) {\n const selectors = div.selectors;\n executeOnSingleOrMultiple(selectors, selector => {\n callback(selector, div);\n });\n}\nexport function divMode(divs, element) {\n if (!element || !divs) {\n return;\n }\n return findItemFromSingleOrMultiple(divs, div => {\n return checkSelector(element, div.selectors);\n });\n}\nexport function circleBounceDataFromParticle(p) {\n return {\n position: p.getPosition(),\n radius: p.getRadius(),\n mass: p.getMass(),\n velocity: p.velocity,\n factor: Vector.create(getRangeValue(p.options.bounce.horizontal.value), getRangeValue(p.options.bounce.vertical.value)),\n };\n}\nexport function circleBounce(p1, p2) {\n const { x: xVelocityDiff, y: yVelocityDiff } = p1.velocity.sub(p2.velocity), [pos1, pos2] = [p1.position, p2.position], { dx: xDist, dy: yDist } = getDistances(pos2, pos1), minimumDistance = 0;\n if (xVelocityDiff * xDist + yVelocityDiff * yDist < minimumDistance) {\n return;\n }\n const angle = -Math.atan2(yDist, xDist), m1 = p1.mass, m2 = p2.mass, u1 = p1.velocity.rotate(angle), u2 = p2.velocity.rotate(angle), v1 = collisionVelocity(u1, u2, m1, m2), v2 = collisionVelocity(u2, u1, m1, m2), vFinal1 = v1.rotate(-angle), vFinal2 = v2.rotate(-angle);\n p1.velocity.x = vFinal1.x * p1.factor.x;\n p1.velocity.y = vFinal1.y * p1.factor.y;\n p2.velocity.x = vFinal2.x * p2.factor.x;\n p2.velocity.y = vFinal2.y * p2.factor.y;\n}\nexport function rectBounce(particle, divBounds) {\n const pPos = particle.getPosition(), size = particle.getRadius(), bounds = calculateBounds(pPos, size), bounceOptions = particle.options.bounce, resH = rectSideBounce({\n pSide: {\n min: bounds.left,\n max: bounds.right,\n },\n pOtherSide: {\n min: bounds.top,\n max: bounds.bottom,\n },\n rectSide: {\n min: divBounds.left,\n max: divBounds.right,\n },\n rectOtherSide: {\n min: divBounds.top,\n max: divBounds.bottom,\n },\n velocity: particle.velocity.x,\n factor: getRangeValue(bounceOptions.horizontal.value),\n });\n if (resH.bounced) {\n if (resH.velocity !== undefined) {\n particle.velocity.x = resH.velocity;\n }\n if (resH.position !== undefined) {\n particle.position.x = resH.position;\n }\n }\n const resV = rectSideBounce({\n pSide: {\n min: bounds.top,\n max: bounds.bottom,\n },\n pOtherSide: {\n min: bounds.left,\n max: bounds.right,\n },\n rectSide: {\n min: divBounds.top,\n max: divBounds.bottom,\n },\n rectOtherSide: {\n min: divBounds.left,\n max: divBounds.right,\n },\n velocity: particle.velocity.y,\n factor: getRangeValue(bounceOptions.vertical.value),\n });\n if (resV.bounced) {\n if (resV.velocity !== undefined) {\n particle.velocity.y = resV.velocity;\n }\n if (resV.position !== undefined) {\n particle.position.y = resV.position;\n }\n }\n}\nexport function executeOnSingleOrMultiple(obj, callback) {\n const defaultIndex = 0;\n return isArray(obj) ? obj.map((item, index) => callback(item, index)) : callback(obj, defaultIndex);\n}\nexport function itemFromSingleOrMultiple(obj, index, useIndex) {\n return isArray(obj) ? itemFromArray(obj, index, useIndex) : obj;\n}\nexport function findItemFromSingleOrMultiple(obj, callback) {\n if (isArray(obj)) {\n return obj.find((t, index) => callback(t, index));\n }\n const defaultIndex = 0;\n return callback(obj, defaultIndex) ? obj : undefined;\n}\nexport function initParticleNumericAnimationValue(options, pxRatio) {\n const valueRange = options.value, animationOptions = options.animation, res = {\n delayTime: getRangeValue(animationOptions.delay) * millisecondsToSeconds,\n enable: animationOptions.enable,\n value: getRangeValue(options.value) * pxRatio,\n max: getRangeMax(valueRange) * pxRatio,\n min: getRangeMin(valueRange) * pxRatio,\n loops: 0,\n maxLoops: getRangeValue(animationOptions.count),\n time: 0,\n }, decayOffset = 1;\n if (animationOptions.enable) {\n res.decay = decayOffset - getRangeValue(animationOptions.decay);\n switch (animationOptions.mode) {\n case AnimationMode.increase:\n res.status = AnimationStatus.increasing;\n break;\n case AnimationMode.decrease:\n res.status = AnimationStatus.decreasing;\n break;\n case AnimationMode.random:\n res.status = getRandom() >= half ? AnimationStatus.increasing : AnimationStatus.decreasing;\n break;\n }\n const autoStatus = animationOptions.mode === AnimationMode.auto;\n switch (animationOptions.startValue) {\n case StartValueType.min:\n res.value = res.min;\n if (autoStatus) {\n res.status = AnimationStatus.increasing;\n }\n break;\n case StartValueType.max:\n res.value = res.max;\n if (autoStatus) {\n res.status = AnimationStatus.decreasing;\n }\n break;\n case StartValueType.random:\n default:\n res.value = randomInRange(res);\n if (autoStatus) {\n res.status = getRandom() >= half ? AnimationStatus.increasing : AnimationStatus.decreasing;\n }\n break;\n }\n }\n res.initialValue = res.value;\n return res;\n}\nfunction getPositionOrSize(positionOrSize, canvasSize) {\n const isPercent = positionOrSize.mode === PixelMode.percent;\n if (!isPercent) {\n const { mode: _, ...rest } = positionOrSize;\n return rest;\n }\n const isPosition = \"x\" in positionOrSize;\n if (isPosition) {\n return {\n x: (positionOrSize.x / percentDenominator) * canvasSize.width,\n y: (positionOrSize.y / percentDenominator) * canvasSize.height,\n };\n }\n else {\n return {\n width: (positionOrSize.width / percentDenominator) * canvasSize.width,\n height: (positionOrSize.height / percentDenominator) * canvasSize.height,\n };\n }\n}\nexport function getPosition(position, canvasSize) {\n return getPositionOrSize(position, canvasSize);\n}\nexport function getSize(size, canvasSize) {\n return getPositionOrSize(size, canvasSize);\n}\nfunction checkDestroy(particle, destroyType, value, minValue, maxValue) {\n switch (destroyType) {\n case DestroyType.max:\n if (value >= maxValue) {\n particle.destroy();\n }\n break;\n case DestroyType.min:\n if (value <= minValue) {\n particle.destroy();\n }\n break;\n }\n}\nexport function updateAnimation(particle, data, changeDirection, destroyType, delta) {\n const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minDecay = 1;\n if (particle.destroyed ||\n !data ||\n !data.enable ||\n ((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {\n return;\n }\n const velocity = (data.velocity ?? minVelocity) * delta.factor, minValue = data.min, maxValue = data.max, decay = data.decay ?? minDecay;\n if (!data.time) {\n data.time = 0;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n data.time += delta.value;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n return;\n }\n switch (data.status) {\n case AnimationStatus.increasing:\n if (data.value >= maxValue) {\n if (changeDirection) {\n data.status = AnimationStatus.decreasing;\n }\n else {\n data.value -= maxValue;\n }\n if (!data.loops) {\n data.loops = minLoops;\n }\n data.loops++;\n }\n else {\n data.value += velocity;\n }\n break;\n case AnimationStatus.decreasing:\n if (data.value <= minValue) {\n if (changeDirection) {\n data.status = AnimationStatus.increasing;\n }\n else {\n data.value += maxValue;\n }\n if (!data.loops) {\n data.loops = minLoops;\n }\n data.loops++;\n }\n else {\n data.value -= velocity;\n }\n }\n if (data.velocity && decay !== identity) {\n data.velocity *= decay;\n }\n checkDestroy(particle, destroyType, data.value, minValue, maxValue);\n if (!particle.destroyed) {\n data.value = clamp(data.value, minValue, maxValue);\n }\n}\nexport function cloneStyle(style) {\n const clonedStyle = document.createElement(\"div\").style;\n if (!style) {\n return clonedStyle;\n }\n for (const key in style) {\n const styleKey = style[key];\n if (!Object.prototype.hasOwnProperty.call(style, key) || isNull(styleKey)) {\n continue;\n }\n const styleValue = style.getPropertyValue?.(styleKey);\n if (!styleValue) {\n continue;\n }\n const stylePriority = style.getPropertyPriority?.(styleKey);\n if (!stylePriority) {\n clonedStyle.setProperty?.(styleKey, styleValue);\n }\n else {\n clonedStyle.setProperty?.(styleKey, styleValue, stylePriority);\n }\n }\n return clonedStyle;\n}\nfunction computeFullScreenStyle(zIndex) {\n const fullScreenStyle = document.createElement(\"div\").style, radix = 10, style = {\n width: \"100%\",\n height: \"100%\",\n margin: \"0\",\n padding: \"0\",\n borderWidth: \"0\",\n position: \"fixed\",\n zIndex: zIndex.toString(radix),\n \"z-index\": zIndex.toString(radix),\n top: \"0\",\n left: \"0\",\n };\n for (const key in style) {\n const value = style[key];\n fullScreenStyle.setProperty(key, value);\n }\n return fullScreenStyle;\n}\nexport const getFullScreenStyle = memoize(computeFullScreenStyle);\n","export var AlterType;\n(function (AlterType) {\n AlterType[\"darken\"] = \"darken\";\n AlterType[\"enlighten\"] = \"enlighten\";\n})(AlterType || (AlterType = {}));\n","import { clamp, getRandom, getRangeMax, getRangeMin, getRangeValue, mix, randomInRange, setRangeValue, } from \"./NumberUtils.js\";\nimport { decayOffset, defaultLoops, defaultOpacity, defaultRgbMin, defaultTime, defaultVelocity, double, hMax, hMin, hPhase, half, identity, lMax, lMin, midColorValue, millisecondsToSeconds, percentDenominator, phaseNumerator, randomColorValue, rgbFactor, rgbMax, sMax, sMin, sNormalizedOffset, sextuple, triple, } from \"../Core/Utils/Constants.js\";\nimport { isArray, isString } from \"./TypeUtils.js\";\nimport { AnimationStatus } from \"../Enums/AnimationStatus.js\";\nimport { itemFromArray } from \"./Utils.js\";\nfunction stringToRgba(engine, input) {\n if (!input) {\n return;\n }\n for (const manager of engine.colorManagers.values()) {\n if (input.startsWith(manager.stringPrefix)) {\n return manager.parseString(input);\n }\n }\n}\nexport function rangeColorToRgb(engine, 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(engine, color.value, index, useIndex);\n }\n if (isArray(color.value)) {\n return rangeColorToRgb(engine, {\n value: itemFromArray(color.value, index, useIndex),\n });\n }\n for (const manager of engine.colorManagers.values()) {\n const res = manager.handleRangeColor(color);\n if (res) {\n return res;\n }\n }\n}\nexport function colorToRgb(engine, 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(engine, color.value);\n }\n if (isArray(color.value)) {\n return colorToRgb(engine, {\n value: itemFromArray(color.value, index, useIndex),\n });\n }\n for (const manager of engine.colorManagers.values()) {\n const res = manager.handleColor(color);\n if (res) {\n return res;\n }\n }\n}\nexport function colorToHsl(engine, color, index, useIndex = true) {\n const rgb = colorToRgb(engine, color, index, useIndex);\n return rgb ? rgbToHsl(rgb) : undefined;\n}\nexport function rangeColorToHsl(engine, color, index, useIndex = true) {\n const rgb = rangeColorToRgb(engine, color, index, useIndex);\n return rgb ? rgbToHsl(rgb) : undefined;\n}\nexport function rgbToHsl(color) {\n const r1 = color.r / rgbMax, g1 = color.g / rgbMax, b1 = color.b / rgbMax, max = Math.max(r1, g1, b1), min = Math.min(r1, g1, b1), res = {\n h: hMin,\n l: (max + min) * half,\n s: sMin,\n };\n if (max !== min) {\n res.s = res.l < half ? (max - min) / (max + min) : (max - min) / (double - max - min);\n res.h =\n r1 === max\n ? (g1 - b1) / (max - min)\n : (res.h = g1 === max ? double + (b1 - r1) / (max - min) : double * double + (r1 - g1) / (max - min));\n }\n res.l *= lMax;\n res.s *= sMax;\n res.h *= hPhase;\n if (res.h < hMin) {\n res.h += hMax;\n }\n if (res.h >= hMax) {\n res.h -= hMax;\n }\n return res;\n}\nexport function stringToAlpha(engine, input) {\n return stringToRgba(engine, input)?.a;\n}\nexport function stringToRgb(engine, input) {\n return stringToRgba(engine, input);\n}\nexport function hslToRgb(hsl) {\n const h = ((hsl.h % hMax) + hMax) % hMax, s = Math.max(sMin, Math.min(sMax, hsl.s)), l = Math.max(lMin, Math.min(lMax, hsl.l)), hNormalized = h / hMax, sNormalized = s / sMax, lNormalized = l / lMax;\n if (s === sMin) {\n const grayscaleValue = Math.round(lNormalized * rgbFactor);\n return { r: grayscaleValue, g: grayscaleValue, b: grayscaleValue };\n }\n const channel = (temp1, temp2, temp3) => {\n const temp3Min = 0, temp3Max = 1;\n if (temp3 < temp3Min) {\n temp3++;\n }\n if (temp3 > temp3Max) {\n temp3--;\n }\n if (temp3 * sextuple < temp3Max) {\n return temp1 + (temp2 - temp1) * sextuple * temp3;\n }\n if (temp3 * double < temp3Max) {\n return temp2;\n }\n if (temp3 * triple < temp3Max * double) {\n const temp3Offset = double / triple;\n return temp1 + (temp2 - temp1) * (temp3Offset - temp3) * sextuple;\n }\n return temp1;\n }, temp1 = lNormalized < half\n ? lNormalized * (sNormalizedOffset + sNormalized)\n : lNormalized + sNormalized - lNormalized * sNormalized, temp2 = double * lNormalized - temp1, phaseThird = phaseNumerator / triple, red = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized + phaseThird)), green = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized)), blue = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized - phaseThird));\n return { r: Math.round(red), g: Math.round(green), b: Math.round(blue) };\n}\nexport function hslaToRgba(hsla) {\n const rgbResult = hslToRgb(hsla);\n return {\n a: hsla.a,\n b: rgbResult.b,\n g: rgbResult.g,\n r: rgbResult.r,\n };\n}\nexport function getRandomRgbColor(min) {\n const fixedMin = min ?? defaultRgbMin, fixedMax = rgbMax + identity;\n return {\n b: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),\n g: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),\n r: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),\n };\n}\nexport function getStyleFromRgb(color, opacity) {\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${opacity ?? defaultOpacity})`;\n}\nexport function getStyleFromHsl(color, opacity) {\n return `hsla(${color.h}, ${color.s}%, ${color.l}%, ${opacity ?? defaultOpacity})`;\n}\nexport function colorMix(color1, color2, size1, size2) {\n let rgb1 = color1, rgb2 = color2;\n if (rgb1.r === undefined) {\n rgb1 = hslToRgb(color1);\n }\n if (rgb2.r === undefined) {\n rgb2 = hslToRgb(color2);\n }\n return {\n b: mix(rgb1.b, rgb2.b, size1, size2),\n g: mix(rgb1.g, rgb2.g, size1, size2),\n r: mix(rgb1.r, rgb2.r, size1, size2),\n };\n}\nexport function getLinkColor(p1, p2, linkColor) {\n if (linkColor === randomColorValue) {\n return getRandomRgbColor();\n }\n else if (linkColor === midColorValue) {\n const sourceColor = p1.getFillColor() ?? p1.getStrokeColor(), destColor = p2?.getFillColor() ?? p2?.getStrokeColor();\n if (sourceColor && destColor && p2) {\n return colorMix(sourceColor, destColor, p1.getRadius(), p2.getRadius());\n }\n else {\n const hslColor = sourceColor ?? destColor;\n if (hslColor) {\n return hslToRgb(hslColor);\n }\n }\n }\n else {\n return linkColor;\n }\n}\nexport function getLinkRandomColor(engine, optColor, blink, consent) {\n const color = isString(optColor) ? optColor : optColor.value;\n if (color === randomColorValue) {\n if (consent) {\n return rangeColorToRgb(engine, {\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(engine, {\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) / percentDenominator) * reduceFactor;\n colorValue.decay = decayOffset - getRangeValue(colorAnimation.decay);\n colorValue.status = AnimationStatus.increasing;\n colorValue.loops = defaultLoops;\n colorValue.maxLoops = getRangeValue(colorAnimation.count);\n colorValue.time = defaultTime;\n colorValue.delayTime = getRangeValue(colorAnimation.delay) * millisecondsToSeconds;\n if (!colorAnimation.sync) {\n colorValue.velocity *= getRandom();\n colorValue.value *= getRandom();\n }\n colorValue.initialValue = colorValue.value;\n colorValue.offset = setRangeValue(colorAnimation.offset);\n }\n else {\n colorValue.velocity = defaultVelocity;\n }\n}\nexport function updateColorValue(data, range, decrease, delta) {\n const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minOffset = 0, velocityFactor = 3.6;\n if (!data ||\n !data.enable ||\n ((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {\n return;\n }\n if (!data.time) {\n data.time = 0;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n data.time += delta.value;\n }\n if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {\n return;\n }\n const offset = data.offset ? randomInRange(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = getRangeMax(range), min = getRangeMin(range);\n if (!decrease || data.status === AnimationStatus.increasing) {\n data.value += velocity;\n if (data.value > max) {\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n if (decrease) {\n data.status = AnimationStatus.decreasing;\n }\n else {\n data.value -= max;\n }\n }\n }\n else {\n data.value -= velocity;\n const minValue = 0;\n if (data.value < minValue) {\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n data.status = AnimationStatus.increasing;\n }\n }\n if (data.velocity && decay !== identity) {\n data.velocity *= decay;\n }\n data.value = clamp(data.value, min, max);\n}\nexport function updateColor(color, delta) {\n if (!color) {\n return;\n }\n const { h, s, l } = color, ranges = {\n h: { min: 0, max: 360 },\n s: { min: 0, max: 100 },\n l: { min: 0, max: 100 },\n };\n if (h) {\n updateColorValue(h, ranges.h, false, delta);\n }\n if (s) {\n updateColorValue(s, ranges.s, true, delta);\n }\n if (l) {\n updateColorValue(l, ranges.l, true, delta);\n }\n}\n","import { defaultAngle, defaultTransform, identity, lFactor, minStrokeWidth, originPoint, } from \"../Core/Utils/Constants.js\";\nimport { AlterType } from \"../Enums/Types/AlterType.js\";\nimport { getStyleFromRgb } from \"./ColorUtils.js\";\nexport function drawLine(context, begin, end) {\n context.beginPath();\n context.moveTo(begin.x, begin.y);\n context.lineTo(end.x, end.y);\n context.closePath();\n}\nexport function paintBase(context, dimension, baseColor) {\n context.fillStyle = baseColor ?? \"rgba(0,0,0,0)\";\n context.fillRect(originPoint.x, originPoint.y, dimension.width, dimension.height);\n}\nexport function paintImage(context, dimension, image, opacity) {\n if (!image) {\n return;\n }\n context.globalAlpha = opacity;\n context.drawImage(image, originPoint.x, originPoint.y, dimension.width, dimension.height);\n context.globalAlpha = 1;\n}\nexport function clear(context, dimension) {\n context.clearRect(originPoint.x, originPoint.y, dimension.width, dimension.height);\n}\nexport function drawParticle(data) {\n const { container, context, particle, delta, colorStyles, backgroundMask, composite, radius, opacity, shadow, transform, } = data, pos = particle.getPosition(), angle = particle.rotation + (particle.pathRotation ? particle.velocity.angle : defaultAngle), rotateData = {\n sin: Math.sin(angle),\n cos: Math.cos(angle),\n }, rotating = !!angle, transformData = {\n a: rotateData.cos * (transform.a ?? defaultTransform.a),\n b: rotating ? rotateData.sin * (transform.b ?? identity) : (transform.b ?? defaultTransform.b),\n c: rotating ? -rotateData.sin * (transform.c ?? identity) : (transform.c ?? defaultTransform.c),\n d: rotateData.cos * (transform.d ?? defaultTransform.d),\n };\n context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);\n if (backgroundMask) {\n context.globalCompositeOperation = composite;\n }\n const shadowColor = particle.shadowColor;\n if (shadow.enable && shadowColor) {\n context.shadowBlur = shadow.blur;\n context.shadowColor = getStyleFromRgb(shadowColor);\n context.shadowOffsetX = shadow.offset.x;\n context.shadowOffsetY = shadow.offset.y;\n }\n if (colorStyles.fill) {\n context.fillStyle = colorStyles.fill;\n }\n const strokeWidth = particle.strokeWidth ?? minStrokeWidth;\n context.lineWidth = strokeWidth;\n if (colorStyles.stroke) {\n context.strokeStyle = colorStyles.stroke;\n }\n const drawData = {\n container,\n context,\n particle,\n radius,\n opacity,\n delta,\n transformData,\n strokeWidth,\n };\n drawShape(drawData);\n drawShapeAfterDraw(drawData);\n drawEffect(drawData);\n context.globalCompositeOperation = \"source-over\";\n context.resetTransform();\n}\nexport function drawEffect(data) {\n const { container, context, particle, radius, opacity, delta, transformData } = data;\n if (!particle.effect) {\n return;\n }\n const drawer = container.effectDrawers.get(particle.effect);\n if (!drawer) {\n return;\n }\n drawer.draw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n}\nexport function drawShape(data) {\n const { container, context, particle, radius, opacity, delta, strokeWidth, transformData } = data;\n if (!particle.shape) {\n return;\n }\n const drawer = container.shapeDrawers.get(particle.shape);\n if (!drawer) {\n return;\n }\n context.beginPath();\n drawer.draw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n if (particle.shapeClose) {\n context.closePath();\n }\n if (strokeWidth > minStrokeWidth) {\n context.stroke();\n }\n if (particle.shapeFill) {\n context.fill();\n }\n}\nexport function drawShapeAfterDraw(data) {\n const { container, context, particle, radius, opacity, delta, transformData } = data;\n if (!particle.shape) {\n return;\n }\n const drawer = container.shapeDrawers.get(particle.shape);\n if (!drawer?.afterDraw) {\n return;\n }\n drawer.afterDraw({\n context,\n particle,\n radius,\n opacity,\n delta,\n pixelRatio: container.retina.pixelRatio,\n transformData: { ...transformData },\n });\n}\nexport function drawPlugin(context, plugin, delta) {\n if (!plugin.draw) {\n return;\n }\n plugin.draw(context, delta);\n}\nexport function drawParticlePlugin(context, plugin, particle, delta) {\n if (!plugin.drawParticle) {\n return;\n }\n plugin.drawParticle(context, particle, delta);\n}\nexport function alterHsl(color, type, value) {\n return {\n h: color.h,\n s: color.s,\n l: color.l + (type === AlterType.darken ? -lFactor : lFactor) * value,\n };\n}\n","import { clear, drawParticle, drawParticlePlugin, drawPlugin, paintBase, paintImage } from \"../Utils/CanvasUtils.js\";\nimport { cloneStyle, getFullScreenStyle, getLogger, safeMutationObserver } from \"../Utils/Utils.js\";\nimport { defaultOpacity, defaultTransformValue, generatedAttribute, inverseFactorNumerator, minimumLength, minimumSize, zIndexFactorOffset, } from \"./Utils/Constants.js\";\nimport { getStyleFromHsl, getStyleFromRgb, rangeColorToHsl, rangeColorToRgb } from \"../Utils/ColorUtils.js\";\nfunction setTransformValue(factor, newFactor, key) {\n const newValue = newFactor[key];\n if (newValue !== undefined) {\n factor[key] = (factor[key] ?? defaultTransformValue) * newValue;\n }\n}\nfunction setStyle(canvas, style, important = false) {\n if (!style) {\n return;\n }\n const element = canvas;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n const keys = new Set();\n for (const key in elementStyle) {\n if (!Object.prototype.hasOwnProperty.call(elementStyle, key)) {\n continue;\n }\n keys.add(elementStyle[key]);\n }\n for (const key in style) {\n if (!Object.prototype.hasOwnProperty.call(style, key)) {\n continue;\n }\n keys.add(style[key]);\n }\n for (const key of keys) {\n const value = style.getPropertyValue(key);\n if (!value) {\n elementStyle.removeProperty(key);\n }\n else {\n elementStyle.setProperty(key, value, important ? \"important\" : \"\");\n }\n }\n}\nexport class Canvas {\n constructor(container, engine) {\n this.container = container;\n this._applyPostDrawUpdaters = particle => {\n for (const updater of this._postDrawUpdaters) {\n updater.afterDraw?.(particle);\n }\n };\n this._applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform) => {\n for (const updater of this._preDrawUpdaters) {\n if (updater.getColorStyles) {\n const { fill, stroke } = updater.getColorStyles(particle, ctx, radius, zOpacity);\n if (fill) {\n colorStyles.fill = fill;\n }\n if (stroke) {\n colorStyles.stroke = stroke;\n }\n }\n if (updater.getTransformValues) {\n const updaterTransform = updater.getTransformValues(particle);\n for (const key in updaterTransform) {\n setTransformValue(transform, updaterTransform, key);\n }\n }\n updater.beforeDraw?.(particle);\n }\n };\n this._applyResizePlugins = () => {\n for (const plugin of this._resizePlugins) {\n plugin.resize?.();\n }\n };\n this._getPluginParticleColors = particle => {\n let fColor, sColor;\n for (const plugin of this._colorPlugins) {\n if (!fColor && plugin.particleFillColor) {\n fColor = rangeColorToHsl(this._engine, plugin.particleFillColor(particle));\n }\n if (!sColor && plugin.particleStrokeColor) {\n sColor = rangeColorToHsl(this._engine, plugin.particleStrokeColor(particle));\n }\n if (fColor && sColor) {\n break;\n }\n }\n return [fColor, sColor];\n };\n this._initCover = async () => {\n const options = this.container.actualOptions, cover = options.backgroundMask.cover, color = cover.color;\n if (color) {\n const coverRgb = rangeColorToRgb(this._engine, color);\n if (coverRgb) {\n const coverColor = {\n ...coverRgb,\n a: cover.opacity,\n };\n this._coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);\n }\n }\n else {\n await new Promise((resolve, reject) => {\n if (!cover.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._coverImage = {\n image: img,\n opacity: cover.opacity,\n };\n resolve();\n });\n img.addEventListener(\"error\", evt => {\n reject(evt.error);\n });\n img.src = cover.image;\n });\n }\n };\n this._initStyle = () => {\n const element = this.element, options = this.container.actualOptions;\n if (!element) {\n return;\n }\n if (this._fullScreen) {\n this._setFullScreenStyle();\n }\n else {\n this._resetOriginalStyle();\n }\n for (const key in options.style) {\n if (!key || !options.style || !Object.prototype.hasOwnProperty.call(options.style, key)) {\n continue;\n }\n const value = options.style[key];\n if (!value) {\n continue;\n }\n element.style.setProperty(key, value, \"important\");\n }\n };\n this._initTrail = async () => {\n const options = this.container.actualOptions, trail = options.particles.move.trail, trailFill = trail.fill;\n if (!trail.enable) {\n return;\n }\n const opacity = inverseFactorNumerator / trail.length;\n if (trailFill.color) {\n const fillColor = rangeColorToRgb(this._engine, trailFill.color);\n if (!fillColor) {\n return;\n }\n this._trailFill = {\n color: {\n ...fillColor,\n },\n opacity,\n };\n }\n else {\n await new Promise((resolve, reject) => {\n if (!trailFill.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._trailFill = {\n image: img,\n opacity,\n };\n resolve();\n });\n img.addEventListener(\"error\", evt => {\n reject(evt.error);\n });\n img.src = trailFill.image;\n });\n }\n };\n this._paintBase = baseColor => {\n this.draw(ctx => paintBase(ctx, this.size, baseColor));\n };\n this._paintImage = (image, opacity) => {\n this.draw(ctx => paintImage(ctx, this.size, image, opacity));\n };\n this._repairStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n this._safeMutationObserver(observer => observer.disconnect());\n this._initStyle();\n this.initBackground();\n const pointerEvents = this._pointerEvents;\n element.style.pointerEvents = pointerEvents;\n element.setAttribute(\"pointer-events\", pointerEvents);\n this._safeMutationObserver(observer => {\n if (!element || !(element instanceof Node)) {\n return;\n }\n observer.observe(element, { attributes: true });\n });\n };\n this._resetOriginalStyle = () => {\n const element = this.element, originalStyle = this._originalStyle;\n if (!element || !originalStyle) {\n return;\n }\n setStyle(element, originalStyle, true);\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 setStyle(element, getFullScreenStyle(this.container.actualOptions.fullScreen.zIndex), true);\n };\n this._engine = engine;\n this._standardSize = {\n height: 0,\n width: 0,\n };\n const pxRatio = container.retina.pixelRatio, stdSize = this._standardSize;\n this.size = {\n height: stdSize.height * pxRatio,\n width: stdSize.width * pxRatio,\n };\n this._context = null;\n this._generated = false;\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n this._pointerEvents = \"none\";\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 > minimumLength && trailFill) {\n if (trailFill.color) {\n this._paintBase(getStyleFromRgb(trailFill.color, trailFill.opacity));\n }\n else if (trailFill.image) {\n this._paintImage(trailFill.image, trailFill.opacity);\n }\n }\n else if (options.clear) {\n this.draw(ctx => {\n clear(ctx, this.size);\n });\n }\n }\n destroy() {\n this.stop();\n if (this._generated) {\n const element = this.element;\n element?.remove();\n this.element = undefined;\n }\n else {\n this._resetOriginalStyle();\n }\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n draw(cb) {\n const ctx = this._context;\n if (!ctx) {\n return;\n }\n return cb(ctx);\n }\n drawAsync(cb) {\n const ctx = this._context;\n if (!ctx) {\n return undefined;\n }\n return cb(ctx);\n }\n drawParticle(particle, delta) {\n if (particle.spawning || particle.destroyed) {\n return;\n }\n const radius = particle.getRadius();\n if (radius <= minimumSize) {\n return;\n }\n const pfColor = particle.getFillColor(), psColor = particle.getStrokeColor() ?? pfColor;\n let [fColor, sColor] = this._getPluginParticleColors(particle);\n if (!fColor) {\n fColor = pfColor;\n }\n if (!sColor) {\n sColor = psColor;\n }\n if (!fColor && !sColor) {\n return;\n }\n this.draw((ctx) => {\n const container = this.container, options = container.actualOptions, zIndexOptions = particle.options.zIndex, zIndexFactor = zIndexFactorOffset - particle.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, opacity = particle.bubble.opacity ?? particle.opacity?.value ?? defaultOpacity, strokeOpacity = particle.strokeOpacity ?? opacity, zOpacity = opacity * zOpacityFactor, zStrokeOpacity = strokeOpacity * zOpacityFactor, transform = {}, colorStyles = {\n fill: fColor ? getStyleFromHsl(fColor, zOpacity) : undefined,\n };\n colorStyles.stroke = sColor ? getStyleFromHsl(sColor, zStrokeOpacity) : colorStyles.fill;\n this._applyPreDrawUpdaters(ctx, particle, radius, zOpacity, colorStyles, transform);\n drawParticle({\n container,\n context: ctx,\n particle,\n delta,\n colorStyles,\n backgroundMask: options.backgroundMask.enable,\n composite: options.backgroundMask.composite,\n radius: radius * zIndexFactor ** zIndexOptions.sizeRate,\n opacity: zOpacity,\n shadow: particle.options.shadow,\n transform,\n });\n this._applyPostDrawUpdaters(particle);\n });\n }\n drawParticlePlugin(plugin, particle, delta) {\n this.draw(ctx => drawParticlePlugin(ctx, plugin, particle, delta));\n }\n drawPlugin(plugin, delta) {\n this.draw(ctx => drawPlugin(ctx, plugin, delta));\n }\n async init() {\n this._safeMutationObserver(obs => obs.disconnect());\n this._mutationObserver = safeMutationObserver(records => {\n for (const record of records) {\n if (record.type === \"attributes\" && record.attributeName === \"style\") {\n this._repairStyle();\n }\n }\n });\n this.resize();\n this._initStyle();\n await this._initCover();\n try {\n await this._initTrail();\n }\n catch (e) {\n getLogger().error(e);\n }\n this.initBackground();\n this._safeMutationObserver(obs => {\n if (!this.element || !(this.element instanceof Node)) {\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(this._engine, 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.values()) {\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 = cloneStyle(this.element.style);\n const standardSize = this._standardSize;\n standardSize.height = canvas.offsetHeight;\n standardSize.width = canvas.offsetWidth;\n const pxRatio = this.container.retina.pixelRatio, retinaSize = this.size;\n canvas.height = retinaSize.height = standardSize.height * pxRatio;\n canvas.width = retinaSize.width = standardSize.width * pxRatio;\n this._context = this.element.getContext(\"2d\");\n this._safeMutationObserver(obs => obs.disconnect());\n this.container.retina.init();\n this.initBackground();\n this._safeMutationObserver(obs => {\n if (!this.element || !(this.element instanceof Node)) {\n return;\n }\n obs.observe(this.element, { attributes: true });\n });\n }\n paint() {\n const options = this.container.actualOptions;\n this.draw(ctx => {\n if (options.backgroundMask.enable && options.backgroundMask.cover) {\n clear(ctx, this.size);\n if (this._coverImage) {\n this._paintImage(this._coverImage.image, this._coverImage.opacity);\n }\n else if (this._coverColorStyle) {\n this._paintBase(this._coverColorStyle);\n }\n else {\n this._paintBase();\n }\n }\n else {\n this._paintBase();\n }\n });\n }\n resize() {\n if (!this.element) {\n return false;\n }\n const container = this.container, currentSize = container.canvas._standardSize, newSize = {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight,\n }, pxRatio = container.retina.pixelRatio, retinaSize = {\n width: newSize.width * pxRatio,\n height: newSize.height * pxRatio,\n };\n if (newSize.height === currentSize.height &&\n newSize.width === currentSize.width &&\n retinaSize.height === this.element.height &&\n retinaSize.width === this.element.width) {\n return false;\n }\n const oldSize = { ...currentSize };\n currentSize.height = newSize.height;\n currentSize.width = newSize.width;\n const canvasSize = this.size;\n this.element.width = canvasSize.width = retinaSize.width;\n this.element.height = canvasSize.height = retinaSize.height;\n if (this.container.started) {\n container.particles.setResizeFactor({\n width: currentSize.width / oldSize.width,\n height: currentSize.height / oldSize.height,\n });\n }\n return true;\n }\n setPointerEvents(type) {\n const element = this.element;\n if (!element) {\n return;\n }\n this._pointerEvents = type;\n this._repairStyle();\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","export var InteractivityDetect;\n(function (InteractivityDetect) {\n InteractivityDetect[\"canvas\"] = \"canvas\";\n InteractivityDetect[\"parent\"] = \"parent\";\n InteractivityDetect[\"window\"] = \"window\";\n})(InteractivityDetect || (InteractivityDetect = {}));\n","import { double, lengthOffset, millisecondsToSeconds, minCoordinate, mouseDownEvent, mouseLeaveEvent, mouseMoveEvent, mouseOutEvent, mouseUpEvent, resizeEvent, touchCancelEvent, touchDelay, touchEndEvent, touchMoveEvent, touchStartEvent, visibilityChangeEvent, } from \"./Constants.js\";\nimport { executeOnSingleOrMultiple, safeMatchMedia } from \"../../Utils/Utils.js\";\nimport { InteractivityDetect } from \"../../Enums/InteractivityDetect.js\";\nimport { isBoolean } from \"../../Utils/TypeUtils.js\";\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(), touchDelay);\n }\n };\n this._handleThemeChange = (e) => {\n const mediaEvent = e, container = this.container, options = container.options, defaultThemes = options.defaultThemes, themeName = mediaEvent.matches ? defaultThemes.dark : defaultThemes.light, theme = options.themes.find(theme => theme.name === themeName);\n if (theme?.default.auto) {\n void container.loadTheme(themeName);\n }\n };\n this._handleVisibilityChange = () => {\n const container = this.container, options = container.actualOptions;\n this._mouseTouchFinish();\n if (!options.pauseOnBlur) {\n return;\n }\n if (document?.hidden) {\n container.pageHidden = true;\n container.pause();\n }\n else {\n container.pageHidden = false;\n if (container.animationStatus) {\n void container.play(true);\n }\n else {\n void container.draw(true);\n }\n }\n };\n this._handleWindowResize = () => {\n if (this._resizeTimeout) {\n clearTimeout(this._resizeTimeout);\n delete this._resizeTimeout;\n }\n const handleResize = async () => {\n const canvas = this.container.canvas;\n await canvas?.windowResize();\n };\n this._resizeTimeout = setTimeout(() => void handleResize(), this.container.actualOptions.interactivity.events.resize.delay * millisecondsToSeconds);\n };\n this._manageInteractivityListeners = (mouseLeaveTmpEvent, add) => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions, interactivityEl = container.interactivity.element;\n if (!interactivityEl) {\n return;\n }\n const html = interactivityEl, canvas = container.canvas;\n canvas.setPointerEvents(html === canvas.element ? \"initial\" : \"none\");\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 === InteractivityDetect.window) {\n container.interactivity.element = window;\n mouseLeaveTmpEvent = mouseOutEvent;\n }\n else if (detectType === InteractivityDetect.parent && canvasEl) {\n container.interactivity.element = canvasEl.parentElement ?? canvasEl.parentNode;\n }\n else {\n container.interactivity.element = canvasEl;\n }\n this._manageMediaMatch(add);\n this._manageResize(add);\n this._manageInteractivityListeners(mouseLeaveTmpEvent, add);\n if (document) {\n manageListener(document, visibilityChangeEvent, handlers.visibilityChange, add, false);\n }\n };\n this._manageMediaMatch = add => {\n const handlers = this._handlers, mediaMatch = safeMatchMedia(\"(prefers-color-scheme: dark)\");\n if (!mediaMatch) {\n return;\n }\n if (mediaMatch.addEventListener !== undefined) {\n manageListener(mediaMatch, \"change\", handlers.themeChange, add);\n return;\n }\n if (mediaMatch.addListener === undefined) {\n return;\n }\n if (add) {\n mediaMatch.addListener(handlers.oldThemeChange);\n }\n else {\n mediaMatch.removeListener(handlers.oldThemeChange);\n }\n };\n this._manageResize = add => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions;\n if (!options.interactivity.events.resize) {\n return;\n }\n if (typeof ResizeObserver === \"undefined\") {\n manageListener(window, resizeEvent, handlers.resize, add);\n return;\n }\n const canvasEl = container.canvas.element;\n if (this._resizeObserver && !add) {\n if (canvasEl) {\n this._resizeObserver.unobserve(canvasEl);\n }\n this._resizeObserver.disconnect();\n delete this._resizeObserver;\n }\n else if (!this._resizeObserver && add && canvasEl) {\n this._resizeObserver = new ResizeObserver((entries) => {\n const entry = entries.find(e => e.target === canvasEl);\n if (!entry) {\n return;\n }\n this._handleWindowResize();\n });\n this._resizeObserver.observe(canvasEl);\n }\n };\n this._mouseDown = () => {\n const { interactivity } = this.container;\n if (!interactivity) {\n return;\n }\n const { mouse } = interactivity;\n mouse.clicking = true;\n mouse.downPosition = mouse.position;\n };\n this._mouseTouchClick = e => {\n const container = this.container, options = container.actualOptions, { mouse } = container.interactivity;\n mouse.inside = true;\n let handled = false;\n const mousePosition = mouse.position;\n if (!mousePosition || !options.interactivity.events.onClick.enable) {\n return;\n }\n for (const plugin of container.plugins.values()) {\n if (!plugin.clickPositionValid) {\n continue;\n }\n handled = plugin.clickPositionValid(mousePosition);\n if (handled) {\n break;\n }\n }\n if (!handled) {\n this._doMouseTouchClick(e);\n }\n mouse.clicking = false;\n };\n this._mouseTouchFinish = () => {\n const interactivity = this.container.interactivity;\n if (!interactivity) {\n return;\n }\n const mouse = interactivity.mouse;\n delete mouse.position;\n delete mouse.clickPosition;\n delete mouse.downPosition;\n interactivity.status = mouseLeaveEvent;\n mouse.inside = false;\n mouse.clicking = false;\n };\n this._mouseTouchMove = e => {\n const container = this.container, options = container.actualOptions, interactivity = container.interactivity, canvasEl = container.canvas.element;\n if (!interactivity?.element) {\n return;\n }\n interactivity.mouse.inside = true;\n let pos;\n if (e.type.startsWith(\"pointer\")) {\n this._canPush = true;\n const mouseEvent = e;\n if (interactivity.element === window) {\n if (canvasEl) {\n const clientRect = canvasEl.getBoundingClientRect();\n pos = {\n x: mouseEvent.clientX - clientRect.left,\n y: mouseEvent.clientY - clientRect.top,\n };\n }\n }\n else if (options.interactivity.detectsOn === InteractivityDetect.parent) {\n const source = mouseEvent.target, target = mouseEvent.currentTarget;\n if (source && target && canvasEl) {\n const sourceRect = source.getBoundingClientRect(), targetRect = target.getBoundingClientRect(), canvasRect = canvasEl.getBoundingClientRect();\n pos = {\n x: mouseEvent.offsetX + double * sourceRect.left - (targetRect.left + canvasRect.left),\n y: mouseEvent.offsetY + double * sourceRect.top - (targetRect.top + canvasRect.top),\n };\n }\n else {\n pos = {\n x: mouseEvent.offsetX ?? mouseEvent.clientX,\n y: mouseEvent.offsetY ?? mouseEvent.clientY,\n };\n }\n }\n else if (mouseEvent.target === canvasEl) {\n pos = {\n x: mouseEvent.offsetX ?? mouseEvent.clientX,\n y: mouseEvent.offsetY ?? mouseEvent.clientY,\n };\n }\n }\n else {\n this._canPush = e.type !== \"touchmove\";\n if (canvasEl) {\n const touchEvent = e, lastTouch = touchEvent.touches[touchEvent.touches.length - lengthOffset], canvasRect = canvasEl.getBoundingClientRect();\n pos = {\n x: lastTouch.clientX - (canvasRect.left ?? minCoordinate),\n y: lastTouch.clientY - (canvasRect.top ?? minCoordinate),\n };\n }\n }\n const pxRatio = container.retina.pixelRatio;\n if (pos) {\n pos.x *= pxRatio;\n pos.y *= pxRatio;\n }\n interactivity.mouse.position = pos;\n interactivity.status = mouseMoveEvent;\n };\n this._touchEnd = e => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.delete(touch.identifier);\n }\n this._mouseTouchFinish();\n };\n this._touchEndClick = e => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.delete(touch.identifier);\n }\n this._mouseTouchClick(e);\n };\n this._touchStart = e => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.set(touch.identifier, performance.now());\n }\n this._mouseTouchMove(e);\n };\n this._canPush = true;\n this._touches = new Map();\n this._handlers = {\n mouseDown: () => this._mouseDown(),\n mouseLeave: () => this._mouseTouchFinish(),\n mouseMove: (e) => this._mouseTouchMove(e),\n mouseUp: (e) => this._mouseTouchClick(e),\n touchStart: (e) => this._touchStart(e),\n touchMove: (e) => this._mouseTouchMove(e),\n touchEnd: (e) => this._touchEnd(e),\n touchCancel: (e) => this._touchEnd(e),\n touchEndClick: (e) => this._touchEndClick(e),\n visibilityChange: () => this._handleVisibilityChange(),\n themeChange: (e) => this._handleThemeChange(e),\n oldThemeChange: (e) => this._handleThemeChange(e),\n resize: () => {\n this._handleWindowResize();\n },\n };\n }\n addListeners() {\n this._manageListeners(true);\n }\n removeListeners() {\n this._manageListeners(false);\n }\n}\n","export var EventType;\n(function (EventType) {\n EventType[\"configAdded\"] = \"configAdded\";\n EventType[\"containerInit\"] = \"containerInit\";\n EventType[\"particlesSetup\"] = \"particlesSetup\";\n EventType[\"containerStarted\"] = \"containerStarted\";\n EventType[\"containerStopped\"] = \"containerStopped\";\n EventType[\"containerDestroyed\"] = \"containerDestroyed\";\n EventType[\"containerPaused\"] = \"containerPaused\";\n EventType[\"containerPlay\"] = \"containerPlay\";\n EventType[\"containerBuilt\"] = \"containerBuilt\";\n EventType[\"particleAdded\"] = \"particleAdded\";\n EventType[\"particleDestroyed\"] = \"particleDestroyed\";\n EventType[\"particleRemoved\"] = \"particleRemoved\";\n})(EventType || (EventType = {}));\n","import { isArray, isNull, isString } from \"../../Utils/TypeUtils.js\";\nexport class OptionsColor {\n constructor() {\n this.value = \"\";\n }\n static create(source, data) {\n const color = new OptionsColor();\n color.load(source);\n if (data !== undefined) {\n if (isString(data) || isArray(data)) {\n color.load({ value: data });\n }\n else {\n color.load(data);\n }\n }\n return color;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (!isNull(data.value)) {\n this.value = data.value;\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class Background {\n constructor() {\n this.color = new OptionsColor();\n this.color.value = \"\";\n this.image = \"\";\n this.position = \"\";\n this.repeat = \"\";\n this.size = \"\";\n this.opacity = 1;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n if (data.position !== undefined) {\n this.position = data.position;\n }\n if (data.repeat !== undefined) {\n this.repeat = data.repeat;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class BackgroundMaskCover {\n constructor() {\n this.opacity = 1;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { isNull, isString } from \"../../../Utils/TypeUtils.js\";\nimport { BackgroundMaskCover } from \"./BackgroundMaskCover.js\";\nexport class BackgroundMask {\n constructor() {\n this.composite = \"destination-out\";\n this.cover = new BackgroundMaskCover();\n this.enable = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.composite !== undefined) {\n this.composite = data.composite;\n }\n if (data.cover !== undefined) {\n const cover = data.cover, color = (isString(data.cover) ? { color: data.cover } : data.cover);\n this.cover.load(cover.color !== undefined || cover.image !== undefined ? cover : { color: color });\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n","import { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class FullScreen {\n constructor() {\n this.enable = true;\n this.zIndex = 0;\n }\n load(data) {\n if (isNull(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","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ClickEvent {\n constructor() {\n this.enable = false;\n this.mode = [];\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n }\n}\n","export var DivType;\n(function (DivType) {\n DivType[\"circle\"] = \"circle\";\n DivType[\"rectangle\"] = \"rectangle\";\n})(DivType || (DivType = {}));\n","import { DivType } from \"../../../../Enums/Types/DivType.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class DivEvent {\n constructor() {\n this.selectors = [];\n this.enable = false;\n this.mode = [];\n this.type = DivType.circle;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Parallax {\n constructor() {\n this.enable = false;\n this.force = 2;\n this.smooth = 10;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.force !== undefined) {\n this.force = data.force;\n }\n if (data.smooth !== undefined) {\n this.smooth = data.smooth;\n }\n }\n}\n","import { Parallax } from \"./Parallax.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class HoverEvent {\n constructor() {\n this.enable = false;\n this.mode = [];\n this.parallax = new Parallax();\n }\n load(data) {\n if (isNull(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","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ResizeEvent {\n constructor() {\n this.delay = 0.5;\n this.enable = true;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.delay !== undefined) {\n this.delay = data.delay;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n","import { ClickEvent } from \"./ClickEvent.js\";\nimport { DivEvent } from \"./DivEvent.js\";\nimport { HoverEvent } from \"./HoverEvent.js\";\nimport { ResizeEvent } from \"./ResizeEvent.js\";\nimport { executeOnSingleOrMultiple } from \"../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Events {\n constructor() {\n this.onClick = new ClickEvent();\n this.onDiv = new DivEvent();\n this.onHover = new HoverEvent();\n this.resize = new ResizeEvent();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.onClick.load(data.onClick);\n const onDiv = data.onDiv;\n if (onDiv !== undefined) {\n this.onDiv = executeOnSingleOrMultiple(onDiv, t => {\n const tmp = new DivEvent();\n tmp.load(t);\n return tmp;\n });\n }\n this.onHover.load(data.onHover);\n this.resize.load(data.resize);\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Modes {\n constructor(engine, container) {\n this._engine = engine;\n this._container = container;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (!this._container) {\n return;\n }\n const interactors = this._engine.interactors.get(this._container);\n if (!interactors) {\n return;\n }\n for (const interactor of interactors) {\n if (!interactor.loadModeOptions) {\n continue;\n }\n interactor.loadModeOptions(this, data);\n }\n }\n}\n","import { Events } from \"./Events/Events.js\";\nimport { InteractivityDetect } from \"../../../Enums/InteractivityDetect.js\";\nimport { Modes } from \"./Modes/Modes.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class Interactivity {\n constructor(engine, container) {\n this.detectsOn = InteractivityDetect.window;\n this.events = new Events();\n this.modes = new Modes(engine, container);\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n const detectsOn = data.detectsOn;\n if (detectsOn !== undefined) {\n this.detectsOn = detectsOn;\n }\n this.events.load(data.events);\n this.modes.load(data.modes);\n }\n}\n","import { PixelMode } from \"../../Enums/Modes/PixelMode.js\";\nimport { deepExtend } from \"../../Utils/Utils.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nimport { manualDefaultPosition } from \"../../Core/Utils/Constants.js\";\nexport class ManualParticle {\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.position) {\n this.position = {\n x: data.position.x ?? manualDefaultPosition,\n y: data.position.y ?? manualDefaultPosition,\n mode: data.position.mode ?? PixelMode.percent,\n };\n }\n if (data.options) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n","export var ResponsiveMode;\n(function (ResponsiveMode) {\n ResponsiveMode[\"screen\"] = \"screen\";\n ResponsiveMode[\"canvas\"] = \"canvas\";\n})(ResponsiveMode || (ResponsiveMode = {}));\n","import { ResponsiveMode } from \"../../Enums/Modes/ResponsiveMode.js\";\nimport { deepExtend } from \"../../Utils/Utils.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nexport class Responsive {\n constructor() {\n this.maxWidth = Infinity;\n this.options = {};\n this.mode = ResponsiveMode.canvas;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (!isNull(data.maxWidth)) {\n this.maxWidth = data.maxWidth;\n }\n if (!isNull(data.mode)) {\n if (data.mode === ResponsiveMode.screen) {\n this.mode = ResponsiveMode.screen;\n }\n else {\n this.mode = ResponsiveMode.canvas;\n }\n }\n if (!isNull(data.options)) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n","export var ThemeMode;\n(function (ThemeMode) {\n ThemeMode[\"any\"] = \"any\";\n ThemeMode[\"dark\"] = \"dark\";\n ThemeMode[\"light\"] = \"light\";\n})(ThemeMode || (ThemeMode = {}));\n","import { ThemeMode } from \"../../../Enums/Modes/ThemeMode.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class ThemeDefault {\n constructor() {\n this.auto = false;\n this.mode = ThemeMode.any;\n this.value = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.auto !== undefined) {\n this.auto = data.auto;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { ThemeDefault } from \"./ThemeDefault.js\";\nimport { deepExtend } from \"../../../Utils/Utils.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class Theme {\n constructor() {\n this.name = \"\";\n this.default = new ThemeDefault();\n }\n load(data) {\n if (isNull(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 { AnimationMode } from \"../../Enums/Modes/AnimationMode.js\";\nimport { StartValueType } from \"../../Enums/Types/StartValueType.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class AnimationOptions {\n constructor() {\n this.count = 0;\n this.enable = false;\n this.speed = 1;\n this.decay = 0;\n this.delay = 0;\n this.sync = false;\n }\n load(data) {\n if (isNull(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 = AnimationMode.auto;\n this.startValue = StartValueType.random;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.startValue !== undefined) {\n this.startValue = data.startValue;\n }\n }\n}\n","import { AnimationOptions } from \"./AnimationOptions.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class ColorAnimation extends AnimationOptions {\n constructor() {\n super();\n this.offset = 0;\n this.sync = true;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.offset !== undefined) {\n this.offset = setRangeValue(data.offset);\n }\n }\n}\n","import { ColorAnimation } from \"./ColorAnimation.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nexport class HslAnimation {\n constructor() {\n this.h = new ColorAnimation();\n this.s = new ColorAnimation();\n this.l = new ColorAnimation();\n }\n load(data) {\n if (isNull(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, isNull, isString } from \"../../Utils/TypeUtils.js\";\nimport { HslAnimation } from \"./HslAnimation.js\";\nimport { OptionsColor } from \"./OptionsColor.js\";\nexport class AnimatableColor extends OptionsColor {\n constructor() {\n super();\n this.animation = new HslAnimation();\n }\n static create(source, data) {\n const color = new AnimatableColor();\n color.load(source);\n if (data !== undefined) {\n if (isString(data) || isArray(data)) {\n color.load({ value: data });\n }\n else {\n color.load(data);\n }\n }\n return color;\n }\n load(data) {\n super.load(data);\n if (isNull(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","export var CollisionMode;\n(function (CollisionMode) {\n CollisionMode[\"absorb\"] = \"absorb\";\n CollisionMode[\"bounce\"] = \"bounce\";\n CollisionMode[\"destroy\"] = \"destroy\";\n})(CollisionMode || (CollisionMode = {}));\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class CollisionsAbsorb {\n constructor() {\n this.speed = 2;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.speed !== undefined) {\n this.speed = data.speed;\n }\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class CollisionsOverlap {\n constructor() {\n this.enable = true;\n this.retries = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.retries !== undefined) {\n this.retries = data.retries;\n }\n }\n}\n","import { AnimationOptions, RangedAnimationOptions } from \"./AnimationOptions.js\";\nimport { isNull } from \"../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class ValueWithRandom {\n constructor() {\n this.value = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (!isNull(data.value)) {\n this.value = setRangeValue(data.value);\n }\n }\n}\nexport class AnimationValueWithRandom extends ValueWithRandom {\n constructor() {\n super();\n this.animation = new AnimationOptions();\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\nexport class RangedAnimationValueWithRandom extends AnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new RangedAnimationOptions();\n }\n load(data) {\n super.load(data);\n }\n}\n","import { ValueWithRandom } from \"../../ValueWithRandom.js\";\nexport class ParticlesBounceFactor extends ValueWithRandom {\n constructor() {\n super();\n this.value = 1;\n }\n}\n","import { ParticlesBounceFactor } from \"./ParticlesBounceFactor.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ParticlesBounce {\n constructor() {\n this.horizontal = new ParticlesBounceFactor();\n this.vertical = new ParticlesBounceFactor();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.horizontal.load(data.horizontal);\n this.vertical.load(data.vertical);\n }\n}\n","import { CollisionMode } from \"../../../../Enums/Modes/CollisionMode.js\";\nimport { CollisionsAbsorb } from \"./CollisionsAbsorb.js\";\nimport { CollisionsOverlap } from \"./CollisionsOverlap.js\";\nimport { ParticlesBounce } from \"../Bounce/ParticlesBounce.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Collisions {\n constructor() {\n this.absorb = new CollisionsAbsorb();\n this.bounce = new ParticlesBounce();\n this.enable = false;\n this.maxSpeed = 50;\n this.mode = CollisionMode.bounce;\n this.overlap = new CollisionsOverlap();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.absorb.load(data.absorb);\n this.bounce.load(data.bounce);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = setRangeValue(data.maxSpeed);\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n this.overlap.load(data.overlap);\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Effect {\n constructor() {\n this.close = true;\n this.fill = true;\n this.options = {};\n this.type = [];\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n const options = data.options;\n if (options !== undefined) {\n for (const effect in options) {\n const item = options[effect];\n if (item) {\n this.options[effect] = deepExtend(this.options[effect] ?? {}, item);\n }\n }\n }\n if (data.close !== undefined) {\n this.close = data.close;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveAngle {\n constructor() {\n this.offset = 0;\n this.value = 90;\n }\n load(data) {\n if (isNull(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 { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveAttract {\n constructor() {\n this.distance = 200;\n this.enable = false;\n this.rotate = {\n x: 3000,\n y: 3000,\n };\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = setRangeValue(data.distance);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.rotate) {\n const rotateX = data.rotate.x;\n if (rotateX !== undefined) {\n this.rotate.x = rotateX;\n }\n const rotateY = data.rotate.y;\n if (rotateY !== undefined) {\n this.rotate.y = rotateY;\n }\n }\n }\n}\n","import { PixelMode } from \"../../../../Enums/Modes/PixelMode.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class MoveCenter {\n constructor() {\n this.x = 50;\n this.y = 50;\n this.mode = PixelMode.percent;\n this.radius = 0;\n }\n load(data) {\n if (isNull(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 { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveGravity {\n constructor() {\n this.acceleration = 9.81;\n this.enable = false;\n this.inverse = false;\n this.maxSpeed = 50;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.acceleration !== undefined) {\n this.acceleration = setRangeValue(data.acceleration);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.inverse !== undefined) {\n this.inverse = data.inverse;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = setRangeValue(data.maxSpeed);\n }\n }\n}\n","import { ValueWithRandom } from \"../../../ValueWithRandom.js\";\nimport { deepExtend } from \"../../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../../Utils/TypeUtils.js\";\nexport class MovePath {\n constructor() {\n this.clamp = true;\n this.delay = new ValueWithRandom();\n this.enable = false;\n this.options = {};\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.clamp !== undefined) {\n this.clamp = data.clamp;\n }\n this.delay.load(data.delay);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n this.generator = data.generator;\n if (data.options) {\n this.options = deepExtend(this.options, data.options);\n }\n }\n}\n","import { OptionsColor } from \"../../OptionsColor.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class MoveTrailFill {\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n }\n}\n","import { MoveTrailFill } from \"./MoveTrailFill.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class MoveTrail {\n constructor() {\n this.enable = false;\n this.length = 10;\n this.fill = new MoveTrailFill();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.fill !== undefined) {\n this.fill.load(data.fill);\n }\n if (data.length !== undefined) {\n this.length = data.length;\n }\n }\n}\n","export var OutMode;\n(function (OutMode) {\n OutMode[\"bounce\"] = \"bounce\";\n OutMode[\"none\"] = \"none\";\n OutMode[\"out\"] = \"out\";\n OutMode[\"destroy\"] = \"destroy\";\n OutMode[\"split\"] = \"split\";\n})(OutMode || (OutMode = {}));\n","import { OutMode } from \"../../../../Enums/Modes/OutMode.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class OutModes {\n constructor() {\n this.default = OutMode.out;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.default !== undefined) {\n this.default = data.default;\n }\n this.bottom = data.bottom ?? data.default;\n this.left = data.left ?? data.default;\n this.right = data.right ?? data.default;\n this.top = data.top ?? data.default;\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Spin {\n constructor() {\n this.acceleration = 0;\n this.enable = false;\n }\n load(data) {\n if (isNull(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 { MoveDirection } from \"../../../../Enums/Directions/MoveDirection.js\";\nimport { isNull, isNumber, isObject } from \"../../../../Utils/TypeUtils.js\";\nimport { MoveAngle } from \"./MoveAngle.js\";\nimport { MoveAttract } from \"./MoveAttract.js\";\nimport { MoveCenter } from \"./MoveCenter.js\";\nimport { MoveGravity } from \"./MoveGravity.js\";\nimport { MovePath } from \"./Path/MovePath.js\";\nimport { MoveTrail } from \"./MoveTrail.js\";\nimport { OutModes } from \"./OutModes.js\";\nimport { Spin } from \"./Spin.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Move {\n constructor() {\n this.angle = new MoveAngle();\n this.attract = new MoveAttract();\n this.center = new MoveCenter();\n this.decay = 0;\n this.distance = {};\n this.direction = MoveDirection.none;\n this.drift = 0;\n this.enable = false;\n this.gravity = new MoveGravity();\n this.path = new MovePath();\n this.outModes = new OutModes();\n this.random = false;\n this.size = false;\n this.speed = 2;\n this.spin = new Spin();\n this.straight = false;\n this.trail = new MoveTrail();\n this.vibrate = false;\n this.warp = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.angle.load(isNumber(data.angle) ? { value: data.angle } : data.angle);\n this.attract.load(data.attract);\n this.center.load(data.center);\n if (data.decay !== undefined) {\n this.decay = setRangeValue(data.decay);\n }\n if (data.direction !== undefined) {\n this.direction = data.direction;\n }\n if (data.distance !== undefined) {\n this.distance = isNumber(data.distance)\n ? {\n horizontal: data.distance,\n vertical: data.distance,\n }\n : { ...data.distance };\n }\n if (data.drift !== undefined) {\n this.drift = setRangeValue(data.drift);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n this.gravity.load(data.gravity);\n const outModes = data.outModes;\n if (outModes !== undefined) {\n if (isObject(outModes)) {\n this.outModes.load(outModes);\n }\n else {\n this.outModes.load({\n default: outModes,\n });\n }\n }\n this.path.load(data.path);\n if (data.random !== undefined) {\n this.random = data.random;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.speed !== undefined) {\n this.speed = setRangeValue(data.speed);\n }\n this.spin.load(data.spin);\n if (data.straight !== undefined) {\n this.straight = data.straight;\n }\n this.trail.load(data.trail);\n if (data.vibrate !== undefined) {\n this.vibrate = data.vibrate;\n }\n if (data.warp !== undefined) {\n this.warp = data.warp;\n }\n }\n}\n","import { DestroyType } from \"../../../../Enums/Types/DestroyType.js\";\nimport { RangedAnimationOptions } from \"../../AnimationOptions.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class OpacityAnimation extends RangedAnimationOptions {\n constructor() {\n super();\n this.destroy = DestroyType.none;\n this.speed = 2;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.destroy !== undefined) {\n this.destroy = data.destroy;\n }\n }\n}\n","import { OpacityAnimation } from \"./OpacityAnimation.js\";\nimport { RangedAnimationValueWithRandom } from \"../../ValueWithRandom.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Opacity extends RangedAnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new OpacityAnimation();\n this.value = 1;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n super.load(data);\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\n","import { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ParticlesDensity {\n constructor() {\n this.enable = false;\n this.width = 1920;\n this.height = 1080;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n const width = data.width;\n if (width !== undefined) {\n this.width = width;\n }\n const height = data.height;\n if (height !== undefined) {\n this.height = height;\n }\n }\n}\n","export var LimitMode;\n(function (LimitMode) {\n LimitMode[\"delete\"] = \"delete\";\n LimitMode[\"wait\"] = \"wait\";\n})(LimitMode || (LimitMode = {}));\n","import { LimitMode } from \"../../../../Enums/Modes/LimitMode.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ParticlesNumberLimit {\n constructor() {\n this.mode = LimitMode.delete;\n this.value = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { ParticlesDensity } from \"./ParticlesDensity.js\";\nimport { ParticlesNumberLimit } from \"./ParticlesNumberLimit.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ParticlesNumber {\n constructor() {\n this.density = new ParticlesDensity();\n this.limit = new ParticlesNumberLimit();\n this.value = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n this.density.load(data.density);\n this.limit.load(data.limit);\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n","import { OptionsColor } from \"../OptionsColor.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class Shadow {\n constructor() {\n this.blur = 0;\n this.color = new OptionsColor();\n this.enable = false;\n this.offset = {\n x: 0,\n y: 0,\n };\n this.color.value = \"#000\";\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.blur !== undefined) {\n this.blur = data.blur;\n }\n this.color = OptionsColor.create(this.color, data.color);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.offset === undefined) {\n return;\n }\n if (data.offset.x !== undefined) {\n this.offset.x = data.offset.x;\n }\n if (data.offset.y !== undefined) {\n this.offset.y = data.offset.y;\n }\n }\n}\n","import { deepExtend } from \"../../../../Utils/Utils.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Shape {\n constructor() {\n this.close = true;\n this.fill = true;\n this.options = {};\n this.type = \"circle\";\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n const options = data.options;\n if (options !== undefined) {\n for (const shape in options) {\n const item = options[shape];\n if (item) {\n this.options[shape] = deepExtend(this.options[shape] ?? {}, item);\n }\n }\n }\n if (data.close !== undefined) {\n this.close = data.close;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n","import { DestroyType } from \"../../../../Enums/Types/DestroyType.js\";\nimport { RangedAnimationOptions } from \"../../AnimationOptions.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class SizeAnimation extends RangedAnimationOptions {\n constructor() {\n super();\n this.destroy = DestroyType.none;\n this.speed = 5;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.destroy !== undefined) {\n this.destroy = data.destroy;\n }\n }\n}\n","import { RangedAnimationValueWithRandom } from \"../../ValueWithRandom.js\";\nimport { SizeAnimation } from \"./SizeAnimation.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class Size extends RangedAnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new SizeAnimation();\n this.value = 3;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\n","import { AnimatableColor } from \"../AnimatableColor.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nimport { setRangeValue } from \"../../../Utils/NumberUtils.js\";\nexport class Stroke {\n constructor() {\n this.width = 0;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = AnimatableColor.create(this.color, data.color);\n }\n if (data.width !== undefined) {\n this.width = setRangeValue(data.width);\n }\n if (data.opacity !== undefined) {\n this.opacity = setRangeValue(data.opacity);\n }\n }\n}\n","import { ValueWithRandom } from \"../../ValueWithRandom.js\";\nimport { isNull } from \"../../../../Utils/TypeUtils.js\";\nexport class ZIndex extends ValueWithRandom {\n constructor() {\n super();\n this.opacityRate = 1;\n this.sizeRate = 1;\n this.velocityRate = 1;\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.opacityRate !== undefined) {\n this.opacityRate = data.opacityRate;\n }\n if (data.sizeRate !== undefined) {\n this.sizeRate = data.sizeRate;\n }\n if (data.velocityRate !== undefined) {\n this.velocityRate = data.velocityRate;\n }\n }\n}\n","import { deepExtend, executeOnSingleOrMultiple } from \"../../../Utils/Utils.js\";\nimport { AnimatableColor } from \"../AnimatableColor.js\";\nimport { Collisions } from \"./Collisions/Collisions.js\";\nimport { Effect } from \"./Effect/Effect.js\";\nimport { Move } from \"./Move/Move.js\";\nimport { Opacity } from \"./Opacity/Opacity.js\";\nimport { ParticlesBounce } from \"./Bounce/ParticlesBounce.js\";\nimport { ParticlesNumber } from \"./Number/ParticlesNumber.js\";\nimport { Shadow } from \"./Shadow.js\";\nimport { Shape } from \"./Shape/Shape.js\";\nimport { Size } from \"./Size/Size.js\";\nimport { Stroke } from \"./Stroke.js\";\nimport { ZIndex } from \"./ZIndex/ZIndex.js\";\nimport { isNull } from \"../../../Utils/TypeUtils.js\";\nexport class ParticlesOptions {\n constructor(engine, container) {\n this._engine = engine;\n this._container = container;\n this.bounce = new ParticlesBounce();\n this.collisions = new Collisions();\n this.color = new AnimatableColor();\n this.color.value = \"#fff\";\n this.effect = new Effect();\n this.groups = {};\n this.move = new Move();\n this.number = new ParticlesNumber();\n this.opacity = new Opacity();\n this.reduceDuplicates = false;\n this.shadow = new Shadow();\n this.shape = new Shape();\n this.size = new Size();\n this.stroke = new Stroke();\n this.zIndex = new ZIndex();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.groups !== undefined) {\n for (const group of Object.keys(data.groups)) {\n if (!Object.hasOwn(data.groups, group)) {\n continue;\n }\n const item = data.groups[group];\n if (item !== undefined) {\n this.groups[group] = deepExtend(this.groups[group] ?? {}, item);\n }\n }\n }\n if (data.reduceDuplicates !== undefined) {\n this.reduceDuplicates = data.reduceDuplicates;\n }\n this.bounce.load(data.bounce);\n this.color.load(AnimatableColor.create(this.color, data.color));\n this.effect.load(data.effect);\n this.move.load(data.move);\n this.number.load(data.number);\n this.opacity.load(data.opacity);\n this.shape.load(data.shape);\n this.size.load(data.size);\n this.shadow.load(data.shadow);\n this.zIndex.load(data.zIndex);\n this.collisions.load(data.collisions);\n if (data.interactivity !== undefined) {\n this.interactivity = deepExtend({}, data.interactivity);\n }\n const strokeToLoad = data.stroke;\n if (strokeToLoad) {\n this.stroke = executeOnSingleOrMultiple(strokeToLoad, t => {\n const tmp = new Stroke();\n tmp.load(t);\n return tmp;\n });\n }\n if (this._container) {\n const updaters = this._engine.updaters.get(this._container);\n if (updaters) {\n for (const updater of updaters) {\n if (updater.loadOptions) {\n updater.loadOptions(this, data);\n }\n }\n }\n const interactors = this._engine.interactors.get(this._container);\n if (interactors) {\n for (const interactor of interactors) {\n if (interactor.loadParticlesOptions) {\n interactor.loadParticlesOptions(this, data);\n }\n }\n }\n }\n }\n}\n","import { ParticlesOptions } from \"../Options/Classes/Particles/ParticlesOptions.js\";\nexport function loadOptions(options, ...sourceOptionsArr) {\n for (const sourceOptions of sourceOptionsArr) {\n options.load(sourceOptions);\n }\n}\nexport function loadParticlesOptions(engine, container, ...sourceOptionsArr) {\n const options = new ParticlesOptions(engine, container);\n loadOptions(options, ...sourceOptionsArr);\n return options;\n}\n","import { deepExtend, executeOnSingleOrMultiple, safeMatchMedia } from \"../../Utils/Utils.js\";\nimport { isBoolean, isNull } from \"../../Utils/TypeUtils.js\";\nimport { Background } from \"./Background/Background.js\";\nimport { BackgroundMask } from \"./BackgroundMask/BackgroundMask.js\";\nimport { FullScreen } from \"./FullScreen/FullScreen.js\";\nimport { Interactivity } from \"./Interactivity/Interactivity.js\";\nimport { ManualParticle } from \"./ManualParticle.js\";\nimport { Responsive } from \"./Responsive.js\";\nimport { ResponsiveMode } from \"../../Enums/Modes/ResponsiveMode.js\";\nimport { Theme } from \"./Theme/Theme.js\";\nimport { ThemeMode } from \"../../Enums/Modes/ThemeMode.js\";\nimport { loadParticlesOptions } from \"../../Utils/OptionsUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class Options {\n constructor(engine, container) {\n this._findDefaultTheme = mode => {\n return (this.themes.find(theme => theme.default.value && theme.default.mode === mode) ??\n this.themes.find(theme => theme.default.value && theme.default.mode === ThemeMode.any));\n };\n this._importPreset = preset => {\n this.load(this._engine.getPreset(preset));\n };\n this._engine = engine;\n this._container = container;\n this.autoPlay = true;\n this.background = new Background();\n this.backgroundMask = new BackgroundMask();\n this.clear = true;\n this.defaultThemes = {};\n this.delay = 0;\n this.fullScreen = new FullScreen();\n this.detectRetina = true;\n this.duration = 0;\n this.fpsLimit = 120;\n this.interactivity = new Interactivity(engine, container);\n this.manualParticles = [];\n this.particles = loadParticlesOptions(this._engine, this._container);\n this.pauseOnBlur = true;\n this.pauseOnOutsideViewport = true;\n this.responsive = [];\n this.smooth = false;\n this.style = {};\n this.themes = [];\n this.zLayers = 100;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.preset !== undefined) {\n executeOnSingleOrMultiple(data.preset, preset => this._importPreset(preset));\n }\n if (data.autoPlay !== undefined) {\n this.autoPlay = data.autoPlay;\n }\n if (data.clear !== undefined) {\n this.clear = data.clear;\n }\n if (data.key !== undefined) {\n this.key = data.key;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n if (data.delay !== undefined) {\n this.delay = setRangeValue(data.delay);\n }\n const detectRetina = data.detectRetina;\n if (detectRetina !== undefined) {\n this.detectRetina = detectRetina;\n }\n if (data.duration !== undefined) {\n this.duration = setRangeValue(data.duration);\n }\n const fpsLimit = data.fpsLimit;\n if (fpsLimit !== undefined) {\n this.fpsLimit = fpsLimit;\n }\n if (data.pauseOnBlur !== undefined) {\n this.pauseOnBlur = data.pauseOnBlur;\n }\n if (data.pauseOnOutsideViewport !== undefined) {\n this.pauseOnOutsideViewport = data.pauseOnOutsideViewport;\n }\n if (data.zLayers !== undefined) {\n this.zLayers = data.zLayers;\n }\n this.background.load(data.background);\n const fullScreen = data.fullScreen;\n if (isBoolean(fullScreen)) {\n this.fullScreen.enable = fullScreen;\n }\n else {\n this.fullScreen.load(fullScreen);\n }\n this.backgroundMask.load(data.backgroundMask);\n this.interactivity.load(data.interactivity);\n if (data.manualParticles) {\n this.manualParticles = data.manualParticles.map(t => {\n const tmp = new ManualParticle();\n tmp.load(t);\n return tmp;\n });\n }\n this.particles.load(data.particles);\n this.style = deepExtend(this.style, data.style);\n this._engine.loadOptions(this, data);\n if (data.smooth !== undefined) {\n this.smooth = data.smooth;\n }\n const interactors = this._engine.interactors.get(this._container);\n if (interactors) {\n for (const interactor of interactors) {\n if (interactor.loadOptions) {\n interactor.loadOptions(this, data);\n }\n }\n }\n if (data.responsive !== undefined) {\n for (const responsive of data.responsive) {\n const optResponsive = new Responsive();\n optResponsive.load(responsive);\n this.responsive.push(optResponsive);\n }\n }\n this.responsive.sort((a, b) => a.maxWidth - b.maxWidth);\n if (data.themes !== undefined) {\n for (const theme of data.themes) {\n const existingTheme = this.themes.find(t => t.name === theme.name);\n if (!existingTheme) {\n const optTheme = new Theme();\n optTheme.load(theme);\n this.themes.push(optTheme);\n }\n else {\n existingTheme.load(theme);\n }\n }\n }\n this.defaultThemes.dark = this._findDefaultTheme(ThemeMode.dark)?.name;\n this.defaultThemes.light = this._findDefaultTheme(ThemeMode.light)?.name;\n }\n setResponsive(width, pxRatio, defaultOptions) {\n this.load(defaultOptions);\n const responsiveOptions = this.responsive.find(t => t.mode === ResponsiveMode.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?.matches, defaultTheme = this._findDefaultTheme(clientDarkMode ? ThemeMode.dark : ThemeMode.light);\n if (defaultTheme) {\n this.load(defaultTheme.options);\n }\n }\n }\n}\n","export var InteractorType;\n(function (InteractorType) {\n InteractorType[\"external\"] = \"external\";\n InteractorType[\"particles\"] = \"particles\";\n})(InteractorType || (InteractorType = {}));\n","import { InteractorType } from \"../../Enums/Types/InteractorType.js\";\nexport class InteractionManager {\n constructor(engine, container) {\n this.container = container;\n this._engine = engine;\n this._interactors = [];\n this._externalInteractors = [];\n this._particleInteractors = [];\n }\n externalInteract(delta) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.interact(delta);\n }\n }\n }\n handleClickMode(mode) {\n for (const interactor of this._externalInteractors) {\n interactor.handleClickMode?.(mode);\n }\n }\n async init() {\n this._interactors = await this._engine.getInteractors(this.container, true);\n this._externalInteractors = [];\n this._particleInteractors = [];\n for (const interactor of this._interactors) {\n switch (interactor.type) {\n case InteractorType.external:\n this._externalInteractors.push(interactor);\n break;\n case InteractorType.particles:\n this._particleInteractors.push(interactor);\n break;\n }\n interactor.init();\n }\n }\n particlesInteract(particle, delta) {\n for (const interactor of this._externalInteractors) {\n interactor.clear(particle, delta);\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.interact(particle, delta);\n }\n }\n }\n reset(particle) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.reset(particle);\n }\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.reset(particle);\n }\n }\n }\n}\n","export var ParticleOutType;\n(function (ParticleOutType) {\n ParticleOutType[\"normal\"] = \"normal\";\n ParticleOutType[\"inside\"] = \"inside\";\n ParticleOutType[\"outside\"] = \"outside\";\n})(ParticleOutType || (ParticleOutType = {}));\n","import { Vector, Vector3d } from \"./Utils/Vectors.js\";\nimport { calcExactPositionOrRandomFromSize, clamp, degToRad, getDistance, getParticleBaseVelocity, getParticleDirectionAngle, getRandom, getRangeValue, randomInRange, setRangeValue, } from \"../Utils/NumberUtils.js\";\nimport { decayOffset, defaultRadius, defaultRetryCount, double, errorPrefix, half, millisecondsToSeconds, minRetries, minZ, none, randomColorValue, rollFactor, squareExp, tryCountIncrement, } from \"./Utils/Constants.js\";\nimport { deepExtend, getPosition, initParticleNumericAnimationValue, isInArray, itemFromSingleOrMultiple, } from \"../Utils/Utils.js\";\nimport { getHslFromAnimation, rangeColorToRgb } from \"../Utils/ColorUtils.js\";\nimport { EventType } from \"../Enums/Types/EventType.js\";\nimport { Interactivity } from \"../Options/Classes/Interactivity/Interactivity.js\";\nimport { MoveDirection } from \"../Enums/Directions/MoveDirection.js\";\nimport { OutMode } from \"../Enums/Modes/OutMode.js\";\nimport { ParticleOutType } from \"../Enums/Types/ParticleOutType.js\";\nimport { PixelMode } from \"../Enums/Modes/PixelMode.js\";\nimport { alterHsl } from \"../Utils/CanvasUtils.js\";\nimport { loadParticlesOptions } from \"../Utils/OptionsUtils.js\";\nfunction loadEffectData(effect, effectOptions, id, reduceDuplicates) {\n const effectData = effectOptions.options[effect];\n if (!effectData) {\n return;\n }\n return deepExtend({\n close: effectOptions.close,\n fill: effectOptions.fill,\n }, itemFromSingleOrMultiple(effectData, id, reduceDuplicates));\n}\nfunction loadShapeData(shape, shapeOptions, id, reduceDuplicates) {\n const shapeData = shapeOptions.options[shape];\n if (!shapeData) {\n return;\n }\n return deepExtend({\n close: shapeOptions.close,\n fill: shapeOptions.fill,\n }, itemFromSingleOrMultiple(shapeData, id, reduceDuplicates));\n}\nfunction fixOutMode(data) {\n if (!isInArray(data.outMode, data.checkModes)) {\n return;\n }\n const diameter = data.radius * double;\n if (data.coord > data.maxCoord - diameter) {\n data.setCb(-data.radius);\n }\n else if (data.coord < diameter) {\n data.setCb(data.radius);\n }\n}\nexport class Particle {\n constructor(engine, container) {\n this.container = container;\n this._calcPosition = (container, position, zIndex, tryCount = defaultRetryCount) => {\n for (const plugin of container.plugins.values()) {\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: [OutMode.bounce],\n coord: pos.x,\n maxCoord: container.canvas.size.width,\n setCb: (value) => (pos.x += value),\n radius,\n });\n }, fixVertical = (outMode) => {\n fixOutMode({\n outMode,\n checkModes: [OutMode.bounce],\n coord: pos.y,\n maxCoord: container.canvas.size.height,\n setCb: (value) => (pos.y += value),\n radius,\n });\n };\n fixHorizontal(outModes.left ?? outModes.default);\n fixHorizontal(outModes.right ?? outModes.default);\n fixVertical(outModes.top ?? outModes.default);\n fixVertical(outModes.bottom ?? outModes.default);\n if (this._checkOverlap(pos, tryCount)) {\n return this._calcPosition(container, undefined, zIndex, tryCount + tryCountIncrement);\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 === MoveDirection.inside || moveOptions.direction === MoveDirection.outside) {\n return res;\n }\n const rad = degToRad(getRangeValue(moveOptions.angle.value)), radOffset = degToRad(getRangeValue(moveOptions.angle.offset)), range = {\n left: radOffset - rad * half,\n right: radOffset + rad * half,\n };\n if (!moveOptions.straight) {\n res.angle += randomInRange(setRangeValue(range.left, range.right));\n }\n if (moveOptions.random && typeof moveOptions.speed === \"number\") {\n res.length *= getRandom();\n }\n return res;\n };\n this._checkOverlap = (pos, tryCount = defaultRetryCount) => {\n const collisionsOptions = this.options.collisions, radius = this.getRadius();\n if (!collisionsOptions.enable) {\n return false;\n }\n const overlapOptions = collisionsOptions.overlap;\n if (overlapOptions.enable) {\n return false;\n }\n const retries = overlapOptions.retries;\n if (retries >= minRetries && tryCount > retries) {\n throw new Error(`${errorPrefix} particle is overlapping and can't be placed`);\n }\n return !!this.container.particles.find(particle => getDistance(pos, particle.position) < radius + particle.getRadius());\n };\n this._getRollColor = color => {\n if (!color || !this.roll || (!this.backColor && !this.roll.alter)) {\n return color;\n }\n const backFactor = this.roll.horizontal && this.roll.vertical ? double * rollFactor : rollFactor, backSum = this.roll.horizontal ? Math.PI * half : none, rolled = Math.floor(((this.roll.angle ?? none) + backSum) / (Math.PI / backFactor)) % double;\n if (!rolled) {\n return color;\n }\n if (this.backColor) {\n return this.backColor;\n }\n if (this.roll.alter) {\n return alterHsl(color, this.roll.alter.type, this.roll.alter.value);\n }\n return color;\n };\n this._initPosition = position => {\n const container = this.container, zIndexValue = getRangeValue(this.options.zIndex.value);\n this.position = this._calcPosition(container, position, clamp(zIndexValue, minZ, 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 ?? defaultRadius,\n mode: this.options.move.center.mode ?? PixelMode.percent,\n };\n this.direction = getParticleDirectionAngle(this.options.move.direction, this.position, this.moveCenter);\n switch (this.options.move.direction) {\n case MoveDirection.inside:\n this.outType = ParticleOutType.inside;\n break;\n case MoveDirection.outside:\n this.outType = ParticleOutType.outside;\n break;\n }\n this.offset = Vector.origin;\n };\n this._engine = engine;\n }\n destroy(override) {\n if (this.unbreakable || this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.bubble.inRange = false;\n this.slow.inRange = false;\n const container = this.container, pathGenerator = this.pathGenerator, shapeDrawer = container.shapeDrawers.get(this.shape);\n shapeDrawer?.particleDestroy?.(this);\n for (const plugin of container.plugins.values()) {\n plugin.particleDestroyed?.(this, override);\n }\n for (const updater of container.particles.updaters) {\n updater.particleDestroyed?.(this, override);\n }\n pathGenerator?.reset(this);\n this._engine.dispatchEvent(EventType.particleDestroyed, {\n container: this.container,\n data: {\n particle: this,\n },\n });\n }\n draw(delta) {\n const container = this.container, canvas = container.canvas;\n for (const plugin of container.plugins.values()) {\n canvas.drawParticlePlugin(plugin, this, delta);\n }\n canvas.drawParticle(this, delta);\n }\n getFillColor() {\n return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.color));\n }\n getMass() {\n return this.getRadius() ** squareExp * Math.PI * half;\n }\n getPosition() {\n return {\n x: this.position.x + this.offset.x,\n y: this.position.y + this.offset.y,\n z: this.position.z,\n };\n }\n getRadius() {\n return this.bubble.radius ?? this.size.value;\n }\n getStrokeColor() {\n return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.strokeColor));\n }\n init(id, position, overrideOptions, group) {\n const container = this.container, engine = this._engine;\n this.id = id;\n this.group = group;\n this.effectClose = true;\n this.effectFill = true;\n this.shapeClose = true;\n this.shapeFill = true;\n this.pathRotation = false;\n this.lastPathTime = 0;\n this.destroyed = false;\n this.unbreakable = false;\n this.isRotating = false;\n this.rotation = 0;\n this.misplaced = false;\n this.retina = {\n maxDistance: {},\n };\n this.outType = ParticleOutType.normal;\n this.ignoresResizeRatio = true;\n const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = loadParticlesOptions(this._engine, container, mainOptions.particles), { reduceDuplicates } = particlesOptions, effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type;\n this.effect = itemFromSingleOrMultiple(effectType, this.id, reduceDuplicates);\n this.shape = itemFromSingleOrMultiple(shapeType, this.id, reduceDuplicates);\n const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;\n if (overrideOptions) {\n if (overrideOptions.effect?.type) {\n const overrideEffectType = overrideOptions.effect.type, effect = itemFromSingleOrMultiple(overrideEffectType, this.id, reduceDuplicates);\n if (effect) {\n this.effect = effect;\n effectOptions.load(overrideOptions.effect);\n }\n }\n if (overrideOptions.shape?.type) {\n const overrideShapeType = overrideOptions.shape.type, shape = itemFromSingleOrMultiple(overrideShapeType, this.id, reduceDuplicates);\n if (shape) {\n this.shape = shape;\n shapeOptions.load(overrideOptions.shape);\n }\n }\n }\n if (this.effect === randomColorValue) {\n const availableEffects = [...this.container.effectDrawers.keys()];\n this.effect = availableEffects[Math.floor(getRandom() * availableEffects.length)];\n }\n if (this.shape === randomColorValue) {\n const availableShapes = [...this.container.shapeDrawers.keys()];\n this.shape = availableShapes[Math.floor(getRandom() * availableShapes.length)];\n }\n this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);\n this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);\n particlesOptions.load(overrideOptions);\n const effectData = this.effectData;\n if (effectData) {\n particlesOptions.load(effectData.particles);\n }\n const shapeData = this.shapeData;\n if (shapeData) {\n particlesOptions.load(shapeData.particles);\n }\n const interactivity = new Interactivity(engine, container);\n interactivity.load(container.actualOptions.interactivity);\n interactivity.load(particlesOptions.interactivity);\n this.interactivity = interactivity;\n this.effectFill = effectData?.fill ?? particlesOptions.effect.fill;\n this.effectClose = effectData?.close ?? particlesOptions.effect.close;\n this.shapeFill = shapeData?.fill ?? particlesOptions.shape.fill;\n this.shapeClose = shapeData?.close ?? particlesOptions.shape.close;\n this.options = particlesOptions;\n const pathOptions = this.options.move.path;\n this.pathDelay = getRangeValue(pathOptions.delay.value) * millisecondsToSeconds;\n if (pathOptions.generator) {\n this.pathGenerator = this._engine.getPathGenerator(pathOptions.generator);\n if (this.pathGenerator && container.addPath(pathOptions.generator, this.pathGenerator)) {\n this.pathGenerator.init(container);\n }\n }\n container.retina.initParticle(this);\n this.size = initParticleNumericAnimationValue(this.options.size, pxRatio);\n this.bubble = {\n inRange: false,\n };\n this.slow = {\n inRange: false,\n factor: 1,\n };\n this._initPosition(position);\n this.initialVelocity = this._calculateVelocity();\n this.velocity = this.initialVelocity.copy();\n this.moveDecay = decayOffset - getRangeValue(this.options.move.decay);\n const particles = container.particles;\n particles.setLastZIndex(this.position.z);\n this.zIndexFactor = this.position.z / container.zLayers;\n this.sides = 24;\n let effectDrawer = container.effectDrawers.get(this.effect);\n if (!effectDrawer) {\n effectDrawer = this._engine.getEffectDrawer(this.effect);\n if (effectDrawer) {\n container.effectDrawers.set(this.effect, effectDrawer);\n }\n }\n if (effectDrawer?.loadEffect) {\n effectDrawer.loadEffect(this);\n }\n let shapeDrawer = container.shapeDrawers.get(this.shape);\n if (!shapeDrawer) {\n shapeDrawer = this._engine.getShapeDrawer(this.shape);\n if (shapeDrawer) {\n container.shapeDrawers.set(this.shape, shapeDrawer);\n }\n }\n if (shapeDrawer?.loadShape) {\n shapeDrawer.loadShape(this);\n }\n const sideCountFunc = shapeDrawer?.getSidesCount;\n if (sideCountFunc) {\n this.sides = sideCountFunc(this);\n }\n this.spawning = false;\n this.shadowColor = rangeColorToRgb(this._engine, this.options.shadow.color);\n for (const updater of particles.updaters) {\n updater.init(this);\n }\n for (const mover of particles.movers) {\n mover.init?.(this);\n }\n effectDrawer?.particleInit?.(container, this);\n shapeDrawer?.particleInit?.(container, this);\n for (const plugin of container.plugins.values()) {\n plugin.particleCreated?.(this);\n }\n }\n isInsideCanvas() {\n const radius = this.getRadius(), canvasSize = this.container.canvas.size, position = this.position;\n return (position.x >= -radius &&\n position.y >= -radius &&\n position.y <= canvasSize.height + radius &&\n position.x <= canvasSize.width + radius);\n }\n isVisible() {\n return !this.destroyed && !this.spawning && this.isInsideCanvas();\n }\n reset() {\n for (const updater of this.container.particles.updaters) {\n updater.reset?.(this);\n }\n }\n}\n","export class Point {\n constructor(position, particle) {\n this.position = position;\n this.particle = particle;\n }\n}\n","export var RangeType;\n(function (RangeType) {\n RangeType[\"circle\"] = \"circle\";\n RangeType[\"rectangle\"] = \"rectangle\";\n})(RangeType || (RangeType = {}));\n","import { RangeType } from \"../../Types/RangeType.js\";\nimport { getDistance } from \"../../Utils/NumberUtils.js\";\nimport { squareExp } from \"./Constants.js\";\nexport class BaseRange {\n constructor(x, y, type) {\n this.position = {\n x: x,\n y: y,\n };\n this.type = type;\n }\n}\nexport class Circle extends BaseRange {\n constructor(x, y, radius) {\n super(x, y, RangeType.circle);\n this.radius = radius;\n }\n contains(point) {\n return getDistance(point, this.position) <= this.radius;\n }\n intersects(range) {\n const pos1 = this.position, pos2 = range.position, distPos = { x: Math.abs(pos2.x - pos1.x), y: Math.abs(pos2.y - pos1.y) }, r = this.radius;\n if (range instanceof Circle || range.type === RangeType.circle) {\n const circleRange = range, rSum = r + circleRange.radius, dist = Math.sqrt(distPos.x ** squareExp + distPos.y ** squareExp);\n return rSum > dist;\n }\n else if (range instanceof Rectangle || range.type === RangeType.rectangle) {\n const rectRange = range, { width, height } = rectRange.size, edges = Math.pow(distPos.x - width, squareExp) + Math.pow(distPos.y - height, squareExp);\n return (edges <= r ** squareExp ||\n (distPos.x <= r + width && distPos.y <= r + height) ||\n distPos.x <= width ||\n distPos.y <= height);\n }\n return false;\n }\n}\nexport class Rectangle extends BaseRange {\n constructor(x, y, width, height) {\n super(x, y, RangeType.rectangle);\n this.size = {\n height: height,\n width: width,\n };\n }\n contains(point) {\n const w = this.size.width, h = this.size.height, pos = this.position;\n return point.x >= pos.x && point.x <= pos.x + w && point.y >= pos.y && point.y <= pos.y + h;\n }\n intersects(range) {\n if (range instanceof Circle) {\n return range.intersects(this);\n }\n const w = this.size.width, h = this.size.height, pos1 = this.position, pos2 = range.position, size2 = range instanceof Rectangle ? range.size : { width: 0, height: 0 }, w2 = size2.width, h2 = size2.height;\n return pos2.x < pos1.x + w && pos2.x + w2 > pos1.x && pos2.y < pos1.y + h && pos2.y + h2 > pos1.y;\n }\n}\n","import { Circle, Rectangle } from \"./Ranges.js\";\nimport { double, half, subdivideCount } from \"./Constants.js\";\nimport { getDistance } from \"../../Utils/NumberUtils.js\";\nexport class QuadTree {\n constructor(rectangle, capacity) {\n this.rectangle = rectangle;\n this.capacity = capacity;\n this._subdivide = () => {\n const { x, y } = this.rectangle.position, { width, height } = this.rectangle.size, { capacity } = this;\n for (let i = 0; i < subdivideCount; i++) {\n const fixedIndex = i % double;\n this._subs.push(new QuadTree(new Rectangle(x + width * half * fixedIndex, y + height * half * (Math.round(i * half) - fixedIndex), width * half, height * half), capacity));\n }\n this._divided = true;\n };\n this._points = [];\n this._divided = false;\n this._subs = [];\n }\n insert(point) {\n if (!this.rectangle.contains(point.position)) {\n return false;\n }\n if (this._points.length < this.capacity) {\n this._points.push(point);\n return true;\n }\n if (!this._divided) {\n this._subdivide();\n }\n return this._subs.some(sub => sub.insert(point));\n }\n query(range, check) {\n const res = [];\n if (!range.intersects(this.rectangle)) {\n return [];\n }\n for (const p of this._points) {\n if (!range.contains(p.position) &&\n getDistance(range.position, p.position) > p.particle.getRadius() &&\n (!check || check(p.particle))) {\n continue;\n }\n res.push(p.particle);\n }\n if (this._divided) {\n for (const sub of this._subs) {\n res.push(...sub.query(range, check));\n }\n }\n return res;\n }\n queryCircle(position, radius, check) {\n return this.query(new Circle(position.x, position.y, radius), check);\n }\n queryRectangle(position, size, check) {\n return this.query(new Rectangle(position.x, position.y, size.width, size.height), check);\n }\n}\n","import { countOffset, defaultDensityFactor, defaultRemoveQuantity, deleteCount, errorPrefix, lengthOffset, minCount, minIndex, minLimit, posOffset, qTreeCapacity, sizeFactor, squareExp, } from \"./Utils/Constants.js\";\nimport { getLogger, getPosition } from \"../Utils/Utils.js\";\nimport { EventType } from \"../Enums/Types/EventType.js\";\nimport { InteractionManager } from \"./Utils/InteractionManager.js\";\nimport { LimitMode } from \"../Enums/Modes/LimitMode.js\";\nimport { Particle } from \"./Particle.js\";\nimport { Point } from \"./Utils/Point.js\";\nimport { QuadTree } from \"./Utils/QuadTree.js\";\nimport { Rectangle } from \"./Utils/Ranges.js\";\nconst qTreeRectangle = (canvasSize) => {\n const { height, width } = canvasSize;\n return new Rectangle(posOffset * width, posOffset * height, sizeFactor * width, sizeFactor * height);\n};\nexport class Particles {\n constructor(engine, container) {\n this._addToPool = (...particles) => {\n this._pool.push(...particles);\n };\n this._applyDensity = (options, manualCount, group, groupOptions) => {\n const numberOptions = options.number;\n if (!options.number.density?.enable) {\n if (group === undefined) {\n this._limit = numberOptions.limit.value;\n }\n else if (groupOptions?.number.limit?.value ?? numberOptions.limit.value) {\n this._groupLimits.set(group, groupOptions?.number.limit?.value ?? numberOptions.limit.value);\n }\n return;\n }\n const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter(t => t.group === group).length);\n if (group === undefined) {\n this._limit = numberOptions.limit.value * densityFactor;\n }\n else {\n this._groupLimits.set(group, numberOptions.limit.value * densityFactor);\n }\n if (particlesCount < particlesNumber) {\n this.push(Math.abs(particlesNumber - particlesCount), undefined, options, group);\n }\n else if (particlesCount > particlesNumber) {\n this.removeQuantity(particlesCount - particlesNumber, group);\n }\n };\n this._initDensityFactor = densityOptions => {\n const container = this._container;\n if (!container.canvas.element || !densityOptions.enable) {\n return defaultDensityFactor;\n }\n const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;\n return (canvas.width * canvas.height) / (densityOptions.height * densityOptions.width * pxRatio ** squareExp);\n };\n this._pushParticle = (position, overrideOptions, group, initializer) => {\n try {\n let particle = this._pool.pop();\n if (!particle) {\n particle = new Particle(this._engine, this._container);\n }\n particle.init(this._nextId, position, overrideOptions, group);\n let canAdd = true;\n if (initializer) {\n canAdd = initializer(particle);\n }\n if (!canAdd) {\n return;\n }\n this._array.push(particle);\n this._zArray.push(particle);\n this._nextId++;\n this._engine.dispatchEvent(EventType.particleAdded, {\n container: this._container,\n data: {\n particle,\n },\n });\n return particle;\n }\n catch (e) {\n getLogger().warning(`${errorPrefix} adding particle: ${e}`);\n }\n };\n this._removeParticle = (index, group, override) => {\n const particle = this._array[index];\n if (!particle || particle.group !== group) {\n return false;\n }\n const zIdx = this._zArray.indexOf(particle);\n this._array.splice(index, deleteCount);\n this._zArray.splice(zIdx, deleteCount);\n particle.destroy(override);\n this._engine.dispatchEvent(EventType.particleRemoved, {\n container: this._container,\n data: {\n particle,\n },\n });\n this._addToPool(particle);\n return true;\n };\n this._engine = engine;\n this._container = container;\n this._nextId = 0;\n this._array = [];\n this._zArray = [];\n this._pool = [];\n this._limit = 0;\n this._groupLimits = new Map();\n this._needsSort = false;\n this._lastZIndex = 0;\n this._interactionManager = new InteractionManager(engine, container);\n this._pluginsInitialized = false;\n const canvasSize = container.canvas.size;\n this.quadTree = new QuadTree(qTreeRectangle(canvasSize), qTreeCapacity);\n this.movers = [];\n this.updaters = [];\n }\n get count() {\n return this._array.length;\n }\n addManualParticles() {\n const container = this._container, options = container.actualOptions;\n options.manualParticles.forEach(p => this.addParticle(p.position ? getPosition(p.position, container.canvas.size) : undefined, p.options));\n }\n addParticle(position, overrideOptions, group, initializer) {\n const limitMode = this._container.actualOptions.particles.number.limit.mode, limit = group === undefined ? this._limit : (this._groupLimits.get(group) ?? this._limit), currentCount = this.count;\n if (limit > minLimit) {\n switch (limitMode) {\n case LimitMode.delete: {\n const countToRemove = currentCount + countOffset - limit;\n if (countToRemove > minCount) {\n this.removeQuantity(countToRemove);\n }\n break;\n }\n case LimitMode.wait:\n if (currentCount >= limit) {\n return;\n }\n break;\n }\n }\n return this._pushParticle(position, overrideOptions, group, initializer);\n }\n clear() {\n this._array = [];\n this._zArray = [];\n this._pluginsInitialized = false;\n }\n destroy() {\n this._array = [];\n this._zArray = [];\n this.movers = [];\n this.updaters = [];\n }\n draw(delta) {\n const container = this._container, canvas = container.canvas;\n canvas.clear();\n this.update(delta);\n for (const plugin of container.plugins.values()) {\n canvas.drawPlugin(plugin, delta);\n }\n for (const p of this._zArray) {\n p.draw(delta);\n }\n }\n filter(condition) {\n return this._array.filter(condition);\n }\n find(condition) {\n return this._array.find(condition);\n }\n get(index) {\n return this._array[index];\n }\n handleClickMode(mode) {\n this._interactionManager.handleClickMode(mode);\n }\n async init() {\n const container = this._container, options = container.actualOptions;\n this._lastZIndex = 0;\n this._needsSort = false;\n await this.initPlugins();\n let handled = false;\n for (const plugin of container.plugins.values()) {\n handled = plugin.particlesInitialization?.() ?? handled;\n if (handled) {\n break;\n }\n }\n this.addManualParticles();\n if (!handled) {\n const particlesOptions = options.particles, groups = particlesOptions.groups;\n for (const group in groups) {\n const groupOptions = groups[group];\n for (let i = this.count, j = 0; j < groupOptions.number?.value && i < particlesOptions.number.value; i++, j++) {\n this.addParticle(undefined, groupOptions, group);\n }\n }\n for (let i = this.count; i < particlesOptions.number.value; i++) {\n this.addParticle();\n }\n }\n }\n async initPlugins() {\n if (this._pluginsInitialized) {\n return;\n }\n const container = this._container;\n this.movers = await this._engine.getMovers(container, true);\n this.updaters = await this._engine.getUpdaters(container, true);\n await this._interactionManager.init();\n for (const pathGenerator of container.pathGenerators.values()) {\n pathGenerator.init(container);\n }\n }\n push(nb, mouse, overrideOptions, group) {\n for (let i = 0; i < nb; i++) {\n this.addParticle(mouse?.position, overrideOptions, group);\n }\n }\n async redraw() {\n this.clear();\n await this.init();\n this.draw({ value: 0, factor: 0 });\n }\n remove(particle, group, override) {\n this.removeAt(this._array.indexOf(particle), undefined, group, override);\n }\n removeAt(index, quantity = defaultRemoveQuantity, group, override) {\n if (index < minIndex || index > this.count) {\n return;\n }\n let deleted = 0;\n for (let i = index; deleted < quantity && i < this.count; i++) {\n if (this._removeParticle(i, group, override)) {\n i--;\n deleted++;\n }\n }\n }\n removeQuantity(quantity, group) {\n this.removeAt(minIndex, quantity, group);\n }\n setDensity() {\n const options = this._container.actualOptions, groups = options.particles.groups, manualCount = options.manualParticles.length;\n for (const group in groups) {\n this._applyDensity(groups[group], manualCount, group);\n }\n this._applyDensity(options.particles, manualCount);\n }\n setLastZIndex(zIndex) {\n this._lastZIndex = zIndex;\n this._needsSort = this._needsSort || this._lastZIndex < zIndex;\n }\n setResizeFactor(factor) {\n this._resizeFactor = factor;\n }\n update(delta) {\n const container = this._container, particlesToDelete = new Set();\n this.quadTree = new QuadTree(qTreeRectangle(container.canvas.size), qTreeCapacity);\n for (const pathGenerator of container.pathGenerators.values()) {\n pathGenerator.update();\n }\n for (const plugin of container.plugins.values()) {\n plugin.update?.(delta);\n }\n const resizeFactor = this._resizeFactor;\n for (const particle of this._array) {\n if (resizeFactor && !particle.ignoresResizeRatio) {\n particle.position.x *= resizeFactor.width;\n particle.position.y *= resizeFactor.height;\n particle.initialPosition.x *= resizeFactor.width;\n particle.initialPosition.y *= resizeFactor.height;\n }\n particle.ignoresResizeRatio = false;\n this._interactionManager.reset(particle);\n for (const plugin of this._container.plugins.values()) {\n if (particle.destroyed) {\n break;\n }\n plugin.particleUpdate?.(particle, delta);\n }\n for (const mover of this.movers) {\n if (mover.isEnabled(particle)) {\n mover.move(particle, delta);\n }\n }\n if (particle.destroyed) {\n particlesToDelete.add(particle);\n continue;\n }\n this.quadTree.insert(new Point(particle.getPosition(), particle));\n }\n if (particlesToDelete.size) {\n const checkDelete = (p) => !particlesToDelete.has(p);\n this._array = this.filter(checkDelete);\n this._zArray = this._zArray.filter(checkDelete);\n for (const particle of particlesToDelete) {\n this._engine.dispatchEvent(EventType.particleRemoved, {\n container: this._container,\n data: {\n particle,\n },\n });\n }\n this._addToPool(...particlesToDelete);\n }\n this._interactionManager.externalInteract(delta);\n for (const particle of this._array) {\n for (const updater of this.updaters) {\n updater.update(particle, delta);\n }\n if (!particle.destroyed && !particle.spawning) {\n this._interactionManager.particlesInteract(particle, delta);\n }\n }\n delete this._resizeFactor;\n if (this._needsSort) {\n const zArray = this._zArray;\n zArray.sort((a, b) => b.position.z - a.position.z || a.id - b.id);\n this._lastZIndex = zArray[zArray.length - lengthOffset].position.z;\n this._needsSort = false;\n }\n }\n}\n","import { defaultRatio, defaultReduceFactor } from \"./Utils/Constants.js\";\nimport { getRangeValue } from \"../Utils/NumberUtils.js\";\nimport { isSsr } from \"../Utils/Utils.js\";\nexport class Retina {\n constructor(container) {\n this.container = container;\n this.pixelRatio = defaultRatio;\n this.reduceFactor = defaultReduceFactor;\n }\n init() {\n const container = this.container, options = container.actualOptions;\n this.pixelRatio = !options.detectRetina || isSsr() ? defaultRatio : devicePixelRatio;\n this.reduceFactor = defaultReduceFactor;\n const ratio = this.pixelRatio, canvas = container.canvas;\n if (canvas.element) {\n const element = canvas.element;\n canvas.size.width = element.offsetWidth * ratio;\n canvas.size.height = element.offsetHeight * ratio;\n }\n const particles = options.particles, moveOptions = particles.move;\n this.maxSpeed = getRangeValue(moveOptions.gravity.maxSpeed) * ratio;\n this.sizeAnimationSpeed = getRangeValue(particles.size.animation.speed) * ratio;\n }\n initParticle(particle) {\n const options = particle.options, ratio = this.pixelRatio, moveOptions = options.move, moveDistance = moveOptions.distance, props = particle.retina;\n props.moveDrift = getRangeValue(moveOptions.drift) * ratio;\n props.moveSpeed = getRangeValue(moveOptions.speed) * ratio;\n props.sizeAnimationSpeed = getRangeValue(options.size.animation.speed) * ratio;\n const maxDistance = props.maxDistance;\n maxDistance.horizontal = moveDistance.horizontal !== undefined ? moveDistance.horizontal * ratio : undefined;\n maxDistance.vertical = moveDistance.vertical !== undefined ? moveDistance.vertical * ratio : undefined;\n props.maxSpeed = getRangeValue(moveOptions.gravity.maxSpeed) * ratio;\n }\n}\n","import { animate, cancelAnimation, getRangeValue } from \"../Utils/NumberUtils.js\";\nimport { clickRadius, defaultFps, defaultFpsLimit, errorPrefix, millisecondsToSeconds, minCoordinate, minFpsLimit, removeDeleteCount, removeMinIndex, touchEndLengthOffset, } from \"./Utils/Constants.js\";\nimport { getLogger, safeIntersectionObserver } from \"../Utils/Utils.js\";\nimport { Canvas } from \"./Canvas.js\";\nimport { EventListeners } from \"./Utils/EventListeners.js\";\nimport { EventType } from \"../Enums/Types/EventType.js\";\nimport { Options } from \"../Options/Classes/Options.js\";\nimport { Particles } from \"./Particles.js\";\nimport { Retina } from \"./Retina.js\";\nimport { loadOptions } from \"../Utils/OptionsUtils.js\";\nfunction guardCheck(container) {\n return container && !container.destroyed;\n}\nfunction initDelta(value, fpsLimit = defaultFps, smooth = false) {\n return {\n value,\n factor: smooth ? defaultFps / fpsLimit : (defaultFps * value) / millisecondsToSeconds,\n };\n}\nfunction loadContainerOptions(engine, container, ...sourceOptionsArr) {\n const options = new Options(engine, container);\n loadOptions(options, ...sourceOptionsArr);\n return options;\n}\nexport class Container {\n constructor(engine, id, sourceOptions) {\n this._intersectionManager = entries => {\n if (!guardCheck(this) || !this.actualOptions.pauseOnOutsideViewport) {\n return;\n }\n for (const entry of entries) {\n if (entry.target !== this.interactivity.element) {\n continue;\n }\n if (entry.isIntersecting) {\n void this.play();\n }\n else {\n this.pause();\n }\n }\n };\n this._nextFrame = (timestamp) => {\n try {\n if (!this._smooth &&\n this._lastFrameTime !== undefined &&\n timestamp < this._lastFrameTime + millisecondsToSeconds / this.fpsLimit) {\n this.draw(false);\n return;\n }\n this._lastFrameTime ??= timestamp;\n const delta = initDelta(timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);\n this.addLifeTime(delta.value);\n this._lastFrameTime = timestamp;\n if (delta.value > millisecondsToSeconds) {\n this.draw(false);\n return;\n }\n this.particles.draw(delta);\n if (!this.alive()) {\n this.destroy();\n return;\n }\n if (this.animationStatus) {\n this.draw(false);\n }\n }\n catch (e) {\n getLogger().error(`${errorPrefix} in animation loop`, e);\n }\n };\n this._engine = engine;\n this.id = Symbol(id);\n this.fpsLimit = 120;\n this._smooth = false;\n this._delay = 0;\n this._duration = 0;\n this._lifeTime = 0;\n this._firstStart = true;\n this.started = false;\n this.destroyed = false;\n this._paused = true;\n this._lastFrameTime = 0;\n this.zLayers = 100;\n this.pageHidden = false;\n this._clickHandlers = new Map();\n this._sourceOptions = sourceOptions;\n this._initialSourceOptions = sourceOptions;\n this.retina = new Retina(this);\n this.canvas = new Canvas(this, this._engine);\n this.particles = new Particles(this._engine, this);\n this.pathGenerators = new Map();\n this.interactivity = {\n mouse: {\n clicking: false,\n inside: false,\n },\n };\n this.plugins = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this);\n this._eventListeners = new EventListeners(this);\n this._intersectionObserver = safeIntersectionObserver(entries => this._intersectionManager(entries));\n this._engine.dispatchEvent(EventType.containerBuilt, { container: this });\n }\n get animationStatus() {\n return !this._paused && !this.pageHidden && guardCheck(this);\n }\n get options() {\n return this._options;\n }\n get sourceOptions() {\n return this._sourceOptions;\n }\n addClickHandler(callback) {\n if (!guardCheck(this)) {\n return;\n }\n const el = this.interactivity.element;\n if (!el) {\n return;\n }\n const clickOrTouchHandler = (e, pos, radius) => {\n if (!guardCheck(this)) {\n return;\n }\n const pxRatio = this.retina.pixelRatio, posRetina = {\n x: pos.x * pxRatio,\n y: pos.y * pxRatio,\n }, particles = this.particles.quadTree.queryCircle(posRetina, radius * pxRatio);\n callback(e, particles);\n }, 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, clickRadius);\n }, touchStartHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = true;\n touchMoved = false;\n }, touchMoveHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touchMoved = true;\n }, 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 - touchEndLengthOffset];\n if (!lastTouch) {\n lastTouch = touchEvent.changedTouches[touchEvent.changedTouches.length - touchEndLengthOffset];\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 : minCoordinate),\n y: lastTouch.clientY - (canvasRect ? canvasRect.top : minCoordinate),\n };\n clickOrTouchHandler(e, pos, Math.max(lastTouch.radiusX, lastTouch.radiusY));\n }\n touched = false;\n touchMoved = false;\n }, touchCancelHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = false;\n touchMoved = false;\n };\n let touched = false, touchMoved = false;\n this._clickHandlers.set(\"click\", clickHandler);\n this._clickHandlers.set(\"touchstart\", touchStartHandler);\n this._clickHandlers.set(\"touchmove\", touchMoveHandler);\n this._clickHandlers.set(\"touchend\", touchEndHandler);\n this._clickHandlers.set(\"touchcancel\", touchCancelHandler);\n for (const [key, handler] of this._clickHandlers) {\n el.addEventListener(key, handler);\n }\n }\n addLifeTime(value) {\n this._lifeTime += value;\n }\n addPath(key, generator, override = false) {\n if (!guardCheck(this) || (!override && this.pathGenerators.has(key))) {\n return false;\n }\n this.pathGenerators.set(key, generator);\n return true;\n }\n alive() {\n return !this._duration || this._lifeTime <= this._duration;\n }\n clearClickHandlers() {\n if (!guardCheck(this)) {\n return;\n }\n for (const [key, handler] of this._clickHandlers) {\n this.interactivity.element?.removeEventListener(key, handler);\n }\n this._clickHandlers.clear();\n }\n destroy(remove = true) {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n this.clearClickHandlers();\n this.particles.destroy();\n this.canvas.destroy();\n for (const effectDrawer of this.effectDrawers.values()) {\n effectDrawer.destroy?.(this);\n }\n for (const shapeDrawer of this.shapeDrawers.values()) {\n shapeDrawer.destroy?.(this);\n }\n for (const key of this.effectDrawers.keys()) {\n this.effectDrawers.delete(key);\n }\n for (const key of this.shapeDrawers.keys()) {\n this.shapeDrawers.delete(key);\n }\n this._engine.clearPlugins(this);\n this.destroyed = true;\n if (remove) {\n const mainArr = this._engine.items, idx = mainArr.findIndex(t => t === this);\n if (idx >= removeMinIndex) {\n mainArr.splice(idx, removeDeleteCount);\n }\n }\n this._engine.dispatchEvent(EventType.containerDestroyed, { container: this });\n }\n draw(force) {\n if (!guardCheck(this)) {\n return;\n }\n let refreshTime = force;\n const frame = (timestamp) => {\n if (refreshTime) {\n this._lastFrameTime = undefined;\n refreshTime = false;\n }\n this._nextFrame(timestamp);\n };\n this._drawAnimationFrame = animate(timestamp => frame(timestamp));\n }\n async export(type, options = {}) {\n for (const plugin of this.plugins.values()) {\n if (!plugin.export) {\n continue;\n }\n const res = await plugin.export(type, options);\n if (!res.supported) {\n continue;\n }\n return res.blob;\n }\n getLogger().error(`${errorPrefix} - Export plugin with type ${type} not found`);\n }\n handleClickMode(mode) {\n if (!guardCheck(this)) {\n return;\n }\n this.particles.handleClickMode(mode);\n for (const plugin of this.plugins.values()) {\n plugin.handleClickMode?.(mode);\n }\n }\n async init() {\n if (!guardCheck(this)) {\n return;\n }\n const effects = this._engine.getSupportedEffects();\n for (const type of effects) {\n const drawer = this._engine.getEffectDrawer(type);\n if (drawer) {\n this.effectDrawers.set(type, drawer);\n }\n }\n const shapes = this._engine.getSupportedShapes();\n for (const type of shapes) {\n const drawer = this._engine.getShapeDrawer(type);\n if (drawer) {\n this.shapeDrawers.set(type, drawer);\n }\n }\n await this.particles.initPlugins();\n this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n const availablePlugins = await this._engine.getAvailablePlugins(this);\n for (const [id, plugin] of availablePlugins) {\n this.plugins.set(id, plugin);\n }\n this.retina.init();\n await this.canvas.init();\n this.updateActualOptions();\n this.canvas.initBackground();\n this.canvas.resize();\n const { zLayers, duration, delay, fpsLimit, smooth } = this.actualOptions;\n this.zLayers = zLayers;\n this._duration = getRangeValue(duration) * millisecondsToSeconds;\n this._delay = getRangeValue(delay) * millisecondsToSeconds;\n this._lifeTime = 0;\n this.fpsLimit = fpsLimit > minFpsLimit ? fpsLimit : defaultFpsLimit;\n this._smooth = smooth;\n for (const drawer of this.effectDrawers.values()) {\n await drawer.init?.(this);\n }\n for (const drawer of this.shapeDrawers.values()) {\n await drawer.init?.(this);\n }\n for (const plugin of this.plugins.values()) {\n await plugin.init?.();\n }\n this._engine.dispatchEvent(EventType.containerInit, { container: this });\n await this.particles.init();\n this.particles.setDensity();\n for (const plugin of this.plugins.values()) {\n plugin.particlesSetup?.();\n }\n this._engine.dispatchEvent(EventType.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 cancelAnimation(this._drawAnimationFrame);\n delete this._drawAnimationFrame;\n }\n if (this._paused) {\n return;\n }\n for (const plugin of this.plugins.values()) {\n plugin.pause?.();\n }\n if (!this.pageHidden) {\n this._paused = true;\n }\n this._engine.dispatchEvent(EventType.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.values()) {\n if (plugin.play) {\n plugin.play();\n }\n }\n }\n this._engine.dispatchEvent(EventType.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(sourceOptions) {\n if (!guardCheck(this)) {\n return;\n }\n this._initialSourceOptions = sourceOptions;\n this._sourceOptions = sourceOptions;\n this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n return this.refresh();\n }\n async start() {\n if (!guardCheck(this) || this.started) {\n return;\n }\n await this.init();\n this.started = true;\n await new Promise(resolve => {\n const start = async () => {\n this._eventListeners.addListeners();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.observe(this.interactivity.element);\n }\n for (const plugin of this.plugins.values()) {\n await plugin.start?.();\n }\n this._engine.dispatchEvent(EventType.containerStarted, { container: this });\n this.play();\n resolve();\n };\n this._delayTimeout = setTimeout(() => void start(), this._delay);\n });\n }\n stop() {\n if (!guardCheck(this) || !this.started) {\n return;\n }\n if (this._delayTimeout) {\n clearTimeout(this._delayTimeout);\n delete this._delayTimeout;\n }\n this._firstStart = true;\n this.started = false;\n this._eventListeners.removeListeners();\n this.pause();\n this.particles.clear();\n this.canvas.stop();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.unobserve(this.interactivity.element);\n }\n for (const plugin of this.plugins.values()) {\n plugin.stop?.();\n }\n for (const key of this.plugins.keys()) {\n this.plugins.delete(key);\n }\n this._sourceOptions = this._options;\n this._engine.dispatchEvent(EventType.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","import { deleteCount, minIndex } from \"../Core/Utils/Constants.js\";\nexport class EventDispatcher {\n constructor() {\n this._listeners = new Map();\n }\n addEventListener(type, listener) {\n this.removeEventListener(type, listener);\n let arr = this._listeners.get(type);\n if (!arr) {\n arr = [];\n this._listeners.set(type, arr);\n }\n arr.push(listener);\n }\n dispatchEvent(type, args) {\n const listeners = this._listeners.get(type);\n listeners?.forEach(handler => handler(args));\n }\n hasEventListener(type) {\n return !!this._listeners.get(type);\n }\n removeAllEventListeners(type) {\n if (!type) {\n this._listeners = new Map();\n }\n else {\n this._listeners.delete(type);\n }\n }\n removeEventListener(type, listener) {\n const arr = this._listeners.get(type);\n if (!arr) {\n return;\n }\n const length = arr.length, idx = arr.indexOf(listener);\n if (idx < minIndex) {\n return;\n }\n if (length === deleteCount) {\n this._listeners.delete(type);\n }\n else {\n arr.splice(idx, deleteCount);\n }\n }\n}\n","import { canvasFirstIndex, canvasTag, errorPrefix, generatedAttribute, generatedFalse, generatedTrue, loadMinIndex, loadRandomFactor, none, one, removeDeleteCount, } from \"./Utils/Constants.js\";\nimport { executeOnSingleOrMultiple, getLogger, itemFromSingleOrMultiple } from \"../Utils/Utils.js\";\nimport { Container } from \"./Container.js\";\nimport { EventDispatcher } from \"../Utils/EventDispatcher.js\";\nimport { EventType } from \"../Enums/Types/EventType.js\";\nimport { getRandom } from \"../Utils/NumberUtils.js\";\nasync function getItemsFromInitializer(container, map, initializers, force = false) {\n let res = map.get(container);\n if (!res || force) {\n res = await Promise.all([...initializers.values()].map(t => t(container)));\n map.set(container, res);\n }\n return res;\n}\nasync function getDataFromUrl(data) {\n const url = itemFromSingleOrMultiple(data.url, data.index);\n if (!url) {\n return data.fallback;\n }\n const response = await fetch(url);\n if (response.ok) {\n return (await response.json());\n }\n getLogger().error(`${errorPrefix} ${response.status} while retrieving config file`);\n return data.fallback;\n}\nconst getCanvasFromContainer = (domContainer) => {\n let canvasEl;\n if (domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag) {\n canvasEl = domContainer;\n if (!canvasEl.dataset[generatedAttribute]) {\n canvasEl.dataset[generatedAttribute] = generatedFalse;\n }\n }\n else {\n const existingCanvases = domContainer.getElementsByTagName(canvasTag);\n if (existingCanvases.length) {\n canvasEl = existingCanvases[canvasFirstIndex];\n canvasEl.dataset[generatedAttribute] = generatedFalse;\n }\n else {\n canvasEl = document.createElement(canvasTag);\n canvasEl.dataset[generatedAttribute] = generatedTrue;\n domContainer.appendChild(canvasEl);\n }\n }\n const fullPercent = \"100%\";\n if (!canvasEl.style.width) {\n canvasEl.style.width = fullPercent;\n }\n if (!canvasEl.style.height) {\n canvasEl.style.height = fullPercent;\n }\n return canvasEl;\n}, getDomContainer = (id, source) => {\n let domContainer = source ?? document.getElementById(id);\n if (domContainer) {\n return domContainer;\n }\n domContainer = document.createElement(\"div\");\n domContainer.id = id;\n domContainer.dataset[generatedAttribute] = generatedTrue;\n document.body.append(domContainer);\n return domContainer;\n};\nexport class Engine {\n constructor() {\n this._configs = new Map();\n this._domArray = [];\n this._eventDispatcher = new EventDispatcher();\n this._initialized = false;\n this.plugins = [];\n this.colorManagers = new Map();\n this.easingFunctions = new Map();\n this._initializers = {\n interactors: new Map(),\n movers: new Map(),\n updaters: new Map(),\n };\n this.interactors = new Map();\n this.movers = new Map();\n this.updaters = new Map();\n this.presets = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this.pathGenerators = new Map();\n }\n get configs() {\n const res = {};\n for (const [name, config] of this._configs) {\n res[name] = config;\n }\n return res;\n }\n get items() {\n return this._domArray;\n }\n get version() {\n return \"3.9.1\";\n }\n async addColorManager(manager, refresh = true) {\n this.colorManagers.set(manager.key, manager);\n await this.refresh(refresh);\n }\n addConfig(config) {\n const key = config.key ?? config.name ?? \"default\";\n this._configs.set(key, config);\n this._eventDispatcher.dispatchEvent(EventType.configAdded, { data: { name: key, config } });\n }\n async addEasing(name, easing, refresh = true) {\n if (this.getEasing(name)) {\n return;\n }\n this.easingFunctions.set(name, easing);\n await this.refresh(refresh);\n }\n async addEffect(effect, drawer, refresh = true) {\n executeOnSingleOrMultiple(effect, type => {\n if (!this.getEffectDrawer(type)) {\n this.effectDrawers.set(type, drawer);\n }\n });\n await this.refresh(refresh);\n }\n addEventListener(type, listener) {\n this._eventDispatcher.addEventListener(type, listener);\n }\n async addInteractor(name, interactorInitializer, refresh = true) {\n this._initializers.interactors.set(name, interactorInitializer);\n await this.refresh(refresh);\n }\n async addMover(name, moverInitializer, refresh = true) {\n this._initializers.movers.set(name, moverInitializer);\n await this.refresh(refresh);\n }\n async addParticleUpdater(name, updaterInitializer, refresh = true) {\n this._initializers.updaters.set(name, updaterInitializer);\n await this.refresh(refresh);\n }\n async addPathGenerator(name, generator, refresh = true) {\n if (!this.getPathGenerator(name)) {\n this.pathGenerators.set(name, generator);\n }\n await this.refresh(refresh);\n }\n async addPlugin(plugin, refresh = true) {\n if (!this.getPlugin(plugin.id)) {\n this.plugins.push(plugin);\n }\n await this.refresh(refresh);\n }\n async addPreset(preset, options, override = false, refresh = true) {\n if (override || !this.getPreset(preset)) {\n this.presets.set(preset, options);\n }\n await this.refresh(refresh);\n }\n async addShape(drawer, refresh = true) {\n for (const validType of drawer.validTypes) {\n if (this.getShapeDrawer(validType)) {\n continue;\n }\n this.shapeDrawers.set(validType, drawer);\n }\n await this.refresh(refresh);\n }\n checkVersion(pluginVersion) {\n if (this.version === pluginVersion) {\n return;\n }\n throw new Error(`The tsParticles version is different from the loaded plugins version. Engine version: ${this.version}. Plugin version: ${pluginVersion}`);\n }\n clearPlugins(container) {\n this.updaters.delete(container);\n this.movers.delete(container);\n this.interactors.delete(container);\n }\n dispatchEvent(type, args) {\n this._eventDispatcher.dispatchEvent(type, args);\n }\n dom() {\n return this.items;\n }\n domItem(index) {\n return this.item(index);\n }\n async getAvailablePlugins(container) {\n const res = new Map();\n for (const plugin of this.plugins) {\n if (plugin.needsPlugin(container.actualOptions)) {\n res.set(plugin.id, await plugin.getPlugin(container));\n }\n }\n return res;\n }\n getEasing(name) {\n return this.easingFunctions.get(name) ?? ((value) => value);\n }\n getEffectDrawer(type) {\n return this.effectDrawers.get(type);\n }\n async getInteractors(container, force = false) {\n return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);\n }\n async 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.shapeDrawers.get(type);\n }\n getSupportedEffects() {\n return this.effectDrawers.keys();\n }\n getSupportedShapes() {\n return this.shapeDrawers.keys();\n }\n async getUpdaters(container, force = false) {\n return getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);\n }\n init() {\n if (this._initialized) {\n return;\n }\n this._initialized = true;\n }\n item(index) {\n const { items } = this, item = items[index];\n if (!item || item.destroyed) {\n items.splice(index, removeDeleteCount);\n return;\n }\n return item;\n }\n async load(params) {\n const id = params.id ?? params.element?.id ?? `tsparticles${Math.floor(getRandom() * loadRandomFactor)}`, { index, url } = params, options = url ? await getDataFromUrl({ fallback: params.options, url, index }) : params.options, currentOptions = itemFromSingleOrMultiple(options, index), { items } = this, oldIndex = items.findIndex(v => v.id.description === id), newItem = new Container(this, id, currentOptions);\n if (oldIndex >= loadMinIndex) {\n const old = this.item(oldIndex), deleteCount = old ? one : none;\n if (old && !old.destroyed) {\n old.destroy(false);\n }\n items.splice(oldIndex, deleteCount, newItem);\n }\n else {\n items.push(newItem);\n }\n const domContainer = getDomContainer(id, params.element), canvasEl = getCanvasFromContainer(domContainer);\n newItem.canvas.loadCanvas(canvasEl);\n await newItem.start();\n return newItem;\n }\n loadOptions(options, sourceOptions) {\n this.plugins.forEach(plugin => plugin.loadOptions?.(options, sourceOptions));\n }\n loadParticlesOptions(container, options, ...sourceOptions) {\n const updaters = this.updaters.get(container);\n if (!updaters) {\n return;\n }\n updaters.forEach(updater => updater.loadOptions?.(options, ...sourceOptions));\n }\n async refresh(refresh = true) {\n if (!refresh) {\n return;\n }\n await Promise.all(this.items.map(t => t.refresh()));\n }\n removeEventListener(type, listener) {\n this._eventDispatcher.removeEventListener(type, listener);\n }\n setOnClickHandler(callback) {\n const { items } = this;\n if (!items.length) {\n throw new Error(`${errorPrefix} can only set click handlers after calling tsParticles.load()`);\n }\n items.forEach(item => item.addClickHandler(callback));\n }\n}\n","import { Engine } from \"./Core/Engine.js\";\nexport function init() {\n const engine = new Engine();\n engine.init();\n return engine;\n}\n","import { InteractorType } from \"../../Enums/Types/InteractorType.js\";\nexport class ExternalInteractorBase {\n constructor(container) {\n this.type = InteractorType.external;\n this.container = container;\n }\n}\n","import { InteractorType } from \"../../Enums/Types/InteractorType.js\";\nexport class ParticlesInteractorBase {\n constructor(container) {\n this.type = InteractorType.particles;\n this.container = container;\n }\n}\n","export var RotateDirection;\n(function (RotateDirection) {\n RotateDirection[\"clockwise\"] = \"clockwise\";\n RotateDirection[\"counterClockwise\"] = \"counter-clockwise\";\n RotateDirection[\"random\"] = \"random\";\n})(RotateDirection || (RotateDirection = {}));\n","export var GradientType;\n(function (GradientType) {\n GradientType[\"linear\"] = \"linear\";\n GradientType[\"radial\"] = \"radial\";\n GradientType[\"random\"] = \"random\";\n})(GradientType || (GradientType = {}));\n","export var EasingType;\n(function (EasingType) {\n EasingType[\"easeInBack\"] = \"ease-in-back\";\n EasingType[\"easeInCirc\"] = \"ease-in-circ\";\n EasingType[\"easeInCubic\"] = \"ease-in-cubic\";\n EasingType[\"easeInLinear\"] = \"ease-in-linear\";\n EasingType[\"easeInQuad\"] = \"ease-in-quad\";\n EasingType[\"easeInQuart\"] = \"ease-in-quart\";\n EasingType[\"easeInQuint\"] = \"ease-in-quint\";\n EasingType[\"easeInExpo\"] = \"ease-in-expo\";\n EasingType[\"easeInSine\"] = \"ease-in-sine\";\n EasingType[\"easeOutBack\"] = \"ease-out-back\";\n EasingType[\"easeOutCirc\"] = \"ease-out-circ\";\n EasingType[\"easeOutCubic\"] = \"ease-out-cubic\";\n EasingType[\"easeOutLinear\"] = \"ease-out-linear\";\n EasingType[\"easeOutQuad\"] = \"ease-out-quad\";\n EasingType[\"easeOutQuart\"] = \"ease-out-quart\";\n EasingType[\"easeOutQuint\"] = \"ease-out-quint\";\n EasingType[\"easeOutExpo\"] = \"ease-out-expo\";\n EasingType[\"easeOutSine\"] = \"ease-out-sine\";\n EasingType[\"easeInOutBack\"] = \"ease-in-out-back\";\n EasingType[\"easeInOutCirc\"] = \"ease-in-out-circ\";\n EasingType[\"easeInOutCubic\"] = \"ease-in-out-cubic\";\n EasingType[\"easeInOutLinear\"] = \"ease-in-out-linear\";\n EasingType[\"easeInOutQuad\"] = \"ease-in-out-quad\";\n EasingType[\"easeInOutQuart\"] = \"ease-in-out-quart\";\n EasingType[\"easeInOutQuint\"] = \"ease-in-out-quint\";\n EasingType[\"easeInOutExpo\"] = \"ease-in-out-expo\";\n EasingType[\"easeInOutSine\"] = \"ease-in-out-sine\";\n})(EasingType || (EasingType = {}));\n","import { init } from \"./init.js\";\nimport { isSsr } from \"./Utils/Utils.js\";\nconst tsParticles = init();\nif (!isSsr()) {\n window.tsParticles = tsParticles;\n}\nexport * from \"./exports.js\";\nexport * from \"./export-types.js\";\nexport { tsParticles };\n","import { jsx as d } from \"react/jsx-runtime\";\nimport { useEffect as m } from \"react\";\nimport { tsParticles as s } from \"@tsparticles/engine\";\nconst f = (t) => {\n const i = t.id ?? \"tsparticles\";\n return m(() => {\n let e;\n return s.load({ id: i, url: t.url, options: t.options }).then((l) => {\n var a;\n e = l, (a = t.particlesLoaded) == null || a.call(t, l);\n }), () => {\n e == null || e.destroy();\n };\n }, [i, t, t.url, t.options]), /* @__PURE__ */ d(\"div\", { id: i, className: t.className });\n};\nexport {\n f as default\n};\n","import { tsParticles as i } from \"@tsparticles/engine\";\nimport o from \"./Particles.js\";\nimport \"react/jsx-runtime\";\nimport \"react\";\nasync function n(t) {\n await t(i);\n}\nexport {\n o as Particles,\n o as default,\n n as initParticlesEngine\n};\n","import { RotateDirection, clamp, getDistance, getDistances, getRandom, getRangeValue, } from \"@tsparticles/engine\";\nconst half = 0.5, double = 2, minVelocity = 0, identity = 1, moveSpeedFactor = 60, minSpinRadius = 0, spinFactor = 0.01, doublePI = Math.PI * double;\nexport function applyDistance(particle) {\n const initialPosition = particle.initialPosition, { dx, dy } = getDistances(initialPosition, particle.position), dxFixed = Math.abs(dx), dyFixed = Math.abs(dy), { maxDistance } = particle.retina, hDistance = maxDistance.horizontal, vDistance = maxDistance.vertical;\n if (!hDistance && !vDistance) {\n return;\n }\n const hasHDistance = (hDistance && dxFixed >= hDistance) ?? false, hasVDistance = (vDistance && dyFixed >= vDistance) ?? false;\n if ((hasHDistance || hasVDistance) && !particle.misplaced) {\n particle.misplaced = (!!hDistance && dxFixed > hDistance) || (!!vDistance && dyFixed > vDistance);\n if (hDistance) {\n particle.velocity.x = particle.velocity.y * half - particle.velocity.x;\n }\n if (vDistance) {\n particle.velocity.y = particle.velocity.x * half - particle.velocity.y;\n }\n }\n else if ((!hDistance || dxFixed < hDistance) && (!vDistance || dyFixed < vDistance) && particle.misplaced) {\n particle.misplaced = false;\n }\n else if (particle.misplaced) {\n const pos = particle.position, vel = particle.velocity;\n if (hDistance &&\n ((pos.x < initialPosition.x && vel.x < minVelocity) || (pos.x > initialPosition.x && vel.x > minVelocity))) {\n vel.x *= -getRandom();\n }\n if (vDistance &&\n ((pos.y < initialPosition.y && vel.y < minVelocity) || (pos.y > initialPosition.y && vel.y > minVelocity))) {\n vel.y *= -getRandom();\n }\n }\n}\nexport function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, reduceFactor, delta) {\n applyPath(particle, delta);\n const gravityOptions = particle.gravity, gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -identity : identity;\n if (moveDrift && moveSpeed) {\n particle.velocity.x += (moveDrift * delta.factor) / (moveSpeedFactor * moveSpeed);\n }\n if (gravityOptions?.enable && moveSpeed) {\n particle.velocity.y +=\n (gravityFactor * (gravityOptions.acceleration * delta.factor)) / (moveSpeedFactor * moveSpeed);\n }\n const decay = particle.moveDecay;\n particle.velocity.multTo(decay);\n const velocity = particle.velocity.mult(moveSpeed);\n if (gravityOptions?.enable &&\n maxSpeed > minVelocity &&\n ((!gravityOptions.inverse && velocity.y >= minVelocity && velocity.y >= maxSpeed) ||\n (gravityOptions.inverse && velocity.y <= minVelocity && velocity.y <= -maxSpeed))) {\n velocity.y = gravityFactor * maxSpeed;\n if (moveSpeed) {\n particle.velocity.y = velocity.y / moveSpeed;\n }\n }\n const zIndexOptions = particle.options.zIndex, zVelocityFactor = (identity - particle.zIndexFactor) ** zIndexOptions.velocityRate;\n velocity.multTo(zVelocityFactor);\n velocity.multTo(reduceFactor);\n const { position } = particle;\n position.addTo(velocity);\n if (moveOptions.vibrate) {\n position.x += Math.sin(position.x * Math.cos(position.y)) * reduceFactor;\n position.y += Math.cos(position.y * Math.sin(position.x)) * reduceFactor;\n }\n}\nexport function spin(particle, moveSpeed, reduceFactor) {\n const container = particle.container;\n if (!particle.spin) {\n return;\n }\n const spinClockwise = particle.spin.direction === RotateDirection.clockwise, updateFunc = {\n x: spinClockwise ? Math.cos : Math.sin,\n y: spinClockwise ? Math.sin : Math.cos,\n };\n particle.position.x =\n particle.spin.center.x + particle.spin.radius * updateFunc.x(particle.spin.angle) * reduceFactor;\n particle.position.y =\n particle.spin.center.y + particle.spin.radius * updateFunc.y(particle.spin.angle) * reduceFactor;\n particle.spin.radius += particle.spin.acceleration * reduceFactor;\n const maxCanvasSize = Math.max(container.canvas.size.width, container.canvas.size.height), halfMaxSize = maxCanvasSize * half;\n if (particle.spin.radius > halfMaxSize) {\n particle.spin.radius = halfMaxSize;\n particle.spin.acceleration *= -identity;\n }\n else if (particle.spin.radius < minSpinRadius) {\n particle.spin.radius = minSpinRadius;\n particle.spin.acceleration *= -identity;\n }\n particle.spin.angle += moveSpeed * spinFactor * (identity - particle.spin.radius / maxCanvasSize);\n}\nexport function applyPath(particle, delta) {\n const particlesOptions = particle.options, pathOptions = particlesOptions.move.path, pathEnabled = pathOptions.enable;\n if (!pathEnabled) {\n return;\n }\n if (particle.lastPathTime <= particle.pathDelay) {\n particle.lastPathTime += delta.value;\n return;\n }\n const path = particle.pathGenerator?.generate(particle, delta);\n if (path) {\n particle.velocity.addTo(path);\n }\n if (pathOptions.clamp) {\n particle.velocity.x = clamp(particle.velocity.x, -identity, identity);\n particle.velocity.y = clamp(particle.velocity.y, -identity, identity);\n }\n particle.lastPathTime -= particle.pathDelay;\n}\nexport function getProximitySpeedFactor(particle) {\n return particle.slow.inRange ? particle.slow.factor : identity;\n}\nexport function initSpin(particle) {\n const container = particle.container, options = particle.options, spinOptions = options.move.spin;\n if (!spinOptions.enable) {\n return;\n }\n const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinFactor = 0.01, spinCenter = {\n x: spinPos.x * spinFactor * container.canvas.size.width,\n y: spinPos.y * spinFactor * container.canvas.size.height,\n }, pos = particle.getPosition(), distance = getDistance(pos, spinCenter), spinAcceleration = getRangeValue(spinOptions.acceleration);\n particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;\n particle.spin = {\n center: spinCenter,\n direction: particle.velocity.x >= minVelocity ? RotateDirection.clockwise : RotateDirection.counterClockwise,\n angle: getRandom() * doublePI,\n radius: distance,\n acceleration: particle.retina.spinAcceleration,\n };\n}\n","import { getRangeMax, getRangeValue } from \"@tsparticles/engine\";\nimport { applyDistance, getProximitySpeedFactor, initSpin, move, spin } from \"./Utils.js\";\nconst diffFactor = 2, defaultSizeFactor = 1, defaultDeltaFactor = 1;\nexport class BaseMover {\n init(particle) {\n const options = particle.options, gravityOptions = options.move.gravity;\n particle.gravity = {\n enable: gravityOptions.enable,\n acceleration: getRangeValue(gravityOptions.acceleration),\n inverse: gravityOptions.inverse,\n };\n initSpin(particle);\n }\n isEnabled(particle) {\n return !particle.destroyed && particle.options.move.enable;\n }\n move(particle, delta) {\n const particleOptions = particle.options, moveOptions = particleOptions.move;\n if (!moveOptions.enable) {\n return;\n }\n const container = particle.container, pxRatio = container.retina.pixelRatio;\n particle.retina.moveSpeed ??= getRangeValue(moveOptions.speed) * pxRatio;\n particle.retina.moveDrift ??= getRangeValue(particle.options.move.drift) * pxRatio;\n const slowFactor = getProximitySpeedFactor(particle), reduceFactor = container.retina.reduceFactor, baseSpeed = particle.retina.moveSpeed, moveDrift = particle.retina.moveDrift, maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor, deltaFactor = delta.factor || defaultDeltaFactor, moveSpeed = (baseSpeed * sizeFactor * slowFactor * deltaFactor) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;\n if (moveOptions.spin.enable) {\n spin(particle, moveSpeed, reduceFactor);\n }\n else {\n move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, reduceFactor, delta);\n }\n applyDistance(particle);\n }\n}\n","import { BaseMover } from \"./BaseMover.js\";\nexport async function loadBaseMover(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addMover(\"base\", () => {\n return Promise.resolve(new BaseMover());\n }, refresh);\n}\n","const double = 2, doublePI = Math.PI * double, minAngle = 0, origin = { x: 0, y: 0 };\nexport function drawCircle(data) {\n const { context, particle, radius } = data;\n if (!particle.circleRange) {\n particle.circleRange = { min: minAngle, max: doublePI };\n }\n const circleRange = particle.circleRange;\n context.arc(origin.x, origin.y, radius, circleRange.min, circleRange.max, false);\n}\n","import { degToRad, isObject } from \"@tsparticles/engine\";\nimport { drawCircle } from \"./Utils.js\";\nconst sides = 12, maxAngle = 360, minAngle = 0;\nexport class CircleDrawer {\n constructor() {\n this.validTypes = [\"circle\"];\n }\n draw(data) {\n drawCircle(data);\n }\n getSidesCount() {\n return sides;\n }\n particleInit(container, particle) {\n const shapeData = particle.shapeData, angle = shapeData?.angle ?? {\n max: maxAngle,\n min: minAngle,\n };\n particle.circleRange = !isObject(angle)\n ? {\n min: minAngle,\n max: degToRad(angle),\n }\n : { min: degToRad(angle.min), max: degToRad(angle.max) };\n }\n}\n","import { CircleDrawer } from \"./CircleDrawer.js\";\nexport async function loadCircleShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new CircleDrawer(), refresh);\n}\n","import { getHslAnimationFromHsl, rangeColorToHsl, updateColor, } from \"@tsparticles/engine\";\nexport class ColorUpdater {\n constructor(container, engine) {\n this._container = container;\n this._engine = engine;\n }\n init(particle) {\n const hslColor = rangeColorToHsl(this._engine, particle.options.color, particle.id, particle.options.reduceDuplicates);\n if (hslColor) {\n particle.color = getHslAnimationFromHsl(hslColor, particle.options.color.animation, this._container.retina.reduceFactor);\n }\n }\n isEnabled(particle) {\n const { h: hAnimation, s: sAnimation, l: lAnimation } = particle.options.color.animation, { color } = particle;\n return (!particle.destroyed &&\n !particle.spawning &&\n ((color?.h.value !== undefined && hAnimation.enable) ||\n (color?.s.value !== undefined && sAnimation.enable) ||\n (color?.l.value !== undefined && lAnimation.enable)));\n }\n update(particle, delta) {\n updateColor(particle.color, delta);\n }\n}\n","import { ColorUpdater } from \"./ColorUpdater.js\";\nexport async function loadColorUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"color\", container => {\n return Promise.resolve(new ColorUpdater(container, engine));\n }, refresh);\n}\n","var RgbIndexes;\n(function (RgbIndexes) {\n RgbIndexes[RgbIndexes[\"r\"] = 1] = \"r\";\n RgbIndexes[RgbIndexes[\"g\"] = 2] = \"g\";\n RgbIndexes[RgbIndexes[\"b\"] = 3] = \"b\";\n RgbIndexes[RgbIndexes[\"a\"] = 4] = \"a\";\n})(RgbIndexes || (RgbIndexes = {}));\nconst shorthandHexRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i, hexRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i, hexRadix = 16, defaultAlpha = 1, alphaFactor = 0xff;\nexport class HexColorManager {\n constructor() {\n this.key = \"hex\";\n this.stringPrefix = \"#\";\n }\n handleColor(color) {\n return this._parseString(color.value);\n }\n handleRangeColor(color) {\n return this._parseString(color.value);\n }\n parseString(input) {\n return this._parseString(input);\n }\n _parseString(hexColor) {\n if (typeof hexColor !== \"string\") {\n return;\n }\n if (!hexColor?.startsWith(this.stringPrefix)) {\n return;\n }\n const hexFixed = hexColor.replace(shorthandHexRegex, (_, r, g, b, a) => {\n return r + r + g + g + b + b + (a !== undefined ? a + a : \"\");\n }), result = hexRegex.exec(hexFixed);\n return result\n ? {\n a: result[RgbIndexes.a] !== undefined\n ? parseInt(result[RgbIndexes.a], hexRadix) / alphaFactor\n : defaultAlpha,\n b: parseInt(result[RgbIndexes.b], hexRadix),\n g: parseInt(result[RgbIndexes.g], hexRadix),\n r: parseInt(result[RgbIndexes.r], hexRadix),\n }\n : undefined;\n }\n}\n","import { HexColorManager } from \"./HexColorManager.js\";\nexport async function loadHexColorPlugin(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addColorManager(new HexColorManager(), refresh);\n}\n","import { getRangeValue, hslToRgb, hslaToRgba, parseAlpha, } from \"@tsparticles/engine\";\nvar HslIndexes;\n(function (HslIndexes) {\n HslIndexes[HslIndexes[\"h\"] = 1] = \"h\";\n HslIndexes[HslIndexes[\"s\"] = 2] = \"s\";\n HslIndexes[HslIndexes[\"l\"] = 3] = \"l\";\n HslIndexes[HslIndexes[\"a\"] = 5] = \"a\";\n})(HslIndexes || (HslIndexes = {}));\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,]\\s*(\\d+)%\\s*[\\s,]\\s*(\\d+)%\\s*([\\s,]\\s*(0|1|0?\\.\\d+|(\\d{1,3})%)\\s*)?\\)/i, result = regex.exec(input), minLength = 4, defaultAlpha = 1, radix = 10;\n return result\n ? hslaToRgba({\n a: result.length > minLength ? parseAlpha(result[HslIndexes.a]) : defaultAlpha,\n h: parseInt(result[HslIndexes.h], radix),\n l: parseInt(result[HslIndexes.l], radix),\n s: parseInt(result[HslIndexes.s], radix),\n })\n : undefined;\n }\n}\n","import { HslColorManager } from \"./HslColorManager.js\";\nexport async function loadHslColorPlugin(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addColorManager(new HslColorManager(), refresh);\n}\n","import { getRandom, getRangeValue, initParticleNumericAnimationValue, percentDenominator, updateAnimation, } from \"@tsparticles/engine\";\nexport class OpacityUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const opacityOptions = particle.options.opacity, pxRatio = 1;\n particle.opacity = initParticleNumericAnimationValue(opacityOptions, pxRatio);\n const opacityAnimation = opacityOptions.animation;\n if (opacityAnimation.enable) {\n particle.opacity.velocity =\n (getRangeValue(opacityAnimation.speed) / percentDenominator) * this.container.retina.reduceFactor;\n if (!opacityAnimation.sync) {\n particle.opacity.velocity *= getRandom();\n }\n }\n }\n isEnabled(particle) {\n const none = 0;\n return (!particle.destroyed &&\n !particle.spawning &&\n !!particle.opacity &&\n particle.opacity.enable &&\n ((particle.opacity.maxLoops ?? none) <= none ||\n ((particle.opacity.maxLoops ?? none) > none &&\n (particle.opacity.loops ?? none) < (particle.opacity.maxLoops ?? none))));\n }\n reset(particle) {\n if (particle.opacity) {\n particle.opacity.time = 0;\n particle.opacity.loops = 0;\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle) || !particle.opacity) {\n return;\n }\n updateAnimation(particle, particle.opacity, true, particle.options.opacity.animation.destroy, delta);\n }\n}\n","import { OpacityUpdater } from \"./OpacityUpdater.js\";\nexport async function loadOpacityUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"opacity\", container => {\n return Promise.resolve(new OpacityUpdater(container));\n }, refresh);\n}\n","import { OutMode, OutModeDirection, getRangeValue } from \"@tsparticles/engine\";\nconst minVelocity = 0, boundsMin = 0;\nexport function bounceHorizontal(data) {\n if ((data.outMode !== OutMode.bounce && data.outMode !== OutMode.split) ||\n (data.direction !== OutModeDirection.left && data.direction !== OutModeDirection.right)) {\n return;\n }\n if (data.bounds.right < boundsMin && data.direction === OutModeDirection.left) {\n data.particle.position.x = data.size + data.offset.x;\n }\n else if (data.bounds.left > data.canvasSize.width && data.direction === OutModeDirection.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 === OutModeDirection.right &&\n data.bounds.right >= data.canvasSize.width &&\n velocity > minVelocity) ||\n (data.direction === OutModeDirection.left && data.bounds.left <= boundsMin && velocity < minVelocity)) {\n const newVelocity = getRangeValue(data.particle.options.bounce.horizontal.value);\n data.particle.velocity.x *= -newVelocity;\n bounced = true;\n }\n if (!bounced) {\n return;\n }\n const minPos = data.offset.x + data.size;\n if (data.bounds.right >= data.canvasSize.width && data.direction === OutModeDirection.right) {\n data.particle.position.x = data.canvasSize.width - minPos;\n }\n else if (data.bounds.left <= boundsMin && data.direction === OutModeDirection.left) {\n data.particle.position.x = minPos;\n }\n if (data.outMode === OutMode.split) {\n data.particle.destroy();\n }\n}\nexport function bounceVertical(data) {\n if ((data.outMode !== OutMode.bounce && data.outMode !== OutMode.split) ||\n (data.direction !== OutModeDirection.bottom && data.direction !== OutModeDirection.top)) {\n return;\n }\n if (data.bounds.bottom < boundsMin && data.direction === OutModeDirection.top) {\n data.particle.position.y = data.size + data.offset.y;\n }\n else if (data.bounds.top > data.canvasSize.height && data.direction === OutModeDirection.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 === OutModeDirection.bottom &&\n data.bounds.bottom >= data.canvasSize.height &&\n velocity > minVelocity) ||\n (data.direction === OutModeDirection.top && data.bounds.top <= boundsMin && velocity < minVelocity)) {\n const newVelocity = getRangeValue(data.particle.options.bounce.vertical.value);\n data.particle.velocity.y *= -newVelocity;\n bounced = true;\n }\n if (!bounced) {\n return;\n }\n const minPos = data.offset.y + data.size;\n if (data.bounds.bottom >= data.canvasSize.height && data.direction === OutModeDirection.bottom) {\n data.particle.position.y = data.canvasSize.height - minPos;\n }\n else if (data.bounds.top <= boundsMin && data.direction === OutModeDirection.top) {\n data.particle.position.y = minPos;\n }\n if (data.outMode === OutMode.split) {\n data.particle.destroy();\n }\n}\n","import { OutMode, calculateBounds, } from \"@tsparticles/engine\";\nimport { bounceHorizontal, bounceVertical } from \"./Utils.js\";\nexport class BounceOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\n OutMode.bounce,\n OutMode.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.values()) {\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 { OutMode, ParticleOutType, Vector, getDistances, isPointInside, } from \"@tsparticles/engine\";\nconst minVelocity = 0;\nexport class DestroyOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [OutMode.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 ParticleOutType.normal:\n case ParticleOutType.outside:\n if (isPointInside(particle.position, container.canvas.size, Vector.origin, particle.getRadius(), direction)) {\n return;\n }\n break;\n case ParticleOutType.inside: {\n const { dx, dy } = getDistances(particle.position, particle.moveCenter), { x: vx, y: vy } = particle.velocity;\n if ((vx < minVelocity && dx > particle.moveCenter.radius) ||\n (vy < minVelocity && dy > particle.moveCenter.radius) ||\n (vx >= minVelocity && dx < -particle.moveCenter.radius) ||\n (vy >= minVelocity && dy < -particle.moveCenter.radius)) {\n return;\n }\n break;\n }\n }\n container.particles.remove(particle, particle.group, true);\n }\n}\n","import { OutMode, OutModeDirection, Vector, isPointInside, } from \"@tsparticles/engine\";\nconst minVelocity = 0;\nexport class NoneOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [OutMode.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 === OutModeDirection.left || direction === OutModeDirection.right)) ??\n (particle.options.move.distance.vertical &&\n (direction === OutModeDirection.top || direction === OutModeDirection.bottom))) {\n return;\n }\n const gravityOptions = particle.options.move.gravity, container = this.container, canvasSize = container.canvas.size, pRadius = particle.getRadius();\n if (!gravityOptions.enable) {\n if ((particle.velocity.y > minVelocity && particle.position.y <= canvasSize.height + pRadius) ||\n (particle.velocity.y < minVelocity && particle.position.y >= -pRadius) ||\n (particle.velocity.x > minVelocity && particle.position.x <= canvasSize.width + pRadius) ||\n (particle.velocity.x < minVelocity && particle.position.x >= -pRadius)) {\n return;\n }\n if (!isPointInside(particle.position, container.canvas.size, Vector.origin, pRadius, direction)) {\n container.particles.remove(particle);\n }\n }\n else {\n const position = particle.position;\n if ((!gravityOptions.inverse &&\n position.y > canvasSize.height + pRadius &&\n direction === OutModeDirection.bottom) ||\n (gravityOptions.inverse && position.y < -pRadius && direction === OutModeDirection.top)) {\n container.particles.remove(particle);\n }\n }\n }\n}\n","import { OutMode, OutModeDirection, ParticleOutType, Vector, calculateBounds, getDistances, getRandom, isPointInside, randomInRange, } from \"@tsparticles/engine\";\nconst minVelocity = 0, minDistance = 0;\nexport class OutOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [OutMode.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 ParticleOutType.inside: {\n const { x: vx, y: vy } = particle.velocity;\n const circVec = Vector.origin;\n circVec.length = particle.moveCenter.radius;\n circVec.angle = particle.velocity.angle + Math.PI;\n circVec.addTo(Vector.create(particle.moveCenter));\n const { dx, dy } = getDistances(particle.position, circVec);\n if ((vx <= minVelocity && dx >= minDistance) ||\n (vy <= minVelocity && dy >= minDistance) ||\n (vx >= minVelocity && dx <= minDistance) ||\n (vy >= minVelocity && dy <= minDistance)) {\n return;\n }\n particle.position.x = Math.floor(randomInRange({\n min: 0,\n max: container.canvas.size.width,\n }));\n particle.position.y = Math.floor(randomInRange({\n min: 0,\n max: container.canvas.size.height,\n }));\n const { dx: newDx, dy: newDy } = getDistances(particle.position, particle.moveCenter);\n particle.direction = Math.atan2(-newDy, -newDx);\n particle.velocity.angle = particle.direction;\n break;\n }\n default: {\n if (isPointInside(particle.position, container.canvas.size, Vector.origin, particle.getRadius(), direction)) {\n return;\n }\n switch (particle.outType) {\n case ParticleOutType.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 ParticleOutType.normal: {\n const warp = particle.options.move.warp, canvasSize = container.canvas.size, newPos = {\n bottom: canvasSize.height + particle.getRadius() + particle.offset.y,\n left: -particle.getRadius() - particle.offset.x,\n right: canvasSize.width + particle.getRadius() + particle.offset.x,\n top: -particle.getRadius() - particle.offset.y,\n }, sizeValue = particle.getRadius(), nextBounds = calculateBounds(particle.position, sizeValue);\n if (direction === OutModeDirection.right &&\n nextBounds.left > canvasSize.width + particle.offset.x) {\n particle.position.x = newPos.left;\n particle.initialPosition.x = particle.position.x;\n if (!warp) {\n particle.position.y = getRandom() * canvasSize.height;\n particle.initialPosition.y = particle.position.y;\n }\n }\n else if (direction === OutModeDirection.left && nextBounds.right < -particle.offset.x) {\n particle.position.x = newPos.right;\n particle.initialPosition.x = particle.position.x;\n if (!warp) {\n particle.position.y = getRandom() * canvasSize.height;\n particle.initialPosition.y = particle.position.y;\n }\n }\n if (direction === OutModeDirection.bottom &&\n nextBounds.top > canvasSize.height + particle.offset.y) {\n if (!warp) {\n particle.position.x = getRandom() * canvasSize.width;\n particle.initialPosition.x = particle.position.x;\n }\n particle.position.y = newPos.top;\n particle.initialPosition.y = particle.position.y;\n }\n else if (direction === OutModeDirection.top && nextBounds.bottom < -particle.offset.y) {\n if (!warp) {\n particle.position.x = getRandom() * canvasSize.width;\n particle.initialPosition.x = particle.position.x;\n }\n particle.position.y = newPos.bottom;\n particle.initialPosition.y = particle.position.y;\n }\n break;\n }\n }\n break;\n }\n }\n }\n}\n","import { OutMode, OutModeDirection, } from \"@tsparticles/engine\";\nimport { BounceOutMode } from \"./BounceOutMode.js\";\nimport { DestroyOutMode } from \"./DestroyOutMode.js\";\nimport { NoneOutMode } from \"./NoneOutMode.js\";\nimport { OutOutMode } from \"./OutOutMode.js\";\nconst checkOutMode = (outModes, outMode) => {\n return (outModes.default === outMode ||\n outModes.bottom === outMode ||\n outModes.left === outMode ||\n outModes.right === outMode ||\n outModes.top === outMode);\n};\nexport class OutOfCanvasUpdater {\n constructor(container) {\n this._addUpdaterIfMissing = (particle, outMode, getUpdater) => {\n const outModes = particle.options.move.outModes;\n if (!this.updaters.has(outMode) && checkOutMode(outModes, outMode)) {\n this.updaters.set(outMode, getUpdater(this.container));\n }\n };\n this._updateOutMode = (particle, delta, outMode, direction) => {\n for (const updater of this.updaters.values()) {\n updater.update(particle, direction, delta, outMode);\n }\n };\n this.container = container;\n this.updaters = new Map();\n }\n init(particle) {\n this._addUpdaterIfMissing(particle, OutMode.bounce, container => new BounceOutMode(container));\n this._addUpdaterIfMissing(particle, OutMode.out, container => new OutOutMode(container));\n this._addUpdaterIfMissing(particle, OutMode.destroy, container => new DestroyOutMode(container));\n this._addUpdaterIfMissing(particle, OutMode.none, container => new NoneOutMode(container));\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, OutModeDirection.bottom);\n this._updateOutMode(particle, delta, outModes.left ?? outModes.default, OutModeDirection.left);\n this._updateOutMode(particle, delta, outModes.right ?? outModes.default, OutModeDirection.right);\n this._updateOutMode(particle, delta, outModes.top ?? outModes.default, OutModeDirection.top);\n }\n}\n","import { OutOfCanvasUpdater } from \"./OutOfCanvasUpdater.js\";\nexport async function loadOutModesUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"outModes\", container => {\n return Promise.resolve(new OutOfCanvasUpdater(container));\n }, refresh);\n}\n","import { getRangeValue, parseAlpha, } from \"@tsparticles/engine\";\nvar RgbIndexes;\n(function (RgbIndexes) {\n RgbIndexes[RgbIndexes[\"r\"] = 1] = \"r\";\n RgbIndexes[RgbIndexes[\"g\"] = 2] = \"g\";\n RgbIndexes[RgbIndexes[\"b\"] = 3] = \"b\";\n RgbIndexes[RgbIndexes[\"a\"] = 5] = \"a\";\n})(RgbIndexes || (RgbIndexes = {}));\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{1,3})\\s*[\\s,]\\s*(\\d{1,3})\\s*[\\s,]\\s*(\\d{1,3})\\s*([\\s,]\\s*(0|1|0?\\.\\d+|(\\d{1,3})%)\\s*)?\\)/i, result = regex.exec(input), radix = 10, minLength = 4, defaultAlpha = 1;\n return result\n ? {\n a: result.length > minLength ? parseAlpha(result[RgbIndexes.a]) : defaultAlpha,\n b: parseInt(result[RgbIndexes.b], radix),\n g: parseInt(result[RgbIndexes.g], radix),\n r: parseInt(result[RgbIndexes.r], radix),\n }\n : undefined;\n }\n}\n","import { RgbColorManager } from \"./RgbColorManager.js\";\nexport async function loadRgbColorPlugin(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addColorManager(new RgbColorManager(), refresh);\n}\n","import { getRandom, percentDenominator, updateAnimation, } from \"@tsparticles/engine\";\nconst minLoops = 0;\nexport class SizeUpdater {\n init(particle) {\n const container = particle.container, sizeOptions = particle.options.size, sizeAnimation = sizeOptions.animation;\n if (sizeAnimation.enable) {\n particle.size.velocity =\n ((particle.retina.sizeAnimationSpeed ?? container.retina.sizeAnimationSpeed) / percentDenominator) *\n container.retina.reduceFactor;\n if (!sizeAnimation.sync) {\n particle.size.velocity *= getRandom();\n }\n }\n }\n isEnabled(particle) {\n return (!particle.destroyed &&\n !particle.spawning &&\n particle.size.enable &&\n ((particle.size.maxLoops ?? minLoops) <= minLoops ||\n ((particle.size.maxLoops ?? minLoops) > minLoops &&\n (particle.size.loops ?? minLoops) < (particle.size.maxLoops ?? minLoops))));\n }\n reset(particle) {\n particle.size.loops = minLoops;\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateAnimation(particle, particle.size, true, particle.options.size.animation.destroy, delta);\n }\n}\n","import { SizeUpdater } from \"./SizeUpdater.js\";\nexport async function loadSizeUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"size\", () => {\n return Promise.resolve(new SizeUpdater());\n }, refresh);\n}\n","import { loadBaseMover } from \"@tsparticles/move-base\";\nimport { loadCircleShape } from \"@tsparticles/shape-circle\";\nimport { loadColorUpdater } from \"@tsparticles/updater-color\";\nimport { loadHexColorPlugin } from \"@tsparticles/plugin-hex-color\";\nimport { loadHslColorPlugin } from \"@tsparticles/plugin-hsl-color\";\nimport { loadOpacityUpdater } from \"@tsparticles/updater-opacity\";\nimport { loadOutModesUpdater } from \"@tsparticles/updater-out-modes\";\nimport { loadRgbColorPlugin } from \"@tsparticles/plugin-rgb-color\";\nimport { loadSizeUpdater } from \"@tsparticles/updater-size\";\nexport async function loadBasic(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await loadHexColorPlugin(engine, false);\n await loadHslColorPlugin(engine, false);\n await loadRgbColorPlugin(engine, false);\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 { EasingType } from \"@tsparticles/engine\";\nexport async function loadEasingQuadPlugin(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addEasing(EasingType.easeInQuad, value => value ** 2, false);\n await engine.addEasing(EasingType.easeOutQuad, value => 1 - (1 - value) ** 2, false);\n await engine.addEasing(EasingType.easeInOutQuad, value => (value < 0.5 ? 2 * value ** 2 : 1 - (-2 * value + 2) ** 2 / 2), false);\n await engine.refresh(refresh);\n}\n","export function drawEmoji(data, image) {\n const { context, opacity } = data, half = 0.5, previousAlpha = context.globalAlpha;\n if (!image) {\n return;\n }\n const diameter = image.width, radius = diameter * half;\n context.globalAlpha = opacity;\n context.drawImage(image, -radius, -radius, diameter, diameter);\n context.globalAlpha = previousAlpha;\n}\n","import { executeOnSingleOrMultiple, getRangeMax, isInArray, itemFromSingleOrMultiple, loadFont, } from \"@tsparticles/engine\";\nimport { drawEmoji } from \"./Utils.js\";\nconst defaultFont = '\"Twemoji Mozilla\", Apple Color Emoji, \"Segoe UI Emoji\", \"Noto Color Emoji\", \"EmojiOne Color\"', noPadding = 0;\nexport class EmojiDrawer {\n constructor() {\n this.validTypes = [\"emoji\"];\n this._emojiShapeDict = new Map();\n }\n destroy() {\n for (const [key, data] of this._emojiShapeDict) {\n if (data instanceof ImageBitmap) {\n data?.close();\n }\n this._emojiShapeDict.delete(key);\n }\n }\n draw(data) {\n const key = data.particle.emojiDataKey;\n if (!key) {\n return;\n }\n const image = this._emojiShapeDict.get(key);\n if (!image) {\n return;\n }\n drawEmoji(data, image);\n }\n async init(container) {\n const options = container.actualOptions, { validTypes } = this;\n if (!validTypes.find(t => isInArray(t, options.particles.shape.type))) {\n return;\n }\n const promises = [loadFont(defaultFont)], shapeOptions = validTypes\n .map(t => options.particles.shape.options[t])\n .find(t => !!t);\n if (shapeOptions) {\n executeOnSingleOrMultiple(shapeOptions, shape => {\n if (shape.font) {\n promises.push(loadFont(shape.font));\n }\n });\n }\n await Promise.all(promises);\n }\n particleDestroy(particle) {\n particle.emojiDataKey = undefined;\n }\n particleInit(_container, particle) {\n const double = 2, shapeData = particle.shapeData;\n if (!shapeData?.value) {\n return;\n }\n const emoji = itemFromSingleOrMultiple(shapeData.value, particle.randomIndexData);\n if (!emoji) {\n return;\n }\n const emojiOptions = typeof emoji === \"string\"\n ? {\n font: shapeData.font ?? defaultFont,\n padding: shapeData.padding ?? noPadding,\n value: emoji,\n }\n : {\n font: defaultFont,\n padding: noPadding,\n ...shapeData,\n ...emoji,\n }, font = emojiOptions.font, value = emojiOptions.value;\n const key = `${value}_${font}`;\n if (this._emojiShapeDict.has(key)) {\n particle.emojiDataKey = key;\n return;\n }\n const padding = emojiOptions.padding * double, maxSize = getRangeMax(particle.size.value), fullSize = maxSize + padding, canvasSize = fullSize * double;\n let image;\n if (typeof OffscreenCanvas !== \"undefined\") {\n const canvas = new OffscreenCanvas(canvasSize, canvasSize), context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(value, fullSize, fullSize);\n image = canvas.transferToImageBitmap();\n }\n else {\n const canvas = document.createElement(\"canvas\");\n canvas.width = canvasSize;\n canvas.height = canvasSize;\n const context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(value, fullSize, fullSize);\n image = canvas;\n }\n this._emojiShapeDict.set(key, image);\n particle.emojiDataKey = key;\n }\n}\n","import { EmojiDrawer } from \"./EmojiDrawer.js\";\nexport async function loadEmojiShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new EmojiDrawer(), refresh);\n}\n","import { Circle, Vector, clamp, getDistances, } from \"@tsparticles/engine\";\nconst minFactor = 1, identity = 1, minRadius = 0;\nfunction processAttract(engine, container, position, attractRadius, area, queryCb) {\n const attractOptions = container.actualOptions.interactivity.modes.attract;\n if (!attractOptions) {\n return;\n }\n const query = container.particles.quadTree.query(area, queryCb);\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(particle.position, position), velocity = attractOptions.speed * attractOptions.factor, attractFactor = clamp(engine.getEasing(attractOptions.easing)(identity - distance / attractRadius) * velocity, minFactor, attractOptions.maxSpeed), normVec = Vector.create(!distance ? velocity : (dx / distance) * attractFactor, !distance ? velocity : (dy / distance) * attractFactor);\n particle.position.subFrom(normVec);\n }\n}\nexport function clickAttract(engine, container, enabledCb) {\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n const { attract } = container;\n if (!attract.finish) {\n if (!attract.count) {\n attract.count = 0;\n }\n attract.count++;\n if (attract.count === container.particles.count) {\n attract.finish = true;\n }\n }\n if (attract.clicking) {\n const mousePos = container.interactivity.mouse.clickPosition, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(engine, container, mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius), (p) => enabledCb(p));\n }\n else if (attract.clicking === false) {\n attract.particles = [];\n }\n}\nexport function hoverAttract(engine, container, enabledCb) {\n const mousePos = container.interactivity.mouse.position, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(engine, container, mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius), (p) => enabledCb(p));\n}\n","import { EasingType, isNull } from \"@tsparticles/engine\";\nexport class Attract {\n constructor() {\n this.distance = 200;\n this.duration = 0.4;\n this.easing = EasingType.easeOutQuad;\n this.factor = 1;\n this.maxSpeed = 50;\n this.speed = 1;\n }\n load(data) {\n if (isNull(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 { ExternalInteractorBase, isInArray, millisecondsToSeconds, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { clickAttract, hoverAttract } from \"./Utils.js\";\nimport { Attract } from \"./Options/Classes/Attract.js\";\nconst attractMode = \"attract\";\nexport class Attractor extends ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._engine = engine;\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n this.handleClickMode = (mode) => {\n const options = this.container.actualOptions, attract = options.interactivity.modes.attract;\n if (!attract || mode !== attractMode) {\n return;\n }\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n container.attract.clicking = true;\n container.attract.count = 0;\n for (const particle of container.attract.particles) {\n if (!this.isEnabled(particle)) {\n continue;\n }\n particle.velocity.setTo(particle.initialVelocity);\n }\n container.attract.particles = [];\n container.attract.finish = false;\n setTimeout(() => {\n if (container.destroyed) {\n return;\n }\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n container.attract.clicking = false;\n }, attract.duration * millisecondsToSeconds);\n };\n }\n clear() {\n }\n init() {\n const container = this.container, attract = container.actualOptions.interactivity.modes.attract;\n if (!attract) {\n return;\n }\n container.retina.attractModeDistance = attract.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, { enable: hoverEnabled, mode: hoverMode } = events.onHover, { enable: clickEnabled, mode: clickMode } = events.onClick;\n if (mouseMoveStatus && hoverEnabled && isInArray(attractMode, hoverMode)) {\n hoverAttract(this._engine, this.container, p => this.isEnabled(p));\n }\n else if (clickEnabled && isInArray(attractMode, clickMode)) {\n clickAttract(this._engine, this.container, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events;\n if ((!mouse.position || !events.onHover.enable) && (!mouse.clickPosition || !events.onClick.enable)) {\n return false;\n }\n const hoverMode = events.onHover.mode, clickMode = events.onClick.mode;\n return isInArray(attractMode, hoverMode) || isInArray(attractMode, clickMode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.attract) {\n options.attract = new Attract();\n }\n for (const source of sources) {\n options.attract.load(source?.attract);\n }\n }\n reset() {\n }\n}\n","import { Attractor } from \"./Attractor.js\";\nexport async function loadExternalAttractInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalAttract\", container => {\n return Promise.resolve(new Attractor(engine, container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Attract.js\";\nexport * from \"./Options/Interfaces/IAttract.js\";\n","import { Circle, DivType, Rectangle, Vector, calculateBounds, circleBounce, circleBounceDataFromParticle, divModeExecute, rectBounce, } from \"@tsparticles/engine\";\nconst squareExp = 2, half = 0.5, halfPI = Math.PI * half, double = 2, toleranceFactor = 10, minRadius = 0;\nfunction processBounce(container, position, radius, area, enabledCb) {\n const query = container.particles.quadTree.query(area, enabledCb);\n for (const particle of query) {\n if (area instanceof Circle) {\n circleBounce(circleBounceDataFromParticle(particle), {\n position,\n radius,\n mass: radius ** squareExp * halfPI,\n velocity: Vector.origin,\n factor: Vector.origin,\n });\n }\n else if (area instanceof Rectangle) {\n rectBounce(particle, calculateBounds(position, radius));\n }\n }\n}\nfunction singleSelectorBounce(container, selector, div, bounceCb) {\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach(item => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === DivType.circle\n ? new Circle(pos.x, pos.y, radius + tolerance)\n : new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);\n bounceCb(pos, radius, area);\n });\n}\nexport function divBounce(container, divs, bounceMode, enabledCb) {\n divModeExecute(bounceMode, divs, (selector, div) => singleSelectorBounce(container, selector, div, (pos, radius, area) => processBounce(container, pos, radius, area, enabledCb)));\n}\nexport function mouseBounce(container, enabledCb) {\n const pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;\n if (!radius || radius < minRadius || !mousePos) {\n return;\n }\n processBounce(container, mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance), enabledCb);\n}\n","import { isNull } from \"@tsparticles/engine\";\nexport class Bounce {\n constructor() {\n this.distance = 200;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n }\n}\n","import { ExternalInteractorBase, isDivModeEnabled, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { divBounce, mouseBounce } from \"./Utils.js\";\nimport { Bounce } from \"./Options/Classes/Bounce.js\";\nconst bounceMode = \"bounce\";\nexport class Bouncer extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, bounce = container.actualOptions.interactivity.modes.bounce;\n if (!bounce) {\n return;\n }\n container.retina.bounceModeDistance = bounce.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, events = options.interactivity.events, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && isInArray(bounceMode, hoverMode)) {\n mouseBounce(this.container, p => this.isEnabled(p));\n }\n else {\n divBounce(this.container, divs, bounceMode, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv;\n return ((!!mouse.position && events.onHover.enable && isInArray(bounceMode, events.onHover.mode)) ||\n isDivModeEnabled(bounceMode, divs));\n }\n loadModeOptions(options, ...sources) {\n if (!options.bounce) {\n options.bounce = new Bounce();\n }\n for (const source of sources) {\n options.bounce.load(source?.bounce);\n }\n }\n reset() {\n }\n}\n","import { Bouncer } from \"./Bouncer.js\";\nexport async function loadExternalBounceInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalBounce\", container => {\n return Promise.resolve(new Bouncer(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Bounce.js\";\nexport * from \"./Options/Interfaces/IBounce.js\";\n","import { OptionsColor, executeOnSingleOrMultiple, isArray, isNull, } 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 (isNull(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 { isNull } from \"@tsparticles/engine\";\nimport { BubbleBase } from \"./BubbleBase.js\";\nexport class BubbleDiv extends BubbleBase {\n constructor() {\n super();\n this.selectors = [];\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n }\n}\n","import { executeOnSingleOrMultiple, isNull, } from \"@tsparticles/engine\";\nimport { BubbleBase } from \"./BubbleBase.js\";\nimport { BubbleDiv } from \"./BubbleDiv.js\";\nexport class Bubble extends BubbleBase {\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n this.divs = executeOnSingleOrMultiple(data.divs, div => {\n const tmp = new BubbleDiv();\n tmp.load(div);\n return tmp;\n });\n }\n}\n","export var ProcessBubbleType;\n(function (ProcessBubbleType) {\n ProcessBubbleType[\"color\"] = \"color\";\n ProcessBubbleType[\"opacity\"] = \"opacity\";\n ProcessBubbleType[\"size\"] = \"size\";\n})(ProcessBubbleType || (ProcessBubbleType = {}));\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, DivType, ExternalInteractorBase, Rectangle, colorMix, divMode, divModeExecute, getDistance, getRangeMax, isDivModeEnabled, isInArray, itemFromSingleOrMultiple, millisecondsToSeconds, mouseLeaveEvent, mouseMoveEvent, rangeColorToHsl, rgbToHsl, } from \"@tsparticles/engine\";\nimport { Bubble } from \"./Options/Classes/Bubble.js\";\nimport { ProcessBubbleType } from \"./Enums.js\";\nimport { calculateBubbleValue } from \"./Utils.js\";\nconst bubbleMode = \"bubble\", minDistance = 0, defaultClickTime = 0, double = 2, defaultOpacity = 1, ratioOffset = 1, defaultBubbleValue = 0, minRatio = 0, half = 0.5, defaultRatio = 1;\nexport class Bubbler extends ExternalInteractorBase {\n constructor(container, engine) {\n super(container);\n this._clickBubble = () => {\n const container = this.container, options = container.actualOptions, mouseClickPos = container.interactivity.mouse.clickPosition, bubbleOptions = options.interactivity.modes.bubble;\n if (!bubbleOptions || !mouseClickPos) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n const distance = container.retina.bubbleModeDistance;\n if (!distance || distance < minDistance) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mouseClickPos, distance, p => this.isEnabled(p)), { bubble } = container;\n for (const particle of query) {\n if (!bubble.clicking) {\n continue;\n }\n particle.bubble.inRange = !bubble.durationEnd;\n const pos = particle.getPosition(), distMouse = getDistance(pos, mouseClickPos), timeSpent = (new Date().getTime() - (container.interactivity.mouse.clickTime ?? defaultClickTime)) /\n millisecondsToSeconds;\n if (timeSpent > bubbleOptions.duration) {\n bubble.durationEnd = true;\n }\n if (timeSpent > bubbleOptions.duration * double) {\n bubble.clicking = false;\n bubble.durationEnd = false;\n }\n const sizeData = {\n bubbleObj: {\n optValue: container.retina.bubbleModeSize,\n value: particle.bubble.radius,\n },\n particlesObj: {\n optValue: getRangeMax(particle.options.size.value) * container.retina.pixelRatio,\n value: particle.size.value,\n },\n type: ProcessBubbleType.size,\n };\n this._process(particle, distMouse, timeSpent, sizeData);\n const opacityData = {\n bubbleObj: {\n optValue: bubbleOptions.opacity,\n value: particle.bubble.opacity,\n },\n particlesObj: {\n optValue: getRangeMax(particle.options.opacity.value),\n value: particle.opacity?.value ?? defaultOpacity,\n },\n type: ProcessBubbleType.opacity,\n };\n this._process(particle, distMouse, timeSpent, opacityData);\n if (!bubble.durationEnd && distMouse <= distance) {\n this._hoverBubbleColor(particle, distMouse);\n }\n else {\n delete particle.bubble.color;\n }\n }\n };\n this._hoverBubble = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, distance = container.retina.bubbleModeDistance;\n if (!distance || distance < minDistance || !mousePos) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mousePos, distance, p => this.isEnabled(p));\n for (const particle of query) {\n particle.bubble.inRange = true;\n const pos = particle.getPosition(), pointDistance = getDistance(pos, mousePos), ratio = ratioOffset - pointDistance / distance;\n if (pointDistance <= distance) {\n if (ratio >= minRatio && container.interactivity.status === mouseMoveEvent) {\n this._hoverBubbleSize(particle, ratio);\n this._hoverBubbleOpacity(particle, ratio);\n this._hoverBubbleColor(particle, ratio);\n }\n }\n else {\n this.reset(particle);\n }\n if (container.interactivity.status === mouseLeaveEvent) {\n this.reset(particle);\n }\n }\n };\n this._hoverBubbleColor = (particle, ratio, divBubble) => {\n const options = this.container.actualOptions, bubbleOptions = divBubble ?? options.interactivity.modes.bubble;\n if (!bubbleOptions) {\n return;\n }\n if (!particle.bubble.finalColor) {\n const modeColor = bubbleOptions.color;\n if (!modeColor) {\n return;\n }\n const bubbleColor = itemFromSingleOrMultiple(modeColor);\n particle.bubble.finalColor = rangeColorToHsl(this._engine, bubbleColor);\n }\n if (!particle.bubble.finalColor) {\n return;\n }\n if (bubbleOptions.mix) {\n particle.bubble.color = undefined;\n const pColor = particle.getFillColor();\n particle.bubble.color = pColor\n ? rgbToHsl(colorMix(pColor, particle.bubble.finalColor, ratioOffset - ratio, ratio))\n : particle.bubble.finalColor;\n }\n else {\n particle.bubble.color = particle.bubble.finalColor;\n }\n };\n this._hoverBubbleOpacity = (particle, ratio, divBubble) => {\n const container = this.container, options = container.actualOptions, modeOpacity = divBubble?.opacity ?? options.interactivity.modes.bubble?.opacity;\n if (!modeOpacity) {\n return;\n }\n const optOpacity = particle.options.opacity.value, pOpacity = particle.opacity?.value ?? defaultOpacity, opacity = calculateBubbleValue(pOpacity, modeOpacity, getRangeMax(optOpacity), ratio);\n if (opacity !== undefined) {\n particle.bubble.opacity = opacity;\n }\n };\n this._hoverBubbleSize = (particle, ratio, divBubble) => {\n const container = this.container, modeSize = divBubble?.size ? divBubble.size * container.retina.pixelRatio : container.retina.bubbleModeSize;\n if (modeSize === undefined) {\n return;\n }\n const optSize = getRangeMax(particle.options.size.value) * container.retina.pixelRatio, pSize = particle.size.value, size = calculateBubbleValue(pSize, modeSize, optSize, ratio);\n if (size !== undefined) {\n particle.bubble.radius = size;\n }\n };\n this._process = (particle, distMouse, timeSpent, data) => {\n const container = this.container, bubbleParam = data.bubbleObj.optValue, options = container.actualOptions, bubbleOptions = options.interactivity.modes.bubble;\n if (!bubbleOptions || bubbleParam === undefined) {\n return;\n }\n const bubbleDuration = bubbleOptions.duration, bubbleDistance = container.retina.bubbleModeDistance, particlesParam = data.particlesObj.optValue, pObjBubble = data.bubbleObj.value, pObj = data.particlesObj.value ?? defaultBubbleValue, type = data.type;\n if (!bubbleDistance || bubbleDistance < minDistance || bubbleParam === particlesParam) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n if (container.bubble.durationEnd) {\n if (pObjBubble) {\n if (type === ProcessBubbleType.size) {\n delete particle.bubble.radius;\n }\n if (type === ProcessBubbleType.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 === ProcessBubbleType.size) {\n particle.bubble.radius = value;\n }\n if (type === ProcessBubbleType.opacity) {\n particle.bubble.opacity = value;\n }\n }\n }\n else {\n if (type === ProcessBubbleType.size) {\n delete particle.bubble.radius;\n }\n if (type === ProcessBubbleType.opacity) {\n delete particle.bubble.opacity;\n }\n }\n }\n };\n this._singleSelectorHover = (delta, selector, div) => {\n const container = this.container, selectors = document.querySelectorAll(selector), bubble = container.actualOptions.interactivity.modes.bubble;\n if (!bubble || !selectors.length) {\n return;\n }\n selectors.forEach(item => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, repulseRadius = elem.offsetWidth * half * pxRatio, area = div.type === DivType.circle\n ? new Circle(pos.x, pos.y, repulseRadius)\n : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio), query = container.particles.quadTree.query(area, p => this.isEnabled(p));\n for (const particle of query) {\n if (!area.contains(particle.getPosition())) {\n continue;\n }\n particle.bubble.inRange = true;\n const divs = bubble.divs, divBubble = divMode(divs, elem);\n if (!particle.bubble.div || particle.bubble.div !== elem) {\n this.clear(particle, delta, true);\n particle.bubble.div = elem;\n }\n this._hoverBubbleSize(particle, defaultRatio, divBubble);\n this._hoverBubbleOpacity(particle, defaultRatio, divBubble);\n this._hoverBubbleColor(particle, defaultRatio, divBubble);\n }\n });\n };\n this._engine = engine;\n if (!container.bubble) {\n container.bubble = {};\n }\n this.handleClickMode = (mode) => {\n if (mode !== bubbleMode) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n container.bubble.clicking = true;\n };\n }\n clear(particle, delta, force) {\n if (particle.bubble.inRange && !force) {\n return;\n }\n delete particle.bubble.div;\n delete particle.bubble.opacity;\n delete particle.bubble.radius;\n delete particle.bubble.color;\n }\n init() {\n const container = this.container, bubble = container.actualOptions.interactivity.modes.bubble;\n if (!bubble) {\n return;\n }\n container.retina.bubbleModeDistance = bubble.distance * container.retina.pixelRatio;\n if (bubble.size !== undefined) {\n container.retina.bubbleModeSize = bubble.size * container.retina.pixelRatio;\n }\n }\n interact(delta) {\n const options = this.container.actualOptions, events = options.interactivity.events, onHover = events.onHover, onClick = events.onClick, hoverEnabled = onHover.enable, hoverMode = onHover.mode, clickEnabled = onClick.enable, clickMode = onClick.mode, divs = events.onDiv;\n if (hoverEnabled && isInArray(bubbleMode, hoverMode)) {\n this._hoverBubble();\n }\n else if (clickEnabled && isInArray(bubbleMode, clickMode)) {\n this._clickBubble();\n }\n else {\n divModeExecute(bubbleMode, divs, (selector, div) => this._singleSelectorHover(delta, selector, div));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, { onClick, onDiv, onHover } = events, divBubble = isDivModeEnabled(bubbleMode, onDiv);\n if (!(divBubble || (onHover.enable && !!mouse.position) || (onClick.enable && mouse.clickPosition))) {\n return false;\n }\n return isInArray(bubbleMode, onHover.mode) || isInArray(bubbleMode, onClick.mode) || divBubble;\n }\n loadModeOptions(options, ...sources) {\n if (!options.bubble) {\n options.bubble = new Bubble();\n }\n for (const source of sources) {\n options.bubble.load(source?.bubble);\n }\n }\n reset(particle) {\n particle.bubble.inRange = false;\n }\n}\n","import { Bubbler } from \"./Bubbler.js\";\nexport async function loadExternalBubbleInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalBubble\", container => {\n return Promise.resolve(new Bubbler(container, engine));\n }, refresh);\n}\nexport * from \"./Options/Classes/BubbleBase.js\";\nexport * from \"./Options/Classes/BubbleDiv.js\";\nexport * from \"./Options/Classes/Bubble.js\";\nexport * from \"./Options/Interfaces/IBubbleBase.js\";\nexport * from \"./Options/Interfaces/IBubbleDiv.js\";\nexport * from \"./Options/Interfaces/IBubble.js\";\n","import { isNull } from \"@tsparticles/engine\";\nexport class ConnectLinks {\n constructor() {\n this.opacity = 0.5;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n","import { isNull } from \"@tsparticles/engine\";\nimport { ConnectLinks } from \"./ConnectLinks.js\";\nexport class Connect {\n constructor() {\n this.distance = 80;\n this.links = new ConnectLinks();\n this.radius = 60;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n this.links.load(data.links);\n if (data.radius !== undefined) {\n this.radius = data.radius;\n }\n }\n}\n","import { clamp, colorMix, drawLine, getStyleFromHsl, getStyleFromRgb, } from \"@tsparticles/engine\";\nconst gradientMin = 0, gradientMax = 1, defaultLinksWidth = 0;\nexport function gradient(context, p1, p2, opacity) {\n const gradStop = Math.floor(p2.getRadius() / p1.getRadius()), color1 = p1.getFillColor(), color2 = p2.getFillColor();\n if (!color1 || !color2) {\n return;\n }\n const sourcePos = p1.getPosition(), destPos = p2.getPosition(), midRgb = colorMix(color1, color2, p1.getRadius(), p2.getRadius()), grad = context.createLinearGradient(sourcePos.x, sourcePos.y, destPos.x, destPos.y);\n grad.addColorStop(gradientMin, getStyleFromHsl(color1, opacity));\n grad.addColorStop(clamp(gradStop, gradientMin, gradientMax), getStyleFromRgb(midRgb, opacity));\n grad.addColorStop(gradientMax, getStyleFromHsl(color2, opacity));\n return grad;\n}\nexport function drawConnectLine(context, width, lineStyle, begin, end) {\n drawLine(context, begin, end);\n context.lineWidth = width;\n context.strokeStyle = lineStyle;\n context.stroke();\n}\nexport function lineStyle(container, ctx, p1, p2) {\n const options = container.actualOptions, connectOptions = options.interactivity.modes.connect;\n if (!connectOptions) {\n return;\n }\n return gradient(ctx, p1, p2, connectOptions.links.opacity);\n}\nexport function drawConnection(container, p1, p2) {\n container.canvas.draw(ctx => {\n const ls = lineStyle(container, ctx, p1, p2);\n if (!ls) {\n return;\n }\n const pos1 = p1.getPosition(), pos2 = p2.getPosition();\n drawConnectLine(ctx, p1.retina.linksWidth ?? defaultLinksWidth, ls, pos1, pos2);\n });\n}\n","import { ExternalInteractorBase, isInArray, } from \"@tsparticles/engine\";\nimport { Connect } from \"./Options/Classes/Connect.js\";\nimport { drawConnection } from \"./Utils.js\";\nconst connectMode = \"connect\", minDistance = 0;\nexport class Connector extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, connect = container.actualOptions.interactivity.modes.connect;\n if (!connect) {\n return;\n }\n container.retina.connectModeDistance = connect.distance * container.retina.pixelRatio;\n container.retina.connectModeRadius = connect.radius * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions;\n if (options.interactivity.events.onHover.enable && container.interactivity.status === \"pointermove\") {\n const mousePos = container.interactivity.mouse.position, { connectModeDistance, connectModeRadius } = container.retina;\n if (!connectModeDistance ||\n connectModeDistance < minDistance ||\n !connectModeRadius ||\n connectModeRadius < minDistance ||\n !mousePos) {\n return;\n }\n const distance = Math.abs(connectModeRadius), query = container.particles.quadTree.queryCircle(mousePos, distance, p => this.isEnabled(p));\n query.forEach((p1, i) => {\n const pos1 = p1.getPosition(), indexOffset = 1;\n for (const p2 of query.slice(i + indexOffset)) {\n const pos2 = p2.getPosition(), distMax = Math.abs(connectModeDistance), xDiff = Math.abs(pos1.x - pos2.x), yDiff = Math.abs(pos1.y - pos2.y);\n if (xDiff < distMax && yDiff < distMax) {\n drawConnection(container, p1, p2);\n }\n }\n });\n }\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n if (!(events.onHover.enable && mouse.position)) {\n return false;\n }\n return isInArray(connectMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.connect) {\n options.connect = new Connect();\n }\n for (const source of sources) {\n options.connect.load(source?.connect);\n }\n }\n reset() {\n }\n}\n","import { Connector } from \"./Connector.js\";\nexport async function loadExternalConnectInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalConnect\", container => {\n return Promise.resolve(new Connector(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Connect.js\";\nexport * from \"./Options/Classes/ConnectLinks.js\";\nexport * from \"./Options/Interfaces/IConnect.js\";\nexport * from \"./Options/Interfaces/IConnectLinks.js\";\n","import { OptionsColor, isNull } 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 (isNull(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 { isNull } from \"@tsparticles/engine\";\nimport { GrabLinks } from \"./GrabLinks.js\";\nexport class Grab {\n constructor() {\n this.distance = 100;\n this.links = new GrabLinks();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n this.links.load(data.links);\n }\n}\n","import { drawLine, getStyleFromRgb } from \"@tsparticles/engine\";\nconst defaultWidth = 0;\nexport function drawGrabLine(context, width, begin, end, colorLine, opacity) {\n drawLine(context, begin, end);\n context.strokeStyle = getStyleFromRgb(colorLine, opacity);\n context.lineWidth = width;\n context.stroke();\n}\nexport function drawGrab(container, particle, lineColor, opacity, mousePos) {\n container.canvas.draw(ctx => {\n const beginPos = particle.getPosition();\n drawGrabLine(ctx, particle.retina.linksWidth ?? defaultWidth, beginPos, mousePos, lineColor, opacity);\n });\n}\n","import { ExternalInteractorBase, getDistance, getLinkColor, getLinkRandomColor, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Grab } from \"./Options/Classes/Grab.js\";\nimport { drawGrab } from \"./Utils.js\";\nconst grabMode = \"grab\", minDistance = 0, minOpacity = 0;\nexport class Grabber extends ExternalInteractorBase {\n constructor(container, engine) {\n super(container);\n this._engine = engine;\n }\n clear() {\n }\n init() {\n const container = this.container, grab = container.actualOptions.interactivity.modes.grab;\n if (!grab) {\n return;\n }\n container.retina.grabModeDistance = grab.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, interactivity = options.interactivity;\n if (!interactivity.modes.grab ||\n !interactivity.events.onHover.enable ||\n container.interactivity.status !== mouseMoveEvent) {\n return;\n }\n const mousePos = container.interactivity.mouse.position;\n if (!mousePos) {\n return;\n }\n const distance = container.retina.grabModeDistance;\n if (!distance || distance < minDistance) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mousePos, distance, p => this.isEnabled(p));\n for (const particle of query) {\n const pos = particle.getPosition(), pointDistance = getDistance(pos, mousePos);\n if (pointDistance > distance) {\n continue;\n }\n const grabLineOptions = interactivity.modes.grab.links, lineOpacity = grabLineOptions.opacity, opacityLine = lineOpacity - (pointDistance * lineOpacity) / distance;\n if (opacityLine <= minOpacity) {\n continue;\n }\n const optColor = grabLineOptions.color ?? particle.options.links?.color;\n if (!container.particles.grabLineColor && optColor) {\n const linksOptions = interactivity.modes.grab.links;\n container.particles.grabLineColor = getLinkRandomColor(this._engine, optColor, linksOptions.blink, linksOptions.consent);\n }\n const colorLine = getLinkColor(particle, undefined, container.particles.grabLineColor);\n if (!colorLine) {\n continue;\n }\n drawGrab(container, particle, colorLine, opacityLine, mousePos);\n }\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n return events.onHover.enable && !!mouse.position && isInArray(grabMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.grab) {\n options.grab = new Grab();\n }\n for (const source of sources) {\n options.grab.load(source?.grab);\n }\n }\n reset() {\n }\n}\n","import { Grabber } from \"./Grabber.js\";\nexport async function loadExternalGrabInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalGrab\", container => {\n return Promise.resolve(new Grabber(container, engine));\n }, refresh);\n}\nexport * from \"./Options/Classes/Grab.js\";\nexport * from \"./Options/Classes/GrabLinks.js\";\nexport * from \"./Options/Interfaces/IGrab.js\";\nexport * from \"./Options/Interfaces/IGrabLinks.js\";\n","import { ExternalInteractorBase } from \"@tsparticles/engine\";\nconst pauseMode = \"pause\";\nexport class Pauser extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n if (mode !== pauseMode) {\n return;\n }\n const container = this.container;\n if (container.animationStatus) {\n container.pause();\n }\n else {\n container.play();\n }\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n reset() {\n }\n}\n","import { Pauser } from \"./Pauser.js\";\nexport async function loadExternalPauseInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalPause\", container => {\n return Promise.resolve(new Pauser(container));\n }, refresh);\n}\n","import { deepExtend, executeOnSingleOrMultiple, isNull, setRangeValue, } from \"@tsparticles/engine\";\nexport class Push {\n constructor() {\n this.default = true;\n this.groups = [];\n this.quantity = 4;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.default !== undefined) {\n this.default = data.default;\n }\n if (data.groups !== undefined) {\n this.groups = data.groups.map(t => t);\n }\n if (!this.groups.length) {\n this.default = true;\n }\n const quantity = data.quantity;\n if (quantity !== undefined) {\n this.quantity = setRangeValue(quantity);\n }\n this.particles = executeOnSingleOrMultiple(data.particles, particles => {\n return deepExtend({}, particles);\n });\n }\n}\n","import { ExternalInteractorBase, deepExtend, getRangeValue, itemFromArray, itemFromSingleOrMultiple, } from \"@tsparticles/engine\";\nimport { Push } from \"./Options/Classes/Push.js\";\nconst pushMode = \"push\", minQuantity = 0;\nexport class Pusher extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n if (mode !== pushMode) {\n return;\n }\n const container = this.container, options = container.actualOptions, pushOptions = options.interactivity.modes.push;\n if (!pushOptions) {\n return;\n }\n const quantity = getRangeValue(pushOptions.quantity);\n if (quantity <= minQuantity) {\n return;\n }\n const group = itemFromArray([undefined, ...pushOptions.groups]), groupOptions = group !== undefined ? container.actualOptions.particles.groups[group] : undefined, particlesOptions = itemFromSingleOrMultiple(pushOptions.particles), overrideOptions = deepExtend(groupOptions, particlesOptions);\n void container.particles.push(quantity, container.interactivity.mouse, overrideOptions, group);\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n loadModeOptions(options, ...sources) {\n if (!options.push) {\n options.push = new Push();\n }\n for (const source of sources) {\n options.push.load(source?.push);\n }\n }\n reset() {\n }\n}\n","import { Pusher } from \"./Pusher.js\";\nexport async function loadExternalPushInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalPush\", container => {\n return Promise.resolve(new Pusher(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Push.js\";\nexport * from \"./Options/Interfaces/IPush.js\";\n","import { isNull, setRangeValue } from \"@tsparticles/engine\";\nexport class Remove {\n constructor() {\n this.quantity = 2;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n const quantity = data.quantity;\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.js\";\nconst removeMode = \"remove\";\nexport class Remover extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this.handleClickMode = (mode) => {\n const container = this.container, options = container.actualOptions;\n if (!options.interactivity.modes.remove || mode !== removeMode) {\n return;\n }\n const removeNb = getRangeValue(options.interactivity.modes.remove.quantity);\n container.particles.removeQuantity(removeNb);\n };\n }\n clear() {\n }\n init() {\n }\n interact() {\n }\n isEnabled() {\n return true;\n }\n loadModeOptions(options, ...sources) {\n if (!options.remove) {\n options.remove = new Remove();\n }\n for (const source of sources) {\n options.remove.load(source?.remove);\n }\n }\n reset() {\n }\n}\n","import { Remover } from \"./Remover.js\";\nexport async function loadExternalRemoveInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalRemove\", container => {\n return Promise.resolve(new Remover(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Remove.js\";\nexport * from \"./Options/Interfaces/IRemove.js\";\n","import { EasingType, isNull } from \"@tsparticles/engine\";\nexport 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 = EasingType.easeOutQuad;\n }\n load(data) {\n if (isNull(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 { isNull } from \"@tsparticles/engine\";\nimport { RepulseBase } from \"./RepulseBase.js\";\nexport class RepulseDiv extends RepulseBase {\n constructor() {\n super();\n this.selectors = [];\n }\n load(data) {\n super.load(data);\n if (isNull(data)) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n }\n}\n","import { executeOnSingleOrMultiple, isNull, } from \"@tsparticles/engine\";\nimport { RepulseBase } from \"./RepulseBase.js\";\nimport { RepulseDiv } from \"./RepulseDiv.js\";\nexport class Repulse extends RepulseBase {\n load(data) {\n super.load(data);\n if (isNull(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, DivType, ExternalInteractorBase, Rectangle, Vector, clamp, divMode, divModeExecute, getDistances, isDivModeEnabled, isInArray, millisecondsToSeconds, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Repulse } from \"./Options/Classes/Repulse.js\";\nconst repulseMode = \"repulse\", minDistance = 0, repulseRadiusFactor = 6, repulseRadiusPower = 3, squarePower = 2, minRadius = 0, minSpeed = 0, easingOffset = 1, half = 0.5;\nexport class Repulser extends ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._clickRepulse = () => {\n const container = this.container, repulseOptions = container.actualOptions.interactivity.modes.repulse;\n if (!repulseOptions) {\n return;\n }\n const repulse = container.repulse ?? { particles: [] };\n if (!repulse.finish) {\n if (!repulse.count) {\n repulse.count = 0;\n }\n repulse.count++;\n if (repulse.count === container.particles.count) {\n repulse.finish = true;\n }\n }\n if (repulse.clicking) {\n const repulseDistance = container.retina.repulseModeDistance;\n if (!repulseDistance || repulseDistance < minDistance) {\n return;\n }\n const repulseRadius = Math.pow(repulseDistance / repulseRadiusFactor, repulseRadiusPower), mouseClickPos = container.interactivity.mouse.clickPosition;\n if (mouseClickPos === undefined) {\n return;\n }\n const range = new Circle(mouseClickPos.x, mouseClickPos.y, repulseRadius), query = container.particles.quadTree.query(range, p => this.isEnabled(p));\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(mouseClickPos, particle.position), d = distance ** squarePower, velocity = repulseOptions.speed, force = (-repulseRadius * velocity) / d;\n if (d <= repulseRadius) {\n repulse.particles.push(particle);\n const vect = Vector.create(dx, dy);\n vect.length = force;\n particle.velocity.setTo(vect);\n }\n }\n }\n else if (repulse.clicking === false) {\n for (const particle of repulse.particles) {\n particle.velocity.setTo(particle.initialVelocity);\n }\n repulse.particles = [];\n }\n };\n this._hoverRepulse = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, repulseRadius = container.retina.repulseModeDistance;\n if (!repulseRadius || repulseRadius < minRadius || !mousePos) {\n return;\n }\n this._processRepulse(mousePos, repulseRadius, new Circle(mousePos.x, mousePos.y, repulseRadius));\n };\n this._processRepulse = (position, repulseRadius, area, divRepulse) => {\n const container = this.container, query = container.particles.quadTree.query(area, p => this.isEnabled(p)), repulseOptions = container.actualOptions.interactivity.modes.repulse;\n if (!repulseOptions) {\n return;\n }\n const { easing, speed, factor, maxSpeed } = repulseOptions, easingFunc = this._engine.getEasing(easing), velocity = (divRepulse?.speed ?? speed) * factor;\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(particle.position, position), repulseFactor = clamp(easingFunc(easingOffset - distance / repulseRadius) * velocity, minSpeed, maxSpeed), normVec = Vector.create(!distance ? velocity : (dx / distance) * repulseFactor, !distance ? velocity : (dy / distance) * repulseFactor);\n particle.position.addTo(normVec);\n }\n };\n this._singleSelectorRepulse = (selector, div) => {\n const container = this.container, repulse = container.actualOptions.interactivity.modes.repulse;\n if (!repulse) {\n return;\n }\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach(item => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,\n }, repulseRadius = elem.offsetWidth * half * pxRatio, area = div.type === DivType.circle\n ? new Circle(pos.x, pos.y, repulseRadius)\n : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio), divs = repulse.divs, divRepulse = divMode(divs, elem);\n this._processRepulse(pos, repulseRadius, area, divRepulse);\n });\n };\n this._engine = engine;\n if (!container.repulse) {\n container.repulse = { particles: [] };\n }\n this.handleClickMode = (mode) => {\n const options = this.container.actualOptions, repulseOpts = options.interactivity.modes.repulse;\n if (!repulseOpts || mode !== repulseMode) {\n return;\n }\n if (!container.repulse) {\n container.repulse = { particles: [] };\n }\n const repulse = container.repulse;\n repulse.clicking = true;\n repulse.count = 0;\n for (const particle of container.repulse.particles) {\n if (!this.isEnabled(particle)) {\n continue;\n }\n particle.velocity.setTo(particle.initialVelocity);\n }\n repulse.particles = [];\n repulse.finish = false;\n setTimeout(() => {\n if (container.destroyed) {\n return;\n }\n repulse.clicking = false;\n }, repulseOpts.duration * millisecondsToSeconds);\n };\n }\n clear() {\n }\n init() {\n const container = this.container, repulse = container.actualOptions.interactivity.modes.repulse;\n if (!repulse) {\n return;\n }\n container.retina.repulseModeDistance = repulse.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, hover = events.onHover, hoverEnabled = hover.enable, hoverMode = hover.mode, click = events.onClick, clickEnabled = click.enable, clickMode = click.mode, divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && isInArray(repulseMode, hoverMode)) {\n this._hoverRepulse();\n }\n else if (clickEnabled && isInArray(repulseMode, clickMode)) {\n this._clickRepulse();\n }\n else {\n divModeExecute(repulseMode, divs, (selector, div) => this._singleSelectorRepulse(selector, div));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv, hover = events.onHover, click = events.onClick, divRepulse = isDivModeEnabled(repulseMode, divs);\n if (!(divRepulse || (hover.enable && !!mouse.position) || (click.enable && mouse.clickPosition))) {\n return false;\n }\n const hoverMode = hover.mode, clickMode = click.mode;\n return isInArray(repulseMode, hoverMode) || isInArray(repulseMode, clickMode) || divRepulse;\n }\n loadModeOptions(options, ...sources) {\n if (!options.repulse) {\n options.repulse = new Repulse();\n }\n for (const source of sources) {\n options.repulse.load(source?.repulse);\n }\n }\n reset() {\n }\n}\n","import { Repulser } from \"./Repulser.js\";\nexport async function loadExternalRepulseInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalRepulse\", container => {\n return Promise.resolve(new Repulser(engine, container));\n }, refresh);\n}\nexport * from \"./Options/Classes/RepulseBase.js\";\nexport * from \"./Options/Classes/RepulseDiv.js\";\nexport * from \"./Options/Classes/Repulse.js\";\nexport * from \"./Options/Interfaces/IRepulseBase.js\";\nexport * from \"./Options/Interfaces/IRepulseDiv.js\";\nexport * from \"./Options/Interfaces/IRepulse.js\";\n","import { isNull } from \"@tsparticles/engine\";\nexport class Slow {\n constructor() {\n this.factor = 3;\n this.radius = 200;\n }\n load(data) {\n if (isNull(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.js\";\nconst slowMode = \"slow\", minRadius = 0;\nexport class Slower extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear(particle, delta, force) {\n if (particle.slow.inRange && !force) {\n return;\n }\n particle.slow.factor = 1;\n }\n init() {\n const container = this.container, slow = container.actualOptions.interactivity.modes.slow;\n if (!slow) {\n return;\n }\n container.retina.slowModeRadius = slow.radius * container.retina.pixelRatio;\n }\n interact() {\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n return events.onHover.enable && !!mouse.position && isInArray(slowMode, events.onHover.mode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.slow) {\n options.slow = new Slow();\n }\n for (const source of sources) {\n options.slow.load(source?.slow);\n }\n }\n reset(particle) {\n particle.slow.inRange = false;\n const container = this.container, options = container.actualOptions, mousePos = container.interactivity.mouse.position, radius = container.retina.slowModeRadius, slowOptions = options.interactivity.modes.slow;\n if (!slowOptions || !radius || radius < minRadius || !mousePos) {\n return;\n }\n const particlePos = particle.getPosition(), dist = getDistance(mousePos, particlePos), proximityFactor = dist / radius, slowFactor = slowOptions.factor, { slow } = particle;\n if (dist > radius) {\n return;\n }\n slow.inRange = true;\n slow.factor = proximityFactor / slowFactor;\n }\n}\n","import { Slower } from \"./Slower.js\";\nexport async function loadExternalSlowInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"externalSlow\", container => {\n return Promise.resolve(new Slower(container));\n }, refresh);\n}\nexport * from \"./Options/Classes/Slow.js\";\nexport * from \"./Options/Interfaces/ISlow.js\";\n","import { errorPrefix, getLogger, getStyleFromHsl } from \"@tsparticles/engine\";\nconst stringStart = 0, defaultOpacity = 1;\nconst currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d.]+%?\\))|currentcolor/gi;\nfunction replaceColorSvg(imageShape, color, opacity) {\n const { svgData } = imageShape;\n if (!svgData) {\n return \"\";\n }\n const colorStyle = getStyleFromHsl(color, opacity);\n if (svgData.includes(\"fill\")) {\n return svgData.replace(currentColorRegex, () => colorStyle);\n }\n const preFillIndex = svgData.indexOf(\">\");\n return `${svgData.substring(stringStart, preFillIndex)} fill=\"${colorStyle}\"${svgData.substring(preFillIndex)}`;\n}\nexport async function loadImage(image) {\n return new Promise((resolve) => {\n image.loading = true;\n const img = new Image();\n image.element = img;\n img.addEventListener(\"load\", () => {\n image.loading = false;\n resolve();\n });\n img.addEventListener(\"error\", () => {\n image.element = undefined;\n image.error = true;\n image.loading = false;\n getLogger().error(`${errorPrefix} loading image: ${image.source}`);\n resolve();\n });\n img.src = image.source;\n });\n}\nexport async function downloadSvgImage(image) {\n if (image.type !== \"svg\") {\n await loadImage(image);\n return;\n }\n image.loading = true;\n const response = await fetch(image.source);\n if (!response.ok) {\n getLogger().error(`${errorPrefix} Image not found`);\n image.error = true;\n }\n else {\n image.svgData = await response.text();\n }\n image.loading = false;\n}\nexport function replaceImageColor(image, imageData, color, particle) {\n const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? defaultOpacity), imageRes = {\n color,\n gif: imageData.gif,\n data: {\n ...image,\n svgData: svgColoredData,\n },\n loaded: false,\n ratio: imageData.width / imageData.height,\n replaceColor: imageData.replaceColor,\n source: imageData.src,\n };\n return new Promise(resolve => {\n const svg = new Blob([svgColoredData], { type: \"image/svg+xml\" }), domUrl = URL || window.URL || window.webkitURL || window, url = domUrl.createObjectURL(svg), img = new Image();\n img.addEventListener(\"load\", () => {\n imageRes.loaded = true;\n imageRes.element = img;\n resolve(imageRes);\n domUrl.revokeObjectURL(url);\n });\n const errorHandler = async () => {\n domUrl.revokeObjectURL(url);\n const img2 = {\n ...image,\n error: false,\n loading: true,\n };\n await loadImage(img2);\n imageRes.loaded = true;\n imageRes.element = img2.element;\n resolve(imageRes);\n };\n img.addEventListener(\"error\", () => void errorHandler());\n img.src = url;\n });\n}\n","export const InterlaceOffsets = [0, 4, 2, 1];\nexport const InterlaceSteps = [8, 8, 4, 2];\n","export class ByteStream {\n constructor(bytes) {\n this.pos = 0;\n this.data = new Uint8ClampedArray(bytes);\n }\n getString(count) {\n const slice = this.data.slice(this.pos, this.pos + count);\n this.pos += slice.length;\n return slice.reduce((acc, curr) => acc + String.fromCharCode(curr), \"\");\n }\n nextByte() {\n return this.data[this.pos++];\n }\n nextTwoBytes() {\n const increment = 2, previous = 1, shift = 8;\n this.pos += increment;\n return this.data[this.pos - increment] + (this.data[this.pos - previous] << shift);\n }\n readSubBlocks() {\n let blockString = \"\", size = 0;\n const minCount = 0, emptySize = 0;\n do {\n size = this.data[this.pos++];\n for (let count = size; --count >= minCount; blockString += String.fromCharCode(this.data[this.pos++])) {\n }\n } while (size !== emptySize);\n return blockString;\n }\n readSubBlocksBin() {\n let size = this.data[this.pos], len = 0;\n const emptySize = 0, increment = 1;\n for (let offset = 0; size !== emptySize; offset += size + increment, size = this.data[this.pos + offset]) {\n len += size;\n }\n const blockData = new Uint8Array(len);\n size = this.data[this.pos++];\n for (let i = 0; size !== emptySize; size = this.data[this.pos++]) {\n for (let count = size; --count >= emptySize; blockData[i++] = this.data[this.pos++]) {\n }\n }\n return blockData;\n }\n skipSubBlocks() {\n for (const increment = 1, noData = 0; this.data[this.pos] !== noData; this.pos += this.data[this.pos] + increment) {\n }\n this.pos++;\n }\n}\n","export var DisposalMethod;\n(function (DisposalMethod) {\n DisposalMethod[DisposalMethod[\"Replace\"] = 0] = \"Replace\";\n DisposalMethod[DisposalMethod[\"Combine\"] = 1] = \"Combine\";\n DisposalMethod[DisposalMethod[\"RestoreBackground\"] = 2] = \"RestoreBackground\";\n DisposalMethod[DisposalMethod[\"RestorePrevious\"] = 3] = \"RestorePrevious\";\n DisposalMethod[DisposalMethod[\"UndefinedA\"] = 4] = \"UndefinedA\";\n DisposalMethod[DisposalMethod[\"UndefinedB\"] = 5] = \"UndefinedB\";\n DisposalMethod[DisposalMethod[\"UndefinedC\"] = 6] = \"UndefinedC\";\n DisposalMethod[DisposalMethod[\"UndefinedD\"] = 7] = \"UndefinedD\";\n})(DisposalMethod || (DisposalMethod = {}));\n","export var GIFDataHeaders;\n(function (GIFDataHeaders) {\n GIFDataHeaders[GIFDataHeaders[\"Extension\"] = 33] = \"Extension\";\n GIFDataHeaders[GIFDataHeaders[\"ApplicationExtension\"] = 255] = \"ApplicationExtension\";\n GIFDataHeaders[GIFDataHeaders[\"GraphicsControlExtension\"] = 249] = \"GraphicsControlExtension\";\n GIFDataHeaders[GIFDataHeaders[\"PlainTextExtension\"] = 1] = \"PlainTextExtension\";\n GIFDataHeaders[GIFDataHeaders[\"CommentExtension\"] = 254] = \"CommentExtension\";\n GIFDataHeaders[GIFDataHeaders[\"Image\"] = 44] = \"Image\";\n GIFDataHeaders[GIFDataHeaders[\"EndOfFile\"] = 59] = \"EndOfFile\";\n})(GIFDataHeaders || (GIFDataHeaders = {}));\n","import { loadImage } from \"../Utils.js\";\nimport { InterlaceOffsets, InterlaceSteps } from \"./Constants.js\";\nimport { ByteStream } from \"./ByteStream.js\";\nimport { DisposalMethod } from \"./Enums/DisposalMethod.js\";\nimport { GIFDataHeaders } from \"./Types/GIFDataHeaders.js\";\nconst origin = {\n x: 0,\n y: 0,\n}, defaultFrame = 0, half = 0.5, initialTime = 0, firstIndex = 0, defaultLoopCount = 0;\nfunction parseColorTable(byteStream, count) {\n const colors = [];\n for (let i = 0; i < count; i++) {\n colors.push({\n r: byteStream.data[byteStream.pos],\n g: byteStream.data[byteStream.pos + 1],\n b: byteStream.data[byteStream.pos + 2],\n });\n byteStream.pos += 3;\n }\n return colors;\n}\nfunction parseExtensionBlock(byteStream, gif, getFrameIndex, getTransparencyIndex) {\n switch (byteStream.nextByte()) {\n case GIFDataHeaders.GraphicsControlExtension: {\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 GIFDataHeaders.ApplicationExtension: {\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 GIFDataHeaders.CommentExtension: {\n gif.comments.push([getFrameIndex(false), byteStream.readSubBlocks()]);\n break;\n }\n case GIFDataHeaders.PlainTextExtension: {\n if (gif.globalColorTable.length === 0) {\n throw new EvalError(\"plain text extension without global color table\");\n }\n byteStream.pos++;\n gif.frames[getFrameIndex(false)].plainTextData = {\n left: byteStream.nextTwoBytes(),\n top: byteStream.nextTwoBytes(),\n width: byteStream.nextTwoBytes(),\n height: byteStream.nextTwoBytes(),\n charSize: {\n width: byteStream.nextTwoBytes(),\n height: byteStream.nextTwoBytes(),\n },\n foregroundColor: byteStream.nextByte(),\n backgroundColor: byteStream.nextByte(),\n text: byteStream.readSubBlocks(),\n };\n break;\n }\n default:\n byteStream.skipSubBlocks();\n break;\n }\n}\nasync function parseImageBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback) {\n const frame = gif.frames[getFrameIndex(true)];\n frame.left = byteStream.nextTwoBytes();\n frame.top = byteStream.nextTwoBytes();\n frame.width = byteStream.nextTwoBytes();\n frame.height = byteStream.nextTwoBytes();\n const packedByte = byteStream.nextByte(), localColorTableFlag = (packedByte & 0x80) === 0x80, interlacedFlag = (packedByte & 0x40) === 0x40;\n frame.sortFlag = (packedByte & 0x20) === 0x20;\n frame.reserved = (packedByte & 0x18) >>> 3;\n const localColorCount = 1 << ((packedByte & 7) + 1);\n if (localColorTableFlag) {\n frame.localColorTable = parseColorTable(byteStream, localColorCount);\n }\n const getColor = (index) => {\n const { r, g, b } = (localColorTableFlag ? frame.localColorTable : gif.globalColorTable)[index];\n if (index !== getTransparencyIndex(null)) {\n return { r, g, b, a: 255 };\n }\n return { r, g, b, a: avgAlpha ? ~~((r + g + b) / 3) : 0 };\n };\n const image = (() => {\n try {\n return new ImageData(frame.width, frame.height, { colorSpace: \"srgb\" });\n }\n catch (error) {\n if (error instanceof DOMException && error.name === \"IndexSizeError\") {\n return null;\n }\n throw error;\n }\n })();\n if (image == null) {\n throw new EvalError(\"GIF frame size is to large\");\n }\n const minCodeSize = byteStream.nextByte(), imageData = byteStream.readSubBlocksBin(), clearCode = 1 << minCodeSize;\n const readBits = (pos, len) => {\n const bytePos = pos >>> 3, bitPos = pos & 7;\n return (((imageData[bytePos] + (imageData[bytePos + 1] << 8) + (imageData[bytePos + 2] << 16)) &\n (((1 << len) - 1) << bitPos)) >>>\n bitPos);\n };\n if (interlacedFlag) {\n for (let code = 0, size = minCodeSize + 1, pos = 0, dic = [[0]], pass = 0; pass < 4; pass++) {\n if (InterlaceOffsets[pass] < frame.height) {\n let pixelPos = 0, lineIndex = 0, exit = false;\n while (!exit) {\n const last = code;\n code = readBits(pos, size);\n pos += size + 1;\n if (code === clearCode) {\n size = minCodeSize + 1;\n dic.length = clearCode + 2;\n for (let i = 0; i < dic.length; i++) {\n dic[i] = i < clearCode ? [i] : [];\n }\n }\n else {\n if (code >= dic.length) {\n dic.push(dic[last].concat(dic[last][0]));\n }\n else if (last !== clearCode) {\n dic.push(dic[last].concat(dic[code][0]));\n }\n for (const item of dic[code]) {\n const { r, g, b, a } = getColor(item);\n image.data.set([r, g, b, a], InterlaceOffsets[pass] * frame.width +\n InterlaceSteps[pass] * lineIndex +\n (pixelPos % (frame.width * 4)));\n pixelPos += 4;\n }\n if (dic.length === 1 << size && size < 0xc) {\n size++;\n }\n }\n if (pixelPos === frame.width * 4 * (lineIndex + 1)) {\n lineIndex++;\n if (InterlaceOffsets[pass] + InterlaceSteps[pass] * lineIndex >= frame.height) {\n exit = true;\n }\n }\n }\n }\n progressCallback?.(byteStream.pos / (byteStream.data.length - 1), getFrameIndex(false) + 1, image, { x: frame.left, y: frame.top }, { width: gif.width, height: gif.height });\n }\n frame.image = image;\n frame.bitmap = await createImageBitmap(image);\n }\n else {\n let code = 0, size = minCodeSize + 1, pos = 0, pixelPos = -4, exit = false;\n const dic = [[0]];\n while (!exit) {\n const last = code;\n code = readBits(pos, size);\n pos += size;\n if (code === clearCode) {\n size = minCodeSize + 1;\n dic.length = clearCode + 2;\n for (let i = 0; i < dic.length; i++) {\n dic[i] = i < clearCode ? [i] : [];\n }\n }\n else {\n if (code === clearCode + 1) {\n exit = true;\n break;\n }\n if (code >= dic.length) {\n dic.push(dic[last].concat(dic[last][0]));\n }\n else if (last !== clearCode) {\n dic.push(dic[last].concat(dic[code][0]));\n }\n for (const item of dic[code]) {\n const { r, g, b, a } = getColor(item);\n image.data.set([r, g, b, a], (pixelPos += 4));\n }\n if (dic.length >= 1 << size && size < 0xc) {\n size++;\n }\n }\n }\n frame.image = image;\n frame.bitmap = await createImageBitmap(image);\n progressCallback?.((byteStream.pos + 1) / byteStream.data.length, getFrameIndex(false) + 1, frame.image, { x: frame.left, y: frame.top }, { width: gif.width, height: gif.height });\n }\n}\nasync function parseBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback) {\n switch (byteStream.nextByte()) {\n case GIFDataHeaders.EndOfFile:\n return true;\n case GIFDataHeaders.Image:\n await parseImageBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback);\n break;\n case GIFDataHeaders.Extension:\n parseExtensionBlock(byteStream, gif, getFrameIndex, getTransparencyIndex);\n break;\n default:\n throw new EvalError(\"undefined block found\");\n }\n return false;\n}\nexport function getGIFLoopAmount(gif) {\n for (const extension of gif.applicationExtensions) {\n if (extension.identifier + extension.authenticationCode !== \"NETSCAPE2.0\") {\n continue;\n }\n return extension.data[1] + (extension.data[2] << 8);\n }\n return NaN;\n}\nexport async function decodeGIF(gifURL, progressCallback, avgAlpha) {\n if (!avgAlpha)\n avgAlpha = false;\n const res = await fetch(gifURL);\n if (!res.ok && res.status === 404) {\n throw new EvalError(\"file not found\");\n }\n const buffer = await res.arrayBuffer();\n const gif = {\n width: 0,\n height: 0,\n totalTime: 0,\n colorRes: 0,\n pixelAspectRatio: 0,\n frames: [],\n sortFlag: false,\n globalColorTable: [],\n backgroundImage: new ImageData(1, 1, { colorSpace: \"srgb\" }),\n comments: [],\n applicationExtensions: [],\n }, byteStream = new ByteStream(new Uint8ClampedArray(buffer));\n if (byteStream.getString(6) !== \"GIF89a\") {\n throw new Error(\"not a supported GIF file\");\n }\n gif.width = byteStream.nextTwoBytes();\n gif.height = byteStream.nextTwoBytes();\n const packedByte = byteStream.nextByte(), globalColorTableFlag = (packedByte & 0x80) === 0x80;\n gif.colorRes = (packedByte & 0x70) >>> 4;\n gif.sortFlag = (packedByte & 8) === 8;\n const globalColorCount = 1 << ((packedByte & 7) + 1), backgroundColorIndex = byteStream.nextByte();\n gif.pixelAspectRatio = byteStream.nextByte();\n if (gif.pixelAspectRatio !== 0) {\n gif.pixelAspectRatio = (gif.pixelAspectRatio + 0xf) / 0x40;\n }\n if (globalColorTableFlag) {\n gif.globalColorTable = parseColorTable(byteStream, globalColorCount);\n }\n const backgroundImage = (() => {\n try {\n return new ImageData(gif.width, gif.height, { colorSpace: \"srgb\" });\n }\n catch (error) {\n if (error instanceof DOMException && error.name === \"IndexSizeError\") {\n return null;\n }\n throw error;\n }\n })();\n if (backgroundImage == null) {\n throw new Error(\"GIF frame size is to large\");\n }\n const { r, g, b } = gif.globalColorTable[backgroundColorIndex];\n backgroundImage.data.set(globalColorTableFlag ? [r, g, b, 255] : [0, 0, 0, 0]);\n for (let i = 4; i < backgroundImage.data.length; i *= 2) {\n backgroundImage.data.copyWithin(i, 0, i);\n }\n gif.backgroundImage = backgroundImage;\n let frameIndex = -1, incrementFrameIndex = true, transparencyIndex = -1;\n const getframeIndex = (increment) => {\n if (increment) {\n incrementFrameIndex = true;\n }\n return frameIndex;\n };\n const getTransparencyIndex = (newValue) => {\n if (newValue != null) {\n transparencyIndex = newValue;\n }\n return transparencyIndex;\n };\n try {\n do {\n if (incrementFrameIndex) {\n gif.frames.push({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n disposalMethod: DisposalMethod.Replace,\n image: new ImageData(1, 1, { colorSpace: \"srgb\" }),\n plainTextData: null,\n userInputDelayFlag: false,\n delayTime: 0,\n sortFlag: false,\n localColorTable: [],\n reserved: 0,\n GCreserved: 0,\n });\n frameIndex++;\n transparencyIndex = -1;\n incrementFrameIndex = false;\n }\n } while (!(await parseBlock(byteStream, gif, avgAlpha, getframeIndex, getTransparencyIndex, progressCallback)));\n gif.frames.length--;\n for (const frame of gif.frames) {\n if (frame.userInputDelayFlag && frame.delayTime === 0) {\n gif.totalTime = Infinity;\n break;\n }\n gif.totalTime += frame.delayTime;\n }\n return gif;\n }\n catch (error) {\n if (error instanceof EvalError) {\n throw new Error(`error while parsing frame ${frameIndex} \"${error.message}\"`);\n }\n throw error;\n }\n}\nexport function drawGif(data) {\n const { context, radius, particle, delta } = data, image = particle.image;\n if (!image?.gifData || !image.gif) {\n return;\n }\n const offscreenCanvas = new OffscreenCanvas(image.gifData.width, image.gifData.height), offscreenContext = offscreenCanvas.getContext(\"2d\");\n if (!offscreenContext) {\n throw new Error(\"could not create offscreen canvas context\");\n }\n offscreenContext.imageSmoothingQuality = \"low\";\n offscreenContext.imageSmoothingEnabled = false;\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n if (particle.gifLoopCount === undefined) {\n particle.gifLoopCount = image.gifLoopCount ?? defaultLoopCount;\n }\n let frameIndex = particle.gifFrame ?? defaultFrame;\n const pos = { x: -image.gifData.width * half, y: -image.gifData.height * half }, frame = image.gifData.frames[frameIndex];\n if (particle.gifTime === undefined) {\n particle.gifTime = initialTime;\n }\n if (!frame.bitmap) {\n return;\n }\n context.scale(radius / image.gifData.width, radius / image.gifData.height);\n switch (frame.disposalMethod) {\n case DisposalMethod.UndefinedA:\n case DisposalMethod.UndefinedB:\n case DisposalMethod.UndefinedC:\n case DisposalMethod.UndefinedD:\n case DisposalMethod.Replace:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n break;\n case DisposalMethod.Combine:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n break;\n case DisposalMethod.RestoreBackground:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n if (!image.gifData.globalColorTable.length) {\n offscreenContext.putImageData(image.gifData.frames[firstIndex].image, pos.x + frame.left, pos.y + frame.top);\n }\n else {\n offscreenContext.putImageData(image.gifData.backgroundImage, pos.x, pos.y);\n }\n break;\n case DisposalMethod.RestorePrevious:\n {\n const previousImageData = offscreenContext.getImageData(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n offscreenContext.putImageData(previousImageData, origin.x, origin.y);\n }\n break;\n }\n particle.gifTime += delta.value;\n if (particle.gifTime > frame.delayTime) {\n particle.gifTime -= frame.delayTime;\n if (++frameIndex >= image.gifData.frames.length) {\n if (--particle.gifLoopCount <= defaultLoopCount) {\n return;\n }\n frameIndex = firstIndex;\n offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);\n }\n particle.gifFrame = frameIndex;\n }\n context.scale(image.gifData.width / radius, image.gifData.height / radius);\n}\nexport async function loadGifImage(image) {\n if (image.type !== \"gif\") {\n await loadImage(image);\n return;\n }\n image.loading = true;\n try {\n image.gifData = await decodeGIF(image.source);\n image.gifLoopCount = getGIFLoopAmount(image.gifData) ?? defaultLoopCount;\n if (!image.gifLoopCount) {\n image.gifLoopCount = Infinity;\n }\n }\n catch {\n image.error = true;\n }\n image.loading = false;\n}\n","import { errorPrefix } from \"@tsparticles/engine\";\nimport { replaceImageColor } from \"./Utils.js\";\nimport { drawGif } from \"./GifUtils/Utils.js\";\nconst double = 2, defaultAlpha = 1, sides = 12, defaultRatio = 1;\nexport class ImageDrawer {\n constructor(engine) {\n this.validTypes = [\"image\", \"images\"];\n this.loadImageShape = async (imageShape) => {\n if (!this._engine.loadImage) {\n throw new Error(`${errorPrefix} image shape not initialized`);\n }\n await this._engine.loadImage({\n gif: imageShape.gif,\n name: imageShape.name,\n replaceColor: imageShape.replaceColor ?? false,\n src: imageShape.src,\n });\n };\n this._engine = engine;\n }\n addImage(image) {\n if (!this._engine.images) {\n this._engine.images = [];\n }\n this._engine.images.push(image);\n }\n draw(data) {\n const { context, radius, particle, opacity } = data, image = particle.image, element = image?.element;\n if (!image) {\n return;\n }\n context.globalAlpha = opacity;\n if (image.gif && image.gifData) {\n drawGif(data);\n }\n else if (element) {\n const ratio = image.ratio, pos = {\n x: -radius,\n y: -radius,\n }, diameter = radius * double;\n context.drawImage(element, pos.x, pos.y, diameter, diameter / ratio);\n }\n context.globalAlpha = defaultAlpha;\n }\n getSidesCount() {\n return sides;\n }\n async init(container) {\n const options = container.actualOptions;\n if (!options.preload || !this._engine.loadImage) {\n return;\n }\n for (const imageData of options.preload) {\n await this._engine.loadImage(imageData);\n }\n }\n loadShape(particle) {\n if (particle.shape !== \"image\" && particle.shape !== \"images\") {\n return;\n }\n if (!this._engine.images) {\n this._engine.images = [];\n }\n const imageData = particle.shapeData;\n if (!imageData) {\n return;\n }\n const image = this._engine.images.find((t) => t.name === imageData.name || t.source === imageData.src);\n if (!image) {\n void this.loadImageShape(imageData).then(() => {\n this.loadShape(particle);\n });\n }\n }\n particleInit(container, particle) {\n if (particle.shape !== \"image\" && particle.shape !== \"images\") {\n return;\n }\n if (!this._engine.images) {\n this._engine.images = [];\n }\n const images = this._engine.images, imageData = particle.shapeData;\n if (!imageData) {\n return;\n }\n const color = particle.getFillColor(), image = images.find((t) => t.name === imageData.name || t.source === imageData.src);\n if (!image) {\n return;\n }\n const replaceColor = imageData.replaceColor ?? image.replaceColor;\n if (image.loading) {\n setTimeout(() => {\n this.particleInit(container, particle);\n });\n return;\n }\n void (async () => {\n let imageRes;\n if (image.svgData && color) {\n imageRes = await replaceImageColor(image, imageData, color, particle);\n }\n else {\n imageRes = {\n color,\n data: image,\n element: image.element,\n gif: image.gif,\n gifData: image.gifData,\n gifLoopCount: image.gifLoopCount,\n loaded: true,\n ratio: imageData.width && imageData.height\n ? imageData.width / imageData.height\n : (image.ratio ?? defaultRatio),\n replaceColor: replaceColor,\n source: imageData.src,\n };\n }\n if (!imageRes.ratio) {\n imageRes.ratio = 1;\n }\n const fill = imageData.fill ?? particle.shapeFill, close = imageData.close ?? particle.shapeClose, imageShape = {\n image: imageRes,\n fill,\n close,\n };\n particle.image = imageShape.image;\n particle.shapeFill = imageShape.fill;\n particle.shapeClose = imageShape.close;\n })();\n }\n}\n","import { isNull } from \"@tsparticles/engine\";\nexport class Preload {\n constructor() {\n this.src = \"\";\n this.gif = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.gif !== undefined) {\n this.gif = data.gif;\n }\n if (data.height !== undefined) {\n this.height = data.height;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n if (data.replaceColor !== undefined) {\n this.replaceColor = data.replaceColor;\n }\n if (data.src !== undefined) {\n this.src = data.src;\n }\n if (data.width !== undefined) {\n this.width = data.width;\n }\n }\n}\n","import { Preload } from \"./Options/Classes/Preload.js\";\nexport class ImagePreloaderPlugin {\n constructor(engine) {\n this.id = \"imagePreloader\";\n this._engine = engine;\n }\n async getPlugin() {\n await Promise.resolve();\n return {};\n }\n loadOptions(options, source) {\n if (!source?.preload) {\n return;\n }\n if (!options.preload) {\n options.preload = [];\n }\n const preloadOptions = options.preload;\n for (const item of source.preload) {\n const existing = preloadOptions.find(t => t.name === item.name || t.src === item.src);\n if (existing) {\n existing.load(item);\n }\n else {\n const preload = new Preload();\n preload.load(item);\n preloadOptions.push(preload);\n }\n }\n }\n needsPlugin() {\n return true;\n }\n}\n","import { downloadSvgImage, loadImage } from \"./Utils.js\";\nimport { ImageDrawer } from \"./ImageDrawer.js\";\nimport { ImagePreloaderPlugin } from \"./ImagePreloader.js\";\nimport { errorPrefix } from \"@tsparticles/engine\";\nimport { loadGifImage } from \"./GifUtils/Utils.js\";\nconst extLength = 3;\nfunction addLoadImageToEngine(engine) {\n if (engine.loadImage) {\n return;\n }\n engine.loadImage = async (data) => {\n if (!data.name && !data.src) {\n throw new Error(`${errorPrefix} no image source provided`);\n }\n if (!engine.images) {\n engine.images = [];\n }\n if (engine.images.find((t) => t.name === data.name || t.source === data.src)) {\n return;\n }\n try {\n const image = {\n gif: data.gif ?? false,\n name: data.name ?? data.src,\n source: data.src,\n type: data.src.substring(data.src.length - extLength),\n error: false,\n loading: true,\n replaceColor: data.replaceColor,\n ratio: data.width && data.height ? data.width / data.height : undefined,\n };\n engine.images.push(image);\n let imageFunc;\n if (data.gif) {\n imageFunc = loadGifImage;\n }\n else {\n imageFunc = data.replaceColor ? downloadSvgImage : loadImage;\n }\n await imageFunc(image);\n }\n catch {\n throw new Error(`${errorPrefix} ${data.name ?? data.src} not found`);\n }\n };\n}\nexport async function loadImageShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n addLoadImageToEngine(engine);\n const preloader = new ImagePreloaderPlugin(engine);\n await engine.addPlugin(preloader, refresh);\n await engine.addShape(new ImageDrawer(engine), refresh);\n}\n","import { ValueWithRandom, isNull } from \"@tsparticles/engine\";\nexport class LifeDelay extends ValueWithRandom {\n constructor() {\n super();\n this.sync = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n super.load(data);\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n","import { ValueWithRandom, isNull } from \"@tsparticles/engine\";\nexport class LifeDuration extends ValueWithRandom {\n constructor() {\n super();\n this.sync = false;\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n super.load(data);\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n","import { isNull } from \"@tsparticles/engine\";\nimport { LifeDelay } from \"./LifeDelay.js\";\nimport { LifeDuration } from \"./LifeDuration.js\";\nexport class Life {\n constructor() {\n this.count = 0;\n this.delay = new LifeDelay();\n this.duration = new LifeDuration();\n }\n load(data) {\n if (isNull(data)) {\n return;\n }\n if (data.count !== undefined) {\n this.count = data.count;\n }\n this.delay.load(data.delay);\n this.duration.load(data.duration);\n }\n}\n","import { getRangeValue, millisecondsToSeconds, randomInRange, setRangeValue, } from \"@tsparticles/engine\";\nconst noTime = 0, infiniteValue = -1, noLife = 0, minCanvasSize = 0;\nexport function updateLife(particle, delta, canvasSize) {\n if (!particle.life) {\n return;\n }\n const life = particle.life;\n let justSpawned = false;\n if (particle.spawning) {\n life.delayTime += delta.value;\n if (life.delayTime >= particle.life.delay) {\n justSpawned = true;\n particle.spawning = false;\n life.delayTime = noTime;\n life.time = noTime;\n }\n else {\n return;\n }\n }\n if (life.duration === infiniteValue) {\n return;\n }\n if (particle.spawning) {\n return;\n }\n if (justSpawned) {\n life.time = noTime;\n }\n else {\n life.time += delta.value;\n }\n if (life.time < life.duration) {\n return;\n }\n life.time = noTime;\n if (particle.life.count > noLife) {\n particle.life.count--;\n }\n if (particle.life.count === noLife) {\n particle.destroy();\n return;\n }\n const widthRange = setRangeValue(minCanvasSize, canvasSize.width), heightRange = setRangeValue(minCanvasSize, canvasSize.width);\n particle.position.x = randomInRange(widthRange);\n particle.position.y = randomInRange(heightRange);\n particle.spawning = true;\n life.delayTime = noTime;\n life.time = noTime;\n particle.reset();\n const lifeOptions = particle.options.life;\n if (lifeOptions) {\n life.delay = getRangeValue(lifeOptions.delay.value) * millisecondsToSeconds;\n life.duration = getRangeValue(lifeOptions.duration.value) * millisecondsToSeconds;\n }\n}\n","import { getRandom, getRangeValue, millisecondsToSeconds, } from \"@tsparticles/engine\";\nimport { Life } from \"./Options/Classes/Life.js\";\nimport { updateLife } from \"./Utils.js\";\nconst noTime = 0, identity = 1, infiniteValue = -1;\nexport class LifeUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const container = this.container, particlesOptions = particle.options, lifeOptions = particlesOptions.life;\n if (!lifeOptions) {\n return;\n }\n particle.life = {\n delay: container.retina.reduceFactor\n ? ((getRangeValue(lifeOptions.delay.value) * (lifeOptions.delay.sync ? identity : getRandom())) /\n container.retina.reduceFactor) *\n millisecondsToSeconds\n : noTime,\n delayTime: noTime,\n duration: container.retina.reduceFactor\n ? ((getRangeValue(lifeOptions.duration.value) * (lifeOptions.duration.sync ? identity : getRandom())) /\n container.retina.reduceFactor) *\n millisecondsToSeconds\n : noTime,\n time: noTime,\n count: lifeOptions.count,\n };\n if (particle.life.duration <= noTime) {\n particle.life.duration = infiniteValue;\n }\n if (particle.life.count <= noTime) {\n particle.life.count = infiniteValue;\n }\n if (particle.life) {\n particle.spawning = particle.life.delay > noTime;\n }\n }\n isEnabled(particle) {\n return !particle.destroyed;\n }\n loadOptions(options, ...sources) {\n if (!options.life) {\n options.life = new Life();\n }\n for (const source of sources) {\n options.life.load(source?.life);\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle) || !particle.life) {\n return;\n }\n updateLife(particle, delta, this.container.canvas.size);\n }\n}\n","import { LifeUpdater } from \"./LifeUpdater.js\";\nexport async function loadLifeUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"life\", async (container) => {\n return Promise.resolve(new LifeUpdater(container));\n }, refresh);\n}\n","export function drawLine(data) {\n const { context, particle, radius } = data, shapeData = particle.shapeData, centerY = 0;\n context.moveTo(-radius, centerY);\n context.lineTo(radius, centerY);\n context.lineCap = shapeData?.cap ?? \"butt\";\n}\n","import { drawLine } from \"./Utils.js\";\nconst sides = 1;\nexport class LineDrawer {\n constructor() {\n this.validTypes = [\"line\"];\n }\n draw(data) {\n drawLine(data);\n }\n getSidesCount() {\n return sides;\n }\n}\n","import { LineDrawer } from \"./LineDrawer.js\";\nexport async function loadLineShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new LineDrawer(), refresh);\n}\n","import { isSsr } from \"@tsparticles/engine\";\nconst half = 0.5;\nexport class ParallaxMover {\n init() {\n }\n isEnabled(particle) {\n return (!isSsr() &&\n !particle.destroyed &&\n particle.container.actualOptions.interactivity.events.onHover.parallax.enable);\n }\n move(particle) {\n const container = particle.container, options = container.actualOptions, parallaxOptions = options.interactivity.events.onHover.parallax;\n if (isSsr() || !parallaxOptions.enable) {\n return;\n }\n const parallaxForce = parallaxOptions.force, mousePos = container.interactivity.mouse.position;\n if (!mousePos) {\n return;\n }\n const canvasSize = container.canvas.size, canvasCenter = {\n x: canvasSize.width * half,\n y: canvasSize.height * half,\n }, parallaxSmooth = parallaxOptions.smooth, factor = particle.getRadius() / parallaxForce, centerDistance = {\n x: (mousePos.x - canvasCenter.x) * factor,\n y: (mousePos.y - canvasCenter.y) * factor,\n }, { offset } = particle;\n offset.x += (centerDistance.x - offset.x) / parallaxSmooth;\n offset.y += (centerDistance.y - offset.y) / parallaxSmooth;\n }\n}\n","import { ParallaxMover } from \"./ParallaxMover.js\";\nexport async function loadParallaxMover(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addMover(\"parallax\", () => {\n return Promise.resolve(new ParallaxMover());\n }, refresh);\n}\n","import { ParticlesInteractorBase, getDistances, getRangeValue, } from \"@tsparticles/engine\";\nconst attractFactor = 1000, identity = 1;\nexport class Attractor extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n }\n interact(p1) {\n const container = this.container;\n if (p1.attractDistance === undefined) {\n p1.attractDistance = getRangeValue(p1.options.move.attract.distance) * container.retina.pixelRatio;\n }\n const distance = p1.attractDistance, pos1 = p1.getPosition(), query = container.particles.quadTree.queryCircle(pos1, distance);\n for (const p2 of query) {\n if (p1 === p2 || !p2.options.move.attract.enable || p2.destroyed || p2.spawning) {\n continue;\n }\n const pos2 = p2.getPosition(), { dx, dy } = getDistances(pos1, pos2), rotate = p1.options.move.attract.rotate, ax = dx / (rotate.x * attractFactor), ay = dy / (rotate.y * attractFactor), p1Factor = p2.size.value / p1.size.value, p2Factor = identity / p1Factor;\n p1.velocity.x -= ax * p1Factor;\n p1.velocity.y -= ay * p1Factor;\n p2.velocity.x += ax * p2Factor;\n p2.velocity.y += ay * p2Factor;\n }\n }\n isEnabled(particle) {\n return particle.options.move.attract.enable;\n }\n reset() {\n }\n}\n","import { Attractor } from \"./Attractor.js\";\nexport async function loadParticlesAttractInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"particlesAttract\", container => {\n return Promise.resolve(new Attractor(container));\n }, refresh);\n}\n","import { clamp } from \"@tsparticles/engine\";\nconst half = 0.5, absorbFactor = 10, minAbsorbFactor = 0;\nfunction updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {\n const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) / absorbFactor, minAbsorbFactor, r2);\n p1.size.value += factor * half;\n p2.size.value -= factor;\n if (r2 <= pixelRatio) {\n p2.size.value = 0;\n p2.destroy();\n }\n}\nexport function absorb(p1, p2, delta, pixelRatio) {\n const r1 = p1.getRadius(), r2 = p2.getRadius();\n if (r1 === undefined && r2 !== undefined) {\n p1.destroy();\n }\n else if (r1 !== undefined && r2 === undefined) {\n p2.destroy();\n }\n else if (r1 !== undefined && r2 !== undefined) {\n if (r1 >= r2) {\n updateAbsorb(p1, r1, p2, r2, delta, pixelRatio);\n }\n else {\n updateAbsorb(p2, r2, p1, r1, delta, pixelRatio);\n }\n }\n}\n","import { circleBounce, circleBounceDataFromParticle, getRangeValue } from \"@tsparticles/engine\";\nconst fixBounceSpeed = (p) => {\n if (p.collisionMaxSpeed === undefined) {\n p.collisionMaxSpeed = getRangeValue(p.options.collisions.maxSpeed);\n }\n if (p.velocity.length > p.collisionMaxSpeed) {\n p.velocity.length = p.collisionMaxSpeed;\n }\n};\nexport function bounce(p1, p2) {\n circleBounce(circleBounceDataFromParticle(p1), circleBounceDataFromParticle(p2));\n fixBounceSpeed(p1);\n fixBounceSpeed(p2);\n}\n","import { bounce } from \"./Bounce.js\";\nexport function destroy(p1, p2) {\n if (!p1.unbreakable && !p2.unbreakable) {\n bounce(p1, p2);\n }\n if (p1.getRadius() === undefined && p2.getRadius() !== undefined) {\n p1.destroy();\n }\n else if (p1.getRadius() !== undefined && p2.getRadius() === undefined) {\n p2.destroy();\n }\n else if (p1.getRadius() !== undefined && p2.getRadius() !== undefined) {\n const deleteP = p1.getRadius() >= p2.getRadius() ? p2 : p1;\n deleteP.destroy();\n }\n}\n","import { CollisionMode } from \"@tsparticles/engine\";\nimport { absorb } from \"./Absorb.js\";\nimport { bounce } from \"./Bounce.js\";\nimport { destroy } from \"./Destroy.js\";\nexport function resolveCollision(p1, p2, delta, pixelRatio) {\n switch (p1.options.collisions.mode) {\n case CollisionMode.absorb: {\n absorb(p1, p2, delta, pixelRatio);\n break;\n }\n case CollisionMode.bounce: {\n bounce(p1, p2);\n break;\n }\n case CollisionMode.destroy: {\n destroy(p1, p2);\n break;\n }\n }\n}\n","import { ParticlesInteractorBase, getDistance } from \"@tsparticles/engine\";\nimport { resolveCollision } from \"./ResolveCollision.js\";\nconst double = 2;\nexport class Collider extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n }\n interact(p1, delta) {\n if (p1.destroyed || p1.spawning) {\n return;\n }\n const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * double);\n for (const p2 of query) {\n if (p1 === p2 ||\n !p2.options.collisions.enable ||\n p1.options.collisions.mode !== p2.options.collisions.mode ||\n p2.destroyed ||\n p2.spawning) {\n continue;\n }\n const pos2 = p2.getPosition(), radius2 = p2.getRadius();\n if (Math.abs(Math.round(pos1.z) - Math.round(pos2.z)) > radius1 + radius2) {\n continue;\n }\n const dist = getDistance(pos1, pos2), distP = radius1 + radius2;\n if (dist > distP) {\n continue;\n }\n resolveCollision(p1, p2, delta, container.retina.pixelRatio);\n }\n }\n isEnabled(particle) {\n return particle.options.collisions.enable;\n }\n reset() {\n }\n}\n","import { Collider } from \"./Collider.js\";\nexport async function loadParticlesCollisionsInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addInteractor(\"particlesCollisions\", container => {\n return Promise.resolve(new Collider(container));\n }, refresh);\n}\n","import { Circle, Rectangle } from \"@tsparticles/engine\";\nconst double = 2;\nexport class CircleWarp extends Circle {\n constructor(x, y, radius, canvasSize) {\n super(x, y, radius);\n this.canvasSize = canvasSize;\n this.canvasSize = { ...canvasSize };\n }\n contains(point) {\n const { width, height } = this.canvasSize, { x, y } = point;\n return (super.contains(point) ||\n super.contains({ x: x - width, y }) ||\n super.contains({ x: x - width, y: y - height }) ||\n super.contains({ x, y: y - height }));\n }\n intersects(range) {\n if (super.intersects(range)) {\n return true;\n }\n const rect = range, circle = range, newPos = {\n x: range.position.x - this.canvasSize.width,\n y: range.position.y - this.canvasSize.height,\n };\n if (circle.radius !== undefined) {\n const biggerCircle = new Circle(newPos.x, newPos.y, circle.radius * double);\n return super.intersects(biggerCircle);\n }\n else if (rect.size !== undefined) {\n const rectSW = new Rectangle(newPos.x, newPos.y, rect.size.width * double, rect.size.height * double);\n return super.intersects(rectSW);\n }\n return false;\n }\n}\n","import { OptionsColor, isNull } 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 (isNull(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, isNull } from \"@tsparticles/engine\";\nexport class LinksTriangle {\n constructor() {\n this.enable = false;\n this.frequency = 1;\n }\n load(data) {\n if (isNull(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, isNull } from \"@tsparticles/engine\";\nimport { LinksShadow } from \"./LinksShadow.js\";\nimport { LinksTriangle } from \"./LinksTriangle.js\";\nexport class Links {\n constructor() {\n this.blink = false;\n this.color = new OptionsColor();\n this.color.value = \"#fff\";\n this.consent = false;\n this.distance = 100;\n this.enable = false;\n this.frequency = 1;\n this.opacity = 1;\n this.shadow = new LinksShadow();\n this.triangles = new LinksTriangle();\n this.width = 1;\n this.warp = false;\n }\n load(data) {\n if (isNull(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.js\";\nimport { Links } from \"./Options/Classes/Links.js\";\nconst squarePower = 2, opacityOffset = 1, origin = {\n x: 0,\n y: 0,\n}, minDistance = 0;\nfunction getLinkDistance(pos1, pos2, optDistance, canvasSize, warp) {\n const { dx, dy, distance } = getDistances(pos1, pos2);\n if (!warp || distance <= optDistance) {\n return distance;\n }\n const absDiffs = {\n x: Math.abs(dx),\n y: Math.abs(dy),\n }, warpDistances = {\n x: Math.min(absDiffs.x, canvasSize.width - absDiffs.x),\n y: Math.min(absDiffs.y, canvasSize.height - absDiffs.y),\n };\n return Math.sqrt(warpDistances.x ** squarePower + warpDistances.y ** squarePower);\n}\nexport class Linker extends ParticlesInteractorBase {\n constructor(container, engine) {\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(this._engine, 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 this._engine = engine;\n }\n clear() {\n }\n init() {\n this._linkContainer.particles.linksColor = undefined;\n this._linkContainer.particles.linksColors = new Map();\n }\n interact(p1) {\n if (!p1.options.links) {\n return;\n }\n p1.links = [];\n const pos1 = p1.getPosition(), container = this.container, canvasSize = container.canvas.size;\n if (pos1.x < origin.x || pos1.y < origin.y || pos1.x > canvasSize.width || pos1.y > canvasSize.height) {\n return;\n }\n const linkOpt1 = p1.options.links, optOpacity = linkOpt1.opacity, optDistance = p1.retina.linksDistance ?? minDistance, warp = linkOpt1.warp;\n let range;\n if (warp) {\n range = new CircleWarp(pos1.x, pos1.y, optDistance, canvasSize);\n }\n else {\n range = new Circle(pos1.x, pos1.y, optDistance);\n }\n const query = container.particles.quadTree.query(range);\n for (const p2 of query) {\n const linkOpt2 = p2.options.links;\n if (p1 === p2 ||\n !linkOpt2?.enable ||\n linkOpt1.id !== linkOpt2.id ||\n p2.spawning ||\n p2.destroyed ||\n !p2.links ||\n p1.links.some(t => t.destination === p2) ||\n p2.links.some(t => t.destination === p1)) {\n continue;\n }\n const pos2 = p2.getPosition();\n if (pos2.x < origin.x || pos2.y < origin.y || pos2.x > canvasSize.width || pos2.y > canvasSize.height) {\n continue;\n }\n const distance = getLinkDistance(pos1, pos2, optDistance, canvasSize, warp && linkOpt2.warp);\n if (distance > optDistance) {\n continue;\n }\n const opacityLine = (opacityOffset - distance / optDistance) * optOpacity;\n this._setColor(p1);\n p1.links.push({\n destination: p2,\n opacity: opacityLine,\n });\n }\n }\n isEnabled(particle) {\n return !!particle.options.links?.enable;\n }\n loadParticlesOptions(options, ...sources) {\n if (!options.links) {\n options.links = new Links();\n }\n for (const source of sources) {\n options.links.load(source?.links);\n }\n }\n reset() {\n }\n}\n","import { Linker } from \"./Linker.js\";\nexport async function loadLinksInteraction(engine, refresh = true) {\n await engine.addInteractor(\"particlesLinks\", async (container) => {\n return Promise.resolve(new Linker(container, engine));\n }, refresh);\n}\n","import { drawLine, getDistance, getDistances, getRandom, getStyleFromRgb, rangeColorToRgb, } from \"@tsparticles/engine\";\nexport function drawTriangle(context, p1, p2, p3) {\n context.beginPath();\n context.moveTo(p1.x, p1.y);\n context.lineTo(p2.x, p2.y);\n context.lineTo(p3.x, p3.y);\n context.closePath();\n}\nexport function drawLinkLine(params) {\n let drawn = false;\n const { begin, end, engine, 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(engine, shadow.color);\n if (shadowColor) {\n context.shadowBlur = shadow.blur;\n context.shadowColor = getStyleFromRgb(shadowColor);\n }\n }\n context.stroke();\n}\nexport function drawLinkTriangle(params) {\n const { context, pos1, pos2, pos3, backgroundMask, colorTriangle, opacityTriangle } = params;\n drawTriangle(context, pos1, pos2, pos3);\n if (backgroundMask.enable) {\n context.globalCompositeOperation = backgroundMask.composite;\n }\n context.fillStyle = getStyleFromRgb(colorTriangle, opacityTriangle);\n context.fill();\n}\nexport function getLinkKey(ids) {\n ids.sort((a, b) => a - b);\n return ids.join(\"_\");\n}\nexport function setLinkFrequency(particles, dictionary) {\n const key = getLinkKey(particles.map(t => t.id));\n let res = dictionary.get(key);\n if (res === undefined) {\n res = getRandom();\n dictionary.set(key, res);\n }\n return res;\n}\n","import { getDistance, getLinkColor, getRandom, getRangeValue, rangeColorToRgb, } from \"@tsparticles/engine\";\nimport { drawLinkLine, drawLinkTriangle, setLinkFrequency } from \"./Utils.js\";\nconst minOpacity = 0, minWidth = 0, minDistance = 0, half = 0.5, maxFrequency = 1;\nexport class LinkInstance {\n constructor(container, engine) {\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(this._engine, twinkle.color), twinkling = getRandom() < twinkleFreq;\n if (twinkling && twinkleRgb) {\n colorLine = twinkleRgb;\n opacity = getRangeValue(twinkle.opacity);\n }\n }\n if (!colorLine) {\n const linkColor = p1LinksOptions.id !== undefined\n ? container.particles.linksColors.get(p1LinksOptions.id)\n : container.particles.linksColor;\n colorLine = getLinkColor(p1, p2, linkColor);\n }\n if (!colorLine) {\n return;\n }\n const width = p1.retina.linksWidth ?? minWidth, maxDistance = p1.retina.linksDistance ?? minDistance, { backgroundMask } = options;\n drawLinkLine({\n context: ctx,\n width,\n begin: pos1,\n end: pos2,\n engine: this._engine,\n maxDistance,\n canvasSize: container.canvas.size,\n links: p1LinksOptions,\n backgroundMask: backgroundMask,\n colorLine,\n opacity,\n });\n });\n };\n this._drawLinkTriangle = (p1, link1, link2) => {\n const linksOptions = p1.options.links;\n if (!linksOptions?.enable) {\n return;\n }\n const triangleOptions = linksOptions.triangles;\n if (!triangleOptions.enable) {\n return;\n }\n const container = this._container, options = container.actualOptions, p2 = link1.destination, p3 = link2.destination, opacityTriangle = triangleOptions.opacity ?? (link1.opacity + link2.opacity) * half;\n if (opacityTriangle <= minOpacity) {\n return;\n }\n container.canvas.draw(ctx => {\n const pos1 = p1.getPosition(), pos2 = p2.getPosition(), pos3 = p3.getPosition(), linksDistance = p1.retina.linksDistance ?? minDistance;\n if (getDistance(pos1, pos2) > linksDistance ||\n getDistance(pos3, pos2) > linksDistance ||\n getDistance(pos3, pos1) > linksDistance) {\n return;\n }\n let colorTriangle = rangeColorToRgb(this._engine, triangleOptions.color);\n if (!colorTriangle) {\n const linkColor = linksOptions.id !== undefined\n ? container.particles.linksColors.get(linksOptions.id)\n : container.particles.linksColor;\n colorTriangle = getLinkColor(p1, p2, linkColor);\n }\n if (!colorTriangle) {\n return;\n }\n drawLinkTriangle({\n context: ctx,\n pos1,\n pos2,\n pos3,\n backgroundMask: options.backgroundMask,\n colorTriangle,\n opacityTriangle,\n });\n });\n };\n this._drawTriangles = (options, p1, link, p1Links) => {\n const p2 = link.destination;\n if (!(options.links?.triangles.enable && p2.options.links?.triangles.enable)) {\n return;\n }\n const vertices = p2.links?.filter(t => {\n const linkFreq = this._getLinkFrequency(p2, t.destination), minCount = 0;\n return (p2.options.links &&\n linkFreq <= p2.options.links.frequency &&\n p1Links.findIndex(l => l.destination === t.destination) >= minCount);\n });\n if (!vertices?.length) {\n return;\n }\n for (const vertex of vertices) {\n const p3 = vertex.destination, triangleFreq = this._getTriangleFrequency(p1, p2, p3);\n if (triangleFreq > options.links.triangles.frequency) {\n continue;\n }\n this._drawLinkTriangle(p1, link, vertex);\n }\n };\n this._getLinkFrequency = (p1, p2) => {\n return setLinkFrequency([p1, p2], this._freqs.links);\n };\n this._getTriangleFrequency = (p1, p2, p3) => {\n return setLinkFrequency([p1, p2, p3], this._freqs.triangles);\n };\n this._container = container;\n this._engine = engine;\n this._freqs = {\n links: new Map(),\n triangles: new Map(),\n };\n }\n drawParticle(context, particle) {\n const { links, options } = particle;\n if (!links?.length) {\n return;\n }\n const p1Links = links.filter(l => options.links &&\n (options.links.frequency >= maxFrequency ||\n this._getLinkFrequency(particle, l.destination) <= options.links.frequency));\n for (const link of p1Links) {\n this._drawTriangles(options, particle, link, p1Links);\n if (link.opacity > minOpacity && (particle.retina.linksWidth ?? minWidth) > minWidth) {\n this._drawLinkLine(particle, link);\n }\n }\n }\n async init() {\n this._freqs.links = new Map();\n this._freqs.triangles = new Map();\n await Promise.resolve();\n }\n particleCreated(particle) {\n particle.links = [];\n if (!particle.options.links) {\n return;\n }\n const ratio = this._container.retina.pixelRatio, { retina } = particle, { distance, width } = particle.options.links;\n retina.linksDistance = distance * ratio;\n retina.linksWidth = width * ratio;\n }\n particleDestroyed(particle) {\n particle.links = [];\n }\n}\n","import { LinkInstance } from \"./LinkInstance.js\";\nexport class LinksPlugin {\n constructor(engine) {\n this.id = \"links\";\n this._engine = engine;\n }\n getPlugin(container) {\n return Promise.resolve(new LinkInstance(container, this._engine));\n }\n loadOptions() {\n }\n needsPlugin() {\n return true;\n }\n}\n","import { LinksPlugin } from \"./LinksPlugin.js\";\nexport async function loadLinksPlugin(engine, refresh = true) {\n const plugin = new LinksPlugin(engine);\n await engine.addPlugin(plugin, refresh);\n}\n","import { loadLinksInteraction } from \"./interaction.js\";\nimport { loadLinksPlugin } from \"./plugin.js\";\nexport async function loadParticlesLinksInteraction(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await loadLinksInteraction(engine, refresh);\n await loadLinksPlugin(engine, refresh);\n}\nexport * from \"./Options/Classes/Links.js\";\nexport * from \"./Options/Classes/LinksShadow.js\";\nexport * from \"./Options/Classes/LinksTriangle.js\";\nexport * from \"./Options/Interfaces/ILinks.js\";\nexport * from \"./Options/Interfaces/ILinksShadow.js\";\nexport * from \"./Options/Interfaces/ILinksTriangle.js\";\n","import { degToRad } from \"@tsparticles/engine\";\nconst piDeg = 180, origin = { x: 0, y: 0 }, sidesOffset = 2;\nexport function drawPolygon(data, start, side) {\n const { context } = data, sideCount = side.count.numerator * side.count.denominator, decimalSides = side.count.numerator / side.count.denominator, interiorAngleDegrees = (piDeg * (decimalSides - sidesOffset)) / decimalSides, interiorAngle = Math.PI - degToRad(interiorAngleDegrees);\n if (!context) {\n return;\n }\n context.beginPath();\n context.translate(start.x, start.y);\n context.moveTo(origin.x, origin.y);\n for (let i = 0; i < sideCount; i++) {\n context.lineTo(side.length, origin.y);\n context.translate(side.length, origin.y);\n context.rotate(interiorAngle);\n }\n}\n","import { getRangeValue, } from \"@tsparticles/engine\";\nimport { drawPolygon } from \"./Utils.js\";\nconst defaultSides = 5;\nexport class PolygonDrawerBase {\n draw(data) {\n const { particle, radius } = data, start = this.getCenter(particle, radius), side = this.getSidesData(particle, radius);\n drawPolygon(data, start, side);\n }\n getSidesCount(particle) {\n const polygon = particle.shapeData;\n return Math.round(getRangeValue(polygon?.sides ?? defaultSides));\n }\n}\n","import { PolygonDrawerBase } from \"./PolygonDrawerBase.js\";\nconst sidesCenterFactor = 3.5, yFactor = 2.66, sidesFactor = 3;\nexport class PolygonDrawer extends PolygonDrawerBase {\n constructor() {\n super(...arguments);\n this.validTypes = [\"polygon\"];\n }\n getCenter(particle, radius) {\n return {\n x: -radius / (particle.sides / sidesCenterFactor),\n y: -radius / (yFactor / sidesCenterFactor),\n };\n }\n getSidesData(particle, radius) {\n const sides = particle.sides;\n return {\n count: {\n denominator: 1,\n numerator: sides,\n },\n length: (radius * yFactor) / (sides / sidesFactor),\n };\n }\n}\n","import { PolygonDrawerBase } from \"./PolygonDrawerBase.js\";\nconst yFactor = 1.66, sides = 3, double = 2;\nexport class TriangleDrawer extends PolygonDrawerBase {\n constructor() {\n super(...arguments);\n this.validTypes = [\"triangle\"];\n }\n getCenter(particle, radius) {\n return {\n x: -radius,\n y: radius / yFactor,\n };\n }\n getSidesCount() {\n return sides;\n }\n getSidesData(particle, radius) {\n const diameter = radius * double;\n return {\n count: {\n denominator: 2,\n numerator: 3,\n },\n length: diameter,\n };\n }\n}\n","import { PolygonDrawer } from \"./PolygonDrawer.js\";\nimport { TriangleDrawer } from \"./TriangleDrawer.js\";\nexport async function loadGenericPolygonShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new PolygonDrawer(), refresh);\n}\nexport async function loadTriangleShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new TriangleDrawer(), refresh);\n}\nexport async function loadPolygonShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await loadGenericPolygonShape(engine, refresh);\n await loadTriangleShape(engine, refresh);\n}\n","import { isNull, 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 (isNull(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 { RotateDirection, ValueWithRandom, isNull, } from \"@tsparticles/engine\";\nimport { RotateAnimation } from \"./RotateAnimation.js\";\nexport class Rotate extends ValueWithRandom {\n constructor() {\n super();\n this.animation = new RotateAnimation();\n this.direction = RotateDirection.clockwise;\n this.path = false;\n this.value = 0;\n }\n load(data) {\n if (isNull(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 { AnimationStatus, DestroyType, RotateDirection, degToRad, getRandom, getRangeValue, updateAnimation, } from \"@tsparticles/engine\";\nimport { Rotate } from \"./Options/Classes/Rotate.js\";\nconst double = 2, doublePI = Math.PI * double, identity = 1, doublePIDeg = 360;\nexport class RotateUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const rotateOptions = particle.options.rotate;\n if (!rotateOptions) {\n return;\n }\n particle.rotate = {\n enable: rotateOptions.animation.enable,\n value: degToRad(getRangeValue(rotateOptions.value)),\n min: 0,\n max: doublePI,\n };\n particle.pathRotation = rotateOptions.path;\n let rotateDirection = rotateOptions.direction;\n if (rotateDirection === RotateDirection.random) {\n const index = Math.floor(getRandom() * double), minIndex = 0;\n rotateDirection = index > minIndex ? RotateDirection.counterClockwise : RotateDirection.clockwise;\n }\n switch (rotateDirection) {\n case RotateDirection.counterClockwise:\n case \"counterClockwise\":\n particle.rotate.status = AnimationStatus.decreasing;\n break;\n case RotateDirection.clockwise:\n particle.rotate.status = AnimationStatus.increasing;\n break;\n }\n const rotateAnimation = rotateOptions.animation;\n if (rotateAnimation.enable) {\n particle.rotate.decay = identity - getRangeValue(rotateAnimation.decay);\n particle.rotate.velocity =\n (getRangeValue(rotateAnimation.speed) / doublePIDeg) * this.container.retina.reduceFactor;\n if (!rotateAnimation.sync) {\n particle.rotate.velocity *= getRandom();\n }\n }\n particle.rotation = particle.rotate.value;\n }\n isEnabled(particle) {\n const rotate = particle.options.rotate;\n if (!rotate) {\n return false;\n }\n return !particle.destroyed && !particle.spawning && (!!rotate.value || 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 particle.isRotating = !!particle.rotate;\n if (!particle.rotate) {\n return;\n }\n updateAnimation(particle, particle.rotate, false, DestroyType.none, delta);\n particle.rotation = particle.rotate.value;\n }\n}\n","import { RotateUpdater } from \"./RotateUpdater.js\";\nexport async function loadRotateUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"rotate\", container => {\n return Promise.resolve(new RotateUpdater(container));\n }, refresh);\n}\n","const fixFactorSquared = 2, fixFactor = Math.sqrt(fixFactorSquared), double = 2;\nexport function drawSquare(data) {\n const { context, radius } = data, fixedRadius = radius / fixFactor, fixedDiameter = fixedRadius * double;\n context.rect(-fixedRadius, -fixedRadius, fixedDiameter, fixedDiameter);\n}\n","import { drawSquare } from \"./Utils.js\";\nconst sides = 4;\nexport class SquareDrawer {\n constructor() {\n this.validTypes = [\"edge\", \"square\"];\n }\n draw(data) {\n drawSquare(data);\n }\n getSidesCount() {\n return sides;\n }\n}\n","import { SquareDrawer } from \"./SquareDrawer.js\";\nexport async function loadSquareShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new SquareDrawer(), refresh);\n}\n","const defaultInset = 2, origin = { x: 0, y: 0 };\nexport function drawStar(data) {\n const { context, particle, radius } = data, sides = particle.sides, inset = particle.starInset ?? defaultInset;\n context.moveTo(origin.x, origin.y - radius);\n for (let i = 0; i < sides; i++) {\n context.rotate(Math.PI / sides);\n context.lineTo(origin.x, origin.y - radius * inset);\n context.rotate(Math.PI / sides);\n context.lineTo(origin.x, origin.y - radius);\n }\n}\n","import { getRangeValue, } from \"@tsparticles/engine\";\nimport { drawStar } from \"./Utils.js\";\nconst defaultInset = 2, defaultSides = 5;\nexport class StarDrawer {\n constructor() {\n this.validTypes = [\"star\"];\n }\n draw(data) {\n drawStar(data);\n }\n getSidesCount(particle) {\n const star = particle.shapeData;\n return Math.round(getRangeValue(star?.sides ?? defaultSides));\n }\n particleInit(container, particle) {\n const star = particle.shapeData;\n particle.starInset = getRangeValue(star?.inset ?? defaultInset);\n }\n}\n","import { StarDrawer } from \"./StarDrawer.js\";\nexport async function loadStarShape(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addShape(new StarDrawer(), refresh);\n}\n","import { getHslAnimationFromHsl, getRangeValue, itemFromSingleOrMultiple, rangeColorToHsl, updateColor, } from \"@tsparticles/engine\";\nconst defaultOpacity = 1;\nexport class StrokeColorUpdater {\n constructor(container, engine) {\n this._container = container;\n this._engine = engine;\n }\n init(particle) {\n const container = this._container, options = particle.options;\n const stroke = itemFromSingleOrMultiple(options.stroke, particle.id, options.reduceDuplicates);\n particle.strokeWidth = getRangeValue(stroke.width) * container.retina.pixelRatio;\n particle.strokeOpacity = getRangeValue(stroke.opacity ?? defaultOpacity);\n particle.strokeAnimation = stroke.color?.animation;\n const strokeHslColor = rangeColorToHsl(this._engine, stroke.color) ?? particle.getFillColor();\n if (strokeHslColor) {\n particle.strokeColor = getHslAnimationFromHsl(strokeHslColor, particle.strokeAnimation, container.retina.reduceFactor);\n }\n }\n isEnabled(particle) {\n const color = particle.strokeAnimation, { strokeColor } = particle;\n return (!particle.destroyed &&\n !particle.spawning &&\n !!color &&\n ((strokeColor?.h.value !== undefined && strokeColor.h.enable) ||\n (strokeColor?.s.value !== undefined && strokeColor.s.enable) ||\n (strokeColor?.l.value !== undefined && strokeColor.l.enable)));\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateColor(particle.strokeColor, delta);\n }\n}\n","import { StrokeColorUpdater } from \"./StrokeColorUpdater.js\";\nexport async function loadStrokeColorUpdater(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\n await engine.addParticleUpdater(\"strokeColor\", container => {\n return Promise.resolve(new StrokeColorUpdater(container, engine));\n }, refresh);\n}\n","import { loadBasic } from \"@tsparticles/basic\";\nimport { loadEasingQuadPlugin } from \"@tsparticles/plugin-easing-quad\";\nimport { loadEmojiShape } from \"@tsparticles/shape-emoji\";\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\";\nexport async function loadSlim(engine, refresh = true) {\n engine.checkVersion(\"3.9.1\");\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(engine, false);\n await loadEmojiShape(engine, false);\n await loadImageShape(engine, false);\n await loadLineShape(engine, false);\n await loadPolygonShape(engine, false);\n await loadSquareShape(engine, false);\n await loadStarShape(engine, false);\n await loadLifeUpdater(engine, false);\n await loadRotateUpdater(engine, false);\n await loadStrokeColorUpdater(engine, false);\n await loadBasic(engine, refresh);\n}\n","import type { ISourceOptions } from '@tsparticles/engine';\n\nexport const baseConfig: Partial<ISourceOptions> = {\n fullScreen: {\n enable: true,\n zIndex: 0,\n },\n background: {\n color: { value: 'transparent' },\n },\n fpsLimit: 120,\n detectRetina: true,\n};\n\n/** 支持多色粒子的主题所使用的默认强调色 */\nexport const DEFAULT_COLORS = [\n '#ffb3d9', '#f43f5e', '#a78bfa', '#3b82f6',\n '#10b981', '#f59e0b', '#ff6b6b', '#8b5cf6',\n '#06b6d4', '#fb7185',\n];\n","import type { ParticleTheme } from './types';\nimport { baseConfig, DEFAULT_COLORS } from './base';\n\nexport const starlineTheme: ParticleTheme = {\n id: 'starline',\n name: '星链',\n icon: '✨',\n description: '经典粒子连线效果',\n backgroundGradient: 'linear-gradient(180deg, #0f172a 0%, #1e293b 50%, #334155 100%)',\n options: (isDark: boolean) => {\n const colors = DEFAULT_COLORS;\n return {\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onClick: { enable: true, mode: 'push' },\n onHover: { enable: true, mode: 'grab' },\n resize: { enable: true },\n },\n modes: {\n // 快速点击会触发 push 不断增加粒子和连线,限制触发强度和最大粒子数量可避免性能问题\n push: { quantity: 2 },\n grab: {\n distance: 200,\n links: { opacity: 1, color: colors },\n },\n },\n },\n particles: {\n color: { value: colors },\n links: {\n color: colors,\n distance: 150,\n enable: true,\n opacity: 0.5,\n width: 1,\n },\n move: {\n direction: 'none',\n enable: true,\n outModes: { default: 'out' },\n random: false,\n speed: 2,\n straight: false,\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 100,\n // 限制粒子总量,防止快速点击后粒子与连线无限增长\n limit: { value: 130, mode: 'delete' },\n },\n opacity: { value: 0.7 },\n shape: { type: 'circle' },\n size: { value: { min: 2, max: 6 } },\n shadow: {\n blur: 8,\n color: { value: colors },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n };\n },\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const snowTheme: ParticleTheme = {\n id: 'snow',\n name: '飘雪',\n icon: '❄️',\n description: '浪漫飘落雪花',\n backgroundGradient: 'linear-gradient(180deg, #1e3a5f 0%, #2d4a6b 50%, #3d5a7b 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onHover: { enable: true, mode: 'repulse' },\n resize: { enable: true },\n },\n modes: {\n repulse: { distance: 100, duration: 0.4 },\n },\n },\n particles: {\n color: { value: isDark ? '#ffffff' : '#87CEEB' },\n move: {\n direction: 'bottom',\n enable: true,\n outModes: { default: 'out' },\n speed: { min: 1, max: 3 },\n straight: false,\n drift: { min: -0.5, max: 0.5 },\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 80,\n },\n opacity: {\n value: { min: 0.3, max: 0.8 },\n animation: { enable: true, speed: 1, minimumValue: 0.3, sync: false },\n },\n shape: { type: 'circle' },\n size: { value: { min: 2, max: 6 } },\n wobble: {\n enable: true,\n distance: 10,\n speed: { min: -5, max: 5 },\n },\n shadow: {\n blur: 5,\n color: { value: isDark ? '#ffffff' : '#87CEEB' },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const bubbleTheme: ParticleTheme = {\n id: 'bubble',\n name: '气泡',\n icon: '🫧',\n description: '梦幻上升气泡',\n backgroundGradient: 'linear-gradient(180deg, #0a2647 0%, #144272 50%, #205295 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onClick: { enable: true, mode: 'pop' },\n onHover: { enable: true, mode: 'bubble' },\n resize: { enable: true },\n },\n modes: {\n bubble: { distance: 200, size: 15, duration: 2, opacity: 0.8 },\n pop: {},\n },\n },\n particles: {\n color: {\n value: isDark\n ? ['#00d9ff', '#00ff9d', '#ff00e6', '#ffee00']\n : ['#ffb3d9', '#ff91c7', '#ffc0e5', '#ffd6e8'],\n },\n move: {\n direction: 'top',\n enable: true,\n outModes: { default: 'out' },\n speed: { min: 1, max: 2 },\n straight: false,\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 50,\n },\n opacity: {\n value: { min: 0.2, max: 0.6 },\n animation: { enable: true, speed: 0.5, minimumValue: 0.1, sync: false },\n },\n shape: { type: 'circle' },\n size: {\n value: { min: 5, max: 15 },\n animation: { enable: true, speed: 3, minimumValue: 3, sync: false },\n },\n stroke: {\n width: 1,\n color: { value: isDark ? 'rgba(255,255,255,0.3)' : 'rgba(0,0,0,0.1)' },\n },\n shadow: {\n blur: 10,\n color: { value: isDark ? '#ffb3d9' : '#ff91c7' },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const starsTheme: ParticleTheme = {\n id: 'stars',\n name: '繁星',\n icon: '⭐',\n description: '闪烁星空效果',\n backgroundGradient: 'linear-gradient(180deg, #000000 0%, #1a1a2e 50%, #16213e 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onClick: { enable: true, mode: 'push' },\n onHover: { enable: true, mode: 'connect' },\n resize: { enable: true },\n },\n modes: {\n // 限制快速点击触发的粒子 push 强度,避免连线过多造成卡顿\n push: { quantity: 1 },\n connect: { distance: 100, links: { opacity: 0.3 }, radius: 150 },\n },\n },\n particles: {\n color: {\n value: isDark\n ? ['#ffffff', '#ffffd4', '#ffecd2', '#d4f1ff']\n : ['#ffd700', '#ffb347', '#ff6b6b', '#4ecdc4'],\n },\n move: {\n direction: 'none',\n enable: true,\n outModes: { default: 'out' },\n random: true,\n speed: 0.5,\n straight: false,\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 120,\n // 限制粒子总量,避免快速点击后连线无限累积\n limit: { value: 150, mode: 'delete' },\n },\n opacity: {\n value: { min: 0.2, max: 1 },\n animation: {\n enable: true,\n speed: 1,\n minimumValue: 0.1,\n sync: false,\n },\n },\n shape: { type: 'star', options: { star: { sides: 5 } } },\n size: { value: { min: 1, max: 4 } },\n twinkle: {\n lines: { enable: false },\n particles: {\n enable: true,\n frequency: 0.05,\n opacity: 1,\n color: { value: isDark ? '#ffffff' : '#ffd700' },\n },\n },\n shadow: {\n blur: 6,\n color: { value: isDark ? '#ffffff' : '#ffd700' },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const fireflyTheme: ParticleTheme = {\n id: 'firefly',\n name: '萤火虫',\n icon: '🪲',\n description: '温暖的萤火虫光效',\n backgroundGradient: 'linear-gradient(180deg, #1a1a1a 0%, #2d2d2d 50%, #1a1a1a 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onHover: { enable: true, mode: 'slow' },\n resize: { enable: true },\n },\n modes: {\n slow: { factor: 3, radius: 200 },\n },\n },\n particles: {\n color: {\n value: isDark\n ? ['#ffff00', '#adff2f', '#7fff00', '#00ff7f']\n : ['#ffc107', '#ff9800', '#ff5722', '#4caf50'],\n },\n move: {\n direction: 'none',\n enable: true,\n outModes: { default: 'bounce' },\n random: true,\n speed: 1,\n straight: false,\n trail: {\n enable: true,\n length: 5,\n fill: { color: 'transparent' },\n },\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 40,\n },\n opacity: {\n value: { min: 0.3, max: 1 },\n animation: {\n enable: true,\n speed: 2,\n minimumValue: 0.1,\n sync: false,\n },\n },\n shape: { type: 'circle' },\n size: { value: { min: 2, max: 5 } },\n shadow: {\n blur: 15,\n color: { value: isDark ? '#adff2f' : '#ffc107' },\n enable: true,\n offset: { x: 0, y: 0 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const geometryTheme: ParticleTheme = {\n id: 'geometry',\n name: '几何',\n icon: '🔷',\n description: '漂浮的抽象几何图形',\n backgroundGradient: 'linear-gradient(180deg, #0f0c29 0%, #302b63 50%, #24243e 100%)',\n options: (isDark: boolean) => ({\n ...baseConfig,\n interactivity: {\n detectsOn: 'window',\n events: {\n onClick: { enable: true, mode: 'push' },\n onHover: { enable: true, mode: 'repulse' },\n resize: { enable: true },\n },\n modes: {\n // 快速点击会持续触发 push,限制强度有助于降低连线/粒子带来的开销\n push: { quantity: 1 },\n repulse: { distance: 150, duration: 0.4 },\n },\n },\n particles: {\n color: {\n value: ['#ffb3d9', '#ff91c7', '#ffc0e5', '#ffd6e8'],\n },\n move: {\n direction: 'none',\n enable: true,\n outModes: { default: 'bounce' },\n random: false,\n speed: 1.5,\n straight: false,\n },\n number: {\n density: { enable: true, width: 1920, height: 1080 },\n value: 30,\n // 限制粒子总量,避免连续点击时粒子无限增加\n limit: { value: 60, mode: 'delete' },\n },\n opacity: {\n value: { min: 0.3, max: 0.7 },\n },\n rotate: {\n value: { min: 0, max: 360 },\n direction: 'random',\n animation: { enable: true, speed: 5 },\n },\n shape: {\n type: ['triangle', 'square', 'polygon'],\n options: {\n polygon: { sides: 6 },\n },\n },\n size: { value: { min: 10, max: 25 } },\n stroke: {\n width: 1,\n color: { value: isDark ? 'rgba(255,255,255,0.5)' : 'rgba(0,0,0,0.2)' },\n },\n shadow: {\n blur: 10,\n color: { value: isDark ? '#ffb3d9' : '#ff91c7' },\n enable: true,\n offset: { x: 2, y: 2 },\n },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const waveTheme: ParticleTheme = {\n id: 'wave',\n name: '粒子海洋',\n icon: '🌊',\n description: '3D 粒子波浪效果(需要 three.js)',\n isThreeJS: true,\n backgroundGradient: 'linear-gradient(180deg, #000000 0%, #0a1628 50%, #0d1f3c 100%)',\n options: () => ({\n ...baseConfig,\n particles: {\n number: { value: 0 },\n },\n }),\n};\n","import type { ParticleTheme } from './types';\nimport { baseConfig } from './base';\n\nexport const wave2dTheme: ParticleTheme = {\n id: 'wave2d',\n name: '轻量波浪',\n icon: '🌊',\n description: '轻量级 Canvas 2D 粒子波浪',\n isThreeJS: true,\n options: () => baseConfig,\n backgroundGradient: 'linear-gradient(180deg, #000000 0%, #0a1628 50%, #0d1f3c 100%)',\n};\n","export type { ParticleTheme, ThemeId } from './types';\nexport { baseConfig, DEFAULT_COLORS } from './base';\nexport { starlineTheme } from './starline';\nexport { snowTheme } from './snow';\nexport { bubbleTheme } from './bubble';\nexport { starsTheme } from './stars';\nexport { fireflyTheme } from './firefly';\nexport { geometryTheme } from './geometry';\nexport { waveTheme } from './wave';\nexport { wave2dTheme } from './wave2d';\n\nimport { starlineTheme } from './starline';\nimport { snowTheme } from './snow';\nimport { bubbleTheme } from './bubble';\nimport { starsTheme } from './stars';\nimport { fireflyTheme } from './firefly';\nimport { geometryTheme } from './geometry';\nimport { waveTheme } from './wave';\nimport { wave2dTheme } from './wave2d';\nimport type { ParticleTheme } from './types';\n\n/** 所有内置粒子主题(不包含 \"none\") */\nexport const particleThemes: ParticleTheme[] = [\n starlineTheme,\n snowTheme,\n bubbleTheme,\n starsTheme,\n fireflyTheme,\n geometryTheme,\n waveTheme,\n wave2dTheme,\n];\n\n/** 根据 ID 获取主题。找不到时回退到 starline。 */\nexport const getThemeById = (id: string): ParticleTheme => {\n return particleThemes.find((theme) => theme.id === id) || starlineTheme;\n};\n\nexport const DEFAULT_THEME_ID = 'starline';\n","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport type { ThemeId } from '../themes/types';\nimport { DEFAULT_THEME_ID } from '../themes';\n\ninterface ParticleContextValue {\n themeId: string;\n isDark: boolean;\n setTheme: (id: string) => void;\n setDark: (dark: boolean) => void;\n}\n\nconst ParticleContext = createContext<ParticleContextValue | null>(null);\n\nconst STORAGE_KEY = 'rpb-theme-id';\n\nexport interface ParticleProviderProps {\n /** 初始/默认主题 ID */\n defaultTheme?: ThemeId | string;\n /** 是否使用深色模式粒子颜色 */\n isDark?: boolean;\n /** 是否将主题选择持久化到 localStorage */\n persist?: boolean;\n children: React.ReactNode;\n}\n\n/**\n * 为子组件提供粒子主题状态。\n * 用此 Provider 包裹你的应用(或子树),即可无需显式传参地使用\n * `<ParticlesBackground />` 和 `<ThemeSelector />`。\n */\nexport const ParticleProvider: React.FC<ParticleProviderProps> = ({\n defaultTheme = DEFAULT_THEME_ID,\n isDark: isDarkProp = true,\n persist = true,\n children,\n}) => {\n const [themeId, setThemeId] = useState<string>(() => {\n if (persist && typeof window !== 'undefined') {\n return localStorage.getItem(STORAGE_KEY) || defaultTheme;\n }\n return defaultTheme;\n });\n const [isDark, setDark] = useState(isDarkProp);\n\n useEffect(() => {\n setDark(isDarkProp);\n }, [isDarkProp]);\n\n const setTheme = useCallback((id: string) => {\n setThemeId(id);\n if (persist && typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, id);\n }\n }, [persist]);\n\n return (\n <ParticleContext.Provider value={{ themeId, isDark, setTheme, setDark }}>\n {children}\n </ParticleContext.Provider>\n );\n};\n\n/** 访问当前粒子主题上下文。必须在 `<ParticleProvider>` 内使用。 */\nexport const useParticleTheme = (): ParticleContextValue => {\n const ctx = useContext(ParticleContext);\n if (!ctx) {\n throw new Error('useParticleTheme must be used within a <ParticleProvider>');\n }\n return ctx;\n};\n\n/**\n * 内部 Hook:如果上下文可用则返回上下文,否则回退到 props。\n * 这允许组件在有或没有 Provider 的情况下都能正常工作。\n */\nexport const useParticleThemeOptional = () => {\n return useContext(ParticleContext);\n};\n","import React, { useRef, useEffect } from 'react';\n\ninterface ParticleWaveProps {\n /** 波浪背后的 CSS 渐变或纯色背景 */\n background?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * 使用 Three.js 渲染的 3D 粒子海洋波浪。\n * Three.js 以动态方式加载 — 如果未安装,此组件不会渲染任何内容。\n */\nconst ParticleWave: React.FC<ParticleWaveProps> = ({\n background = 'linear-gradient(180deg, #000000 0%, #0a1628 50%, #0d1f3c 100%)',\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const animationRef = useRef<number>();\n const hasThree = useRef(true);\n\n useEffect(() => {\n let disposed = false;\n let cleanup: (() => void) | undefined;\n\n void (async () => {\n let THREE: any;\n try {\n const req = (globalThis as unknown as { require?: (id: string) => unknown }).require;\n if (typeof req === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n THREE = req('three');\n } else {\n const mod = await import('three');\n THREE = (mod as { default?: typeof mod }).default ?? mod;\n }\n } catch {\n hasThree.current = false;\n console.warn('[react-particle-backgrounds] 未安装 \"three\"。波浪主题需要它作为 peer dependency。');\n return;\n }\n\n if (disposed || !containerRef.current) return;\n\n const container = containerRef.current;\n const width = container.clientWidth;\n const height = container.clientHeight;\n\n const scene = new THREE.Scene();\n scene.background = null;\n\n const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);\n camera.position.set(0, 50, 100);\n camera.lookAt(0, 0, 0);\n\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setSize(width, height);\n renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n container.appendChild(renderer.domElement);\n\n const particleCount = 15000;\n const waveWidth = 200;\n const waveDepth = 100;\n\n const geometry = new THREE.BufferGeometry();\n const positions = new Float32Array(particleCount * 3);\n const colors = new Float32Array(particleCount * 3);\n const sizes = new Float32Array(particleCount);\n\n for (let i = 0; i < particleCount; i++) {\n const i3 = i * 3;\n positions[i3] = (Math.random() - 0.5) * waveWidth;\n positions[i3 + 1] = 0;\n positions[i3 + 2] = (Math.random() - 0.5) * waveDepth;\n\n const colorChoice = Math.random();\n if (colorChoice < 0.5) {\n colors[i3] = 0; colors[i3 + 1] = 0.8 + Math.random() * 0.2; colors[i3 + 2] = 1;\n } else if (colorChoice < 0.8) {\n colors[i3] = 0.1; colors[i3 + 1] = 0.3 + Math.random() * 0.3; colors[i3 + 2] = 0.9 + Math.random() * 0.1;\n } else {\n colors[i3] = 0.8 + Math.random() * 0.2; colors[i3 + 1] = 0.9 + Math.random() * 0.1; colors[i3 + 2] = 1;\n }\n sizes[i] = Math.random() * 2 + 0.5;\n }\n\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));\n geometry.setAttribute('size', new THREE.BufferAttribute(sizes, 1));\n\n const vertexShader = `\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n gl_PointSize = size * (300.0 / -mvPosition.z);\n gl_Position = projectionMatrix * mvPosition;\n }\n `;\n\n const fragmentShader = `\n varying vec3 vColor;\n void main() {\n float dist = length(gl_PointCoord - vec2(0.5));\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.0, 0.5, dist);\n float glow = exp(-dist * 3.0);\n vec3 finalColor = vColor + glow * 0.5;\n gl_FragColor = vec4(finalColor, alpha * 0.8);\n }\n `;\n\n const material = new THREE.ShaderMaterial({\n vertexShader, fragmentShader,\n transparent: true, vertexColors: true,\n blending: THREE.AdditiveBlending, depthWrite: false,\n });\n\n const particles = new THREE.Points(geometry, material);\n scene.add(particles);\n\n const bokehCount = 100;\n const bokehGeometry = new THREE.BufferGeometry();\n const bokehPositions = new Float32Array(bokehCount * 3);\n const bokehColors = new Float32Array(bokehCount * 3);\n const bokehSizes = new Float32Array(bokehCount);\n\n for (let i = 0; i < bokehCount; i++) {\n const i3 = i * 3;\n bokehPositions[i3] = (Math.random() - 0.5) * waveWidth * 1.5;\n bokehPositions[i3 + 1] = Math.random() * -30 - 10;\n bokehPositions[i3 + 2] = (Math.random() - 0.5) * waveDepth * 2;\n bokehColors[i3] = 0.2; bokehColors[i3 + 1] = 0.5 + Math.random() * 0.3; bokehColors[i3 + 2] = 1;\n bokehSizes[i] = Math.random() * 15 + 8;\n }\n\n bokehGeometry.setAttribute('position', new THREE.BufferAttribute(bokehPositions, 3));\n bokehGeometry.setAttribute('color', new THREE.BufferAttribute(bokehColors, 3));\n bokehGeometry.setAttribute('size', new THREE.BufferAttribute(bokehSizes, 1));\n\n const bokehMaterial = new THREE.ShaderMaterial({\n vertexShader,\n fragmentShader: `\n varying vec3 vColor;\n void main() {\n float dist = length(gl_PointCoord - vec2(0.5));\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.2, 0.5, dist);\n gl_FragColor = vec4(vColor, alpha * 0.3);\n }\n `,\n transparent: true, vertexColors: true,\n blending: THREE.AdditiveBlending, depthWrite: false,\n });\n\n const bokehParticles = new THREE.Points(bokehGeometry, bokehMaterial);\n scene.add(bokehParticles);\n\n const dropCount = 150;\n const trailLength = 12;\n\n interface RainDrop {\n x: number; z: number; y: number;\n velocity: number; active: boolean;\n maxHeight: number; trail: number[];\n opacity: number;\n }\n\n const rainDrops: RainDrop[] = [];\n for (let i = 0; i < dropCount; i++) {\n const shouldActivate = Math.random() < 0.1;\n const x = (Math.random() - 0.5) * waveWidth * 0.9;\n const z = (Math.random() - 0.5) * waveDepth * 0.7;\n const waveHeight = Math.sin(x * 0.05) * 8 + Math.sin(z * 0.08) * 5;\n const startHeight = shouldActivate ? waveHeight + Math.random() * 40 : -200;\n rainDrops.push({\n x, z, y: startHeight,\n velocity: shouldActivate ? 0.5 + Math.random() * 0.7 : 0,\n active: shouldActivate,\n maxHeight: waveHeight + 80 + Math.random() * 120,\n trail: new Array(trailLength).fill(startHeight),\n opacity: shouldActivate ? 1.0 : 0,\n });\n }\n\n const trailPointCount = dropCount * trailLength;\n const dropTrailGeometry = new THREE.BufferGeometry();\n const dropTrailPositions = new Float32Array(trailPointCount * 3);\n const dropTrailColors = new Float32Array(trailPointCount * 3);\n const dropTrailSizes = new Float32Array(trailPointCount);\n\n for (let i = 0; i < dropCount; i++) {\n for (let j = 0; j < trailLength; j++) {\n dropTrailSizes[i * trailLength + j] = 4 * (1 - j / trailLength) * 0.5;\n }\n }\n\n dropTrailGeometry.setAttribute('position', new THREE.BufferAttribute(dropTrailPositions, 3));\n dropTrailGeometry.setAttribute('color', new THREE.BufferAttribute(dropTrailColors, 3));\n dropTrailGeometry.setAttribute('size', new THREE.BufferAttribute(dropTrailSizes, 1));\n\n const dropTrailMaterial = new THREE.ShaderMaterial({\n vertexShader,\n fragmentShader: `\n varying vec3 vColor;\n void main() {\n float dist = length(gl_PointCoord - vec2(0.5));\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.0, 0.5, dist);\n gl_FragColor = vec4(vColor, alpha * 0.8);\n }\n `,\n transparent: true, vertexColors: true,\n blending: THREE.AdditiveBlending, depthWrite: false,\n });\n\n const dropTrailParticles = new THREE.Points(dropTrailGeometry, dropTrailMaterial);\n scene.add(dropTrailParticles);\n\n const dropHeadGeometry = new THREE.BufferGeometry();\n const dropHeadPositions = new Float32Array(dropCount * 3);\n const dropHeadColors = new Float32Array(dropCount * 3);\n const dropHeadSizes = new Float32Array(dropCount);\n for (let i = 0; i < dropCount; i++) {\n dropHeadSizes[i] = (6 + Math.random() * 4) * 0.5;\n }\n\n dropHeadGeometry.setAttribute('position', new THREE.BufferAttribute(dropHeadPositions, 3));\n dropHeadGeometry.setAttribute('color', new THREE.BufferAttribute(dropHeadColors, 3));\n dropHeadGeometry.setAttribute('size', new THREE.BufferAttribute(dropHeadSizes, 1));\n\n const dropHeadMaterial = new THREE.ShaderMaterial({\n vertexShader,\n fragmentShader: `\n varying vec3 vColor;\n void main() {\n float dist = length(gl_PointCoord - vec2(0.5));\n if (dist > 0.5) discard;\n float alpha = 1.0 - smoothstep(0.0, 0.5, dist);\n float glow = exp(-dist * 2.0);\n vec3 finalColor = vColor + glow * 0.8;\n gl_FragColor = vec4(finalColor, alpha);\n }\n `,\n transparent: true, vertexColors: true,\n blending: THREE.AdditiveBlending, depthWrite: false,\n });\n\n const dropHeadParticles = new THREE.Points(dropHeadGeometry, dropHeadMaterial);\n scene.add(dropHeadParticles);\n\n let time = 0;\n let lastSpawnTime = 0;\n\n const getWaveHeight = (x: number, z: number, t: number) =>\n Math.sin(x * 0.05 + t) * 8 + Math.sin(z * 0.08 + t * 0.8) * 5 + Math.sin((x + z) * 0.03 + t * 1.2) * 3;\n\n const activateDrop = (drop: RainDrop) => {\n drop.x = (Math.random() - 0.5) * waveWidth * 0.9;\n drop.z = (Math.random() - 0.5) * waveDepth * 0.7;\n const wh = getWaveHeight(drop.x, drop.z, time);\n drop.y = wh;\n drop.velocity = 0.5 + Math.random() * 0.7;\n drop.maxHeight = wh + 80 + Math.random() * 120;\n drop.active = true;\n drop.opacity = 0.5;\n drop.trail.fill(wh);\n };\n\n const animate = () => {\n time += 0.02;\n const wavePos = particles.geometry.attributes.position.array as Float32Array;\n for (let i = 0; i < particleCount; i++) {\n const i3 = i * 3;\n wavePos[i3 + 1] = getWaveHeight(wavePos[i3], wavePos[i3 + 2], time);\n }\n particles.geometry.attributes.position.needsUpdate = true;\n\n const tPos = dropTrailParticles.geometry.attributes.position.array as Float32Array;\n const tCol = dropTrailParticles.geometry.attributes.color.array as Float32Array;\n const hPos = dropHeadParticles.geometry.attributes.position.array as Float32Array;\n const hCol = dropHeadParticles.geometry.attributes.color.array as Float32Array;\n\n let activeCount = 0;\n const inactiveIndices: number[] = [];\n\n for (let i = 0; i < dropCount; i++) {\n const drop = rainDrops[i];\n if (drop.active) {\n activeCount++;\n for (let j = trailLength - 1; j > 0; j--) drop.trail[j] = drop.trail[j - 1];\n drop.trail[0] = drop.y;\n drop.velocity = Math.max(drop.velocity * 0.995, 0.3);\n drop.y += drop.velocity;\n if (drop.opacity < 1) drop.opacity = Math.min(drop.opacity + 0.05, 1);\n if (drop.y > drop.maxHeight) {\n drop.opacity -= 0.03;\n if (drop.opacity <= 0) {\n drop.active = false; drop.y = -200; drop.trail.fill(-200);\n inactiveIndices.push(i);\n }\n }\n } else {\n inactiveIndices.push(i);\n }\n }\n\n if (time - lastSpawnTime >= 0.1 && inactiveIndices.length > 0) {\n const spawnCount = Math.min(2 + Math.floor(Math.random() * 2), inactiveIndices.length);\n const shuffled = [...inactiveIndices].sort(() => Math.random() - 0.5);\n for (let n = 0; n < spawnCount; n++) activateDrop(rainDrops[shuffled[n]]);\n lastSpawnTime = time;\n }\n\n const targetActive = 20;\n const needActivate = Math.max(3, targetActive - activeCount);\n const remaining = inactiveIndices.filter(i => !rainDrops[i].active);\n if (remaining.length > 0) {\n const shuffled = [...remaining].sort(() => Math.random() - 0.5);\n for (let n = 0; n < Math.min(needActivate, shuffled.length); n++) activateDrop(rainDrops[shuffled[n]]);\n }\n\n for (let i = 0; i < dropCount; i++) {\n if (!rainDrops[i].active && Math.random() < 0.25) activateDrop(rainDrops[i]);\n }\n\n for (let i = 0; i < dropCount; i++) {\n const drop = rainDrops[i];\n const hi3 = i * 3;\n hPos[hi3] = drop.x; hPos[hi3 + 1] = drop.y; hPos[hi3 + 2] = drop.z;\n const brightness = drop.active ? (0.8 + Math.sin(time * 5 + i) * 0.2) : 0;\n hCol[hi3] = 0.5 * brightness * drop.opacity;\n hCol[hi3 + 1] = 1.0 * brightness * drop.opacity;\n hCol[hi3 + 2] = 1.0 * brightness * drop.opacity;\n\n for (let j = 0; j < trailLength; j++) {\n const pi = (i * trailLength + j) * 3;\n tPos[pi] = drop.x; tPos[pi + 1] = drop.trail[j]; tPos[pi + 2] = drop.z;\n const fade = 1 - (j / trailLength);\n tCol[pi] = 0.6 * fade * drop.opacity;\n tCol[pi + 1] = 1.0 * fade * drop.opacity;\n tCol[pi + 2] = 1.0 * fade * drop.opacity;\n }\n }\n\n dropTrailParticles.geometry.attributes.position.needsUpdate = true;\n dropTrailParticles.geometry.attributes.color.needsUpdate = true;\n dropHeadParticles.geometry.attributes.position.needsUpdate = true;\n dropHeadParticles.geometry.attributes.color.needsUpdate = true;\n\n camera.position.x = Math.sin(time * 0.3) * 5;\n camera.lookAt(0, 0, 0);\n renderer.render(scene, camera);\n animationRef.current = requestAnimationFrame(animate);\n };\n\n animate();\n\n const handleResize = () => {\n const w = container.clientWidth;\n const h = container.clientHeight;\n camera.aspect = w / h;\n camera.updateProjectionMatrix();\n renderer.setSize(w, h);\n };\n window.addEventListener('resize', handleResize);\n\n cleanup = () => {\n window.removeEventListener('resize', handleResize);\n if (animationRef.current) cancelAnimationFrame(animationRef.current);\n if (renderer.domElement.parentNode === container) {\n container.removeChild(renderer.domElement);\n }\n geometry.dispose(); material.dispose();\n bokehGeometry.dispose(); bokehMaterial.dispose();\n dropTrailGeometry.dispose(); dropTrailMaterial.dispose();\n dropHeadGeometry.dispose(); dropHeadMaterial.dispose();\n renderer.dispose();\n };\n })();\n\n return () => {\n disposed = true;\n cleanup?.();\n };\n }, [background]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: 1,\n pointerEvents: 'none',\n background,\n ...style,\n }}\n />\n );\n};\n\nexport default ParticleWave;\n","import React, { useRef, useEffect } from 'react';\n\ninterface ParticleWave2DProps {\n /** 波浪背后的 CSS 渐变或纯色背景 */\n background?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\ninterface Particle {\n x: number;\n y: number;\n z: number;\n vx: number;\n vy: number;\n size: number;\n color: string;\n alpha: number;\n}\n\n/**\n * 使用 Canvas 2D 渲染的粒子海洋波浪效果。\n * 轻量级实现,无需 Three.js 依赖。\n */\nconst ParticleWave2D: React.FC<ParticleWave2DProps> = ({\n background = 'linear-gradient(180deg, #000000 0%, #0a1628 50%, #0d1f3c 100%)',\n className,\n style,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const animationRef = useRef<number>();\n const particlesRef = useRef<Particle[]>([]);\n const timeRef = useRef(0);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const resize = () => {\n canvas.width = canvas.offsetWidth * window.devicePixelRatio;\n canvas.height = canvas.offsetHeight * window.devicePixelRatio;\n ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n };\n\n resize();\n\n // 初始化粒子\n const particleCount = 800;\n const particles: Particle[] = [];\n\n for (let i = 0; i < particleCount; i++) {\n const colorChoice = Math.random();\n let color: string;\n\n if (colorChoice < 0.5) {\n color = `rgba(0, ${Math.floor(200 + Math.random() * 55)}, 255, `;\n } else if (colorChoice < 0.8) {\n color = `rgba(25, ${Math.floor(76 + Math.random() * 76)}, ${Math.floor(230 + Math.random() * 25)}, `;\n } else {\n color = `rgba(${Math.floor(200 + Math.random() * 55)}, ${Math.floor(230 + Math.random() * 25)}, 255, `;\n }\n\n particles.push({\n x: Math.random() * canvas.offsetWidth,\n y: Math.random() * canvas.offsetHeight,\n z: Math.random() * 1000,\n vx: (Math.random() - 0.5) * 0.5,\n vy: (Math.random() - 0.5) * 0.3,\n size: Math.random() * 2 + 1,\n color,\n alpha: Math.random() * 0.5 + 0.3,\n });\n }\n\n particlesRef.current = particles;\n\n const animate = () => {\n const width = canvas.offsetWidth;\n const height = canvas.offsetHeight;\n\n ctx.clearRect(0, 0, width, height);\n timeRef.current += 0.01;\n\n particles.forEach((p) => {\n // 波浪运动\n const wave = Math.sin(p.x * 0.01 + timeRef.current) * 20 +\n Math.sin(p.z * 0.005 + timeRef.current * 0.5) * 15;\n\n p.y += p.vy + Math.sin(timeRef.current + p.x * 0.01) * 0.2;\n p.x += p.vx;\n p.z += 0.5;\n\n // 边界检测\n if (p.x < 0 || p.x > width) p.vx *= -1;\n if (p.y < 0 || p.y > height) p.vy *= -1;\n if (p.z > 1000) p.z = 0;\n\n // 3D 透视效果\n const scale = 1000 / (1000 + p.z);\n const x = p.x;\n const y = p.y + wave;\n const size = p.size * scale;\n const alpha = p.alpha * scale;\n\n // 绘制粒子\n ctx.beginPath();\n ctx.arc(x, y, size, 0, Math.PI * 2);\n ctx.fillStyle = p.color + alpha + ')';\n ctx.fill();\n\n // 添加光晕\n if (scale > 0.7) {\n const gradient = ctx.createRadialGradient(x, y, 0, x, y, size * 3);\n gradient.addColorStop(0, p.color + (alpha * 0.3) + ')');\n gradient.addColorStop(1, p.color + '0)');\n ctx.fillStyle = gradient;\n ctx.fillRect(x - size * 3, y - size * 3, size * 6, size * 6);\n }\n });\n\n animationRef.current = requestAnimationFrame(animate);\n };\n\n animate();\n\n const handleResize = () => resize();\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n }\n };\n }, []);\n\n return (\n <div\n className={className}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: 1,\n pointerEvents: 'none',\n background,\n ...style,\n }}\n >\n <canvas\n ref={canvasRef}\n style={{\n width: '100%',\n height: '100%',\n display: 'block',\n }}\n />\n </div>\n );\n};\n\nexport default ParticleWave2D;\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport Particles, { initParticlesEngine } from '@tsparticles/react';\nimport { loadSlim } from '@tsparticles/slim';\nimport type { Container } from '@tsparticles/engine';\nimport { getThemeById, DEFAULT_THEME_ID } from '../themes';\nimport type { ThemeId } from '../themes/types';\nimport { useParticleThemeOptional } from '../context/ParticleContext';\nimport ParticleWave from './ParticleWave';\nimport ParticleWave2D from './ParticleWave2D';\n\nlet instanceCounter = 0;\n\nexport interface ParticlesBackgroundProps {\n /**\n * 要显示的主题 ID。如果在 `<ParticleProvider>` 内使用,\n * 此属性可选,会自动使用 Provider 中的主题。\n */\n theme?: ThemeId | string;\n /** 深色模式开关 — 影响支持的主题的粒子颜色 */\n isDark?: boolean;\n /** 粒子加载完成的回调 */\n onLoaded?: (container?: Container) => void;\n /** 自定义 CSS 类名 */\n className?: string;\n /** 自定义行内样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * 渲染全屏粒子背景。\n *\n * 可以通过 props 独立使用:\n * ```tsx\n * <ParticlesBackground theme=\"starline\" isDark />\n * ```\n *\n * 也可以在 `<ParticleProvider>` 内使用以共享状态:\n * ```tsx\n * <ParticleProvider defaultTheme=\"snow\">\n * <ParticlesBackground />\n * </ParticleProvider>\n * ```\n */\nconst ParticlesBackground: React.FC<ParticlesBackgroundProps> = ({\n theme: themeProp,\n isDark: isDarkProp,\n onLoaded,\n className,\n style,\n}) => {\n const [init, setInit] = useState(false);\n const [instanceId, setInstanceId] = useState(() => ++instanceCounter);\n const containerRef = useRef<Container | undefined>(undefined);\n const isFirstMount = useRef(true);\n const ctx = useParticleThemeOptional();\n\n const themeId = themeProp ?? ctx?.themeId ?? DEFAULT_THEME_ID;\n const isDark = isDarkProp ?? ctx?.isDark ?? true;\n const theme = getThemeById(themeId);\n\n useEffect(() => {\n initParticlesEngine(async (engine) => {\n await loadSlim(engine);\n }).then(() => {\n setInit(true);\n }).catch(() => {\n setInit(true);\n });\n }, []);\n\n useEffect(() => {\n if (!isFirstMount.current) {\n setInstanceId(++instanceCounter);\n }\n isFirstMount.current = false;\n\n return () => {\n if (containerRef.current) {\n containerRef.current.destroy();\n containerRef.current = undefined;\n }\n };\n }, [themeId, isDark]);\n\n const particlesLoaded = useCallback(async (container?: Container) => {\n if (containerRef.current && containerRef.current !== container) {\n containerRef.current.destroy();\n }\n containerRef.current = container;\n onLoaded?.(container);\n }, [onLoaded]);\n\n const options = useMemo(() => theme.options(isDark), [theme, isDark]);\n\n if (themeId === 'none') return null;\n\n if (theme.isThreeJS) {\n const WaveComponent = themeId === 'wave2d' ? ParticleWave2D : ParticleWave;\n return (\n <WaveComponent\n background={theme.backgroundGradient || theme.backgroundColor}\n className={className}\n style={style}\n />\n );\n }\n\n if (!init) return null;\n\n const particlesId = `rpb-tsparticles-${instanceId}`;\n\n return (\n <Particles\n id={particlesId}\n key={particlesId}\n className={className}\n style={style}\n particlesLoaded={particlesLoaded}\n options={options}\n />\n );\n};\n\nexport default ParticlesBackground;\n","import React, { useState, useMemo, useCallback } from 'react';\nimport { particleThemes, getThemeById } from '../themes';\nimport { useParticleTheme } from '../context/ParticleContext';\n\nexport interface ThemeSelectorProps {\n /** 在屏幕上的位置 */\n position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n /** 激活状态的强调色 */\n accentColor?: string;\n}\n\nconst POSITION_STYLES: Record<string, React.CSSProperties> = {\n 'bottom-right': { bottom: 80, right: 16 },\n 'bottom-left': { bottom: 80, left: 16 },\n 'top-right': { top: 80, right: 16 },\n 'top-left': { top: 80, left: 16 },\n};\n\nconst BUTTON_BASE_STYLE: React.CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n width: 44,\n height: 44,\n borderRadius: 12,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'rgba(255, 255, 255, 0.7)',\n backdropFilter: 'blur(12px)',\n WebkitBackdropFilter: 'blur(12px)',\n border: '1px solid rgba(255, 255, 255, 0.5)',\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.08)',\n cursor: 'pointer',\n fontSize: 20,\n transition: 'transform 0.3s, box-shadow 0.3s',\n};\n\nconst BACKDROP_STYLE: React.CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 10000,\n background: 'rgba(0, 0, 0, 0.3)',\n transition: 'opacity 0.3s',\n};\n\nconst DRAWER_BASE_STYLE: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n width: 320,\n maxWidth: '85vw',\n height: '100vh',\n zIndex: 10001,\n background: '#fff',\n boxShadow: '-4px 0 24px rgba(0, 0, 0, 0.12)',\n transition: 'transform 0.3s ease',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n};\n\nconst HEADER_STYLE: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid #f0f0f0',\n};\n\nconst CLOSE_BUTTON_STYLE: React.CSSProperties = {\n background: 'none',\n border: 'none',\n fontSize: 20,\n cursor: 'pointer',\n color: '#999',\n padding: 4,\n};\n\nconst LIST_STYLE: React.CSSProperties = {\n padding: 16,\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n};\n\nconst TIP_CONTAINER_STYLE: React.CSSProperties = {\n padding: '0 16px 16px',\n marginTop: 'auto',\n};\n\nconst TIP_STYLE: React.CSSProperties = {\n padding: 16,\n background: '#f9fafb',\n borderRadius: 12,\n fontSize: 13,\n color: '#6b7280',\n lineHeight: 1.6,\n};\n\nconst THEME_LIST = [...particleThemes, {\n id: 'none',\n name: '无',\n icon: '🚫',\n description: '关闭粒子效果',\n}];\n\n/**\n * 浮动主题选择器按钮 + 抽屉面板。\n * 必须在 `<ParticleProvider>` 内使用。\n *\n * ```tsx\n * <ParticleProvider>\n * <ParticlesBackground />\n * <ThemeSelector />\n * </ParticleProvider>\n * ```\n */\nconst ThemeSelector: React.FC<ThemeSelectorProps> = ({\n position = 'bottom-right',\n accentColor = '#3b82f6',\n}) => {\n const [open, setOpen] = useState(false);\n const { themeId, setTheme } = useParticleTheme();\n const currentTheme = getThemeById(themeId);\n\n const drawerSide = position.includes('right') ? 'right' : 'left';\n\n const buttonStyle = useMemo(() => ({\n ...BUTTON_BASE_STYLE,\n ...POSITION_STYLES[position],\n }), [position]);\n\n const drawerStyle = useMemo(() => ({\n ...DRAWER_BASE_STYLE,\n [drawerSide]: 0,\n transform: open ? 'translateX(0)' : `translateX(${drawerSide === 'right' ? '100%' : '-100%'})`,\n }), [drawerSide, open]);\n\n const handleOpen = useCallback(() => setOpen(true), []);\n const handleClose = useCallback(() => setOpen(false), []);\n const handleThemeClick = useCallback((id: string) => {\n setTheme(id);\n }, [setTheme]);\n\n return (\n <>\n <style>{`\n .rpb-trigger-button:hover {\n transform: scale(1.05) translateY(-2px);\n }\n .rpb-theme-item:hover {\n border-color: #e0e0e0 !important;\n }\n .rpb-theme-item.active:hover {\n border-color: ${accentColor} !important;\n }\n `}</style>\n\n <button\n className=\"rpb-trigger-button\"\n onClick={handleOpen}\n title=\"主题设置\"\n style={buttonStyle}\n >\n {currentTheme.icon}\n </button>\n\n {open && <div onClick={handleClose} style={BACKDROP_STYLE} />}\n\n <div style={drawerStyle}>\n <div style={HEADER_STYLE}>\n <span style={{ fontWeight: 600, fontSize: 16 }}>粒子主题</span>\n <button onClick={handleClose} style={CLOSE_BUTTON_STYLE}>\n &times;\n </button>\n </div>\n\n <div style={LIST_STYLE}>\n {THEME_LIST.map((theme) => {\n const isActive = theme.id === themeId;\n return (\n <div\n key={theme.id}\n className={`rpb-theme-item${isActive ? ' active' : ''}`}\n onClick={() => handleThemeClick(theme.id)}\n style={{\n padding: 16,\n borderRadius: 12,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n transition: 'all 0.2s',\n border: `2px solid ${isActive ? accentColor : 'transparent'}`,\n background: isActive ? `${accentColor}10` : '#f5f5f5',\n }}\n >\n <div\n style={{\n width: 48,\n height: 48,\n borderRadius: 12,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 24,\n background: isActive ? accentColor : '#e5e5e5',\n flexShrink: 0,\n }}\n >\n {theme.icon}\n </div>\n\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 600, fontSize: 14, color: '#1f2937' }}>\n {theme.name}\n </div>\n <div style={{ fontSize: 12, color: '#9ca3af', marginTop: 2 }}>\n {theme.description}\n </div>\n </div>\n\n {isActive && (\n <div\n style={{\n width: 24,\n height: 24,\n borderRadius: '50%',\n background: accentColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n <div style={TIP_CONTAINER_STYLE}>\n <div style={TIP_STYLE}>\n 你的主题选择会自动保存,下次访问时将自动恢复。\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ThemeSelector;\n"],"names":["generatedAttribute","mouseDownEvent","mouseUpEvent","mouseLeaveEvent","mouseOutEvent","mouseMoveEvent","touchStartEvent","touchEndEvent","touchMoveEvent","touchCancelEvent","resizeEvent","visibilityChangeEvent","errorPrefix","percentDenominator","half","millisecondsToSeconds","originPoint","defaultTransform","randomColorValue","midColorValue","double","doublePI","defaultFps","generatedTrue","generatedFalse","canvasTag","defaultRetryCount","squareExp","qTreeCapacity","defaultRemoveQuantity","defaultRatio","defaultReduceFactor","subdivideCount","inverseFactorNumerator","rgbMax","hMax","sMax","lMax","hMin","sMin","hPhase","empty","quarter","threeQuarter","minVelocity","defaultTransformValue","minimumSize","minimumLength","zIndexFactorOffset","defaultOpacity","clickRadius","touchEndLengthOffset","minCoordinate","removeDeleteCount","removeMinIndex","defaultFpsLimit","minFpsLimit","canvasFirstIndex","loadRandomFactor","loadMinIndex","one","none","decayOffset","tryCountIncrement","minRetries","rollFactor","minZ","defaultRadius","posOffset","sizeFactor","minLimit","countOffset","minCount","minIndex","lengthOffset","defaultDensityFactor","deleteCount","touchDelay","manualDefaultPosition","defaultAngle","identity","minStrokeWidth","lFactor","lMin","rgbFactor","triple","sextuple","sNormalizedOffset","phaseNumerator","defaultRgbMin","defaultVelocity","defaultLoops","defaultTime","MoveDirection","isBoolean","arg","isString","isNumber","isObject","isArray","isNull","Vector3d","xOrCoords","y","z","angle","length","coords3d","source","x","v","n","c","v3d","Vector","_random","_animationLoop","cb","idx","getRandom","clamp","animate","fn","cancelAnimation","handle","num","min","max","mix","comp1","comp2","weight1","weight2","randomInRange","r","getRangeMax","minOffset","getRangeMin","getRangeValue","value","setRangeValue","getDistances","pointA","pointB","dx","dy","getDistance","degToRad","degrees","getParticleDirectionAngle","direction","position","center","getParticleBaseVelocity","baseVelocity","collisionVelocity","v1","v2","m1","m2","calcExactPositionOrRandomFromSize","data","_a","_b","parseAlpha","input","AnimationMode","AnimationStatus","DestroyType","OutModeDirection","PixelMode","StartValueType","_logger","getLogger","memoize","cache","args","key","result","rectSideBounce","res","pSide","pOtherSide","rectSide","rectOtherSide","velocity","factor","checkSelector","element","selectors","executeOnSingleOrMultiple","selector","t","isSsr","hasMatchMedia","safeMatchMedia","query","safeIntersectionObserver","callback","safeMutationObserver","isInArray","array","loadFont","font","weight","arrayRandomIndex","itemFromArray","index","useIndex","isPointInside","point","size","offset","radius","areBoundsInside","calculateBounds","bounds","inside","deepExtend","destination","sources","sourceIsArray","sourceDict","destDict","isDivModeEnabled","mode","divs","findItemFromSingleOrMultiple","divModeExecute","div","divMode","singleDivModeExecute","circleBounceDataFromParticle","p","circleBounce","p1","p2","xVelocityDiff","yVelocityDiff","pos1","pos2","xDist","yDist","u1","u2","vFinal1","vFinal2","rectBounce","particle","divBounds","pPos","bounceOptions","resH","resV","obj","item","itemFromSingleOrMultiple","initParticleNumericAnimationValue","options","pxRatio","valueRange","animationOptions","autoStatus","getPositionOrSize","positionOrSize","canvasSize","_","rest","getPosition","checkDestroy","destroyType","minValue","maxValue","updateAnimation","changeDirection","delta","decay","cloneStyle","style","clonedStyle","styleKey","styleValue","stylePriority","_d","_c","computeFullScreenStyle","zIndex","fullScreenStyle","radix","getFullScreenStyle","AlterType","stringToRgba","engine","manager","rangeColorToRgb","color","colorToRgb","getRandomRgbColor","stringToRgb","rangeColorToHsl","rgb","rgbToHsl","r1","g1","b1","hslToRgb","hsl","h","s","l","hNormalized","sNormalized","lNormalized","grayscaleValue","channel","temp1","temp2","temp3","temp3Offset","phaseThird","red","green","blue","hslaToRgba","hsla","rgbResult","fixedMin","fixedMax","getStyleFromRgb","opacity","getStyleFromHsl","colorMix","color1","color2","size1","size2","rgb1","rgb2","getLinkColor","linkColor","sourceColor","destColor","hslColor","getLinkRandomColor","optColor","blink","consent","getHslFromAnimation","animation","getHslAnimationFromHsl","reduceFactor","resColor","setColorAnimation","colorValue","colorAnimation","updateColorValue","range","decrease","updateColor","ranges","drawLine","context","begin","end","paintBase","dimension","baseColor","paintImage","image","clear","drawParticle","container","colorStyles","backgroundMask","composite","shadow","transform","pos","rotateData","rotating","transformData","shadowColor","strokeWidth","drawData","drawShape","drawShapeAfterDraw","drawEffect","drawer","drawPlugin","plugin","drawParticlePlugin","alterHsl","type","setTransformValue","newFactor","newValue","setStyle","canvas","important","elementStyle","keys","Canvas","updater","ctx","zOpacity","fill","stroke","updaterTransform","fColor","sColor","cover","coverRgb","coverColor","resolve","reject","img","evt","trail","trailFill","fillColor","observer","pointerEvents","originalStyle","stdSize","pfColor","psColor","zIndexOptions","zIndexFactor","zOpacityFactor","strokeOpacity","zStrokeOpacity","obs","records","record","background","standardSize","retinaSize","currentSize","newSize","oldSize","needsRefresh","InteractivityDetect","manageListener","event","handler","add","addOptions","removeOptions","EventListeners","e","mouseInteractivity","mousePos","onClick","mediaEvent","defaultThemes","themeName","theme","handleResize","mouseLeaveTmpEvent","handlers","interactivityEl","html","detectType","canvasEl","mediaMatch","entries","interactivity","mouse","handled","mousePosition","mouseEvent","clientRect","target","sourceRect","targetRect","canvasRect","touchEvent","lastTouch","touches","touch","EventType","OptionsColor","Background","BackgroundMaskCover","BackgroundMask","FullScreen","ClickEvent","DivType","DivEvent","Parallax","HoverEvent","ResizeEvent","Events","onDiv","tmp","Modes","interactors","interactor","Interactivity","detectsOn","ManualParticle","ResponsiveMode","Responsive","ThemeMode","ThemeDefault","Theme","AnimationOptions","RangedAnimationOptions","ColorAnimation","HslAnimation","AnimatableColor","CollisionMode","CollisionsAbsorb","CollisionsOverlap","ValueWithRandom","AnimationValueWithRandom","RangedAnimationValueWithRandom","ParticlesBounceFactor","ParticlesBounce","Collisions","Effect","effect","MoveAngle","MoveAttract","rotateX","rotateY","MoveCenter","MoveGravity","MovePath","MoveTrailFill","MoveTrail","OutMode","OutModes","Spin","Move","outModes","OpacityAnimation","Opacity","ParticlesDensity","width","height","LimitMode","ParticlesNumberLimit","ParticlesNumber","Shadow","Shape","shape","SizeAnimation","Size","Stroke","ZIndex","ParticlesOptions","group","strokeToLoad","updaters","loadOptions","sourceOptionsArr","sourceOptions","loadParticlesOptions","Options","preset","detectRetina","fpsLimit","fullScreen","responsive","optResponsive","a","b","existingTheme","optTheme","defaultOptions","responsiveOptions","name","chosenTheme","clientDarkMode","defaultTheme","InteractorType","InteractionManager","ParticleOutType","loadEffectData","effectOptions","id","reduceDuplicates","effectData","loadShapeData","shapeOptions","shapeData","fixOutMode","diameter","Particle","tryCount","pluginPos","exactPosition","fixHorizontal","outMode","fixVertical","moveOptions","rad","radOffset","collisionsOptions","overlapOptions","retries","backFactor","backSum","zIndexValue","override","pathGenerator","shapeDrawer","overrideOptions","mainOptions","particlesOptions","effectType","shapeType","overrideEffectType","overrideShapeType","availableEffects","availableShapes","pathOptions","particles","effectDrawer","sideCountFunc","mover","_e","_f","Point","RangeType","BaseRange","Circle","distPos","circleRange","rSum","dist","Rectangle","rectRange","w","w2","h2","QuadTree","rectangle","capacity","i","fixedIndex","sub","check","qTreeRectangle","Particles","manualCount","groupOptions","numberOptions","densityFactor","optParticlesNumber","optParticlesLimit","particlesNumber","particlesCount","densityOptions","initializer","canAdd","zIdx","limitMode","limit","currentCount","countToRemove","condition","groups","j","nb","quantity","deleted","particlesToDelete","resizeFactor","checkDelete","zArray","Retina","ratio","moveDistance","props","maxDistance","guardCheck","initDelta","smooth","loadContainerOptions","Container","entry","timestamp","el","clickOrTouchHandler","posRetina","clickHandler","touchStartHandler","touched","touchMoved","touchMoveHandler","touchEndHandler","touchCancelHandler","generator","remove","mainArr","force","refreshTime","frame","effects","shapes","availablePlugins","zLayers","duration","delay","needsUpdate","start","newMaxWidth","EventDispatcher","listener","arr","listeners","getItemsFromInitializer","map","initializers","getDataFromUrl","url","response","getCanvasFromContainer","domContainer","existingCanvases","fullPercent","getDomContainer","Engine","config","refresh","easing","interactorInitializer","moverInitializer","updaterInitializer","validType","pluginVersion","items","params","currentOptions","oldIndex","newItem","old","init","ExternalInteractorBase","ParticlesInteractorBase","RotateDirection","GradientType","EasingType","tsParticles","f","m","d","moveSpeedFactor","minSpinRadius","spinFactor","applyDistance","initialPosition","dxFixed","dyFixed","hDistance","vDistance","hasHDistance","hasVDistance","vel","move","moveSpeed","maxSpeed","moveDrift","applyPath","gravityOptions","gravityFactor","zVelocityFactor","spin","spinClockwise","updateFunc","maxCanvasSize","halfMaxSize","path","getProximitySpeedFactor","initSpin","spinOptions","spinPos","spinCenter","distance","spinAcceleration","diffFactor","defaultSizeFactor","defaultDeltaFactor","BaseMover","particleOptions","slowFactor","baseSpeed","maxSize","deltaFactor","loadBaseMover","minAngle","origin","drawCircle","sides","maxAngle","CircleDrawer","loadCircleShape","ColorUpdater","hAnimation","sAnimation","lAnimation","loadColorUpdater","RgbIndexes","shorthandHexRegex","hexRegex","hexRadix","defaultAlpha","alphaFactor","HexColorManager","hexColor","hexFixed","g","loadHexColorPlugin","HslIndexes","HslColorManager","regex","minLength","loadHslColorPlugin","OpacityUpdater","opacityOptions","opacityAnimation","loadOpacityUpdater","boundsMin","bounceHorizontal","bounced","newVelocity","minPos","bounceVertical","BounceOutMode","DestroyOutMode","_delta","vx","vy","NoneOutMode","pRadius","minDistance","OutOutMode","circVec","newDx","newDy","warp","newPos","sizeValue","nextBounds","checkOutMode","OutOfCanvasUpdater","getUpdater","loadOutModesUpdater","RgbColorManager","rgbColor","loadRgbColorPlugin","minLoops","SizeUpdater","sizeOptions","sizeAnimation","loadSizeUpdater","loadBasic","loadEasingQuadPlugin","drawEmoji","previousAlpha","defaultFont","noPadding","EmojiDrawer","validTypes","promises","_container","emoji","emojiOptions","padding","fullSize","loadEmojiShape","minFactor","minRadius","processAttract","attractRadius","area","queryCb","attractOptions","attractFactor","normVec","clickAttract","enabledCb","attract","hoverAttract","Attract","attractMode","mouseMoveStatus","events","hoverEnabled","hoverMode","clickEnabled","clickMode","loadExternalAttractInteraction","Attractor","halfPI","toleranceFactor","processBounce","singleSelectorBounce","bounceCb","elem","tolerance","divBounce","bounceMode","mouseBounce","Bounce","Bouncer","bounce","loadExternalBounceInteraction","BubbleBase","BubbleDiv","Bubble","ProcessBubbleType","calculateBubbleValue","particleValue","modeValue","optionsValue","bubbleMode","defaultClickTime","ratioOffset","defaultBubbleValue","minRatio","Bubbler","mouseClickPos","bubbleOptions","bubble","distMouse","timeSpent","sizeData","opacityData","pointDistance","divBubble","modeColor","bubbleColor","pColor","modeOpacity","optOpacity","pOpacity","modeSize","optSize","pSize","bubbleParam","bubbleDuration","bubbleDistance","particlesParam","pObjBubble","pObj","repulseRadius","onHover","loadExternalBubbleInteraction","ConnectLinks","Connect","gradientMin","gradientMax","defaultLinksWidth","gradient","gradStop","sourcePos","destPos","midRgb","grad","drawConnectLine","lineStyle","connectOptions","drawConnection","ls","connectMode","Connector","connect","connectModeDistance","connectModeRadius","indexOffset","distMax","xDiff","yDiff","loadExternalConnectInteraction","GrabLinks","Grab","defaultWidth","drawGrabLine","colorLine","drawGrab","lineColor","beginPos","grabMode","minOpacity","Grabber","grab","grabLineOptions","lineOpacity","opacityLine","linksOptions","loadExternalGrabInteraction","pauseMode","Pauser","loadExternalPauseInteraction","Push","pushMode","minQuantity","Pusher","pushOptions","loadExternalPushInteraction","Remove","removeMode","Remover","removeNb","loadExternalRemoveInteraction","RepulseBase","RepulseDiv","Repulse","repulseMode","repulseRadiusFactor","repulseRadiusPower","squarePower","minSpeed","easingOffset","Repulser","repulseOptions","repulse","repulseDistance","vect","divRepulse","speed","easingFunc","repulseFactor","repulseOpts","hover","click","loadExternalRepulseInteraction","Slow","slowMode","Slower","slow","slowOptions","particlePos","proximityFactor","loadExternalSlowInteraction","stringStart","currentColorRegex","replaceColorSvg","imageShape","svgData","colorStyle","preFillIndex","loadImage","downloadSvgImage","replaceImageColor","imageData","svgColoredData","imageRes","svg","domUrl","errorHandler","img2","InterlaceOffsets","InterlaceSteps","ByteStream","bytes","count","slice","acc","curr","blockString","emptySize","len","increment","blockData","noData","DisposalMethod","GIFDataHeaders","defaultFrame","initialTime","firstIndex","defaultLoopCount","parseColorTable","byteStream","colors","parseExtensionBlock","gif","getFrameIndex","getTransparencyIndex","packedByte","transparencyFlag","transparencyIndex","applicationExtension","parseImageBlock","avgAlpha","progressCallback","localColorTableFlag","interlacedFlag","localColorCount","getColor","error","minCodeSize","clearCode","readBits","bytePos","bitPos","code","dic","pass","pixelPos","lineIndex","exit","last","parseBlock","getGIFLoopAmount","extension","decodeGIF","gifURL","buffer","globalColorTableFlag","globalColorCount","backgroundColorIndex","backgroundImage","frameIndex","incrementFrameIndex","getframeIndex","drawGif","offscreenCanvas","offscreenContext","previousImageData","loadGifImage","ImageDrawer","images","replaceColor","close","Preload","ImagePreloaderPlugin","preloadOptions","existing","preload","extLength","addLoadImageToEngine","imageFunc","loadImageShape","preloader","LifeDelay","LifeDuration","Life","noTime","infiniteValue","noLife","minCanvasSize","updateLife","life","justSpawned","widthRange","heightRange","lifeOptions","LifeUpdater","loadLifeUpdater","centerY","LineDrawer","loadLineShape","ParallaxMover","parallaxOptions","parallaxForce","canvasCenter","parallaxSmooth","centerDistance","loadParallaxMover","rotate","ax","ay","p1Factor","p2Factor","loadParticlesAttractInteraction","absorbFactor","minAbsorbFactor","updateAbsorb","r2","pixelRatio","absorb","fixBounceSpeed","destroy","resolveCollision","Collider","radius1","radius2","distP","loadParticlesCollisionsInteraction","CircleWarp","rect","circle","biggerCircle","rectSW","LinksShadow","LinksTriangle","Links","opacityOffset","getLinkDistance","optDistance","absDiffs","warpDistances","Linker","linkOpt1","linkOpt2","loadLinksInteraction","drawTriangle","p3","drawLinkLine","drawn","links","pi1","pi2","endNE","d1","yi","endSW","d2","xi","endSE","d3","drawLinkTriangle","pos3","colorTriangle","opacityTriangle","getLinkKey","ids","setLinkFrequency","dictionary","minWidth","maxFrequency","LinkInstance","link","p1LinksOptions","twinkle","twinkleFreq","twinkleRgb","link1","link2","triangleOptions","linksDistance","p1Links","vertices","linkFreq","vertex","retina","LinksPlugin","loadLinksPlugin","loadParticlesLinksInteraction","piDeg","sidesOffset","drawPolygon","side","sideCount","decimalSides","interiorAngleDegrees","interiorAngle","defaultSides","PolygonDrawerBase","polygon","sidesCenterFactor","yFactor","sidesFactor","PolygonDrawer","TriangleDrawer","loadGenericPolygonShape","loadTriangleShape","loadPolygonShape","RotateAnimation","Rotate","doublePIDeg","RotateUpdater","rotateOptions","rotateDirection","rotateAnimation","loadRotateUpdater","fixFactorSquared","fixFactor","drawSquare","fixedRadius","fixedDiameter","SquareDrawer","loadSquareShape","defaultInset","drawStar","inset","StarDrawer","star","loadStarShape","StrokeColorUpdater","strokeHslColor","strokeColor","loadStrokeColorUpdater","loadSlim","baseConfig","DEFAULT_COLORS","starlineTheme","isDark","snowTheme","bubbleTheme","starsTheme","fireflyTheme","geometryTheme","waveTheme","wave2dTheme","particleThemes","getThemeById","DEFAULT_THEME_ID","ParticleContext","createContext","STORAGE_KEY","ParticleProvider","isDarkProp","persist","children","themeId","setThemeId","useState","setDark","useEffect","setTheme","useCallback","jsx","useParticleTheme","useContext","useParticleThemeOptional","ParticleWave","className","containerRef","useRef","animationRef","hasThree","disposed","cleanup","THREE","req","mod","scene","camera","renderer","particleCount","waveWidth","waveDepth","geometry","positions","sizes","i3","colorChoice","vertexShader","fragmentShader","material","bokehCount","bokehGeometry","bokehPositions","bokehColors","bokehSizes","bokehMaterial","bokehParticles","dropCount","trailLength","rainDrops","shouldActivate","waveHeight","startHeight","trailPointCount","dropTrailGeometry","dropTrailPositions","dropTrailColors","dropTrailSizes","dropTrailMaterial","dropTrailParticles","dropHeadGeometry","dropHeadPositions","dropHeadColors","dropHeadSizes","dropHeadMaterial","dropHeadParticles","time","lastSpawnTime","getWaveHeight","activateDrop","drop","wh","wavePos","tPos","tCol","hPos","hCol","activeCount","inactiveIndices","spawnCount","shuffled","needActivate","remaining","hi3","brightness","pi","fade","ParticleWave2D","canvasRef","particlesRef","timeRef","resize","wave","scale","alpha","instanceCounter","ParticlesBackground","themeProp","onLoaded","setInit","instanceId","setInstanceId","isFirstMount","initParticlesEngine","particlesLoaded","useMemo","WaveComponent","particlesId","POSITION_STYLES","BUTTON_BASE_STYLE","BACKDROP_STYLE","DRAWER_BASE_STYLE","HEADER_STYLE","CLOSE_BUTTON_STYLE","LIST_STYLE","TIP_CONTAINER_STYLE","TIP_STYLE","THEME_LIST","ThemeSelector","accentColor","open","setOpen","currentTheme","drawerSide","buttonStyle","drawerStyle","handleOpen","handleClose","handleThemeClick","jsxs","Fragment","isActive"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227]}