@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/README.md +5 -2
- package/dist/index.d.ts +16 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +990 -903
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","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 ×\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.mjs","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 ×\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","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]}
|