{ "version": 3, "sources": ["../../../node_modules/@tsparticles/engine/browser/Core/Utils/Constants.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/Vector3d.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/Vector.js", "../../../node_modules/@tsparticles/engine/browser/Utils/NumberUtils.js", "../../../node_modules/@tsparticles/engine/browser/Utils/Utils.js", "../../../node_modules/@tsparticles/engine/browser/Utils/ColorUtils.js", "../../../node_modules/@tsparticles/engine/browser/Utils/CanvasUtils.js", "../../../node_modules/@tsparticles/engine/browser/Core/Canvas.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/EventListeners.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/OptionsColor.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Background/Background.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/BackgroundMask/BackgroundMaskCover.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/BackgroundMask/BackgroundMask.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/FullScreen/FullScreen.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/ClickEvent.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/DivEvent.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/Parallax.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/HoverEvent.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/ResizeEvent.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Events/Events.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Modes/Modes.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Interactivity/Interactivity.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/ManualParticle.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Responsive.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Theme/ThemeDefault.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Theme/Theme.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/AnimationOptions.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/ColorAnimation.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/HslAnimation.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/AnimatableColor.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/CollisionsAbsorb.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/CollisionsOverlap.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/ValueWithRandom.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Bounce/ParticlesBounce.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Collisions/Collisions.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Effect/Effect.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveAngle.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveAttract.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveCenter.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveGravity.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Path/MovePath.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveTrailFill.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/MoveTrail.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/OutModes.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Spin.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Move/Move.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Opacity/Opacity.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesDensity.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Number/ParticlesNumber.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Shadow.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Shape/Shape.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Size/SizeAnimation.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Size/Size.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/Stroke.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/ZIndex/ZIndex.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Particles/ParticlesOptions.js", "../../../node_modules/@tsparticles/engine/browser/Utils/OptionsUtils.js", "../../../node_modules/@tsparticles/engine/browser/Options/Classes/Options.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/InteractionManager.js", "../../../node_modules/@tsparticles/engine/browser/Core/Particle.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/Point.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/Range.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/Rectangle.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/Circle.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/QuadTree.js", "../../../node_modules/@tsparticles/engine/browser/Core/Particles.js", "../../../node_modules/@tsparticles/engine/browser/Core/Retina.js", "../../../node_modules/@tsparticles/engine/browser/Core/Container.js", "../../../node_modules/@tsparticles/engine/browser/Utils/EventDispatcher.js", "../../../node_modules/@tsparticles/engine/browser/Core/Engine.js", "../../../node_modules/@tsparticles/engine/browser/Utils/HslColorManager.js", "../../../node_modules/@tsparticles/engine/browser/Utils/RgbColorManager.js", "../../../node_modules/@tsparticles/engine/browser/init.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/ExternalInteractorBase.js", "../../../node_modules/@tsparticles/engine/browser/Core/Utils/ParticlesInteractorBase.js", "../../../node_modules/@tsparticles/engine/browser/index.js", "../../../node_modules/@tsparticles/move-base/browser/Utils.js", "../../../node_modules/@tsparticles/move-base/browser/BaseMover.js", "../../../node_modules/@tsparticles/move-base/browser/index.js", "../../../node_modules/@tsparticles/shape-circle/browser/CircleDrawer.js", "../../../node_modules/@tsparticles/shape-circle/browser/index.js", "../../../node_modules/@tsparticles/updater-color/browser/Utils.js", "../../../node_modules/@tsparticles/updater-color/browser/ColorUpdater.js", "../../../node_modules/@tsparticles/updater-color/browser/index.js", "../../../node_modules/@tsparticles/updater-opacity/browser/Utils.js", "../../../node_modules/@tsparticles/updater-opacity/browser/OpacityUpdater.js", "../../../node_modules/@tsparticles/updater-opacity/browser/index.js", "../../../node_modules/@tsparticles/updater-out-modes/browser/Utils.js", "../../../node_modules/@tsparticles/updater-out-modes/browser/BounceOutMode.js", "../../../node_modules/@tsparticles/updater-out-modes/browser/DestroyOutMode.js", "../../../node_modules/@tsparticles/updater-out-modes/browser/NoneOutMode.js", "../../../node_modules/@tsparticles/updater-out-modes/browser/OutOutMode.js", "../../../node_modules/@tsparticles/updater-out-modes/browser/OutOfCanvasUpdater.js", "../../../node_modules/@tsparticles/updater-out-modes/browser/index.js", "../../../node_modules/@tsparticles/updater-size/browser/Utils.js", "../../../node_modules/@tsparticles/updater-size/browser/SizeUpdater.js", "../../../node_modules/@tsparticles/updater-size/browser/index.js", "../../../node_modules/@tsparticles/basic/browser/index.js", "../../../node_modules/@tsparticles/plugin-easing-quad/browser/index.js", "../../../node_modules/@tsparticles/shape-emoji/browser/EmojiDrawer.js", "../../../node_modules/@tsparticles/shape-emoji/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-attract/browser/Options/Classes/Attract.js", "../../../node_modules/@tsparticles/interaction-external-attract/browser/Attractor.js", "../../../node_modules/@tsparticles/interaction-external-attract/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-bounce/browser/Options/Classes/Bounce.js", "../../../node_modules/@tsparticles/interaction-external-bounce/browser/Bouncer.js", "../../../node_modules/@tsparticles/interaction-external-bounce/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/BubbleBase.js", "../../../node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/BubbleDiv.js", "../../../node_modules/@tsparticles/interaction-external-bubble/browser/Options/Classes/Bubble.js", "../../../node_modules/@tsparticles/interaction-external-bubble/browser/Utils.js", "../../../node_modules/@tsparticles/interaction-external-bubble/browser/Bubbler.js", "../../../node_modules/@tsparticles/interaction-external-bubble/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-connect/browser/Options/Classes/ConnectLinks.js", "../../../node_modules/@tsparticles/interaction-external-connect/browser/Options/Classes/Connect.js", "../../../node_modules/@tsparticles/interaction-external-connect/browser/Utils.js", "../../../node_modules/@tsparticles/interaction-external-connect/browser/Connector.js", "../../../node_modules/@tsparticles/interaction-external-connect/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-grab/browser/Options/Classes/GrabLinks.js", "../../../node_modules/@tsparticles/interaction-external-grab/browser/Options/Classes/Grab.js", "../../../node_modules/@tsparticles/interaction-external-grab/browser/Utils.js", "../../../node_modules/@tsparticles/interaction-external-grab/browser/Grabber.js", "../../../node_modules/@tsparticles/interaction-external-grab/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-pause/browser/Pauser.js", "../../../node_modules/@tsparticles/interaction-external-pause/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-push/browser/Options/Classes/Push.js", "../../../node_modules/@tsparticles/interaction-external-push/browser/Pusher.js", "../../../node_modules/@tsparticles/interaction-external-push/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-remove/browser/Options/Classes/Remove.js", "../../../node_modules/@tsparticles/interaction-external-remove/browser/Remover.js", "../../../node_modules/@tsparticles/interaction-external-remove/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/RepulseBase.js", "../../../node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/RepulseDiv.js", "../../../node_modules/@tsparticles/interaction-external-repulse/browser/Options/Classes/Repulse.js", "../../../node_modules/@tsparticles/interaction-external-repulse/browser/Repulser.js", "../../../node_modules/@tsparticles/interaction-external-repulse/browser/index.js", "../../../node_modules/@tsparticles/interaction-external-slow/browser/Options/Classes/Slow.js", "../../../node_modules/@tsparticles/interaction-external-slow/browser/Slower.js", "../../../node_modules/@tsparticles/interaction-external-slow/browser/index.js", "../../../node_modules/@tsparticles/shape-image/browser/GifUtils/Constants.js", "../../../node_modules/@tsparticles/shape-image/browser/GifUtils/ByteStream.js", "../../../node_modules/@tsparticles/shape-image/browser/GifUtils/Utils.js", "../../../node_modules/@tsparticles/shape-image/browser/Utils.js", "../../../node_modules/@tsparticles/shape-image/browser/ImageDrawer.js", "../../../node_modules/@tsparticles/shape-image/browser/Options/Classes/Preload.js", "../../../node_modules/@tsparticles/shape-image/browser/ImagePreloader.js", "../../../node_modules/@tsparticles/shape-image/browser/index.js", "../../../node_modules/@tsparticles/updater-life/browser/Options/Classes/LifeDelay.js", "../../../node_modules/@tsparticles/updater-life/browser/Options/Classes/LifeDuration.js", "../../../node_modules/@tsparticles/updater-life/browser/Options/Classes/Life.js", "../../../node_modules/@tsparticles/updater-life/browser/LifeUpdater.js", "../../../node_modules/@tsparticles/updater-life/browser/index.js", "../../../node_modules/@tsparticles/shape-line/browser/LineDrawer.js", "../../../node_modules/@tsparticles/shape-line/browser/index.js", "../../../node_modules/@tsparticles/move-parallax/browser/ParallaxMover.js", "../../../node_modules/@tsparticles/move-parallax/browser/index.js", "../../../node_modules/@tsparticles/interaction-particles-attract/browser/Attractor.js", "../../../node_modules/@tsparticles/interaction-particles-attract/browser/index.js", "../../../node_modules/@tsparticles/interaction-particles-collisions/browser/Absorb.js", "../../../node_modules/@tsparticles/interaction-particles-collisions/browser/Bounce.js", "../../../node_modules/@tsparticles/interaction-particles-collisions/browser/Destroy.js", "../../../node_modules/@tsparticles/interaction-particles-collisions/browser/ResolveCollision.js", "../../../node_modules/@tsparticles/interaction-particles-collisions/browser/Collider.js", "../../../node_modules/@tsparticles/interaction-particles-collisions/browser/index.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/CircleWarp.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/LinksShadow.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/LinksTriangle.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/Options/Classes/Links.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/Linker.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/interaction.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/Utils.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/LinkInstance.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/plugin.js", "../../../node_modules/@tsparticles/interaction-particles-links/browser/index.js", "../../../node_modules/@tsparticles/shape-polygon/browser/PolygonDrawerBase.js", "../../../node_modules/@tsparticles/shape-polygon/browser/PolygonDrawer.js", "../../../node_modules/@tsparticles/shape-polygon/browser/TriangleDrawer.js", "../../../node_modules/@tsparticles/shape-polygon/browser/index.js", "../../../node_modules/@tsparticles/updater-rotate/browser/Options/Classes/RotateAnimation.js", "../../../node_modules/@tsparticles/updater-rotate/browser/Options/Classes/Rotate.js", "../../../node_modules/@tsparticles/updater-rotate/browser/RotateUpdater.js", "../../../node_modules/@tsparticles/updater-rotate/browser/index.js", "../../../node_modules/@tsparticles/shape-square/browser/SquareDrawer.js", "../../../node_modules/@tsparticles/shape-square/browser/index.js", "../../../node_modules/@tsparticles/shape-star/browser/StarDrawer.js", "../../../node_modules/@tsparticles/shape-star/browser/index.js", "../../../node_modules/@tsparticles/updater-stroke-color/browser/Utils.js", "../../../node_modules/@tsparticles/updater-stroke-color/browser/StrokeColorUpdater.js", "../../../node_modules/@tsparticles/updater-stroke-color/browser/index.js", "../../../node_modules/@tsparticles/slim/browser/index.js", "../../../node_modules/@tsparticles/shape-heart/browser/HeartDrawer.js", "../../../node_modules/@tsparticles/shape-heart/browser/index.js", "../../javascript/components/particles.js"], "sourcesContent": ["export const generatedAttribute = \"generated\";\nexport const mouseDownEvent = \"pointerdown\";\nexport const mouseUpEvent = \"pointerup\";\nexport const mouseLeaveEvent = \"pointerleave\";\nexport const mouseOutEvent = \"pointerout\";\nexport const mouseMoveEvent = \"pointermove\";\nexport const touchStartEvent = \"touchstart\";\nexport const touchEndEvent = \"touchend\";\nexport const touchMoveEvent = \"touchmove\";\nexport const touchCancelEvent = \"touchcancel\";\nexport const resizeEvent = \"resize\";\nexport const visibilityChangeEvent = \"visibilitychange\";\nexport const errorPrefix = \"tsParticles - Error\";\n", "import { errorPrefix } from \"./Constants.js\";\nimport { isNumber } from \"../../Utils/Utils.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 : 0;\n }\n else if (xOrCoords !== undefined && y !== undefined) {\n this.x = xOrCoords;\n this.y = y;\n this.z = z ?? 0;\n }\n else {\n throw new Error(`${errorPrefix} Vector3d not initialized correctly`);\n }\n }\n static get origin() {\n return Vector3d.create(0, 0, 0);\n }\n get angle() {\n return Math.atan2(this.y, this.x);\n }\n set angle(angle) {\n this._updateFromAngle(angle, this.length);\n }\n get length() {\n return Math.sqrt(this.getLengthSq());\n }\n set length(length) {\n this._updateFromAngle(this.angle, length);\n }\n static clone(source) {\n return Vector3d.create(source.x, source.y, source.z);\n }\n static create(x, y, z) {\n return new Vector3d(x, y, z);\n }\n add(v) {\n return Vector3d.create(this.x + v.x, this.y + v.y, this.z + v.z);\n }\n addTo(v) {\n this.x += v.x;\n this.y += v.y;\n this.z += v.z;\n }\n copy() {\n return Vector3d.clone(this);\n }\n distanceTo(v) {\n return this.sub(v).length;\n }\n distanceToSq(v) {\n return this.sub(v).getLengthSq();\n }\n div(n) {\n return Vector3d.create(this.x / n, this.y / n, this.z / n);\n }\n divTo(n) {\n this.x /= n;\n this.y /= n;\n this.z /= n;\n }\n getLengthSq() {\n return this.x ** 2 + this.y ** 2;\n }\n mult(n) {\n return Vector3d.create(this.x * n, this.y * n, this.z * n);\n }\n multTo(n) {\n this.x *= n;\n this.y *= n;\n this.z *= n;\n }\n normalize() {\n const length = this.length;\n if (length != 0) {\n this.multTo(1.0 / length);\n }\n }\n rotate(angle) {\n return Vector3d.create(this.x * Math.cos(angle) - this.y * Math.sin(angle), this.x * Math.sin(angle) + this.y * Math.cos(angle), 0);\n }\n setTo(c) {\n this.x = c.x;\n this.y = c.y;\n const v3d = c;\n this.z = v3d.z ? v3d.z : 0;\n }\n sub(v) {\n return Vector3d.create(this.x - v.x, this.y - v.y, this.z - v.z);\n }\n subFrom(v) {\n this.x -= v.x;\n this.y -= v.y;\n this.z -= v.z;\n }\n}\n", "import { Vector3d } from \"./Vector3d.js\";\nexport class Vector extends Vector3d {\n constructor(xOrCoords, y) {\n super(xOrCoords, y, 0);\n }\n static get origin() {\n return Vector.create(0, 0);\n }\n static clone(source) {\n return Vector.create(source.x, source.y);\n }\n static create(x, y) {\n return new Vector(x, y);\n }\n}\n", "import { Vector } from \"../Core/Utils/Vector.js\";\nimport { isNumber } from \"./Utils.js\";\nlet _random = Math.random;\nconst easings = new Map();\nexport function addEasing(name, easing) {\n if (easings.get(name)) {\n return;\n }\n easings.set(name, easing);\n}\nexport function getEasing(name) {\n return easings.get(name) || ((value) => value);\n}\nexport function setRandom(rnd = Math.random) {\n _random = rnd;\n}\nexport function getRandom() {\n return clamp(_random(), 0, 1 - 1e-16);\n}\nexport function clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\nexport function mix(comp1, comp2, weight1, weight2) {\n return Math.floor((comp1 * weight1 + comp2 * weight2) / (weight1 + weight2));\n}\nexport function randomInRange(r) {\n const max = getRangeMax(r);\n let min = getRangeMin(r);\n if (max === min) {\n min = 0;\n }\n return getRandom() * (max - min) + min;\n}\nexport function getRangeValue(value) {\n return isNumber(value) ? value : randomInRange(value);\n}\nexport function getRangeMin(value) {\n return isNumber(value) ? value : value.min;\n}\nexport function getRangeMax(value) {\n return isNumber(value) ? value : value.max;\n}\nexport function setRangeValue(source, value) {\n if (source === value || (value === undefined && isNumber(source))) {\n return source;\n }\n const min = getRangeMin(source), max = getRangeMax(source);\n return value !== undefined\n ? {\n min: Math.min(min, value),\n max: Math.max(max, value),\n }\n : setRangeValue(min, max);\n}\nexport function getDistances(pointA, pointB) {\n const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y;\n return { dx: dx, dy: dy, distance: Math.sqrt(dx ** 2 + dy ** 2) };\n}\nexport function getDistance(pointA, pointB) {\n return getDistances(pointA, pointB).distance;\n}\nexport function getParticleDirectionAngle(direction, position, center) {\n if (isNumber(direction)) {\n return (direction * Math.PI) / 180;\n }\n switch (direction) {\n case \"top\":\n return -Math.PI * 0.5;\n case \"top-right\":\n return -Math.PI * 0.25;\n case \"right\":\n return 0;\n case \"bottom-right\":\n return Math.PI * 0.25;\n case \"bottom\":\n return Math.PI * 0.5;\n case \"bottom-left\":\n return Math.PI * 0.75;\n case \"left\":\n return Math.PI;\n case \"top-left\":\n return -Math.PI * 0.75;\n case \"inside\":\n return Math.atan2(center.y - position.y, center.x - position.x);\n case \"outside\":\n return Math.atan2(position.y - center.y, position.x - center.x);\n default:\n return getRandom() * Math.PI * 2;\n }\n}\nexport function getParticleBaseVelocity(direction) {\n const baseVelocity = Vector.origin;\n baseVelocity.length = 1;\n baseVelocity.angle = direction;\n return baseVelocity;\n}\nexport function collisionVelocity(v1, v2, m1, m2) {\n return Vector.create((v1.x * (m1 - m2)) / (m1 + m2) + (v2.x * 2 * m2) / (m1 + m2), v1.y);\n}\nexport function calcPositionFromSize(data) {\n return data.position && data.position.x !== undefined && data.position.y !== undefined\n ? {\n x: (data.position.x * data.size.width) / 100,\n y: (data.position.y * data.size.height) / 100,\n }\n : undefined;\n}\nexport function calcPositionOrRandomFromSize(data) {\n return {\n x: ((data.position?.x ?? getRandom() * 100) * data.size.width) / 100,\n y: ((data.position?.y ?? getRandom() * 100) * data.size.height) / 100,\n };\n}\nexport function calcPositionOrRandomFromSizeRanged(data) {\n const position = {\n x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,\n y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,\n };\n return calcPositionOrRandomFromSize({ size: data.size, position });\n}\nexport function calcExactPositionOrRandomFromSize(data) {\n return {\n x: data.position?.x ?? getRandom() * data.size.width,\n y: data.position?.y ?? getRandom() * data.size.height,\n };\n}\nexport function calcExactPositionOrRandomFromSizeRanged(data) {\n const position = {\n x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,\n y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,\n };\n return calcExactPositionOrRandomFromSize({ size: data.size, position });\n}\nexport function parseAlpha(input) {\n return input ? (input.endsWith(\"%\") ? parseFloat(input) / 100 : parseFloat(input)) : 1;\n}\n", "import { collisionVelocity, getDistances, getRandom, getRangeMax, getRangeMin, getRangeValue, randomInRange, } from \"./NumberUtils.js\";\nimport { Vector } from \"../Core/Utils/Vector.js\";\nconst _logger = {\n debug: console.debug,\n error: console.error,\n info: console.info,\n log: console.log,\n verbose: console.log,\n warning: console.warn,\n};\nexport function setLogger(logger) {\n _logger.debug = logger.debug || _logger.debug;\n _logger.error = logger.error || _logger.error;\n _logger.info = logger.info || _logger.info;\n _logger.log = logger.log || _logger.log;\n _logger.verbose = logger.verbose || _logger.verbose;\n _logger.warning = logger.warning || _logger.warning;\n}\nexport function getLogger() {\n return _logger;\n}\nfunction rectSideBounce(data) {\n const res = { bounced: false }, { pSide, pOtherSide, rectSide, rectOtherSide, velocity, factor } = data;\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) * 0.5 && velocity > 0) ||\n (pSide.min <= rectSide.max && pSide.min > (rectSide.max + rectSide.min) * 0.5 && velocity < 0)) {\n res.velocity = velocity * -factor;\n res.bounced = true;\n }\n return res;\n}\nfunction checkSelector(element, selectors) {\n const res = executeOnSingleOrMultiple(selectors, (selector) => {\n return element.matches(selector);\n });\n return isArray(res) ? res.some((t) => t) : res;\n}\nexport function isSsr() {\n return typeof window === \"undefined\" || !window || typeof window.document === \"undefined\" || !window.document;\n}\nexport function hasMatchMedia() {\n return !isSsr() && typeof matchMedia !== \"undefined\";\n}\nexport function safeMatchMedia(query) {\n if (!hasMatchMedia()) {\n return;\n }\n return matchMedia(query);\n}\nexport function 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 return value === array || (isArray(array) && array.indexOf(value) > -1);\n}\nexport async function loadFont(font, weight) {\n try {\n await document.fonts.load(`${weight ?? \"400\"} 36px '${font ?? \"Verdana\"}'`);\n }\n catch {\n }\n}\nexport function arrayRandomIndex(array) {\n return Math.floor(getRandom() * array.length);\n}\nexport function itemFromArray(array, index, useIndex = true) {\n return array[index !== undefined && useIndex ? index % array.length : arrayRandomIndex(array)];\n}\nexport function isPointInside(point, size, offset, radius, direction) {\n return areBoundsInside(calculateBounds(point, radius ?? 0), size, offset, direction);\n}\nexport function areBoundsInside(bounds, size, offset, direction) {\n let inside = true;\n if (!direction || direction === \"bottom\") {\n inside = bounds.top < size.height + offset.x;\n }\n if (inside && (!direction || direction === \"left\")) {\n inside = bounds.right > offset.x;\n }\n if (inside && (!direction || direction === \"right\")) {\n inside = bounds.left < size.width + offset.y;\n }\n if (inside && (!direction || direction === \"top\")) {\n inside = bounds.bottom > offset.y;\n }\n return inside;\n}\nexport function calculateBounds(point, radius) {\n return {\n bottom: point.y + radius,\n left: point.x - radius,\n right: point.x + radius,\n top: point.y - radius,\n };\n}\nexport function deepExtend(destination, ...sources) {\n for (const source of sources) {\n if (source === undefined || source === null) {\n continue;\n }\n if (!isObject(source)) {\n destination = source;\n continue;\n }\n const sourceIsArray = Array.isArray(source);\n if (sourceIsArray && (isObject(destination) || !destination || !Array.isArray(destination))) {\n destination = [];\n }\n else if (!sourceIsArray && (isObject(destination) || !destination || Array.isArray(destination))) {\n destination = {};\n }\n for (const key in source) {\n if (key === \"__proto__\") {\n continue;\n }\n const sourceDict = source, value = sourceDict[key], destDict = destination;\n destDict[key] =\n isObject(value) && Array.isArray(value)\n ? value.map((v) => deepExtend(destDict[key], v))\n : deepExtend(destDict[key], value);\n }\n }\n return destination;\n}\nexport function isDivModeEnabled(mode, divs) {\n return !!findItemFromSingleOrMultiple(divs, (t) => t.enable && isInArray(mode, t.mode));\n}\nexport function divModeExecute(mode, divs, callback) {\n executeOnSingleOrMultiple(divs, (div) => {\n const divMode = div.mode, divEnabled = div.enable;\n if (divEnabled && isInArray(mode, divMode)) {\n singleDivModeExecute(div, callback);\n }\n });\n}\nexport function singleDivModeExecute(div, callback) {\n const selectors = div.selectors;\n executeOnSingleOrMultiple(selectors, (selector) => {\n callback(selector, div);\n });\n}\nexport function divMode(divs, element) {\n if (!element || !divs) {\n return;\n }\n return findItemFromSingleOrMultiple(divs, (div) => {\n return checkSelector(element, div.selectors);\n });\n}\nexport function circleBounceDataFromParticle(p) {\n return {\n position: p.getPosition(),\n radius: p.getRadius(),\n mass: p.getMass(),\n velocity: p.velocity,\n factor: Vector.create(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);\n if (xVelocityDiff * xDist + yVelocityDiff * yDist < 0) {\n return;\n }\n const angle = -Math.atan2(yDist, xDist), m1 = p1.mass, m2 = p2.mass, u1 = p1.velocity.rotate(angle), u2 = p2.velocity.rotate(angle), v1 = collisionVelocity(u1, u2, m1, m2), v2 = collisionVelocity(u2, u1, m1, m2), vFinal1 = v1.rotate(-angle), vFinal2 = v2.rotate(-angle);\n p1.velocity.x = vFinal1.x * p1.factor.x;\n p1.velocity.y = vFinal1.y * p1.factor.y;\n p2.velocity.x = vFinal2.x * p2.factor.x;\n p2.velocity.y = vFinal2.y * p2.factor.y;\n}\nexport function rectBounce(particle, divBounds) {\n const pPos = particle.getPosition(), size = particle.getRadius(), bounds = calculateBounds(pPos, size), 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 return isArray(obj) ? obj.map((item, index) => callback(item, index)) : callback(obj, 0);\n}\nexport function itemFromSingleOrMultiple(obj, index, useIndex) {\n return isArray(obj) ? itemFromArray(obj, index, useIndex) : obj;\n}\nexport function findItemFromSingleOrMultiple(obj, callback) {\n return isArray(obj) ? obj.find((t, index) => callback(t, index)) : callback(obj, 0) ? obj : undefined;\n}\nexport function initParticleNumericAnimationValue(options, pxRatio) {\n const valueRange = options.value, animationOptions = options.animation, res = {\n delayTime: getRangeValue(animationOptions.delay) * 1000,\n enable: animationOptions.enable,\n value: getRangeValue(options.value) * pxRatio,\n max: getRangeMax(valueRange) * pxRatio,\n min: getRangeMin(valueRange) * pxRatio,\n loops: 0,\n maxLoops: getRangeValue(animationOptions.count),\n time: 0,\n };\n if (animationOptions.enable) {\n res.decay = 1 - getRangeValue(animationOptions.decay);\n switch (animationOptions.mode) {\n case \"increase\":\n res.status = \"increasing\";\n break;\n case \"decrease\":\n res.status = \"decreasing\";\n break;\n case \"random\":\n res.status = getRandom() >= 0.5 ? \"increasing\" : \"decreasing\";\n break;\n }\n const autoStatus = animationOptions.mode === \"auto\";\n switch (animationOptions.startValue) {\n case \"min\":\n res.value = res.min;\n if (autoStatus) {\n res.status = \"increasing\";\n }\n break;\n case \"max\":\n res.value = res.max;\n if (autoStatus) {\n res.status = \"decreasing\";\n }\n break;\n case \"random\":\n default:\n res.value = randomInRange(res);\n if (autoStatus) {\n res.status = getRandom() >= 0.5 ? \"increasing\" : \"decreasing\";\n }\n break;\n }\n }\n res.initialValue = res.value;\n return res;\n}\nfunction getPositionOrSize(positionOrSize, canvasSize) {\n const isPercent = positionOrSize.mode === \"percent\";\n if (!isPercent) {\n const { mode: _, ...rest } = positionOrSize;\n return rest;\n }\n const isPosition = \"x\" in positionOrSize;\n if (isPosition) {\n return {\n x: (positionOrSize.x / 100) * canvasSize.width,\n y: (positionOrSize.y / 100) * canvasSize.height,\n };\n }\n else {\n return {\n width: (positionOrSize.width / 100) * canvasSize.width,\n height: (positionOrSize.height / 100) * canvasSize.height,\n };\n }\n}\nexport function getPosition(position, canvasSize) {\n return getPositionOrSize(position, canvasSize);\n}\nexport function getSize(size, canvasSize) {\n return getPositionOrSize(size, canvasSize);\n}\nexport function isBoolean(arg) {\n return typeof arg === \"boolean\";\n}\nexport function isString(arg) {\n return typeof arg === \"string\";\n}\nexport function isNumber(arg) {\n return typeof arg === \"number\";\n}\nexport function isFunction(arg) {\n return typeof arg === \"function\";\n}\nexport function isObject(arg) {\n return typeof arg === \"object\" && arg !== null;\n}\nexport function isArray(arg) {\n return Array.isArray(arg);\n}\n", "import { getRandom, getRangeValue, mix, randomInRange, setRangeValue } from \"./NumberUtils.js\";\nimport { isArray, isString, itemFromArray } from \"./Utils.js\";\nconst randomColorValue = \"random\", midColorValue = \"mid\", colorManagers = new Map();\nexport function addColorManager(manager) {\n colorManagers.set(manager.key, manager);\n}\nfunction stringToRgba(input) {\n for (const [, manager] of colorManagers) {\n if (input.startsWith(manager.stringPrefix)) {\n return manager.parseString(input);\n }\n }\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i, hexFixed = input.replace(shorthandRegex, (_, r, g, b, a) => {\n return r + r + g + g + b + b + (a !== undefined ? a + a : \"\");\n }), regex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i, result = regex.exec(hexFixed);\n return result\n ? {\n a: result[4] !== undefined ? parseInt(result[4], 16) / 0xff : 1,\n b: parseInt(result[3], 16),\n g: parseInt(result[2], 16),\n r: parseInt(result[1], 16),\n }\n : undefined;\n}\nexport function rangeColorToRgb(input, index, useIndex = true) {\n if (!input) {\n return;\n }\n const color = isString(input) ? { value: input } : input;\n if (isString(color.value)) {\n return colorToRgb(color.value, index, useIndex);\n }\n if (isArray(color.value)) {\n return rangeColorToRgb({\n value: itemFromArray(color.value, index, useIndex),\n });\n }\n for (const [, manager] of colorManagers) {\n const res = manager.handleRangeColor(color);\n if (res) {\n return res;\n }\n }\n}\nexport function colorToRgb(input, index, useIndex = true) {\n if (!input) {\n return;\n }\n const color = isString(input) ? { value: input } : input;\n if (isString(color.value)) {\n return color.value === randomColorValue ? getRandomRgbColor() : stringToRgb(color.value);\n }\n if (isArray(color.value)) {\n return colorToRgb({\n value: itemFromArray(color.value, index, useIndex),\n });\n }\n for (const [, manager] of colorManagers) {\n const res = manager.handleColor(color);\n if (res) {\n return res;\n }\n }\n}\nexport function colorToHsl(color, index, useIndex = true) {\n const rgb = colorToRgb(color, index, useIndex);\n return rgb ? rgbToHsl(rgb) : undefined;\n}\nexport function rangeColorToHsl(color, index, useIndex = true) {\n const rgb = rangeColorToRgb(color, index, useIndex);\n return rgb ? rgbToHsl(rgb) : undefined;\n}\nexport function rgbToHsl(color) {\n const r1 = color.r / 255, g1 = color.g / 255, b1 = color.b / 255, max = Math.max(r1, g1, b1), min = Math.min(r1, g1, b1), res = {\n h: 0,\n l: (max + min) * 0.5,\n s: 0,\n };\n if (max !== min) {\n res.s = res.l < 0.5 ? (max - min) / (max + min) : (max - min) / (2.0 - max - min);\n res.h =\n r1 === max\n ? (g1 - b1) / (max - min)\n : (res.h = g1 === max ? 2.0 + (b1 - r1) / (max - min) : 4.0 + (r1 - g1) / (max - min));\n }\n res.l *= 100;\n res.s *= 100;\n res.h *= 60;\n if (res.h < 0) {\n res.h += 360;\n }\n if (res.h >= 360) {\n res.h -= 360;\n }\n return res;\n}\nexport function stringToAlpha(input) {\n return stringToRgba(input)?.a;\n}\nexport function stringToRgb(input) {\n return stringToRgba(input);\n}\nexport function hslToRgb(hsl) {\n const h = ((hsl.h % 360) + 360) % 360, s = Math.max(0, Math.min(100, hsl.s)), l = Math.max(0, Math.min(100, hsl.l)), hNormalized = h / 360, sNormalized = s / 100, lNormalized = l / 100;\n if (s === 0) {\n const grayscaleValue = Math.round(lNormalized * 255);\n return { r: grayscaleValue, g: grayscaleValue, b: grayscaleValue };\n }\n const channel = (temp1, temp2, temp3) => {\n if (temp3 < 0) {\n temp3 += 1;\n }\n if (temp3 > 1) {\n temp3 -= 1;\n }\n if (temp3 * 6 < 1) {\n return temp1 + (temp2 - temp1) * 6 * temp3;\n }\n if (temp3 * 2 < 1) {\n return temp2;\n }\n if (temp3 * 3 < 2) {\n return temp1 + (temp2 - temp1) * (2 / 3 - temp3) * 6;\n }\n return temp1;\n }, temp1 = lNormalized < 0.5 ? lNormalized * (1 + sNormalized) : lNormalized + sNormalized - lNormalized * sNormalized, temp2 = 2 * lNormalized - temp1, red = Math.min(255, 255 * channel(temp2, temp1, hNormalized + 1 / 3)), green = Math.min(255, 255 * channel(temp2, temp1, hNormalized)), blue = Math.min(255, 255 * channel(temp2, temp1, hNormalized - 1 / 3));\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 ?? 0;\n return {\n b: Math.floor(randomInRange(setRangeValue(fixedMin, 256))),\n g: Math.floor(randomInRange(setRangeValue(fixedMin, 256))),\n r: Math.floor(randomInRange(setRangeValue(fixedMin, 256))),\n };\n}\nexport function getStyleFromRgb(color, opacity) {\n return `rgba(${color.r}, ${color.g}, ${color.b}, ${opacity ?? 1})`;\n}\nexport function getStyleFromHsl(color, opacity) {\n return `hsla(${color.h}, ${color.s}%, ${color.l}%, ${opacity ?? 1})`;\n}\nexport function colorMix(color1, color2, size1, size2) {\n let rgb1 = color1, rgb2 = color2;\n if (rgb1.r === undefined) {\n rgb1 = hslToRgb(color1);\n }\n if (rgb2.r === undefined) {\n rgb2 = hslToRgb(color2);\n }\n return {\n b: mix(rgb1.b, rgb2.b, size1, size2),\n g: mix(rgb1.g, rgb2.g, size1, size2),\n r: mix(rgb1.r, rgb2.r, size1, size2),\n };\n}\nexport function getLinkColor(p1, p2, linkColor) {\n if (linkColor === randomColorValue) {\n return getRandomRgbColor();\n }\n else if (linkColor === midColorValue) {\n const sourceColor = p1.getFillColor() ?? p1.getStrokeColor(), destColor = p2?.getFillColor() ?? p2?.getStrokeColor();\n if (sourceColor && destColor && p2) {\n return colorMix(sourceColor, destColor, p1.getRadius(), p2.getRadius());\n }\n else {\n const hslColor = sourceColor ?? destColor;\n if (hslColor) {\n return hslToRgb(hslColor);\n }\n }\n }\n else {\n return linkColor;\n }\n}\nexport function getLinkRandomColor(optColor, blink, consent) {\n const color = isString(optColor) ? optColor : optColor.value;\n if (color === randomColorValue) {\n if (consent) {\n return rangeColorToRgb({\n value: color,\n });\n }\n if (blink) {\n return randomColorValue;\n }\n return midColorValue;\n }\n else if (color === midColorValue) {\n return midColorValue;\n }\n else {\n return rangeColorToRgb({\n value: color,\n });\n }\n}\nexport function getHslFromAnimation(animation) {\n return animation !== undefined\n ? {\n h: animation.h.value,\n s: animation.s.value,\n l: animation.l.value,\n }\n : undefined;\n}\nexport function getHslAnimationFromHsl(hsl, animationOptions, reduceFactor) {\n const resColor = {\n h: {\n enable: false,\n value: hsl.h,\n },\n s: {\n enable: false,\n value: hsl.s,\n },\n l: {\n enable: false,\n value: hsl.l,\n },\n };\n if (animationOptions) {\n setColorAnimation(resColor.h, animationOptions.h, reduceFactor);\n setColorAnimation(resColor.s, animationOptions.s, reduceFactor);\n setColorAnimation(resColor.l, animationOptions.l, reduceFactor);\n }\n return resColor;\n}\nfunction setColorAnimation(colorValue, colorAnimation, reduceFactor) {\n colorValue.enable = colorAnimation.enable;\n if (colorValue.enable) {\n colorValue.velocity = (getRangeValue(colorAnimation.speed) / 100) * reduceFactor;\n colorValue.decay = 1 - getRangeValue(colorAnimation.decay);\n colorValue.status = \"increasing\";\n colorValue.loops = 0;\n colorValue.maxLoops = getRangeValue(colorAnimation.count);\n colorValue.time = 0;\n colorValue.delayTime = getRangeValue(colorAnimation.delay) * 1000;\n if (!colorAnimation.sync) {\n colorValue.velocity *= getRandom();\n colorValue.value *= getRandom();\n }\n colorValue.initialValue = colorValue.value;\n }\n else {\n colorValue.velocity = 0;\n }\n}\n", "import { 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(0, 0, dimension.width, dimension.height);\n}\nexport function paintImage(context, dimension, image, opacity) {\n if (!image) {\n return;\n }\n context.globalAlpha = opacity;\n context.drawImage(image, 0, 0, dimension.width, dimension.height);\n context.globalAlpha = 1;\n}\nexport function clear(context, dimension) {\n context.clearRect(0, 0, dimension.width, dimension.height);\n}\nexport function drawParticle(data) {\n const { container, context, particle, delta, colorStyles, backgroundMask, composite, radius, opacity, shadow, transform, } = data;\n const pos = particle.getPosition(), angle = particle.rotation + (particle.pathRotation ? particle.velocity.angle : 0), rotateData = {\n sin: Math.sin(angle),\n cos: Math.cos(angle),\n }, transformData = {\n a: rotateData.cos * (transform.a ?? 1),\n b: rotateData.sin * (transform.b ?? 1),\n c: -rotateData.sin * (transform.c ?? 1),\n d: rotateData.cos * (transform.d ?? 1),\n };\n context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);\n if (backgroundMask) {\n context.globalCompositeOperation = composite;\n }\n const shadowColor = particle.shadowColor;\n if (shadow.enable && shadowColor) {\n context.shadowBlur = shadow.blur;\n context.shadowColor = getStyleFromRgb(shadowColor);\n context.shadowOffsetX = shadow.offset.x;\n context.shadowOffsetY = shadow.offset.y;\n }\n if (colorStyles.fill) {\n context.fillStyle = colorStyles.fill;\n }\n const strokeWidth = particle.strokeWidth ?? 0;\n context.lineWidth = strokeWidth;\n if (colorStyles.stroke) {\n context.strokeStyle = colorStyles.stroke;\n }\n const drawData = { container, context, particle, radius, opacity, delta, transformData };\n context.beginPath();\n drawShape(drawData);\n if (particle.shapeClose) {\n context.closePath();\n }\n if (strokeWidth > 0) {\n context.stroke();\n }\n if (particle.shapeFill) {\n context.fill();\n }\n drawShapeAfterDraw(drawData);\n drawEffect(drawData);\n context.globalCompositeOperation = \"source-over\";\n context.setTransform(1, 0, 0, 1, 0, 0);\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, transformData } = data;\n if (!particle.shape) {\n return;\n }\n const drawer = container.shapeDrawers.get(particle.shape);\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 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 || !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 === \"darken\" ? -1 : 1) * value,\n };\n}\n", "import { clear, drawParticle, drawParticlePlugin, drawPlugin, paintBase, paintImage } from \"../Utils/CanvasUtils.js\";\nimport { deepExtend, getLogger, safeMutationObserver } from \"../Utils/Utils.js\";\nimport { getStyleFromHsl, getStyleFromRgb, rangeColorToHsl, rangeColorToRgb } from \"../Utils/ColorUtils.js\";\nimport { generatedAttribute } from \"./Utils/Constants.js\";\nfunction setTransformValue(factor, newFactor, key) {\n const newValue = newFactor[key];\n if (newValue !== undefined) {\n factor[key] = (factor[key] ?? 1) * newValue;\n }\n}\nexport class Canvas {\n constructor(container) {\n this.container = container;\n this._applyPostDrawUpdaters = (particle) => {\n for (const updater of this._postDrawUpdaters) {\n updater.afterDraw && updater.afterDraw(particle);\n }\n };\n this._applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform) => {\n for (const updater of this._preDrawUpdaters) {\n if (updater.getColorStyles) {\n const { fill, stroke } = updater.getColorStyles(particle, ctx, radius, zOpacity);\n if (fill) {\n colorStyles.fill = fill;\n }\n if (stroke) {\n colorStyles.stroke = stroke;\n }\n }\n if (updater.getTransformValues) {\n const updaterTransform = updater.getTransformValues(particle);\n for (const key in updaterTransform) {\n setTransformValue(transform, updaterTransform, key);\n }\n }\n updater.beforeDraw && updater.beforeDraw(particle);\n }\n };\n this._applyResizePlugins = () => {\n for (const plugin of this._resizePlugins) {\n plugin.resize && plugin.resize();\n }\n };\n this._getPluginParticleColors = (particle) => {\n let fColor, sColor;\n for (const plugin of this._colorPlugins) {\n if (!fColor && plugin.particleFillColor) {\n fColor = rangeColorToHsl(plugin.particleFillColor(particle));\n }\n if (!sColor && plugin.particleStrokeColor) {\n sColor = rangeColorToHsl(plugin.particleStrokeColor(particle));\n }\n if (fColor && sColor) {\n break;\n }\n }\n return [fColor, sColor];\n };\n this._initCover = () => {\n const options = this.container.actualOptions, cover = options.backgroundMask.cover, color = cover.color, coverRgb = rangeColorToRgb(color);\n if (coverRgb) {\n const coverColor = {\n ...coverRgb,\n a: cover.opacity,\n };\n this._coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);\n }\n };\n this._initStyle = () => {\n const element = this.element, options = this.container.actualOptions;\n if (!element) {\n return;\n }\n if (this._fullScreen) {\n this._originalStyle = deepExtend({}, element.style);\n this._setFullScreenStyle();\n }\n else {\n this._resetOriginalStyle();\n }\n for (const key in options.style) {\n if (!key || !options.style) {\n continue;\n }\n const value = options.style[key];\n if (!value) {\n continue;\n }\n element.style.setProperty(key, value, \"important\");\n }\n };\n this._initTrail = async () => {\n const options = this.container.actualOptions, trail = options.particles.move.trail, trailFill = trail.fill;\n if (!trail.enable) {\n return;\n }\n if (trailFill.color) {\n const fillColor = rangeColorToRgb(trailFill.color);\n if (!fillColor) {\n return;\n }\n const trail = options.particles.move.trail;\n this._trailFill = {\n color: {\n ...fillColor,\n },\n opacity: 1 / trail.length,\n };\n }\n else {\n await new Promise((resolve, reject) => {\n if (!trailFill.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._trailFill = {\n image: img,\n opacity: 1 / trail.length,\n };\n resolve();\n });\n img.addEventListener(\"error\", (evt) => {\n reject(evt.error);\n });\n img.src = trailFill.image;\n });\n }\n };\n this._paintBase = (baseColor) => {\n this.draw((ctx) => paintBase(ctx, this.size, baseColor));\n };\n this._paintImage = (image, opacity) => {\n this.draw((ctx) => paintImage(ctx, this.size, image, opacity));\n };\n this._repairStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n this._safeMutationObserver((observer) => observer.disconnect());\n this._initStyle();\n this.initBackground();\n this._safeMutationObserver((observer) => observer.observe(element, { attributes: true }));\n };\n this._resetOriginalStyle = () => {\n const element = this.element, originalStyle = this._originalStyle;\n if (!(element && originalStyle)) {\n return;\n }\n const style = element.style;\n style.position = originalStyle.position;\n style.zIndex = originalStyle.zIndex;\n style.top = originalStyle.top;\n style.left = originalStyle.left;\n style.width = originalStyle.width;\n style.height = originalStyle.height;\n };\n this._safeMutationObserver = (callback) => {\n if (!this._mutationObserver) {\n return;\n }\n callback(this._mutationObserver);\n };\n this._setFullScreenStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n const priority = \"important\", style = element.style;\n style.setProperty(\"position\", \"fixed\", priority);\n style.setProperty(\"z-index\", this.container.actualOptions.fullScreen.zIndex.toString(10), priority);\n style.setProperty(\"top\", \"0\", priority);\n style.setProperty(\"left\", \"0\", priority);\n style.setProperty(\"width\", \"100%\", priority);\n style.setProperty(\"height\", \"100%\", priority);\n };\n this.size = {\n height: 0,\n width: 0,\n };\n this._context = null;\n this._generated = false;\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n get _fullScreen() {\n return this.container.actualOptions.fullScreen.enable;\n }\n clear() {\n const options = this.container.actualOptions, trail = options.particles.move.trail, trailFill = this._trailFill;\n if (options.backgroundMask.enable) {\n this.paint();\n }\n else if (trail.enable && trail.length > 0 && trailFill) {\n if (trailFill.color) {\n this._paintBase(getStyleFromRgb(trailFill.color, trailFill.opacity));\n }\n else if (trailFill.image) {\n this._paintImage(trailFill.image, trailFill.opacity);\n }\n }\n else 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 && element.remove();\n }\n else {\n this._resetOriginalStyle();\n }\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n draw(cb) {\n const ctx = this._context;\n if (!ctx) {\n return;\n }\n return cb(ctx);\n }\n drawParticle(particle, delta) {\n if (particle.spawning || particle.destroyed) {\n return;\n }\n const radius = particle.getRadius();\n if (radius <= 0) {\n return;\n }\n const pfColor = particle.getFillColor(), psColor = particle.getStrokeColor() ?? pfColor;\n let [fColor, sColor] = this._getPluginParticleColors(particle);\n if (!fColor) {\n fColor = pfColor;\n }\n if (!sColor) {\n sColor = psColor;\n }\n if (!fColor && !sColor) {\n return;\n }\n this.draw((ctx) => {\n const container = this.container, options = container.actualOptions, zIndexOptions = particle.options.zIndex, zOpacityFactor = (1 - particle.zIndexFactor) ** zIndexOptions.opacityRate, opacity = particle.bubble.opacity ?? particle.opacity?.value ?? 1, strokeOpacity = particle.strokeOpacity ?? opacity, zOpacity = opacity * zOpacityFactor, zStrokeOpacity = strokeOpacity * zOpacityFactor, transform = {}, colorStyles = {\n fill: fColor ? getStyleFromHsl(fColor, zOpacity) : undefined,\n };\n colorStyles.stroke = sColor ? getStyleFromHsl(sColor, zStrokeOpacity) : colorStyles.fill;\n this._applyPreDrawUpdaters(ctx, particle, radius, zOpacity, colorStyles, transform);\n drawParticle({\n container,\n context: ctx,\n particle,\n delta,\n colorStyles,\n backgroundMask: options.backgroundMask.enable,\n composite: options.backgroundMask.composite,\n radius: radius * (1 - particle.zIndexFactor) ** zIndexOptions.sizeRate,\n opacity: zOpacity,\n shadow: particle.options.shadow,\n transform,\n });\n this._applyPostDrawUpdaters(particle);\n });\n }\n drawParticlePlugin(plugin, particle, delta) {\n this.draw((ctx) => drawParticlePlugin(ctx, plugin, particle, delta));\n }\n drawPlugin(plugin, delta) {\n this.draw((ctx) => drawPlugin(ctx, plugin, delta));\n }\n async init() {\n this._safeMutationObserver((obs) => obs.disconnect());\n this._mutationObserver = safeMutationObserver((records) => {\n for (const record of records) {\n if (record.type === \"attributes\" && record.attributeName === \"style\") {\n this._repairStyle();\n }\n }\n });\n this.resize();\n this._initStyle();\n this._initCover();\n try {\n await this._initTrail();\n }\n catch (e) {\n getLogger().error(e);\n }\n this.initBackground();\n this._safeMutationObserver((obs) => {\n if (!this.element) {\n return;\n }\n obs.observe(this.element, { attributes: true });\n });\n this.initUpdaters();\n this.initPlugins();\n this.paint();\n }\n initBackground() {\n const options = this.container.actualOptions, background = options.background, element = this.element;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n if (background.color) {\n const color = rangeColorToRgb(background.color);\n elementStyle.backgroundColor = color ? getStyleFromRgb(color, background.opacity) : \"\";\n }\n else {\n elementStyle.backgroundColor = \"\";\n }\n elementStyle.backgroundImage = background.image || \"\";\n elementStyle.backgroundPosition = background.position || \"\";\n elementStyle.backgroundRepeat = background.repeat || \"\";\n elementStyle.backgroundSize = background.size || \"\";\n }\n initPlugins() {\n this._resizePlugins = [];\n for (const [, plugin] of this.container.plugins) {\n if (plugin.resize) {\n this._resizePlugins.push(plugin);\n }\n if (plugin.particleFillColor || plugin.particleStrokeColor) {\n this._colorPlugins.push(plugin);\n }\n }\n }\n initUpdaters() {\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n for (const updater of this.container.particles.updaters) {\n if (updater.afterDraw) {\n this._postDrawUpdaters.push(updater);\n }\n if (updater.getColorStyles || updater.getTransformValues || updater.beforeDraw) {\n this._preDrawUpdaters.push(updater);\n }\n }\n }\n loadCanvas(canvas) {\n if (this._generated && this.element) {\n this.element.remove();\n }\n this._generated =\n canvas.dataset && generatedAttribute in canvas.dataset\n ? canvas.dataset[generatedAttribute] === \"true\"\n : this._generated;\n this.element = canvas;\n this.element.ariaHidden = \"true\";\n this._originalStyle = deepExtend({}, this.element.style);\n this.size.height = canvas.offsetHeight;\n this.size.width = canvas.offsetWidth;\n this._context = this.element.getContext(\"2d\");\n this._safeMutationObserver((obs) => {\n if (!this.element) {\n return;\n }\n obs.observe(this.element, { attributes: true });\n });\n this.container.retina.init();\n this.initBackground();\n }\n paint() {\n const options = this.container.actualOptions;\n this.draw((ctx) => {\n if (options.backgroundMask.enable && options.backgroundMask.cover) {\n clear(ctx, this.size);\n this._paintBase(this._coverColorStyle);\n }\n else {\n this._paintBase();\n }\n });\n }\n resize() {\n if (!this.element) {\n return false;\n }\n const container = this.container, pxRatio = container.retina.pixelRatio, size = container.canvas.size, newSize = {\n width: this.element.offsetWidth * pxRatio,\n height: this.element.offsetHeight * pxRatio,\n };\n if (newSize.height === size.height &&\n newSize.width === size.width &&\n newSize.height === this.element.height &&\n newSize.width === this.element.width) {\n return false;\n }\n const oldSize = { ...size };\n this.element.width = size.width = this.element.offsetWidth * pxRatio;\n this.element.height = size.height = this.element.offsetHeight * pxRatio;\n if (this.container.started) {\n container.particles.setResizeFactor({\n width: size.width / oldSize.width,\n height: size.height / oldSize.height,\n });\n }\n return true;\n }\n stop() {\n this._safeMutationObserver((obs) => obs.disconnect());\n this._mutationObserver = undefined;\n this.draw((ctx) => clear(ctx, this.size));\n }\n async windowResize() {\n if (!this.element || !this.resize()) {\n return;\n }\n const container = this.container, needsRefresh = container.updateActualOptions();\n container.particles.setDensity();\n this._applyResizePlugins();\n if (needsRefresh) {\n await container.refresh();\n }\n }\n}\n", "import { executeOnSingleOrMultiple, isBoolean, safeMatchMedia } from \"../../Utils/Utils.js\";\nimport { mouseDownEvent, mouseLeaveEvent, mouseMoveEvent, mouseOutEvent, mouseUpEvent, resizeEvent, touchCancelEvent, touchEndEvent, touchMoveEvent, touchStartEvent, visibilityChangeEvent, } from \"./Constants.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(), 500);\n }\n };\n this._handleThemeChange = (e) => {\n const mediaEvent = e, container = this.container, options = container.options, defaultThemes = options.defaultThemes, themeName = mediaEvent.matches ? defaultThemes.dark : defaultThemes.light, theme = options.themes.find((theme) => theme.name === themeName);\n if (theme && theme.default.auto) {\n container.loadTheme(themeName);\n }\n };\n this._handleVisibilityChange = () => {\n const container = this.container, options = container.actualOptions;\n this._mouseTouchFinish();\n if (!options.pauseOnBlur) {\n return;\n }\n if (document && document.hidden) {\n container.pageHidden = true;\n container.pause();\n }\n else {\n container.pageHidden = false;\n if (container.getAnimationStatus()) {\n container.play(true);\n }\n else {\n container.draw(true);\n }\n }\n };\n this._handleWindowResize = async () => {\n if (this._resizeTimeout) {\n clearTimeout(this._resizeTimeout);\n delete this._resizeTimeout;\n }\n this._resizeTimeout = setTimeout(async () => {\n const canvas = this.container.canvas;\n canvas && (await canvas.windowResize());\n }, this.container.actualOptions.interactivity.events.resize.delay * 1000);\n };\n this._manageInteractivityListeners = (mouseLeaveTmpEvent, add) => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions;\n const interactivityEl = container.interactivity.element;\n if (!interactivityEl) {\n return;\n }\n const html = interactivityEl, canvasEl = container.canvas.element;\n if (canvasEl) {\n canvasEl.style.pointerEvents = html === canvasEl ? \"initial\" : \"none\";\n }\n if (!(options.interactivity.events.onHover.enable || options.interactivity.events.onClick.enable)) {\n return;\n }\n manageListener(interactivityEl, mouseMoveEvent, handlers.mouseMove, add);\n manageListener(interactivityEl, touchStartEvent, handlers.touchStart, add);\n manageListener(interactivityEl, touchMoveEvent, handlers.touchMove, add);\n if (!options.interactivity.events.onClick.enable) {\n manageListener(interactivityEl, touchEndEvent, handlers.touchEnd, add);\n }\n else {\n manageListener(interactivityEl, touchEndEvent, handlers.touchEndClick, add);\n manageListener(interactivityEl, mouseUpEvent, handlers.mouseUp, add);\n manageListener(interactivityEl, mouseDownEvent, handlers.mouseDown, add);\n }\n manageListener(interactivityEl, mouseLeaveTmpEvent, handlers.mouseLeave, add);\n manageListener(interactivityEl, touchCancelEvent, handlers.touchCancel, add);\n };\n this._manageListeners = (add) => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions, detectType = options.interactivity.detectsOn, canvasEl = container.canvas.element;\n let mouseLeaveTmpEvent = mouseLeaveEvent;\n if (detectType === \"window\") {\n container.interactivity.element = window;\n mouseLeaveTmpEvent = mouseOutEvent;\n }\n else if (detectType === \"parent\" && canvasEl) {\n container.interactivity.element = canvasEl.parentElement ?? canvasEl.parentNode;\n }\n else {\n container.interactivity.element = canvasEl;\n }\n this._manageMediaMatch(add);\n this._manageResize(add);\n this._manageInteractivityListeners(mouseLeaveTmpEvent, add);\n if (document) {\n manageListener(document, visibilityChangeEvent, handlers.visibilityChange, add, false);\n }\n };\n this._manageMediaMatch = (add) => {\n const handlers = this._handlers, mediaMatch = safeMatchMedia(\"(prefers-color-scheme: dark)\");\n if (!mediaMatch) {\n return;\n }\n if (mediaMatch.addEventListener !== undefined) {\n manageListener(mediaMatch, \"change\", handlers.themeChange, add);\n return;\n }\n if (mediaMatch.addListener === undefined) {\n return;\n }\n if (add) {\n mediaMatch.addListener(handlers.oldThemeChange);\n }\n else {\n mediaMatch.removeListener(handlers.oldThemeChange);\n }\n };\n this._manageResize = (add) => {\n const handlers = this._handlers, container = this.container, options = container.actualOptions;\n if (!options.interactivity.events.resize) {\n return;\n }\n if (typeof ResizeObserver === \"undefined\") {\n manageListener(window, resizeEvent, handlers.resize, add);\n return;\n }\n const canvasEl = container.canvas.element;\n if (this._resizeObserver && !add) {\n if (canvasEl) {\n this._resizeObserver.unobserve(canvasEl);\n }\n this._resizeObserver.disconnect();\n delete this._resizeObserver;\n }\n else if (!this._resizeObserver && add && canvasEl) {\n this._resizeObserver = new ResizeObserver(async (entries) => {\n const entry = entries.find((e) => e.target === canvasEl);\n if (!entry) {\n return;\n }\n await this._handleWindowResize();\n });\n this._resizeObserver.observe(canvasEl);\n }\n };\n this._mouseDown = () => {\n const { interactivity } = this.container;\n if (!interactivity) {\n return;\n }\n const { mouse } = interactivity;\n mouse.clicking = true;\n mouse.downPosition = mouse.position;\n };\n this._mouseTouchClick = (e) => {\n const container = this.container, options = container.actualOptions, { mouse } = container.interactivity;\n mouse.inside = true;\n let handled = false;\n const mousePosition = mouse.position;\n if (!mousePosition || !options.interactivity.events.onClick.enable) {\n return;\n }\n for (const [, plugin] of container.plugins) {\n if (!plugin.clickPositionValid) {\n continue;\n }\n handled = plugin.clickPositionValid(mousePosition);\n if (handled) {\n break;\n }\n }\n if (!handled) {\n this._doMouseTouchClick(e);\n }\n mouse.clicking = false;\n };\n this._mouseTouchFinish = () => {\n const interactivity = this.container.interactivity;\n if (!interactivity) {\n return;\n }\n const mouse = interactivity.mouse;\n delete mouse.position;\n delete mouse.clickPosition;\n delete mouse.downPosition;\n interactivity.status = mouseLeaveEvent;\n mouse.inside = false;\n mouse.clicking = false;\n };\n this._mouseTouchMove = (e) => {\n const container = this.container, options = container.actualOptions, interactivity = container.interactivity, canvasEl = container.canvas.element;\n if (!interactivity || !interactivity.element) {\n return;\n }\n interactivity.mouse.inside = true;\n let pos;\n if (e.type.startsWith(\"pointer\")) {\n this._canPush = true;\n const mouseEvent = e;\n if (interactivity.element === window) {\n if (canvasEl) {\n const clientRect = canvasEl.getBoundingClientRect();\n pos = {\n x: mouseEvent.clientX - clientRect.left,\n y: mouseEvent.clientY - clientRect.top,\n };\n }\n }\n else if (options.interactivity.detectsOn === \"parent\") {\n const source = mouseEvent.target, target = mouseEvent.currentTarget;\n if (source && target && canvasEl) {\n const sourceRect = source.getBoundingClientRect(), targetRect = target.getBoundingClientRect(), canvasRect = canvasEl.getBoundingClientRect();\n pos = {\n x: mouseEvent.offsetX + 2 * sourceRect.left - (targetRect.left + canvasRect.left),\n y: mouseEvent.offsetY + 2 * sourceRect.top - (targetRect.top + canvasRect.top),\n };\n }\n else {\n pos = {\n x: mouseEvent.offsetX ?? mouseEvent.clientX,\n y: mouseEvent.offsetY ?? mouseEvent.clientY,\n };\n }\n }\n else if (mouseEvent.target === canvasEl) {\n pos = {\n x: mouseEvent.offsetX ?? mouseEvent.clientX,\n y: mouseEvent.offsetY ?? mouseEvent.clientY,\n };\n }\n }\n else {\n this._canPush = e.type !== \"touchmove\";\n if (canvasEl) {\n const touchEvent = e, lastTouch = touchEvent.touches[touchEvent.touches.length - 1], canvasRect = canvasEl.getBoundingClientRect();\n pos = {\n x: lastTouch.clientX - (canvasRect.left ?? 0),\n y: lastTouch.clientY - (canvasRect.top ?? 0),\n };\n }\n }\n const pxRatio = container.retina.pixelRatio;\n if (pos) {\n pos.x *= pxRatio;\n pos.y *= pxRatio;\n }\n interactivity.mouse.position = pos;\n interactivity.status = mouseMoveEvent;\n };\n this._touchEnd = (e) => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.delete(touch.identifier);\n }\n this._mouseTouchFinish();\n };\n this._touchEndClick = (e) => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.delete(touch.identifier);\n }\n this._mouseTouchClick(e);\n };\n this._touchStart = (e) => {\n const evt = e, touches = Array.from(evt.changedTouches);\n for (const touch of touches) {\n this._touches.set(touch.identifier, performance.now());\n }\n this._mouseTouchMove(e);\n };\n this._canPush = true;\n this._touches = new Map();\n this._handlers = {\n mouseDown: () => this._mouseDown(),\n mouseLeave: () => this._mouseTouchFinish(),\n mouseMove: (e) => this._mouseTouchMove(e),\n mouseUp: (e) => this._mouseTouchClick(e),\n touchStart: (e) => this._touchStart(e),\n touchMove: (e) => this._mouseTouchMove(e),\n touchEnd: (e) => this._touchEnd(e),\n touchCancel: (e) => this._touchEnd(e),\n touchEndClick: (e) => this._touchEndClick(e),\n visibilityChange: () => this._handleVisibilityChange(),\n themeChange: (e) => this._handleThemeChange(e),\n oldThemeChange: (e) => this._handleThemeChange(e),\n resize: () => {\n this._handleWindowResize();\n },\n };\n }\n addListeners() {\n this._manageListeners(true);\n }\n removeListeners() {\n this._manageListeners(false);\n }\n}\n", "import { isArray, isString } from \"../../Utils/Utils.js\";\nexport class OptionsColor {\n constructor() {\n this.value = \"\";\n }\n static create(source, data) {\n const color = new OptionsColor();\n color.load(source);\n if (data !== undefined) {\n if (isString(data) || isArray(data)) {\n color.load({ value: data });\n }\n else {\n color.load(data);\n }\n }\n return color;\n }\n load(data) {\n if (data?.value === undefined) {\n return;\n }\n this.value = data.value;\n }\n}\n", "import { OptionsColor } from \"../OptionsColor.js\";\nexport class Background {\n constructor() {\n this.color = new OptionsColor();\n this.color.value = \"\";\n this.image = \"\";\n this.position = \"\";\n this.repeat = \"\";\n this.size = \"\";\n this.opacity = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n if (data.position !== undefined) {\n this.position = data.position;\n }\n if (data.repeat !== undefined) {\n this.repeat = data.repeat;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n", "import { OptionsColor } from \"../OptionsColor.js\";\nexport class BackgroundMaskCover {\n constructor() {\n this.color = new OptionsColor();\n this.color.value = \"#fff\";\n this.opacity = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n", "import { BackgroundMaskCover } from \"./BackgroundMaskCover.js\";\nimport { isString } from \"../../../Utils/Utils.js\";\nexport class BackgroundMask {\n constructor() {\n this.composite = \"destination-out\";\n this.cover = new BackgroundMaskCover();\n this.enable = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.composite !== undefined) {\n this.composite = data.composite;\n }\n if (data.cover !== undefined) {\n const cover = data.cover, color = (isString(data.cover) ? { color: data.cover } : data.cover);\n this.cover.load(cover.color !== undefined ? cover : { color: color });\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n", "export class FullScreen {\n constructor() {\n this.enable = true;\n this.zIndex = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.zIndex !== undefined) {\n this.zIndex = data.zIndex;\n }\n }\n}\n", "export class ClickEvent {\n constructor() {\n this.enable = false;\n this.mode = [];\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n }\n}\n", "export class DivEvent {\n constructor() {\n this.selectors = [];\n this.enable = false;\n this.mode = [];\n this.type = \"circle\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n", "export class Parallax {\n constructor() {\n this.enable = false;\n this.force = 2;\n this.smooth = 10;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.force !== undefined) {\n this.force = data.force;\n }\n if (data.smooth !== undefined) {\n this.smooth = data.smooth;\n }\n }\n}\n", "import { Parallax } from \"./Parallax.js\";\nexport class HoverEvent {\n constructor() {\n this.enable = false;\n this.mode = [];\n this.parallax = new Parallax();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n this.parallax.load(data.parallax);\n }\n}\n", "export class ResizeEvent {\n constructor() {\n this.delay = 0.5;\n this.enable = true;\n }\n load(data) {\n if (data === undefined) {\n return;\n }\n if (data.delay !== undefined) {\n this.delay = data.delay;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n", "import { ClickEvent } from \"./ClickEvent.js\";\nimport { DivEvent } from \"./DivEvent.js\";\nimport { HoverEvent } from \"./HoverEvent.js\";\nimport { ResizeEvent } from \"./ResizeEvent.js\";\nimport { executeOnSingleOrMultiple } from \"../../../../Utils/Utils.js\";\nexport class Events {\n constructor() {\n this.onClick = new ClickEvent();\n this.onDiv = new DivEvent();\n this.onHover = new HoverEvent();\n this.resize = new ResizeEvent();\n }\n load(data) {\n if (!data) {\n return;\n }\n this.onClick.load(data.onClick);\n const onDiv = data.onDiv;\n if (onDiv !== undefined) {\n this.onDiv = executeOnSingleOrMultiple(onDiv, (t) => {\n const tmp = new DivEvent();\n tmp.load(t);\n return tmp;\n });\n }\n this.onHover.load(data.onHover);\n this.resize.load(data.resize);\n }\n}\n", "export class Modes {\n constructor(engine, container) {\n this._engine = engine;\n this._container = container;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (!this._container) {\n return;\n }\n const interactors = this._engine.interactors.get(this._container);\n if (!interactors) {\n return;\n }\n for (const interactor of interactors) {\n if (!interactor.loadModeOptions) {\n continue;\n }\n interactor.loadModeOptions(this, data);\n }\n }\n}\n", "import { Events } from \"./Events/Events.js\";\nimport { Modes } from \"./Modes/Modes.js\";\nexport class Interactivity {\n constructor(engine, container) {\n this.detectsOn = \"window\";\n this.events = new Events();\n this.modes = new Modes(engine, container);\n }\n load(data) {\n if (!data) {\n return;\n }\n const detectsOn = data.detectsOn;\n if (detectsOn !== undefined) {\n this.detectsOn = detectsOn;\n }\n this.events.load(data.events);\n this.modes.load(data.modes);\n }\n}\n", "import { deepExtend } from \"../../Utils/Utils.js\";\nexport class ManualParticle {\n load(data) {\n if (!data) {\n return;\n }\n if (data.position) {\n this.position = {\n x: data.position.x ?? 50,\n y: data.position.y ?? 50,\n mode: data.position.mode ?? \"percent\",\n };\n }\n if (data.options) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n", "import { deepExtend } from \"../../Utils/Utils.js\";\nexport class Responsive {\n constructor() {\n this.maxWidth = Infinity;\n this.options = {};\n this.mode = \"canvas\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.maxWidth !== undefined) {\n this.maxWidth = data.maxWidth;\n }\n if (data.mode !== undefined) {\n if (data.mode === \"screen\") {\n this.mode = \"screen\";\n }\n else {\n this.mode = \"canvas\";\n }\n }\n if (data.options !== undefined) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n", "export class ThemeDefault {\n constructor() {\n this.auto = false;\n this.mode = \"any\";\n this.value = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.auto !== undefined) {\n this.auto = data.auto;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n", "import { ThemeDefault } from \"./ThemeDefault.js\";\nimport { deepExtend } from \"../../../Utils/Utils.js\";\nexport class Theme {\n constructor() {\n this.name = \"\";\n this.default = new ThemeDefault();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n this.default.load(data.default);\n if (data.options !== undefined) {\n this.options = deepExtend({}, data.options);\n }\n }\n}\n", "import { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class AnimationOptions {\n constructor() {\n this.count = 0;\n this.enable = false;\n this.speed = 1;\n this.decay = 0;\n this.delay = 0;\n this.sync = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.count !== undefined) {\n this.count = setRangeValue(data.count);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.speed !== undefined) {\n this.speed = setRangeValue(data.speed);\n }\n if (data.decay !== undefined) {\n this.decay = setRangeValue(data.decay);\n }\n if (data.delay !== undefined) {\n this.delay = setRangeValue(data.delay);\n }\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\nexport class RangedAnimationOptions extends AnimationOptions {\n constructor() {\n super();\n this.mode = \"auto\";\n this.startValue = \"random\";\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.startValue !== undefined) {\n this.startValue = data.startValue;\n }\n }\n}\n", "import { AnimationOptions } from \"./AnimationOptions.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class ColorAnimation extends AnimationOptions {\n constructor() {\n super();\n this.offset = 0;\n this.sync = true;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.offset !== undefined) {\n this.offset = setRangeValue(data.offset);\n }\n }\n}\n", "import { ColorAnimation } from \"./ColorAnimation.js\";\nexport class HslAnimation {\n constructor() {\n this.h = new ColorAnimation();\n this.s = new ColorAnimation();\n this.l = new ColorAnimation();\n }\n load(data) {\n if (!data) {\n return;\n }\n this.h.load(data.h);\n this.s.load(data.s);\n this.l.load(data.l);\n }\n}\n", "import { isArray, isString } from \"../../Utils/Utils.js\";\nimport { HslAnimation } from \"./HslAnimation.js\";\nimport { OptionsColor } from \"./OptionsColor.js\";\nexport class AnimatableColor extends OptionsColor {\n constructor() {\n super();\n this.animation = new HslAnimation();\n }\n static create(source, data) {\n const color = new AnimatableColor();\n color.load(source);\n if (data !== undefined) {\n if (isString(data) || isArray(data)) {\n color.load({ value: data });\n }\n else {\n color.load(data);\n }\n }\n return color;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n const colorAnimation = data.animation;\n if (colorAnimation !== undefined) {\n if (colorAnimation.enable !== undefined) {\n this.animation.h.load(colorAnimation);\n }\n else {\n this.animation.load(data.animation);\n }\n }\n }\n}\n", "export class CollisionsAbsorb {\n constructor() {\n this.speed = 2;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.speed !== undefined) {\n this.speed = data.speed;\n }\n }\n}\n", "export class CollisionsOverlap {\n constructor() {\n this.enable = true;\n this.retries = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.retries !== undefined) {\n this.retries = data.retries;\n }\n }\n}\n", "import { AnimationOptions, RangedAnimationOptions } from \"./AnimationOptions.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class ValueWithRandom {\n constructor() {\n this.value = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.value !== undefined) {\n this.value = setRangeValue(data.value);\n }\n }\n}\nexport class AnimationValueWithRandom extends ValueWithRandom {\n constructor() {\n super();\n this.animation = new AnimationOptions();\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\nexport class RangedAnimationValueWithRandom extends AnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new RangedAnimationOptions();\n }\n load(data) {\n super.load(data);\n }\n}\n", "import { ValueWithRandom } from \"../../ValueWithRandom.js\";\nexport class ParticlesBounceFactor extends ValueWithRandom {\n constructor() {\n super();\n this.value = 1;\n }\n}\n", "import { ParticlesBounceFactor } from \"./ParticlesBounceFactor.js\";\nexport class ParticlesBounce {\n constructor() {\n this.horizontal = new ParticlesBounceFactor();\n this.vertical = new ParticlesBounceFactor();\n }\n load(data) {\n if (!data) {\n return;\n }\n this.horizontal.load(data.horizontal);\n this.vertical.load(data.vertical);\n }\n}\n", "import { CollisionsAbsorb } from \"./CollisionsAbsorb.js\";\nimport { CollisionsOverlap } from \"./CollisionsOverlap.js\";\nimport { ParticlesBounce } from \"../Bounce/ParticlesBounce.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Collisions {\n constructor() {\n this.absorb = new CollisionsAbsorb();\n this.bounce = new ParticlesBounce();\n this.enable = false;\n this.maxSpeed = 50;\n this.mode = \"bounce\";\n this.overlap = new CollisionsOverlap();\n }\n load(data) {\n if (!data) {\n return;\n }\n this.absorb.load(data.absorb);\n this.bounce.load(data.bounce);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = setRangeValue(data.maxSpeed);\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n this.overlap.load(data.overlap);\n }\n}\n", "import { deepExtend } from \"../../../../Utils/Utils.js\";\nexport class Effect {\n constructor() {\n this.close = true;\n this.fill = true;\n this.options = {};\n this.type = [];\n }\n load(data) {\n if (!data) {\n return;\n }\n const options = data.options;\n if (options !== undefined) {\n for (const effect in options) {\n const item = options[effect];\n if (item) {\n this.options[effect] = deepExtend(this.options[effect] ?? {}, item);\n }\n }\n }\n if (data.close !== undefined) {\n this.close = data.close;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n", "import { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveAngle {\n constructor() {\n this.offset = 0;\n this.value = 90;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.offset !== undefined) {\n this.offset = setRangeValue(data.offset);\n }\n if (data.value !== undefined) {\n this.value = setRangeValue(data.value);\n }\n }\n}\n", "import { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveAttract {\n constructor() {\n this.distance = 200;\n this.enable = false;\n this.rotate = {\n x: 3000,\n y: 3000,\n };\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = setRangeValue(data.distance);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.rotate) {\n const rotateX = data.rotate.x;\n if (rotateX !== undefined) {\n this.rotate.x = rotateX;\n }\n const rotateY = data.rotate.y;\n if (rotateY !== undefined) {\n this.rotate.y = rotateY;\n }\n }\n }\n}\n", "export class MoveCenter {\n constructor() {\n this.x = 50;\n this.y = 50;\n this.mode = \"percent\";\n this.radius = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.x !== undefined) {\n this.x = data.x;\n }\n if (data.y !== undefined) {\n this.y = data.y;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.radius !== undefined) {\n this.radius = data.radius;\n }\n }\n}\n", "import { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class MoveGravity {\n constructor() {\n this.acceleration = 9.81;\n this.enable = false;\n this.inverse = false;\n this.maxSpeed = 50;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.acceleration !== undefined) {\n this.acceleration = setRangeValue(data.acceleration);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.inverse !== undefined) {\n this.inverse = data.inverse;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = setRangeValue(data.maxSpeed);\n }\n }\n}\n", "import { ValueWithRandom } from \"../../../ValueWithRandom.js\";\nimport { deepExtend } from \"../../../../../Utils/Utils.js\";\nexport class MovePath {\n constructor() {\n this.clamp = true;\n this.delay = new ValueWithRandom();\n this.enable = false;\n this.options = {};\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.clamp !== undefined) {\n this.clamp = data.clamp;\n }\n this.delay.load(data.delay);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n this.generator = data.generator;\n if (data.options) {\n this.options = deepExtend(this.options, data.options);\n }\n }\n}\n", "import { OptionsColor } from \"../../OptionsColor.js\";\nexport class MoveTrailFill {\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.image !== undefined) {\n this.image = data.image;\n }\n }\n}\n", "import { MoveTrailFill } from \"./MoveTrailFill.js\";\nexport class MoveTrail {\n constructor() {\n this.enable = false;\n this.length = 10;\n this.fill = new MoveTrailFill();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.fill !== undefined) {\n this.fill.load(data.fill);\n }\n if (data.length !== undefined) {\n this.length = data.length;\n }\n }\n}\n", "export class OutModes {\n constructor() {\n this.default = \"out\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.default !== undefined) {\n this.default = data.default;\n }\n this.bottom = data.bottom ?? data.default;\n this.left = data.left ?? data.default;\n this.right = data.right ?? data.default;\n this.top = data.top ?? data.default;\n }\n}\n", "import { deepExtend } from \"../../../../Utils/Utils.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Spin {\n constructor() {\n this.acceleration = 0;\n this.enable = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.acceleration !== undefined) {\n this.acceleration = setRangeValue(data.acceleration);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.position) {\n this.position = deepExtend({}, data.position);\n }\n }\n}\n", "import { isNumber, isObject } from \"../../../../Utils/Utils.js\";\nimport { MoveAngle } from \"./MoveAngle.js\";\nimport { MoveAttract } from \"./MoveAttract.js\";\nimport { MoveCenter } from \"./MoveCenter.js\";\nimport { MoveGravity } from \"./MoveGravity.js\";\nimport { MovePath } from \"./Path/MovePath.js\";\nimport { MoveTrail } from \"./MoveTrail.js\";\nimport { OutModes } from \"./OutModes.js\";\nimport { Spin } from \"./Spin.js\";\nimport { setRangeValue } from \"../../../../Utils/NumberUtils.js\";\nexport class Move {\n constructor() {\n this.angle = new MoveAngle();\n this.attract = new MoveAttract();\n this.center = new MoveCenter();\n this.decay = 0;\n this.distance = {};\n this.direction = \"none\";\n this.drift = 0;\n this.enable = false;\n this.gravity = new MoveGravity();\n this.path = new MovePath();\n this.outModes = new OutModes();\n this.random = false;\n this.size = false;\n this.speed = 2;\n this.spin = new Spin();\n this.straight = false;\n this.trail = new MoveTrail();\n this.vibrate = false;\n this.warp = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n this.angle.load(isNumber(data.angle) ? { value: data.angle } : data.angle);\n this.attract.load(data.attract);\n this.center.load(data.center);\n if (data.decay !== undefined) {\n this.decay = setRangeValue(data.decay);\n }\n if (data.direction !== undefined) {\n this.direction = data.direction;\n }\n if (data.distance !== undefined) {\n this.distance = isNumber(data.distance)\n ? {\n horizontal: data.distance,\n vertical: data.distance,\n }\n : { ...data.distance };\n }\n if (data.drift !== undefined) {\n this.drift = setRangeValue(data.drift);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n this.gravity.load(data.gravity);\n const outModes = data.outModes;\n if (outModes !== undefined) {\n if (isObject(outModes)) {\n this.outModes.load(outModes);\n }\n else {\n this.outModes.load({\n default: outModes,\n });\n }\n }\n this.path.load(data.path);\n if (data.random !== undefined) {\n this.random = data.random;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.speed !== undefined) {\n this.speed = setRangeValue(data.speed);\n }\n this.spin.load(data.spin);\n if (data.straight !== undefined) {\n this.straight = data.straight;\n }\n this.trail.load(data.trail);\n if (data.vibrate !== undefined) {\n this.vibrate = data.vibrate;\n }\n if (data.warp !== undefined) {\n this.warp = data.warp;\n }\n }\n}\n", "import { RangedAnimationOptions } from \"../../AnimationOptions.js\";\nexport class OpacityAnimation extends RangedAnimationOptions {\n constructor() {\n super();\n this.destroy = \"none\";\n this.speed = 2;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.destroy !== undefined) {\n this.destroy = data.destroy;\n }\n }\n}\n", "import { OpacityAnimation } from \"./OpacityAnimation.js\";\nimport { RangedAnimationValueWithRandom } from \"../../ValueWithRandom.js\";\nexport class Opacity extends RangedAnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new OpacityAnimation();\n this.value = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n super.load(data);\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\n", "export class ParticlesDensity {\n constructor() {\n this.enable = false;\n this.width = 1920;\n this.height = 1080;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n const width = data.width;\n if (width !== undefined) {\n this.width = width;\n }\n const height = data.height;\n if (height !== undefined) {\n this.height = height;\n }\n }\n}\n", "export class ParticlesNumberLimit {\n constructor() {\n this.mode = \"delete\";\n this.value = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.mode !== undefined) {\n this.mode = data.mode;\n }\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n", "import { ParticlesDensity } from \"./ParticlesDensity.js\";\nimport { ParticlesNumberLimit } from \"./ParticlesNumberLimit.js\";\nexport class ParticlesNumber {\n constructor() {\n this.density = new ParticlesDensity();\n this.limit = new ParticlesNumberLimit();\n this.value = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n this.density.load(data.density);\n this.limit.load(data.limit);\n if (data.value !== undefined) {\n this.value = data.value;\n }\n }\n}\n", "import { OptionsColor } from \"../OptionsColor.js\";\nexport class Shadow {\n constructor() {\n this.blur = 0;\n this.color = new OptionsColor();\n this.enable = false;\n this.offset = {\n x: 0,\n y: 0,\n };\n this.color.value = \"#000\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.blur !== undefined) {\n this.blur = data.blur;\n }\n this.color = OptionsColor.create(this.color, data.color);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.offset === undefined) {\n return;\n }\n if (data.offset.x !== undefined) {\n this.offset.x = data.offset.x;\n }\n if (data.offset.y !== undefined) {\n this.offset.y = data.offset.y;\n }\n }\n}\n", "import { deepExtend } from \"../../../../Utils/Utils.js\";\nexport class Shape {\n constructor() {\n this.close = true;\n this.fill = true;\n this.options = {};\n this.type = \"circle\";\n }\n load(data) {\n if (!data) {\n return;\n }\n const options = data.options;\n if (options !== undefined) {\n for (const shape in options) {\n const item = options[shape];\n if (item) {\n this.options[shape] = deepExtend(this.options[shape] ?? {}, item);\n }\n }\n }\n if (data.close !== undefined) {\n this.close = data.close;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n if (data.type !== undefined) {\n this.type = data.type;\n }\n }\n}\n", "import { RangedAnimationOptions } from \"../../AnimationOptions.js\";\nexport class SizeAnimation extends RangedAnimationOptions {\n constructor() {\n super();\n this.destroy = \"none\";\n this.speed = 5;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.destroy !== undefined) {\n this.destroy = data.destroy;\n }\n }\n}\n", "import { RangedAnimationValueWithRandom } from \"../../ValueWithRandom.js\";\nimport { SizeAnimation } from \"./SizeAnimation.js\";\nexport class Size extends RangedAnimationValueWithRandom {\n constructor() {\n super();\n this.animation = new SizeAnimation();\n this.value = 3;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n const animation = data.animation;\n if (animation !== undefined) {\n this.animation.load(animation);\n }\n }\n}\n", "import { AnimatableColor } from \"../AnimatableColor.js\";\nimport { setRangeValue } from \"../../../Utils/NumberUtils.js\";\nexport class Stroke {\n constructor() {\n this.width = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = AnimatableColor.create(this.color, data.color);\n }\n if (data.width !== undefined) {\n this.width = setRangeValue(data.width);\n }\n if (data.opacity !== undefined) {\n this.opacity = setRangeValue(data.opacity);\n }\n }\n}\n", "import { ValueWithRandom } from \"../../ValueWithRandom.js\";\nexport class ZIndex extends ValueWithRandom {\n constructor() {\n super();\n this.opacityRate = 1;\n this.sizeRate = 1;\n this.velocityRate = 1;\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.opacityRate !== undefined) {\n this.opacityRate = data.opacityRate;\n }\n if (data.sizeRate !== undefined) {\n this.sizeRate = data.sizeRate;\n }\n if (data.velocityRate !== undefined) {\n this.velocityRate = data.velocityRate;\n }\n }\n}\n", "import { deepExtend, executeOnSingleOrMultiple } from \"../../../Utils/Utils.js\";\nimport { AnimatableColor } from \"../AnimatableColor.js\";\nimport { Collisions } from \"./Collisions/Collisions.js\";\nimport { Effect } from \"./Effect/Effect.js\";\nimport { Move } from \"./Move/Move.js\";\nimport { Opacity } from \"./Opacity/Opacity.js\";\nimport { ParticlesBounce } from \"./Bounce/ParticlesBounce.js\";\nimport { ParticlesNumber } from \"./Number/ParticlesNumber.js\";\nimport { Shadow } from \"./Shadow.js\";\nimport { Shape } from \"./Shape/Shape.js\";\nimport { Size } from \"./Size/Size.js\";\nimport { Stroke } from \"./Stroke.js\";\nimport { ZIndex } from \"./ZIndex/ZIndex.js\";\nexport class ParticlesOptions {\n constructor(engine, container) {\n this._engine = engine;\n this._container = container;\n this.bounce = new ParticlesBounce();\n this.collisions = new Collisions();\n this.color = new AnimatableColor();\n this.color.value = \"#fff\";\n this.effect = new Effect();\n this.groups = {};\n this.move = new Move();\n this.number = new ParticlesNumber();\n this.opacity = new Opacity();\n this.reduceDuplicates = false;\n this.shadow = new Shadow();\n this.shape = new Shape();\n this.size = new Size();\n this.stroke = new Stroke();\n this.zIndex = new ZIndex();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.groups !== undefined) {\n for (const group of Object.keys(data.groups)) {\n if (!Object.hasOwn(data.groups, group)) {\n continue;\n }\n const item = data.groups[group];\n if (item !== undefined) {\n this.groups[group] = deepExtend(this.groups[group] ?? {}, item);\n }\n }\n }\n if (data.reduceDuplicates !== undefined) {\n this.reduceDuplicates = data.reduceDuplicates;\n }\n this.bounce.load(data.bounce);\n this.color.load(AnimatableColor.create(this.color, data.color));\n this.effect.load(data.effect);\n this.move.load(data.move);\n this.number.load(data.number);\n this.opacity.load(data.opacity);\n this.shape.load(data.shape);\n this.size.load(data.size);\n this.shadow.load(data.shadow);\n this.zIndex.load(data.zIndex);\n this.collisions.load(data.collisions);\n if (data.interactivity !== undefined) {\n this.interactivity = deepExtend({}, data.interactivity);\n }\n const strokeToLoad = data.stroke;\n if (strokeToLoad) {\n this.stroke = executeOnSingleOrMultiple(strokeToLoad, (t) => {\n const tmp = new Stroke();\n tmp.load(t);\n return tmp;\n });\n }\n if (this._container) {\n const updaters = this._engine.updaters.get(this._container);\n if (updaters) {\n for (const updater of updaters) {\n if (updater.loadOptions) {\n updater.loadOptions(this, data);\n }\n }\n }\n const interactors = this._engine.interactors.get(this._container);\n if (interactors) {\n for (const interactor of interactors) {\n if (interactor.loadParticlesOptions) {\n interactor.loadParticlesOptions(this, data);\n }\n }\n }\n }\n }\n}\n", "import { ParticlesOptions } from \"../Options/Classes/Particles/ParticlesOptions.js\";\nexport function loadOptions(options, ...sourceOptionsArr) {\n for (const sourceOptions of sourceOptionsArr) {\n options.load(sourceOptions);\n }\n}\nexport function loadParticlesOptions(engine, container, ...sourceOptionsArr) {\n const options = new ParticlesOptions(engine, container);\n loadOptions(options, ...sourceOptionsArr);\n return options;\n}\n", "import { deepExtend, executeOnSingleOrMultiple, isBoolean, safeMatchMedia } from \"../../Utils/Utils.js\";\nimport { Background } from \"./Background/Background.js\";\nimport { BackgroundMask } from \"./BackgroundMask/BackgroundMask.js\";\nimport { FullScreen } from \"./FullScreen/FullScreen.js\";\nimport { Interactivity } from \"./Interactivity/Interactivity.js\";\nimport { ManualParticle } from \"./ManualParticle.js\";\nimport { Responsive } from \"./Responsive.js\";\nimport { Theme } from \"./Theme/Theme.js\";\nimport { loadParticlesOptions } from \"../../Utils/OptionsUtils.js\";\nimport { setRangeValue } from \"../../Utils/NumberUtils.js\";\nexport class Options {\n constructor(engine, container) {\n this._findDefaultTheme = (mode) => {\n return (this.themes.find((theme) => theme.default.value && theme.default.mode === mode) ??\n this.themes.find((theme) => theme.default.value && theme.default.mode === \"any\"));\n };\n this._importPreset = (preset) => {\n this.load(this._engine.getPreset(preset));\n };\n this._engine = engine;\n this._container = container;\n this.autoPlay = true;\n this.background = new Background();\n this.backgroundMask = new BackgroundMask();\n this.clear = true;\n this.defaultThemes = {};\n this.delay = 0;\n this.fullScreen = new FullScreen();\n this.detectRetina = true;\n this.duration = 0;\n this.fpsLimit = 120;\n this.interactivity = new Interactivity(engine, container);\n this.manualParticles = [];\n this.particles = loadParticlesOptions(this._engine, this._container);\n this.pauseOnBlur = true;\n this.pauseOnOutsideViewport = true;\n this.responsive = [];\n this.smooth = false;\n this.style = {};\n this.themes = [];\n this.zLayers = 100;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.preset !== undefined) {\n executeOnSingleOrMultiple(data.preset, (preset) => this._importPreset(preset));\n }\n if (data.autoPlay !== undefined) {\n this.autoPlay = data.autoPlay;\n }\n if (data.clear !== undefined) {\n this.clear = data.clear;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n if (data.delay !== undefined) {\n this.delay = setRangeValue(data.delay);\n }\n const detectRetina = data.detectRetina;\n if (detectRetina !== undefined) {\n this.detectRetina = detectRetina;\n }\n if (data.duration !== undefined) {\n this.duration = setRangeValue(data.duration);\n }\n const fpsLimit = data.fpsLimit;\n if (fpsLimit !== undefined) {\n this.fpsLimit = fpsLimit;\n }\n if (data.pauseOnBlur !== undefined) {\n this.pauseOnBlur = data.pauseOnBlur;\n }\n if (data.pauseOnOutsideViewport !== undefined) {\n this.pauseOnOutsideViewport = data.pauseOnOutsideViewport;\n }\n if (data.zLayers !== undefined) {\n this.zLayers = data.zLayers;\n }\n this.background.load(data.background);\n const fullScreen = data.fullScreen;\n if (isBoolean(fullScreen)) {\n this.fullScreen.enable = fullScreen;\n }\n else {\n this.fullScreen.load(fullScreen);\n }\n this.backgroundMask.load(data.backgroundMask);\n this.interactivity.load(data.interactivity);\n if (data.manualParticles) {\n this.manualParticles = data.manualParticles.map((t) => {\n const tmp = new ManualParticle();\n tmp.load(t);\n return tmp;\n });\n }\n this.particles.load(data.particles);\n this.style = deepExtend(this.style, data.style);\n this._engine.loadOptions(this, data);\n if (data.smooth !== undefined) {\n this.smooth = data.smooth;\n }\n const interactors = this._engine.interactors.get(this._container);\n if (interactors) {\n for (const interactor of interactors) {\n if (interactor.loadOptions) {\n interactor.loadOptions(this, data);\n }\n }\n }\n if (data.responsive !== undefined) {\n for (const responsive of data.responsive) {\n const optResponsive = new Responsive();\n optResponsive.load(responsive);\n this.responsive.push(optResponsive);\n }\n }\n this.responsive.sort((a, b) => a.maxWidth - b.maxWidth);\n if (data.themes !== undefined) {\n for (const theme of data.themes) {\n const existingTheme = this.themes.find((t) => t.name === theme.name);\n if (!existingTheme) {\n const optTheme = new Theme();\n optTheme.load(theme);\n this.themes.push(optTheme);\n }\n else {\n existingTheme.load(theme);\n }\n }\n }\n this.defaultThemes.dark = this._findDefaultTheme(\"dark\")?.name;\n this.defaultThemes.light = this._findDefaultTheme(\"light\")?.name;\n }\n setResponsive(width, pxRatio, defaultOptions) {\n this.load(defaultOptions);\n const responsiveOptions = this.responsive.find((t) => t.mode === \"screen\" && screen ? t.maxWidth > screen.availWidth : t.maxWidth * pxRatio > width);\n this.load(responsiveOptions?.options);\n return responsiveOptions?.maxWidth;\n }\n setTheme(name) {\n if (name) {\n const chosenTheme = this.themes.find((theme) => theme.name === name);\n if (chosenTheme) {\n this.load(chosenTheme.options);\n }\n }\n else {\n const mediaMatch = safeMatchMedia(\"(prefers-color-scheme: dark)\"), clientDarkMode = mediaMatch && mediaMatch.matches, defaultTheme = this._findDefaultTheme(clientDarkMode ? \"dark\" : \"light\");\n if (defaultTheme) {\n this.load(defaultTheme.options);\n }\n }\n }\n}\n", "export class InteractionManager {\n constructor(engine, container) {\n this.container = container;\n this._engine = engine;\n this._interactors = engine.getInteractors(this.container, true);\n this._externalInteractors = [];\n this._particleInteractors = [];\n }\n async externalInteract(delta) {\n for (const interactor of this._externalInteractors) {\n interactor.isEnabled() && (await interactor.interact(delta));\n }\n }\n handleClickMode(mode) {\n for (const interactor of this._externalInteractors) {\n interactor.handleClickMode && interactor.handleClickMode(mode);\n }\n }\n init() {\n this._externalInteractors = [];\n this._particleInteractors = [];\n for (const interactor of this._interactors) {\n switch (interactor.type) {\n case \"external\":\n this._externalInteractors.push(interactor);\n break;\n case \"particles\":\n this._particleInteractors.push(interactor);\n break;\n }\n interactor.init();\n }\n }\n async particlesInteract(particle, delta) {\n for (const interactor of this._externalInteractors) {\n interactor.clear(particle, delta);\n }\n for (const interactor of this._particleInteractors) {\n interactor.isEnabled(particle) && (await interactor.interact(particle, delta));\n }\n }\n async reset(particle) {\n for (const interactor of this._externalInteractors) {\n interactor.isEnabled() && interactor.reset(particle);\n }\n for (const interactor of this._particleInteractors) {\n interactor.isEnabled(particle) && interactor.reset(particle);\n }\n }\n}\n", "import { calcExactPositionOrRandomFromSize, clamp, getDistance, getParticleBaseVelocity, getParticleDirectionAngle, getRandom, getRangeValue, randomInRange, setRangeValue, } from \"../Utils/NumberUtils.js\";\nimport { deepExtend, getPosition, initParticleNumericAnimationValue, isInArray, itemFromSingleOrMultiple, } from \"../Utils/Utils.js\";\nimport { getHslFromAnimation, rangeColorToRgb } from \"../Utils/ColorUtils.js\";\nimport { Interactivity } from \"../Options/Classes/Interactivity/Interactivity.js\";\nimport { Vector } from \"./Utils/Vector.js\";\nimport { Vector3d } from \"./Utils/Vector3d.js\";\nimport { alterHsl } from \"../Utils/CanvasUtils.js\";\nimport { errorPrefix } from \"./Utils/Constants.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 * 2;\n if (data.coord > data.maxCoord - diameter) {\n data.setCb(-data.radius);\n }\n else if (data.coord < diameter) {\n data.setCb(data.radius);\n }\n}\nexport class Particle {\n constructor(engine, id, container, position, overrideOptions, group) {\n this.container = container;\n this._calcPosition = (container, position, zIndex, tryCount = 0) => {\n for (const [, plugin] of container.plugins) {\n const pluginPos = plugin.particlePosition !== undefined ? plugin.particlePosition(position, this) : undefined;\n if (pluginPos) {\n return Vector3d.create(pluginPos.x, pluginPos.y, zIndex);\n }\n }\n const canvasSize = container.canvas.size, exactPosition = calcExactPositionOrRandomFromSize({\n size: canvasSize,\n position: position,\n }), pos = Vector3d.create(exactPosition.x, exactPosition.y, zIndex), radius = this.getRadius(), outModes = this.options.move.outModes, fixHorizontal = (outMode) => {\n fixOutMode({\n outMode,\n checkModes: [\"bounce\", \"bounce-horizontal\"],\n coord: pos.x,\n maxCoord: container.canvas.size.width,\n setCb: (value) => (pos.x += value),\n radius,\n });\n }, fixVertical = (outMode) => {\n fixOutMode({\n outMode,\n checkModes: [\"bounce\", \"bounce-vertical\"],\n coord: pos.y,\n maxCoord: container.canvas.size.height,\n setCb: (value) => (pos.y += value),\n radius,\n });\n };\n fixHorizontal(outModes.left ?? outModes.default);\n fixHorizontal(outModes.right ?? outModes.default);\n fixVertical(outModes.top ?? outModes.default);\n fixVertical(outModes.bottom ?? outModes.default);\n if (this._checkOverlap(pos, tryCount)) {\n return this._calcPosition(container, undefined, zIndex, tryCount + 1);\n }\n return pos;\n };\n this._calculateVelocity = () => {\n const baseVelocity = getParticleBaseVelocity(this.direction), res = baseVelocity.copy(), moveOptions = this.options.move;\n if (moveOptions.direction === \"inside\" || moveOptions.direction === \"outside\") {\n return res;\n }\n const rad = (Math.PI / 180) * getRangeValue(moveOptions.angle.value), radOffset = (Math.PI / 180) * getRangeValue(moveOptions.angle.offset), range = {\n left: radOffset - rad * 0.5,\n right: radOffset + rad * 0.5,\n };\n if (!moveOptions.straight) {\n res.angle += randomInRange(setRangeValue(range.left, range.right));\n }\n if (moveOptions.random && typeof moveOptions.speed === \"number\") {\n res.length *= getRandom();\n }\n return res;\n };\n this._checkOverlap = (pos, tryCount = 0) => {\n const collisionsOptions = this.options.collisions, radius = this.getRadius();\n if (!collisionsOptions.enable) {\n return false;\n }\n const overlapOptions = collisionsOptions.overlap;\n if (overlapOptions.enable) {\n return false;\n }\n const retries = overlapOptions.retries;\n if (retries >= 0 && tryCount > retries) {\n throw new Error(`${errorPrefix} particle is overlapping and can't be placed`);\n }\n return !!this.container.particles.find((particle) => getDistance(pos, particle.position) < radius + particle.getRadius());\n };\n this._getRollColor = (color) => {\n if (!color || !this.roll || (!this.backColor && !this.roll.alter)) {\n return color;\n }\n const backFactor = this.roll.horizontal && this.roll.vertical ? 2 : 1, backSum = this.roll.horizontal ? Math.PI * 0.5 : 0, rolled = Math.floor(((this.roll.angle ?? 0) + backSum) / (Math.PI / backFactor)) % 2;\n if (!rolled) {\n return color;\n }\n if (this.backColor) {\n return this.backColor;\n }\n if (this.roll.alter) {\n return alterHsl(color, this.roll.alter.type, this.roll.alter.value);\n }\n return color;\n };\n this._initPosition = (position) => {\n const container = this.container, zIndexValue = getRangeValue(this.options.zIndex.value);\n this.position = this._calcPosition(container, position, clamp(zIndexValue, 0, container.zLayers));\n this.initialPosition = this.position.copy();\n const canvasSize = container.canvas.size;\n this.moveCenter = {\n ...getPosition(this.options.move.center, canvasSize),\n radius: this.options.move.center.radius ?? 0,\n mode: this.options.move.center.mode ?? \"percent\",\n };\n this.direction = getParticleDirectionAngle(this.options.move.direction, this.position, this.moveCenter);\n switch (this.options.move.direction) {\n case \"inside\":\n this.outType = \"inside\";\n break;\n case \"outside\":\n this.outType = \"outside\";\n break;\n }\n this.offset = Vector.origin;\n };\n this._engine = engine;\n this.init(id, position, overrideOptions, group);\n }\n destroy(override) {\n if (this.unbreakable || this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.bubble.inRange = false;\n this.slow.inRange = false;\n const container = this.container, pathGenerator = this.pathGenerator, shapeDrawer = container.shapeDrawers.get(this.shape);\n shapeDrawer && shapeDrawer.particleDestroy && shapeDrawer.particleDestroy(this);\n for (const [, plugin] of container.plugins) {\n plugin.particleDestroyed && plugin.particleDestroyed(this, override);\n }\n for (const updater of container.particles.updaters) {\n updater.particleDestroyed && updater.particleDestroyed(this, override);\n }\n pathGenerator && pathGenerator.reset(this);\n this._engine.dispatchEvent(\"particleDestroyed\", {\n container: this.container,\n data: {\n particle: this,\n },\n });\n }\n draw(delta) {\n const container = this.container, canvas = container.canvas;\n for (const [, plugin] of container.plugins) {\n canvas.drawParticlePlugin(plugin, this, delta);\n }\n canvas.drawParticle(this, delta);\n }\n getFillColor() {\n return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.color));\n }\n getMass() {\n return this.getRadius() ** 2 * Math.PI * 0.5;\n }\n getPosition() {\n return {\n x: this.position.x + this.offset.x,\n y: this.position.y + this.offset.y,\n z: this.position.z,\n };\n }\n getRadius() {\n return this.bubble.radius ?? this.size.value;\n }\n getStrokeColor() {\n return this._getRollColor(this.bubble.color ?? getHslFromAnimation(this.strokeColor));\n }\n init(id, position, overrideOptions, group) {\n const container = this.container, engine = this._engine;\n this.id = id;\n this.group = group;\n this.effectClose = true;\n this.effectFill = true;\n this.shapeClose = true;\n this.shapeFill = true;\n this.pathRotation = false;\n this.lastPathTime = 0;\n this.destroyed = false;\n this.unbreakable = false;\n this.rotation = 0;\n this.misplaced = false;\n this.retina = {\n maxDistance: {},\n };\n this.outType = \"normal\";\n this.ignoresResizeRatio = true;\n const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = loadParticlesOptions(this._engine, container, mainOptions.particles), effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type, { reduceDuplicates } = particlesOptions;\n this.effect = itemFromSingleOrMultiple(effectType, this.id, reduceDuplicates);\n this.shape = itemFromSingleOrMultiple(shapeType, this.id, reduceDuplicates);\n const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;\n if (overrideOptions) {\n if (overrideOptions.effect && 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 && overrideOptions.shape.type) {\n const overrideShapeType = overrideOptions.shape.type, shape = itemFromSingleOrMultiple(overrideShapeType, this.id, reduceDuplicates);\n if (shape) {\n this.shape = shape;\n shapeOptions.load(overrideOptions.shape);\n }\n }\n }\n this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);\n this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);\n particlesOptions.load(overrideOptions);\n const effectData = this.effectData;\n if (effectData) {\n particlesOptions.load(effectData.particles);\n }\n const shapeData = this.shapeData;\n if (shapeData) {\n particlesOptions.load(shapeData.particles);\n }\n const interactivity = new Interactivity(engine, container);\n interactivity.load(container.actualOptions.interactivity);\n interactivity.load(particlesOptions.interactivity);\n this.interactivity = interactivity;\n this.effectFill = effectData?.fill ?? particlesOptions.effect.fill;\n this.effectClose = effectData?.close ?? particlesOptions.effect.close;\n this.shapeFill = shapeData?.fill ?? particlesOptions.shape.fill;\n this.shapeClose = shapeData?.close ?? particlesOptions.shape.close;\n this.options = particlesOptions;\n const pathOptions = this.options.move.path;\n this.pathDelay = getRangeValue(pathOptions.delay.value) * 1000;\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 = 1 - 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 && 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 && shapeDrawer.loadShape) {\n shapeDrawer.loadShape(this);\n }\n const sideCountFunc = shapeDrawer?.getSidesCount;\n if (sideCountFunc) {\n this.sides = sideCountFunc(this);\n }\n this.spawning = false;\n this.shadowColor = rangeColorToRgb(this.options.shadow.color);\n for (const updater of particles.updaters) {\n updater.init(this);\n }\n for (const mover of particles.movers) {\n mover.init && mover.init(this);\n }\n if (effectDrawer && effectDrawer.particleInit) {\n effectDrawer.particleInit(container, this);\n }\n if (shapeDrawer && shapeDrawer.particleInit) {\n shapeDrawer.particleInit(container, this);\n }\n for (const [, plugin] of container.plugins) {\n plugin.particleCreated && plugin.particleCreated(this);\n }\n }\n isInsideCanvas() {\n const radius = this.getRadius(), canvasSize = this.container.canvas.size, position = this.position;\n return (position.x >= -radius &&\n position.y >= -radius &&\n position.y <= canvasSize.height + radius &&\n position.x <= canvasSize.width + radius);\n }\n isVisible() {\n return !this.destroyed && !this.spawning && this.isInsideCanvas();\n }\n reset() {\n for (const updater of this.container.particles.updaters) {\n updater.reset && updater.reset(this);\n }\n }\n}\n", "export class Point {\n constructor(position, particle) {\n this.position = position;\n this.particle = particle;\n }\n}\n", "export class Range {\n constructor(x, y) {\n this.position = {\n x: x,\n y: y,\n };\n }\n}\n", "import { Circle } from \"./Circle.js\";\nimport { Range } from \"./Range.js\";\nexport class Rectangle extends Range {\n constructor(x, y, width, height) {\n super(x, y);\n this.size = {\n height: height,\n width: width,\n };\n }\n contains(point) {\n const w = this.size.width, h = this.size.height, pos = this.position;\n return point.x >= pos.x && point.x <= pos.x + w && point.y >= pos.y && point.y <= pos.y + h;\n }\n intersects(range) {\n if (range instanceof Circle) {\n range.intersects(this);\n }\n const w = this.size.width, h = this.size.height, pos1 = this.position, pos2 = range.position, size2 = range instanceof Rectangle ? range.size : { width: 0, height: 0 }, w2 = size2.width, h2 = size2.height;\n return pos2.x < pos1.x + w && pos2.x + w2 > pos1.x && pos2.y < pos1.y + h && pos2.y + h2 > pos1.y;\n }\n}\n", "import { Range } from \"./Range.js\";\nimport { Rectangle } from \"./Rectangle.js\";\nimport { getDistance } from \"../../Utils/NumberUtils.js\";\nexport class Circle extends Range {\n constructor(x, y, radius) {\n super(x, y);\n this.radius = radius;\n }\n contains(point) {\n return getDistance(point, this.position) <= this.radius;\n }\n intersects(range) {\n const pos1 = this.position, pos2 = range.position, distPos = { x: Math.abs(pos2.x - pos1.x), y: Math.abs(pos2.y - pos1.y) }, r = this.radius;\n if (range instanceof Circle) {\n const rSum = r + range.radius, dist = Math.sqrt(distPos.x ** 2 + distPos.y ** 2);\n return rSum > dist;\n }\n else if (range instanceof Rectangle) {\n const { width, height } = range.size, edges = Math.pow(distPos.x - width, 2) + Math.pow(distPos.y - height, 2);\n return (edges <= r ** 2 ||\n (distPos.x <= r + width && distPos.y <= r + height) ||\n distPos.x <= width ||\n distPos.y <= height);\n }\n return false;\n }\n}\n", "import { Circle } from \"./Circle.js\";\nimport { Rectangle } from \"./Rectangle.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 < 4; i++) {\n this._subs.push(new QuadTree(new Rectangle(x + width * 0.5 * (i % 2), y + height * 0.5 * (Math.round(i * 0.5) - (i % 2)), width * 0.5, height * 0.5), capacity));\n }\n this._divided = true;\n };\n this._points = [];\n this._divided = false;\n this._subs = [];\n }\n insert(point) {\n if (!this.rectangle.contains(point.position)) {\n return false;\n }\n if (this._points.length < this.capacity) {\n this._points.push(point);\n return true;\n }\n if (!this._divided) {\n this._subdivide();\n }\n return this._subs.some((sub) => sub.insert(point));\n }\n query(range, check, found) {\n const res = found || [];\n if (!range.intersects(this.rectangle)) {\n return [];\n }\n for (const p of this._points) {\n if (!range.contains(p.position) &&\n getDistance(range.position, p.position) > p.particle.getRadius() &&\n (!check || check(p.particle))) {\n continue;\n }\n res.push(p.particle);\n }\n if (this._divided) {\n for (const sub of this._subs) {\n sub.query(range, check, res);\n }\n }\n return res;\n }\n queryCircle(position, radius, check) {\n return this.query(new Circle(position.x, position.y, radius), check);\n }\n queryRectangle(position, size, check) {\n return this.query(new Rectangle(position.x, position.y, size.width, size.height), check);\n }\n}\n", "import { getLogger, getPosition } from \"../Utils/Utils.js\";\nimport { InteractionManager } from \"./Utils/InteractionManager.js\";\nimport { Particle } from \"./Particle.js\";\nimport { Point } from \"./Utils/Point.js\";\nimport { QuadTree } from \"./Utils/QuadTree.js\";\nimport { Rectangle } from \"./Utils/Rectangle.js\";\nimport { errorPrefix } from \"./Utils/Constants.js\";\nconst qTreeCapacity = 4;\nconst qTreeRectangle = (canvasSize) => {\n const { height, width } = canvasSize, posOffset = -0.25, sizeFactor = 1.5;\n return new Rectangle(posOffset * width, posOffset * height, sizeFactor * width, sizeFactor * height);\n};\nexport class Particles {\n constructor(engine, container) {\n this._addToPool = (...particles) => {\n for (const particle of particles) {\n this._pool.push(particle);\n }\n };\n this._applyDensity = (options, manualCount, group) => {\n const numberOptions = options.number;\n if (!options.number.density?.enable) {\n if (group === undefined) {\n this._limit = numberOptions.limit.value;\n }\n else if (numberOptions.limit) {\n this._groupLimits.set(group, numberOptions.limit.value);\n }\n return;\n }\n const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > 0 ? 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 1;\n }\n const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;\n return (canvas.width * canvas.height) / (densityOptions.height * densityOptions.width * pxRatio ** 2);\n };\n this._pushParticle = (position, overrideOptions, group, initializer) => {\n try {\n let particle = this._pool.pop();\n if (particle) {\n particle.init(this._nextId, position, overrideOptions, group);\n }\n else {\n particle = new Particle(this._engine, this._nextId, this._container, position, overrideOptions, group);\n }\n let canAdd = true;\n if (initializer) {\n canAdd = initializer(particle);\n }\n if (!canAdd) {\n return;\n }\n this._array.push(particle);\n this._zArray.push(particle);\n this._nextId++;\n this._engine.dispatchEvent(\"particleAdded\", {\n container: this._container,\n data: {\n particle,\n },\n });\n return particle;\n }\n catch (e) {\n getLogger().warning(`${errorPrefix} adding particle: ${e}`);\n return;\n }\n };\n this._removeParticle = (index, group, override) => {\n const particle = this._array[index];\n if (!particle || particle.group !== group) {\n return false;\n }\n const zIdx = this._zArray.indexOf(particle);\n this._array.splice(index, 1);\n this._zArray.splice(zIdx, 1);\n particle.destroy(override);\n this._engine.dispatchEvent(\"particleRemoved\", {\n container: this._container,\n data: {\n particle,\n },\n });\n this._addToPool(particle);\n return true;\n };\n this._engine = engine;\n this._container = container;\n this._nextId = 0;\n this._array = [];\n this._zArray = [];\n this._pool = [];\n this._limit = 0;\n this._groupLimits = new Map();\n this._needsSort = false;\n this._lastZIndex = 0;\n this._interactionManager = new InteractionManager(engine, container);\n const canvasSize = container.canvas.size;\n this.quadTree = new QuadTree(qTreeRectangle(canvasSize), qTreeCapacity);\n this.movers = this._engine.getMovers(container, true);\n this.updaters = this._engine.getUpdaters(container, true);\n }\n get count() {\n return this._array.length;\n }\n addManualParticles() {\n const container = this._container, options = container.actualOptions;\n for (const particle of options.manualParticles) {\n this.addParticle(particle.position ? getPosition(particle.position, container.canvas.size) : undefined, particle.options);\n }\n }\n addParticle(position, overrideOptions, group, initializer) {\n const limitOptions = this._container.actualOptions.particles.number.limit, limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit, currentCount = this.count;\n if (limit > 0) {\n if (limitOptions.mode === \"delete\") {\n const countToRemove = currentCount + 1 - limit;\n if (countToRemove > 0) {\n this.removeQuantity(countToRemove);\n }\n }\n else if (limitOptions.mode === \"wait\") {\n if (currentCount >= limit) {\n return;\n }\n }\n }\n return this._pushParticle(position, overrideOptions, group, initializer);\n }\n clear() {\n this._array = [];\n this._zArray = [];\n }\n destroy() {\n this._array = [];\n this._zArray = [];\n this.movers = [];\n this.updaters = [];\n }\n async draw(delta) {\n const container = this._container, canvas = container.canvas;\n canvas.clear();\n await this.update(delta);\n for (const [, plugin] of container.plugins) {\n canvas.drawPlugin(plugin, delta);\n }\n for (const p of this._zArray) {\n p.draw(delta);\n }\n }\n filter(condition) {\n return this._array.filter(condition);\n }\n find(condition) {\n return this._array.find(condition);\n }\n get(index) {\n return this._array[index];\n }\n handleClickMode(mode) {\n this._interactionManager.handleClickMode(mode);\n }\n init() {\n const container = this._container, options = container.actualOptions;\n this._lastZIndex = 0;\n this._needsSort = false;\n let handled = false;\n this.updaters = this._engine.getUpdaters(container, true);\n this._interactionManager.init();\n for (const [, plugin] of container.plugins) {\n if (plugin.particlesInitialization !== undefined) {\n handled = plugin.particlesInitialization();\n }\n if (handled) {\n break;\n }\n }\n this._interactionManager.init();\n for (const [, pathGenerator] of container.pathGenerators) {\n pathGenerator.init(container);\n }\n this.addManualParticles();\n if (!handled) {\n 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 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 this.init();\n await this.draw({ value: 0, factor: 0 });\n }\n remove(particle, group, override) {\n this.removeAt(this._array.indexOf(particle), undefined, group, override);\n }\n removeAt(index, quantity = 1, group, override) {\n if (index < 0 || index > this.count) {\n return;\n }\n let deleted = 0;\n for (let i = index; deleted < quantity && i < this.count; i++) {\n this._removeParticle(i--, group, override) && deleted++;\n }\n }\n removeQuantity(quantity, group) {\n this.removeAt(0, quantity, group);\n }\n setDensity() {\n const options = this._container.actualOptions, groups = options.particles.groups;\n for (const group in groups) {\n this._applyDensity(groups[group], 0, group);\n }\n this._applyDensity(options.particles, options.manualParticles.length);\n }\n setLastZIndex(zIndex) {\n this._lastZIndex = zIndex;\n this._needsSort = this._needsSort || this._lastZIndex < zIndex;\n }\n setResizeFactor(factor) {\n this._resizeFactor = factor;\n }\n async update(delta) {\n const container = this._container, particlesToDelete = new Set();\n this.quadTree = new QuadTree(qTreeRectangle(container.canvas.size), qTreeCapacity);\n for (const [, pathGenerator] of container.pathGenerators) {\n pathGenerator.update();\n }\n for (const [, plugin] of container.plugins) {\n plugin.update && (await 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 await this._interactionManager.reset(particle);\n for (const [, plugin] of this._container.plugins) {\n if (particle.destroyed) {\n break;\n }\n plugin.particleUpdate && plugin.particleUpdate(particle, delta);\n }\n for (const mover of this.movers) {\n mover.isEnabled(particle) && mover.move(particle, delta);\n }\n if (particle.destroyed) {\n particlesToDelete.add(particle);\n continue;\n }\n this.quadTree.insert(new Point(particle.getPosition(), particle));\n }\n if (particlesToDelete.size) {\n const checkDelete = (p) => !particlesToDelete.has(p);\n this._array = this.filter(checkDelete);\n this._zArray = this._zArray.filter(checkDelete);\n for (const particle of particlesToDelete) {\n this._engine.dispatchEvent(\"particleRemoved\", {\n container: this._container,\n data: {\n particle,\n },\n });\n }\n this._addToPool(...particlesToDelete);\n }\n await this._interactionManager.externalInteract(delta);\n for (const particle of this._array) {\n for (const updater of this.updaters) {\n updater.update(particle, delta);\n }\n if (!particle.destroyed && !particle.spawning) {\n await this._interactionManager.particlesInteract(particle, delta);\n }\n }\n delete 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 - 1].position.z;\n this._needsSort = false;\n }\n }\n}\n", "import { getRangeValue } from \"../Utils/NumberUtils.js\";\nimport { isSsr } from \"../Utils/Utils.js\";\nexport class Retina {\n constructor(container) {\n this.container = container;\n this.pixelRatio = 1;\n this.reduceFactor = 1;\n }\n init() {\n const container = this.container, options = container.actualOptions;\n this.pixelRatio = !options.detectRetina || isSsr() ? 1 : window.devicePixelRatio;\n this.reduceFactor = 1;\n const ratio = this.pixelRatio, 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 { getLogger, safeIntersectionObserver } from \"../Utils/Utils.js\";\nimport { Canvas } from \"./Canvas.js\";\nimport { EventListeners } from \"./Utils/EventListeners.js\";\nimport { Options } from \"../Options/Classes/Options.js\";\nimport { Particles } from \"./Particles.js\";\nimport { Retina } from \"./Retina.js\";\nimport { errorPrefix } from \"./Utils/Constants.js\";\nimport { getRangeValue } from \"../Utils/NumberUtils.js\";\nimport { loadOptions } from \"../Utils/OptionsUtils.js\";\nfunction guardCheck(container) {\n return container && !container.destroyed;\n}\nfunction initDelta(value, fpsLimit = 60, smooth = false) {\n return {\n value,\n factor: smooth ? 60 / fpsLimit : (60 * value) / 1000,\n };\n}\nfunction loadContainerOptions(engine, container, ...sourceOptionsArr) {\n const options = new Options(engine, container);\n loadOptions(options, ...sourceOptionsArr);\n return options;\n}\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 (entry.isIntersecting ? this.play : this.pause)();\n }\n };\n this._nextFrame = async (timestamp) => {\n try {\n if (!this._smooth &&\n this._lastFrameTime !== undefined &&\n timestamp < this._lastFrameTime + 1000 / this.fpsLimit) {\n this.draw(false);\n return;\n }\n this._lastFrameTime ??= timestamp;\n const delta = initDelta(timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);\n this.addLifeTime(delta.value);\n this._lastFrameTime = timestamp;\n if (delta.value > 1000) {\n this.draw(false);\n return;\n }\n await this.particles.draw(delta);\n if (!this.alive()) {\n this.destroy();\n return;\n }\n if (this.getAnimationStatus()) {\n this.draw(false);\n }\n }\n catch (e) {\n getLogger().error(`${errorPrefix} in animation loop`, e);\n }\n };\n this._engine = engine;\n this.id = Symbol(id);\n this.fpsLimit = 120;\n this._smooth = false;\n this._delay = 0;\n this._duration = 0;\n this._lifeTime = 0;\n this._firstStart = true;\n this.started = false;\n this.destroyed = false;\n this._paused = true;\n this._lastFrameTime = 0;\n this.zLayers = 100;\n this.pageHidden = false;\n this._sourceOptions = sourceOptions;\n this._initialSourceOptions = sourceOptions;\n this.retina = new Retina(this);\n this.canvas = new Canvas(this);\n this.particles = new Particles(this._engine, this);\n this.pathGenerators = new Map();\n this.interactivity = {\n mouse: {\n clicking: false,\n inside: false,\n },\n };\n this.plugins = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this);\n this._eventListeners = new EventListeners(this);\n this._intersectionObserver = safeIntersectionObserver((entries) => this._intersectionManager(entries));\n this._engine.dispatchEvent(\"containerBuilt\", { container: this });\n }\n get options() {\n return this._options;\n }\n get sourceOptions() {\n return this._sourceOptions;\n }\n addClickHandler(callback) {\n if (!guardCheck(this)) {\n return;\n }\n const el = this.interactivity.element;\n if (!el) {\n return;\n }\n const clickOrTouchHandler = (e, pos, radius) => {\n if (!guardCheck(this)) {\n return;\n }\n const pxRatio = this.retina.pixelRatio, posRetina = {\n x: pos.x * pxRatio,\n y: pos.y * pxRatio,\n }, particles = this.particles.quadTree.queryCircle(posRetina, radius * pxRatio);\n callback(e, particles);\n };\n const clickHandler = (e) => {\n if (!guardCheck(this)) {\n return;\n }\n const mouseEvent = e, pos = {\n x: mouseEvent.offsetX || mouseEvent.clientX,\n y: mouseEvent.offsetY || mouseEvent.clientY,\n };\n clickOrTouchHandler(e, pos, 1);\n };\n const touchStartHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = true;\n touchMoved = false;\n };\n const touchMoveHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touchMoved = true;\n };\n const touchEndHandler = (e) => {\n if (!guardCheck(this)) {\n return;\n }\n if (touched && !touchMoved) {\n const touchEvent = e;\n let lastTouch = touchEvent.touches[touchEvent.touches.length - 1];\n if (!lastTouch) {\n lastTouch = touchEvent.changedTouches[touchEvent.changedTouches.length - 1];\n if (!lastTouch) {\n return;\n }\n }\n const element = this.canvas.element, canvasRect = element ? element.getBoundingClientRect() : undefined, pos = {\n x: lastTouch.clientX - (canvasRect ? canvasRect.left : 0),\n y: lastTouch.clientY - (canvasRect ? canvasRect.top : 0),\n };\n clickOrTouchHandler(e, pos, Math.max(lastTouch.radiusX, lastTouch.radiusY));\n }\n touched = false;\n touchMoved = false;\n };\n const touchCancelHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = false;\n touchMoved = false;\n };\n let touched = false, touchMoved = false;\n el.addEventListener(\"click\", clickHandler);\n el.addEventListener(\"touchstart\", touchStartHandler);\n el.addEventListener(\"touchmove\", touchMoveHandler);\n el.addEventListener(\"touchend\", touchEndHandler);\n el.addEventListener(\"touchcancel\", touchCancelHandler);\n }\n addLifeTime(value) {\n this._lifeTime += value;\n }\n addPath(key, generator, override = false) {\n if (!guardCheck(this) || (!override && this.pathGenerators.has(key))) {\n return false;\n }\n this.pathGenerators.set(key, generator);\n return true;\n }\n alive() {\n return !this._duration || this._lifeTime <= this._duration;\n }\n destroy() {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n this.particles.destroy();\n this.canvas.destroy();\n for (const [, effectDrawer] of this.effectDrawers) {\n effectDrawer.destroy && effectDrawer.destroy(this);\n }\n for (const [, shapeDrawer] of this.shapeDrawers) {\n shapeDrawer.destroy && shapeDrawer.destroy(this);\n }\n for (const key of this.effectDrawers.keys()) {\n this.effectDrawers.delete(key);\n }\n for (const key of this.shapeDrawers.keys()) {\n this.shapeDrawers.delete(key);\n }\n this._engine.clearPlugins(this);\n this.destroyed = true;\n const mainArr = this._engine.dom(), idx = mainArr.findIndex((t) => t === this);\n if (idx >= 0) {\n mainArr.splice(idx, 1);\n }\n this._engine.dispatchEvent(\"containerDestroyed\", { container: this });\n }\n draw(force) {\n if (!guardCheck(this)) {\n return;\n }\n let refreshTime = force;\n this._drawAnimationFrame = requestAnimationFrame(async (timestamp) => {\n if (refreshTime) {\n this._lastFrameTime = undefined;\n refreshTime = false;\n }\n await this._nextFrame(timestamp);\n });\n }\n async export(type, options = {}) {\n for (const [, plugin] of this.plugins) {\n if (!plugin.export) {\n continue;\n }\n const res = await plugin.export(type, options);\n if (!res.supported) {\n continue;\n }\n return res.blob;\n }\n getLogger().error(`${errorPrefix} - Export plugin with type ${type} not found`);\n }\n getAnimationStatus() {\n return !this._paused && !this.pageHidden && guardCheck(this);\n }\n handleClickMode(mode) {\n if (!guardCheck(this)) {\n return;\n }\n this.particles.handleClickMode(mode);\n for (const [, plugin] of this.plugins) {\n plugin.handleClickMode && plugin.handleClickMode(mode);\n }\n }\n async init() {\n if (!guardCheck(this)) {\n return;\n }\n const 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 this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n const availablePlugins = this._engine.getAvailablePlugins(this);\n for (const [id, plugin] of availablePlugins) {\n this.plugins.set(id, plugin);\n }\n this.retina.init();\n await this.canvas.init();\n this.updateActualOptions();\n this.canvas.initBackground();\n this.canvas.resize();\n this.zLayers = this.actualOptions.zLayers;\n this._duration = getRangeValue(this.actualOptions.duration) * 1000;\n this._delay = getRangeValue(this.actualOptions.delay) * 1000;\n this._lifeTime = 0;\n this.fpsLimit = this.actualOptions.fpsLimit > 0 ? this.actualOptions.fpsLimit : 120;\n this._smooth = this.actualOptions.smooth;\n for (const [, drawer] of this.effectDrawers) {\n drawer.init && (await drawer.init(this));\n }\n for (const [, drawer] of this.shapeDrawers) {\n drawer.init && (await drawer.init(this));\n }\n for (const [, plugin] of this.plugins) {\n plugin.init && (await plugin.init());\n }\n this._engine.dispatchEvent(\"containerInit\", { container: this });\n this.particles.init();\n this.particles.setDensity();\n for (const [, plugin] of this.plugins) {\n plugin.particlesSetup && plugin.particlesSetup();\n }\n this._engine.dispatchEvent(\"particlesSetup\", { container: this });\n }\n async loadTheme(name) {\n if (!guardCheck(this)) {\n return;\n }\n this._currentTheme = name;\n await this.refresh();\n }\n pause() {\n if (!guardCheck(this)) {\n return;\n }\n if (this._drawAnimationFrame !== undefined) {\n cancelAnimationFrame(this._drawAnimationFrame);\n delete this._drawAnimationFrame;\n }\n if (this._paused) {\n return;\n }\n for (const [, plugin] of this.plugins) {\n plugin.pause && plugin.pause();\n }\n if (!this.pageHidden) {\n this._paused = true;\n }\n this._engine.dispatchEvent(\"containerPaused\", { container: this });\n }\n play(force) {\n if (!guardCheck(this)) {\n return;\n }\n const needsUpdate = this._paused || force;\n if (this._firstStart && !this.actualOptions.autoPlay) {\n this._firstStart = false;\n return;\n }\n if (this._paused) {\n this._paused = false;\n }\n if (needsUpdate) {\n for (const [, plugin] of this.plugins) {\n if (plugin.play) {\n plugin.play();\n }\n }\n }\n this._engine.dispatchEvent(\"containerPlay\", { container: this });\n this.draw(needsUpdate || false);\n }\n async refresh() {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n return this.start();\n }\n async reset() {\n if (!guardCheck(this)) {\n return;\n }\n this._initialSourceOptions = undefined;\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n return this.refresh();\n }\n async start() {\n if (!guardCheck(this) || this.started) {\n return;\n }\n await this.init();\n this.started = true;\n await new Promise((resolve) => {\n this._delayTimeout = setTimeout(async () => {\n this._eventListeners.addListeners();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.observe(this.interactivity.element);\n }\n for (const [, plugin] of this.plugins) {\n plugin.start && (await plugin.start());\n }\n this._engine.dispatchEvent(\"containerStarted\", { container: this });\n this.play();\n resolve();\n }, this._delay);\n });\n }\n stop() {\n if (!guardCheck(this) || !this.started) {\n return;\n }\n if (this._delayTimeout) {\n clearTimeout(this._delayTimeout);\n delete this._delayTimeout;\n }\n this._firstStart = true;\n this.started = false;\n this._eventListeners.removeListeners();\n this.pause();\n this.particles.clear();\n this.canvas.stop();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.unobserve(this.interactivity.element);\n }\n for (const [, plugin] of this.plugins) {\n plugin.stop && plugin.stop();\n }\n for (const key of this.plugins.keys()) {\n this.plugins.delete(key);\n }\n this._sourceOptions = this._options;\n this._engine.dispatchEvent(\"containerStopped\", { container: this });\n }\n updateActualOptions() {\n this.actualOptions.responsive = [];\n const newMaxWidth = this.actualOptions.setResponsive(this.canvas.size.width, this.retina.pixelRatio, this._options);\n this.actualOptions.setTheme(this._currentTheme);\n if (this._responsiveMaxWidth === newMaxWidth) {\n return false;\n }\n this._responsiveMaxWidth = newMaxWidth;\n return true;\n }\n}\n", "export class EventDispatcher {\n constructor() {\n this._listeners = new Map();\n }\n addEventListener(type, listener) {\n this.removeEventListener(type, listener);\n let arr = this._listeners.get(type);\n if (!arr) {\n arr = [];\n this._listeners.set(type, arr);\n }\n arr.push(listener);\n }\n dispatchEvent(type, args) {\n const listeners = this._listeners.get(type);\n listeners && listeners.forEach((handler) => handler(args));\n }\n hasEventListener(type) {\n return !!this._listeners.get(type);\n }\n removeAllEventListeners(type) {\n if (!type) {\n this._listeners = new Map();\n }\n else {\n this._listeners.delete(type);\n }\n }\n removeEventListener(type, listener) {\n const arr = this._listeners.get(type);\n if (!arr) {\n return;\n }\n const length = arr.length, idx = arr.indexOf(listener);\n if (idx < 0) {\n return;\n }\n if (length === 1) {\n this._listeners.delete(type);\n }\n else {\n arr.splice(idx, 1);\n }\n }\n}\n", "import { errorPrefix, generatedAttribute } from \"./Utils/Constants.js\";\nimport { executeOnSingleOrMultiple, getLogger, itemFromSingleOrMultiple } from \"../Utils/Utils.js\";\nimport { Container } from \"./Container.js\";\nimport { EventDispatcher } from \"../Utils/EventDispatcher.js\";\nimport { getRandom } from \"../Utils/NumberUtils.js\";\nfunction getItemsFromInitializer(container, map, initializers, force = false) {\n let res = map.get(container);\n if (!res || force) {\n res = [...initializers.values()].map((t) => t(container));\n map.set(container, res);\n }\n return res;\n}\nasync function getDataFromUrl(data) {\n const url = itemFromSingleOrMultiple(data.url, data.index);\n if (!url) {\n return data.fallback;\n }\n const response = await fetch(url);\n if (response.ok) {\n return response.json();\n }\n getLogger().error(`${errorPrefix} ${response.status} while retrieving config file`);\n return data.fallback;\n}\nexport class Engine {\n constructor() {\n this._configs = new Map();\n this._domArray = [];\n this._eventDispatcher = new EventDispatcher();\n this._initialized = false;\n this.plugins = [];\n this._initializers = {\n interactors: new Map(),\n movers: new Map(),\n updaters: new Map(),\n };\n this.interactors = new Map();\n this.movers = new Map();\n this.updaters = new Map();\n this.presets = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this.pathGenerators = new Map();\n }\n get configs() {\n const res = {};\n for (const [name, config] of this._configs) {\n res[name] = config;\n }\n return res;\n }\n get version() {\n return \"3.0.3\";\n }\n addConfig(config) {\n const name = config.name ?? \"default\";\n this._configs.set(name, config);\n this._eventDispatcher.dispatchEvent(\"configAdded\", { data: { name, config } });\n }\n async addEffect(effect, drawer, refresh = true) {\n executeOnSingleOrMultiple(effect, (type) => {\n !this.getEffectDrawer(type) && this.effectDrawers.set(type, drawer);\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 !this.getPathGenerator(name) && this.pathGenerators.set(name, generator);\n await this.refresh(refresh);\n }\n async addPlugin(plugin, refresh = true) {\n !this.getPlugin(plugin.id) && this.plugins.push(plugin);\n await this.refresh(refresh);\n }\n async addPreset(preset, options, override = false, refresh = true) {\n (override || !this.getPreset(preset)) && this.presets.set(preset, options);\n await this.refresh(refresh);\n }\n async addShape(shape, drawer, refresh = true) {\n executeOnSingleOrMultiple(shape, (type) => {\n !this.getShapeDrawer(type) && this.shapeDrawers.set(type, drawer);\n });\n await this.refresh(refresh);\n }\n clearPlugins(container) {\n this.updaters.delete(container);\n this.movers.delete(container);\n this.interactors.delete(container);\n }\n dispatchEvent(type, args) {\n this._eventDispatcher.dispatchEvent(type, args);\n }\n dom() {\n return this._domArray;\n }\n domItem(index) {\n const dom = this.dom(), item = dom[index];\n if (!item || item.destroyed) {\n dom.splice(index, 1);\n return;\n }\n return item;\n }\n getAvailablePlugins(container) {\n const res = new Map();\n for (const plugin of this.plugins) {\n plugin.needsPlugin(container.actualOptions) && res.set(plugin.id, plugin.getPlugin(container));\n }\n return res;\n }\n getEffectDrawer(type) {\n return this.effectDrawers.get(type);\n }\n getInteractors(container, force = false) {\n return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);\n }\n getMovers(container, force = false) {\n return getItemsFromInitializer(container, this.movers, this._initializers.movers, force);\n }\n getPathGenerator(type) {\n return this.pathGenerators.get(type);\n }\n getPlugin(plugin) {\n return this.plugins.find((t) => t.id === plugin);\n }\n getPreset(preset) {\n return this.presets.get(preset);\n }\n getShapeDrawer(type) {\n return this.shapeDrawers.get(type);\n }\n getSupportedEffects() {\n return this.effectDrawers.keys();\n }\n getSupportedShapes() {\n return this.shapeDrawers.keys();\n }\n 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 async load(params) {\n const id = params.id ?? params.element?.id ?? `tsparticles${Math.floor(getRandom() * 10000)}`, { index, url } = params, options = url ? await getDataFromUrl({ fallback: params.options, url, index }) : params.options;\n let domContainer = params.element ?? document.getElementById(id);\n if (!domContainer) {\n domContainer = document.createElement(\"div\");\n domContainer.id = id;\n document.body.append(domContainer);\n }\n const currentOptions = itemFromSingleOrMultiple(options, index), dom = this.dom(), oldIndex = dom.findIndex((v) => v.id.description === id);\n if (oldIndex >= 0) {\n const old = this.domItem(oldIndex);\n if (old && !old.destroyed) {\n old.destroy();\n dom.splice(oldIndex, 1);\n }\n }\n let canvasEl;\n if (domContainer.tagName.toLowerCase() === \"canvas\") {\n canvasEl = domContainer;\n canvasEl.dataset[generatedAttribute] = \"false\";\n }\n else {\n const existingCanvases = domContainer.getElementsByTagName(\"canvas\");\n if (existingCanvases.length) {\n canvasEl = existingCanvases[0];\n canvasEl.dataset[generatedAttribute] = \"false\";\n }\n else {\n canvasEl = document.createElement(\"canvas\");\n canvasEl.dataset[generatedAttribute] = \"true\";\n domContainer.appendChild(canvasEl);\n }\n }\n if (!canvasEl.style.width) {\n canvasEl.style.width = \"100%\";\n }\n if (!canvasEl.style.height) {\n canvasEl.style.height = \"100%\";\n }\n const newItem = new Container(this, id, currentOptions);\n if (oldIndex >= 0) {\n dom.splice(oldIndex, 0, newItem);\n }\n else {\n dom.push(newItem);\n }\n newItem.canvas.loadCanvas(canvasEl);\n await newItem.start();\n return newItem;\n }\n loadOptions(options, sourceOptions) {\n for (const plugin of this.plugins) {\n plugin.loadOptions(options, sourceOptions);\n }\n }\n loadParticlesOptions(container, options, ...sourceOptions) {\n const updaters = this.updaters.get(container);\n if (!updaters) {\n return;\n }\n for (const updater of updaters) {\n updater.loadOptions && updater.loadOptions(options, ...sourceOptions);\n }\n }\n async refresh(refresh = true) {\n if (!refresh) {\n return;\n }\n this.dom().forEach((t) => t.refresh());\n }\n removeEventListener(type, listener) {\n this._eventDispatcher.removeEventListener(type, listener);\n }\n setOnClickHandler(callback) {\n const dom = this.dom();\n if (!dom.length) {\n throw new Error(`${errorPrefix} can only set click handlers after calling tsParticles.load()`);\n }\n for (const domItem of dom) {\n domItem.addClickHandler(callback);\n }\n }\n}\n", "import { getRangeValue, parseAlpha } from \"./NumberUtils.js\";\nimport { hslToRgb, hslaToRgba } from \"./ColorUtils.js\";\nexport class HslColorManager {\n constructor() {\n this.key = \"hsl\";\n this.stringPrefix = \"hsl\";\n }\n handleColor(color) {\n const colorValue = color.value, hslColor = colorValue.hsl ?? color.value;\n if (hslColor.h !== undefined && hslColor.s !== undefined && hslColor.l !== undefined) {\n return hslToRgb(hslColor);\n }\n }\n handleRangeColor(color) {\n const colorValue = color.value, hslColor = colorValue.hsl ?? color.value;\n if (hslColor.h !== undefined && hslColor.l !== undefined) {\n return hslToRgb({\n h: getRangeValue(hslColor.h),\n l: getRangeValue(hslColor.l),\n s: getRangeValue(hslColor.s),\n });\n }\n }\n parseString(input) {\n if (!input.startsWith(\"hsl\")) {\n return;\n }\n const regex = /hsla?\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*(,\\s*([\\d.%]+)\\s*)?\\)/i, result = regex.exec(input);\n return result\n ? hslaToRgba({\n a: result.length > 4 ? parseAlpha(result[5]) : 1,\n h: parseInt(result[1], 10),\n l: parseInt(result[3], 10),\n s: parseInt(result[2], 10),\n })\n : undefined;\n }\n}\n", "import { getRangeValue, parseAlpha } from \"./NumberUtils.js\";\nexport class RgbColorManager {\n constructor() {\n this.key = \"rgb\";\n this.stringPrefix = \"rgb\";\n }\n handleColor(color) {\n const colorValue = color.value, rgbColor = colorValue.rgb ?? color.value;\n if (rgbColor.r !== undefined) {\n return rgbColor;\n }\n }\n handleRangeColor(color) {\n const colorValue = color.value, rgbColor = colorValue.rgb ?? color.value;\n if (rgbColor.r !== undefined) {\n return {\n r: getRangeValue(rgbColor.r),\n g: getRangeValue(rgbColor.g),\n b: getRangeValue(rgbColor.b),\n };\n }\n }\n parseString(input) {\n if (!input.startsWith(this.stringPrefix)) {\n return;\n }\n const regex = /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([\\d.%]+)\\s*)?\\)/i, result = regex.exec(input);\n return result\n ? {\n a: result.length > 4 ? parseAlpha(result[5]) : 1,\n b: parseInt(result[3], 10),\n g: parseInt(result[2], 10),\n r: parseInt(result[1], 10),\n }\n : undefined;\n }\n}\n", "import { Engine } from \"./Core/Engine.js\";\nimport { HslColorManager } from \"./Utils/HslColorManager.js\";\nimport { RgbColorManager } from \"./Utils/RgbColorManager.js\";\nimport { addColorManager } from \"./Utils/ColorUtils.js\";\nexport function init() {\n const rgbColorManager = new RgbColorManager(), hslColorManager = new HslColorManager();\n addColorManager(rgbColorManager);\n addColorManager(hslColorManager);\n const engine = new Engine();\n engine.init();\n return engine;\n}\n", "export class ExternalInteractorBase {\n constructor(container) {\n this.container = container;\n this.type = \"external\";\n }\n}\n", "export class ParticlesInteractorBase {\n constructor(container) {\n this.container = container;\n this.type = \"particles\";\n }\n}\n", "import { init } from \"./init.js\";\nimport { isSsr } from \"./Utils/Utils.js\";\nconst tsParticles = init();\nif (!isSsr()) {\n window.tsParticles = tsParticles;\n}\nexport * from \"./exports.js\";\nexport * from \"./export-types.js\";\nexport { tsParticles };\n", "import { clamp, getDistances, getRandom, } from \"@tsparticles/engine\";\nexport function applyDistance(particle) {\n const initialPosition = particle.initialPosition, { dx, dy } = getDistances(initialPosition, particle.position), dxFixed = Math.abs(dx), dyFixed = Math.abs(dy), { maxDistance } = particle.retina, hDistance = maxDistance.horizontal, vDistance = maxDistance.vertical;\n if (!hDistance && !vDistance) {\n return;\n }\n if (((hDistance && dxFixed >= hDistance) || (vDistance && dyFixed >= vDistance)) && !particle.misplaced) {\n particle.misplaced = (!!hDistance && dxFixed > hDistance) || (!!vDistance && dyFixed > vDistance);\n if (hDistance) {\n particle.velocity.x = particle.velocity.y * 0.5 - particle.velocity.x;\n }\n if (vDistance) {\n particle.velocity.y = particle.velocity.x * 0.5 - particle.velocity.y;\n }\n }\n else if ((!hDistance || dxFixed < hDistance) && (!vDistance || dyFixed < vDistance) && particle.misplaced) {\n particle.misplaced = false;\n }\n else if (particle.misplaced) {\n const pos = particle.position, vel = particle.velocity;\n if (hDistance && ((pos.x < initialPosition.x && vel.x < 0) || (pos.x > initialPosition.x && vel.x > 0))) {\n vel.x *= -getRandom();\n }\n if (vDistance && ((pos.y < initialPosition.y && vel.y < 0) || (pos.y > initialPosition.y && vel.y > 0))) {\n vel.y *= -getRandom();\n }\n }\n}\nexport function move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {\n applyPath(particle, delta);\n const gravityOptions = particle.gravity, gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -1 : 1;\n if (moveDrift && moveSpeed) {\n particle.velocity.x += (moveDrift * delta.factor) / (60 * moveSpeed);\n }\n if (gravityOptions?.enable && moveSpeed) {\n particle.velocity.y += (gravityFactor * (gravityOptions.acceleration * delta.factor)) / (60 * moveSpeed);\n }\n const decay = particle.moveDecay;\n particle.velocity.multTo(decay);\n const velocity = particle.velocity.mult(moveSpeed);\n if (gravityOptions?.enable &&\n maxSpeed > 0 &&\n ((!gravityOptions.inverse && velocity.y >= 0 && velocity.y >= maxSpeed) ||\n (gravityOptions.inverse && velocity.y <= 0 && velocity.y <= -maxSpeed))) {\n velocity.y = gravityFactor * maxSpeed;\n if (moveSpeed) {\n particle.velocity.y = velocity.y / moveSpeed;\n }\n }\n const zIndexOptions = particle.options.zIndex, zVelocityFactor = (1 - particle.zIndexFactor) ** zIndexOptions.velocityRate;\n velocity.multTo(zVelocityFactor);\n const { position } = particle;\n position.addTo(velocity);\n if (moveOptions.vibrate) {\n position.x += Math.sin(position.x * Math.cos(position.y));\n position.y += Math.cos(position.y * Math.sin(position.x));\n }\n}\nexport function spin(particle, moveSpeed) {\n const container = particle.container;\n if (!particle.spin) {\n return;\n }\n const updateFunc = {\n x: particle.spin.direction === \"clockwise\" ? Math.cos : Math.sin,\n y: particle.spin.direction === \"clockwise\" ? Math.sin : Math.cos,\n };\n particle.position.x = particle.spin.center.x + particle.spin.radius * updateFunc.x(particle.spin.angle);\n particle.position.y = particle.spin.center.y + particle.spin.radius * updateFunc.y(particle.spin.angle);\n particle.spin.radius += particle.spin.acceleration;\n const maxCanvasSize = Math.max(container.canvas.size.width, container.canvas.size.height), halfMaxSize = maxCanvasSize * 0.5;\n if (particle.spin.radius > halfMaxSize) {\n particle.spin.radius = halfMaxSize;\n particle.spin.acceleration *= -1;\n }\n else if (particle.spin.radius < 0) {\n particle.spin.radius = 0;\n particle.spin.acceleration *= -1;\n }\n particle.spin.angle += moveSpeed * 0.01 * (1 - particle.spin.radius / maxCanvasSize);\n}\nexport function applyPath(particle, delta) {\n const particlesOptions = particle.options, pathOptions = particlesOptions.move.path, pathEnabled = pathOptions.enable;\n if (!pathEnabled) {\n return;\n }\n if (particle.lastPathTime <= particle.pathDelay) {\n particle.lastPathTime += delta.value;\n return;\n }\n const path = particle.pathGenerator?.generate(particle, delta);\n if (path) {\n particle.velocity.addTo(path);\n }\n if (pathOptions.clamp) {\n particle.velocity.x = clamp(particle.velocity.x, -1, 1);\n particle.velocity.y = clamp(particle.velocity.y, -1, 1);\n }\n particle.lastPathTime -= particle.pathDelay;\n}\nexport function getProximitySpeedFactor(particle) {\n return particle.slow.inRange ? particle.slow.factor : 1;\n}\n", "import { getDistance, getRangeMax, getRangeValue, } from \"@tsparticles/engine\";\nimport { applyDistance, getProximitySpeedFactor, move, spin } from \"./Utils.js\";\nconst diffFactor = 2;\nexport class BaseMover {\n constructor() {\n this._initSpin = (particle) => {\n const container = particle.container, options = particle.options, spinOptions = options.move.spin;\n if (!spinOptions.enable) {\n return;\n }\n const spinPos = spinOptions.position ?? { x: 50, y: 50 }, spinCenter = {\n x: spinPos.x * 0.01 * container.canvas.size.width,\n y: spinPos.y * 0.01 * container.canvas.size.height,\n }, pos = particle.getPosition(), distance = getDistance(pos, spinCenter), spinAcceleration = getRangeValue(spinOptions.acceleration);\n particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;\n particle.spin = {\n center: spinCenter,\n direction: particle.velocity.x >= 0 ? \"clockwise\" : \"counter-clockwise\",\n angle: particle.velocity.angle,\n radius: distance,\n acceleration: particle.retina.spinAcceleration,\n };\n };\n }\n init(particle) {\n const options = particle.options, gravityOptions = options.move.gravity;\n particle.gravity = {\n enable: gravityOptions.enable,\n acceleration: getRangeValue(gravityOptions.acceleration),\n inverse: gravityOptions.inverse,\n };\n this._initSpin(particle);\n }\n isEnabled(particle) {\n return !particle.destroyed && particle.options.move.enable;\n }\n move(particle, delta) {\n const particleOptions = particle.options, moveOptions = particleOptions.move;\n if (!moveOptions.enable) {\n return;\n }\n const container = particle.container, pxRatio = container.retina.pixelRatio, slowFactor = getProximitySpeedFactor(particle), baseSpeed = (particle.retina.moveSpeed ??= getRangeValue(moveOptions.speed) * pxRatio) *\n container.retina.reduceFactor, moveDrift = (particle.retina.moveDrift ??= getRangeValue(particle.options.move.drift) * pxRatio), maxSize = getRangeMax(particleOptions.size.value) * pxRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : 1, moveSpeed = (baseSpeed * sizeFactor * slowFactor * (delta.factor || 1)) / diffFactor, maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;\n if (moveOptions.spin.enable) {\n spin(particle, moveSpeed);\n }\n else {\n move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta);\n }\n applyDistance(particle);\n }\n}\n", "import { BaseMover } from \"./BaseMover.js\";\nexport async function loadBaseMover(engine, refresh = true) {\n await engine.addMover(\"base\", () => new BaseMover(), refresh);\n}\n", "import { isObject } from \"@tsparticles/engine\";\nexport class CircleDrawer {\n draw(data) {\n const { context, particle, radius } = data;\n if (!particle.circleRange) {\n particle.circleRange = { min: 0, max: Math.PI * 2 };\n }\n const circleRange = particle.circleRange;\n context.arc(0, 0, radius, circleRange.min, circleRange.max, false);\n }\n getSidesCount() {\n return 12;\n }\n particleInit(container, particle) {\n const shapeData = particle.shapeData, angle = shapeData?.angle ?? {\n max: 360,\n min: 0,\n };\n particle.circleRange = !isObject(angle)\n ? {\n min: 0,\n max: (angle * Math.PI) / 180,\n }\n : { min: (angle.min * Math.PI) / 180, max: (angle.max * Math.PI) / 180 };\n }\n}\n", "import { CircleDrawer } from \"./CircleDrawer.js\";\nexport async function loadCircleShape(engine, refresh = true) {\n await engine.addShape(\"circle\", new CircleDrawer(), refresh);\n}\n", "import { randomInRange, } from \"@tsparticles/engine\";\nfunction updateColorValue(delta, colorValue, valueAnimation, max, decrease) {\n if (!colorValue ||\n !valueAnimation.enable ||\n ((colorValue.maxLoops ?? 0) > 0 && (colorValue.loops ?? 0) > (colorValue.maxLoops ?? 0))) {\n return;\n }\n if (!colorValue.time) {\n colorValue.time = 0;\n }\n if ((colorValue.delayTime ?? 0) > 0 && colorValue.time < (colorValue.delayTime ?? 0)) {\n colorValue.time += delta.value;\n }\n if ((colorValue.delayTime ?? 0) > 0 && colorValue.time < (colorValue.delayTime ?? 0)) {\n return;\n }\n const offset = randomInRange(valueAnimation.offset), velocity = (colorValue.velocity ?? 0) * delta.factor + offset * 3.6, decay = colorValue.decay ?? 1;\n if (!decrease || colorValue.status === \"increasing\") {\n colorValue.value += velocity;\n if (colorValue.value > max) {\n if (!colorValue.loops) {\n colorValue.loops = 0;\n }\n colorValue.loops++;\n if (decrease) {\n colorValue.status = \"decreasing\";\n colorValue.value -= colorValue.value % max;\n }\n }\n }\n else {\n colorValue.value -= velocity;\n if (colorValue.value < 0) {\n if (!colorValue.loops) {\n colorValue.loops = 0;\n }\n colorValue.loops++;\n colorValue.status = \"increasing\";\n colorValue.value += colorValue.value;\n }\n }\n if (colorValue.velocity && decay !== 1) {\n colorValue.velocity *= decay;\n }\n if (colorValue.value > max) {\n colorValue.value %= max;\n }\n}\nexport function updateColor(particle, delta) {\n const { h: hAnimation, s: sAnimation, l: lAnimation } = particle.options.color.animation, { color } = particle;\n if (!color) {\n return;\n }\n const { h, s, l } = color;\n if (h) {\n updateColorValue(delta, h, hAnimation, 360, false);\n }\n if (s) {\n updateColorValue(delta, s, sAnimation, 100, true);\n }\n if (l) {\n updateColorValue(delta, l, lAnimation, 100, true);\n }\n}\n", "import { getHslAnimationFromHsl, rangeColorToHsl, } from \"@tsparticles/engine\";\nimport { updateColor } from \"./Utils.js\";\nexport class ColorUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const hslColor = rangeColorToHsl(particle.options.color, particle.id, particle.options.reduceDuplicates);\n if (hslColor) {\n particle.color = getHslAnimationFromHsl(hslColor, particle.options.color.animation, this.container.retina.reduceFactor);\n }\n }\n isEnabled(particle) {\n const { h: hAnimation, s: sAnimation, l: lAnimation } = particle.options.color.animation, { color } = particle;\n return (!particle.destroyed &&\n !particle.spawning &&\n ((color?.h.value !== undefined && hAnimation.enable) ||\n (color?.s.value !== undefined && sAnimation.enable) ||\n (color?.l.value !== undefined && lAnimation.enable)));\n }\n update(particle, delta) {\n updateColor(particle, delta);\n }\n}\n", "import { ColorUpdater } from \"./ColorUpdater.js\";\nexport async function loadColorUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"color\", (container) => new ColorUpdater(container), refresh);\n}\n", "import { clamp } from \"@tsparticles/engine\";\nfunction checkDestroy(particle, value, minValue, maxValue) {\n switch (particle.options.opacity.animation.destroy) {\n case \"max\":\n if (value >= maxValue) {\n particle.destroy();\n }\n break;\n case \"min\":\n if (value <= minValue) {\n particle.destroy();\n }\n break;\n }\n}\nexport function updateOpacity(particle, delta) {\n const data = particle.opacity;\n if (particle.destroyed || !data?.enable || ((data.maxLoops ?? 0) > 0 && (data.loops ?? 0) > (data.maxLoops ?? 0))) {\n return;\n }\n const minValue = data.min, maxValue = data.max, decay = data.decay ?? 1;\n if (!data.time) {\n data.time = 0;\n }\n if ((data.delayTime ?? 0) > 0 && data.time < (data.delayTime ?? 0)) {\n data.time += delta.value;\n }\n if ((data.delayTime ?? 0) > 0 && data.time < (data.delayTime ?? 0)) {\n return;\n }\n switch (data.status) {\n case \"increasing\":\n if (data.value >= maxValue) {\n data.status = \"decreasing\";\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n }\n else {\n data.value += (data.velocity ?? 0) * delta.factor;\n }\n break;\n case \"decreasing\":\n if (data.value <= minValue) {\n data.status = \"increasing\";\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n }\n else {\n data.value -= (data.velocity ?? 0) * delta.factor;\n }\n break;\n }\n if (data.velocity && data.decay !== 1) {\n data.velocity *= decay;\n }\n checkDestroy(particle, data.value, minValue, maxValue);\n if (!particle.destroyed) {\n data.value = clamp(data.value, minValue, maxValue);\n }\n}\n", "import { getRandom, getRangeValue, initParticleNumericAnimationValue, } from \"@tsparticles/engine\";\nimport { updateOpacity } from \"./Utils.js\";\nexport class OpacityUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const opacityOptions = particle.options.opacity;\n particle.opacity = initParticleNumericAnimationValue(opacityOptions, 1);\n const opacityAnimation = opacityOptions.animation;\n if (opacityAnimation.enable) {\n particle.opacity.velocity =\n (getRangeValue(opacityAnimation.speed) / 100) * this.container.retina.reduceFactor;\n if (!opacityAnimation.sync) {\n particle.opacity.velocity *= getRandom();\n }\n }\n }\n isEnabled(particle) {\n return (!particle.destroyed &&\n !particle.spawning &&\n !!particle.opacity &&\n particle.opacity.enable &&\n ((particle.opacity.maxLoops ?? 0) <= 0 ||\n ((particle.opacity.maxLoops ?? 0) > 0 &&\n (particle.opacity.loops ?? 0) < (particle.opacity.maxLoops ?? 0))));\n }\n reset(particle) {\n if (particle.opacity) {\n particle.opacity.time = 0;\n particle.opacity.loops = 0;\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateOpacity(particle, delta);\n }\n}\n", "import { OpacityUpdater } from \"./OpacityUpdater.js\";\nexport async function loadOpacityUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"opacity\", (container) => new OpacityUpdater(container), refresh);\n}\n", "import { getRangeValue } from \"@tsparticles/engine\";\nexport function bounceHorizontal(data) {\n if ((data.outMode !== \"bounce\" &&\n data.outMode !== \"bounce-horizontal\" &&\n data.outMode !== \"bounceHorizontal\" &&\n data.outMode !== \"split\") ||\n (data.direction !== \"left\" && data.direction !== \"right\")) {\n return;\n }\n if (data.bounds.right < 0 && data.direction === \"left\") {\n data.particle.position.x = data.size + data.offset.x;\n }\n else if (data.bounds.left > data.canvasSize.width && data.direction === \"right\") {\n data.particle.position.x = data.canvasSize.width - data.size - data.offset.x;\n }\n const velocity = data.particle.velocity.x;\n let bounced = false;\n if ((data.direction === \"right\" && data.bounds.right >= data.canvasSize.width && velocity > 0) ||\n (data.direction === \"left\" && data.bounds.left <= 0 && velocity < 0)) {\n const newVelocity = getRangeValue(data.particle.options.bounce.horizontal.value);\n data.particle.velocity.x *= -newVelocity;\n bounced = true;\n }\n if (!bounced) {\n return;\n }\n const minPos = data.offset.x + data.size;\n if (data.bounds.right >= data.canvasSize.width && data.direction === \"right\") {\n data.particle.position.x = data.canvasSize.width - minPos;\n }\n else if (data.bounds.left <= 0 && data.direction === \"left\") {\n data.particle.position.x = minPos;\n }\n if (data.outMode === \"split\") {\n data.particle.destroy();\n }\n}\nexport function bounceVertical(data) {\n if ((data.outMode !== \"bounce\" &&\n data.outMode !== \"bounce-vertical\" &&\n data.outMode !== \"bounceVertical\" &&\n data.outMode !== \"split\") ||\n (data.direction !== \"bottom\" && data.direction !== \"top\")) {\n return;\n }\n if (data.bounds.bottom < 0 && data.direction === \"top\") {\n data.particle.position.y = data.size + data.offset.y;\n }\n else if (data.bounds.top > data.canvasSize.height && data.direction === \"bottom\") {\n data.particle.position.y = data.canvasSize.height - data.size - data.offset.y;\n }\n const velocity = data.particle.velocity.y;\n let bounced = false;\n if ((data.direction === \"bottom\" && data.bounds.bottom >= data.canvasSize.height && velocity > 0) ||\n (data.direction === \"top\" && data.bounds.top <= 0 && velocity < 0)) {\n const newVelocity = getRangeValue(data.particle.options.bounce.vertical.value);\n data.particle.velocity.y *= -newVelocity;\n bounced = true;\n }\n if (!bounced) {\n return;\n }\n const minPos = data.offset.y + data.size;\n if (data.bounds.bottom >= data.canvasSize.height && data.direction === \"bottom\") {\n data.particle.position.y = data.canvasSize.height - minPos;\n }\n else if (data.bounds.top <= 0 && data.direction === \"top\") {\n data.particle.position.y = minPos;\n }\n if (data.outMode === \"split\") {\n data.particle.destroy();\n }\n}\n", "import { calculateBounds, } from \"@tsparticles/engine\";\nimport { bounceHorizontal, bounceVertical } from \"./Utils.js\";\nexport class BounceOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\n \"bounce\",\n \"bounce-vertical\",\n \"bounce-horizontal\",\n \"bounceVertical\",\n \"bounceHorizontal\",\n \"split\",\n ];\n }\n update(particle, direction, delta, outMode) {\n if (!this.modes.includes(outMode)) {\n return;\n }\n const container = this.container;\n let handled = false;\n for (const [, plugin] of container.plugins) {\n if (plugin.particleBounce !== undefined) {\n handled = plugin.particleBounce(particle, delta, direction);\n }\n if (handled) {\n break;\n }\n }\n if (handled) {\n return;\n }\n const pos = particle.getPosition(), offset = particle.offset, size = particle.getRadius(), bounds = calculateBounds(pos, size), canvasSize = container.canvas.size;\n bounceHorizontal({ particle, outMode, direction, bounds, canvasSize, offset, size });\n bounceVertical({ particle, outMode, direction, bounds, canvasSize, offset, size });\n }\n}\n", "import { Vector, getDistances, isPointInside, } from \"@tsparticles/engine\";\nexport class DestroyOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\"destroy\"];\n }\n update(particle, direction, _delta, outMode) {\n if (!this.modes.includes(outMode)) {\n return;\n }\n const container = this.container;\n switch (particle.outType) {\n case \"normal\":\n case \"outside\":\n if (isPointInside(particle.position, container.canvas.size, Vector.origin, particle.getRadius(), direction)) {\n return;\n }\n break;\n case \"inside\": {\n const { dx, dy } = getDistances(particle.position, particle.moveCenter);\n const { x: vx, y: vy } = particle.velocity;\n if ((vx < 0 && dx > particle.moveCenter.radius) ||\n (vy < 0 && dy > particle.moveCenter.radius) ||\n (vx >= 0 && dx < -particle.moveCenter.radius) ||\n (vy >= 0 && dy < -particle.moveCenter.radius)) {\n return;\n }\n break;\n }\n }\n container.particles.remove(particle, undefined, true);\n }\n}\n", "import { Vector, isPointInside, } from \"@tsparticles/engine\";\nexport class NoneOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\"none\"];\n }\n update(particle, direction, delta, outMode) {\n if (!this.modes.includes(outMode)) {\n return;\n }\n if ((particle.options.move.distance.horizontal &&\n (direction === \"left\" || direction === \"right\")) ||\n (particle.options.move.distance.vertical &&\n (direction === \"top\" || direction === \"bottom\"))) {\n return;\n }\n const gravityOptions = particle.options.move.gravity, container = this.container;\n const canvasSize = container.canvas.size;\n const pRadius = particle.getRadius();\n if (!gravityOptions.enable) {\n if ((particle.velocity.y > 0 && particle.position.y <= canvasSize.height + pRadius) ||\n (particle.velocity.y < 0 && particle.position.y >= -pRadius) ||\n (particle.velocity.x > 0 && particle.position.x <= canvasSize.width + pRadius) ||\n (particle.velocity.x < 0 && particle.position.x >= -pRadius)) {\n return;\n }\n if (!isPointInside(particle.position, container.canvas.size, Vector.origin, pRadius, direction)) {\n container.particles.remove(particle);\n }\n }\n else {\n const position = particle.position;\n if ((!gravityOptions.inverse &&\n position.y > canvasSize.height + pRadius &&\n direction === \"bottom\") ||\n (gravityOptions.inverse && position.y < -pRadius && direction === \"top\")) {\n container.particles.remove(particle);\n }\n }\n }\n}\n", "import { Vector, calculateBounds, getDistances, getRandom, isPointInside, randomInRange, } from \"@tsparticles/engine\";\nexport class OutOutMode {\n constructor(container) {\n this.container = container;\n this.modes = [\"out\"];\n }\n update(particle, direction, delta, outMode) {\n if (!this.modes.includes(outMode)) {\n return;\n }\n const container = this.container;\n switch (particle.outType) {\n case \"inside\": {\n const { x: vx, y: vy } = particle.velocity;\n const circVec = Vector.origin;\n circVec.length = particle.moveCenter.radius;\n circVec.angle = particle.velocity.angle + Math.PI;\n circVec.addTo(Vector.create(particle.moveCenter));\n const { dx, dy } = getDistances(particle.position, circVec);\n if ((vx <= 0 && dx >= 0) || (vy <= 0 && dy >= 0) || (vx >= 0 && dx <= 0) || (vy >= 0 && dy <= 0)) {\n return;\n }\n particle.position.x = Math.floor(randomInRange({\n min: 0,\n max: container.canvas.size.width,\n }));\n particle.position.y = Math.floor(randomInRange({\n min: 0,\n max: container.canvas.size.height,\n }));\n const { dx: newDx, dy: newDy } = getDistances(particle.position, particle.moveCenter);\n particle.direction = Math.atan2(-newDy, -newDx);\n particle.velocity.angle = particle.direction;\n break;\n }\n default: {\n if (isPointInside(particle.position, container.canvas.size, Vector.origin, particle.getRadius(), direction)) {\n return;\n }\n switch (particle.outType) {\n case \"outside\": {\n particle.position.x =\n Math.floor(randomInRange({\n min: -particle.moveCenter.radius,\n max: particle.moveCenter.radius,\n })) + particle.moveCenter.x;\n particle.position.y =\n Math.floor(randomInRange({\n min: -particle.moveCenter.radius,\n max: particle.moveCenter.radius,\n })) + particle.moveCenter.y;\n const { dx, dy } = getDistances(particle.position, particle.moveCenter);\n if (particle.moveCenter.radius) {\n particle.direction = Math.atan2(dy, dx);\n particle.velocity.angle = particle.direction;\n }\n break;\n }\n case \"normal\": {\n const warp = particle.options.move.warp, canvasSize = container.canvas.size, newPos = {\n bottom: canvasSize.height + particle.getRadius() + particle.offset.y,\n left: -particle.getRadius() - particle.offset.x,\n right: canvasSize.width + particle.getRadius() + particle.offset.x,\n top: -particle.getRadius() - particle.offset.y,\n }, sizeValue = particle.getRadius(), nextBounds = calculateBounds(particle.position, sizeValue);\n if (direction === \"right\" &&\n nextBounds.left > canvasSize.width + particle.offset.x) {\n particle.position.x = newPos.left;\n particle.initialPosition.x = particle.position.x;\n if (!warp) {\n particle.position.y = getRandom() * canvasSize.height;\n particle.initialPosition.y = particle.position.y;\n }\n }\n else if (direction === \"left\" && nextBounds.right < -particle.offset.x) {\n particle.position.x = newPos.right;\n particle.initialPosition.x = particle.position.x;\n if (!warp) {\n particle.position.y = getRandom() * canvasSize.height;\n particle.initialPosition.y = particle.position.y;\n }\n }\n if (direction === \"bottom\" &&\n nextBounds.top > canvasSize.height + particle.offset.y) {\n if (!warp) {\n particle.position.x = getRandom() * canvasSize.width;\n particle.initialPosition.x = particle.position.x;\n }\n particle.position.y = newPos.top;\n particle.initialPosition.y = particle.position.y;\n }\n else if (direction === \"top\" && nextBounds.bottom < -particle.offset.y) {\n if (!warp) {\n particle.position.x = getRandom() * canvasSize.width;\n particle.initialPosition.x = particle.position.x;\n }\n particle.position.y = newPos.bottom;\n particle.initialPosition.y = particle.position.y;\n }\n break;\n }\n }\n break;\n }\n }\n }\n}\n", "import { BounceOutMode } from \"./BounceOutMode.js\";\nimport { DestroyOutMode } from \"./DestroyOutMode.js\";\nimport { NoneOutMode } from \"./NoneOutMode.js\";\nimport { OutOutMode } from \"./OutOutMode.js\";\nexport class OutOfCanvasUpdater {\n constructor(container) {\n this.container = container;\n this._updateOutMode = (particle, delta, outMode, direction) => {\n for (const updater of this.updaters) {\n updater.update(particle, direction, delta, outMode);\n }\n };\n this.updaters = [\n new BounceOutMode(container),\n new DestroyOutMode(container),\n new OutOutMode(container),\n new NoneOutMode(container),\n ];\n }\n init() {\n }\n isEnabled(particle) {\n return !particle.destroyed && !particle.spawning;\n }\n update(particle, delta) {\n const outModes = particle.options.move.outModes;\n this._updateOutMode(particle, delta, outModes.bottom ?? outModes.default, \"bottom\");\n this._updateOutMode(particle, delta, outModes.left ?? outModes.default, \"left\");\n this._updateOutMode(particle, delta, outModes.right ?? outModes.default, \"right\");\n this._updateOutMode(particle, delta, outModes.top ?? outModes.default, \"top\");\n }\n}\n", "import { OutOfCanvasUpdater } from \"./OutOfCanvasUpdater.js\";\nexport async function loadOutModesUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"outModes\", (container) => new OutOfCanvasUpdater(container), refresh);\n}\n", "import { clamp } from \"@tsparticles/engine\";\nfunction checkDestroy(particle, value, minValue, maxValue) {\n switch (particle.options.size.animation.destroy) {\n case \"max\":\n if (value >= maxValue) {\n particle.destroy();\n }\n break;\n case \"min\":\n if (value <= minValue) {\n particle.destroy();\n }\n break;\n }\n}\nexport function updateSize(particle, delta) {\n const data = particle.size;\n if (particle.destroyed ||\n !data ||\n !data.enable ||\n ((data.maxLoops ?? 0) > 0 && (data.loops ?? 0) > (data.maxLoops ?? 0))) {\n return;\n }\n const sizeVelocity = (data.velocity ?? 0) * delta.factor, minValue = data.min, maxValue = data.max, decay = data.decay ?? 1;\n if (!data.time) {\n data.time = 0;\n }\n if ((data.delayTime ?? 0) > 0 && data.time < (data.delayTime ?? 0)) {\n data.time += delta.value;\n }\n if ((data.delayTime ?? 0) > 0 && data.time < (data.delayTime ?? 0)) {\n return;\n }\n switch (data.status) {\n case \"increasing\":\n if (data.value >= maxValue) {\n data.status = \"decreasing\";\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n }\n else {\n data.value += sizeVelocity;\n }\n break;\n case \"decreasing\":\n if (data.value <= minValue) {\n data.status = \"increasing\";\n if (!data.loops) {\n data.loops = 0;\n }\n data.loops++;\n }\n else {\n data.value -= sizeVelocity;\n }\n }\n if (data.velocity && decay !== 1) {\n data.velocity *= decay;\n }\n checkDestroy(particle, data.value, minValue, maxValue);\n if (!particle.destroyed) {\n data.value = clamp(data.value, minValue, maxValue);\n }\n}\n", "import { getRandom } from \"@tsparticles/engine\";\nimport { updateSize } from \"./Utils.js\";\nexport class SizeUpdater {\n init(particle) {\n const container = particle.container, sizeOptions = particle.options.size, sizeAnimation = sizeOptions.animation;\n if (sizeAnimation.enable) {\n particle.size.velocity =\n ((particle.retina.sizeAnimationSpeed ?? container.retina.sizeAnimationSpeed) / 100) *\n container.retina.reduceFactor;\n if (!sizeAnimation.sync) {\n particle.size.velocity *= getRandom();\n }\n }\n }\n isEnabled(particle) {\n return (!particle.destroyed &&\n !particle.spawning &&\n particle.size.enable &&\n ((particle.size.maxLoops ?? 0) <= 0 ||\n ((particle.size.maxLoops ?? 0) > 0 && (particle.size.loops ?? 0) < (particle.size.maxLoops ?? 0))));\n }\n reset(particle) {\n particle.size.loops = 0;\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateSize(particle, delta);\n }\n}\n", "import { SizeUpdater } from \"./SizeUpdater.js\";\nexport async function loadSizeUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"size\", () => new SizeUpdater(), refresh);\n}\n", "import { loadBaseMover } from \"@tsparticles/move-base\";\nimport { loadCircleShape } from \"@tsparticles/shape-circle\";\nimport { loadColorUpdater } from \"@tsparticles/updater-color\";\nimport { loadOpacityUpdater } from \"@tsparticles/updater-opacity\";\nimport { loadOutModesUpdater } from \"@tsparticles/updater-out-modes\";\nimport { loadSizeUpdater } from \"@tsparticles/updater-size\";\nexport async function loadBasic(engine, refresh = true) {\n await loadBaseMover(engine, false);\n await loadCircleShape(engine, false);\n await loadColorUpdater(engine, false);\n await loadOpacityUpdater(engine, false);\n await loadOutModesUpdater(engine, false);\n await loadSizeUpdater(engine, false);\n await engine.refresh(refresh);\n}\n", "import { addEasing } from \"@tsparticles/engine\";\nexport async function loadEasingQuadPlugin() {\n addEasing(\"ease-in-quad\", (value) => value ** 2);\n addEasing(\"ease-out-quad\", (value) => 1 - (1 - value) ** 2);\n addEasing(\"ease-in-out-quad\", (value) => (value < 0.5 ? 2 * value ** 2 : 1 - (-2 * value + 2) ** 2 / 2));\n}\n", "import { executeOnSingleOrMultiple, getRangeMax, isInArray, itemFromSingleOrMultiple, loadFont, } from \"@tsparticles/engine\";\nexport const validTypes = [\"emoji\"];\nconst defaultFont = '\"Twemoji Mozilla\", Apple Color Emoji, \"Segoe UI Emoji\", \"Noto Color Emoji\", \"EmojiOne Color\"';\nexport class EmojiDrawer {\n constructor() {\n this._emojiShapeDict = new Map();\n }\n destroy() {\n for (const [key, emojiData] of this._emojiShapeDict) {\n emojiData instanceof ImageBitmap && emojiData?.close();\n this._emojiShapeDict.delete(key);\n }\n }\n draw(data) {\n const { context, particle, radius, opacity } = data, emojiData = particle.emojiData;\n if (!emojiData) {\n return;\n }\n context.globalAlpha = opacity;\n context.drawImage(emojiData, -radius, -radius, radius * 2, radius * 2);\n context.globalAlpha = 1;\n }\n async init(container) {\n const options = container.actualOptions;\n if (validTypes.find((t) => isInArray(t, options.particles.shape.type))) {\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 shape.font && promises.push(loadFont(shape.font));\n });\n }\n await Promise.all(promises);\n }\n }\n particleDestroy(particle) {\n delete particle.emojiData;\n }\n particleInit(container, particle) {\n const shapeData = particle.shapeData;\n if (!shapeData?.value) {\n return;\n }\n const emoji = itemFromSingleOrMultiple(shapeData.value, particle.randomIndexData), font = shapeData.font ?? defaultFont;\n if (!emoji) {\n return;\n }\n const key = `${emoji}_${font}`, existingData = this._emojiShapeDict.get(key);\n if (existingData) {\n particle.emojiData = existingData;\n return;\n }\n const canvasSize = getRangeMax(particle.size.value) * 2;\n let emojiData;\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 ${getRangeMax(particle.size.value) * 2}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(emoji, getRangeMax(particle.size.value), getRangeMax(particle.size.value));\n emojiData = canvas.transferToImageBitmap();\n }\n else {\n const canvas = document.createElement(\"canvas\");\n canvas.width = canvasSize;\n canvas.height = canvasSize;\n const context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${getRangeMax(particle.size.value) * 2}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(emoji, getRangeMax(particle.size.value), getRangeMax(particle.size.value));\n emojiData = canvas;\n }\n this._emojiShapeDict.set(key, emojiData);\n particle.emojiData = emojiData;\n }\n}\n", "import { EmojiDrawer, validTypes } from \"./EmojiDrawer.js\";\nexport async function loadEmojiShape(engine, refresh = true) {\n await engine.addShape(validTypes, new EmojiDrawer(), refresh);\n}\n", "export class Attract {\n constructor() {\n this.distance = 200;\n this.duration = 0.4;\n this.easing = \"ease-out-quad\";\n this.factor = 1;\n this.maxSpeed = 50;\n this.speed = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n if (data.duration !== undefined) {\n this.duration = data.duration;\n }\n if (data.easing !== undefined) {\n this.easing = data.easing;\n }\n if (data.factor !== undefined) {\n this.factor = data.factor;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = data.maxSpeed;\n }\n if (data.speed !== undefined) {\n this.speed = data.speed;\n }\n }\n}\n", "import { Circle, ExternalInteractorBase, Vector, clamp, getDistances, getEasing, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Attract } from \"./Options/Classes/Attract.js\";\nconst attractMode = \"attract\";\nexport class Attractor extends ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._clickAttract = () => {\n const container = this.container;\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n const { attract } = container;\n if (!attract.finish) {\n if (!attract.count) {\n attract.count = 0;\n }\n attract.count++;\n if (attract.count === container.particles.count) {\n attract.finish = true;\n }\n }\n if (attract.clicking) {\n const mousePos = container.interactivity.mouse.clickPosition, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < 0 || !mousePos) {\n return;\n }\n this._processAttract(mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius));\n }\n else if (attract.clicking === false) {\n attract.particles = [];\n }\n return;\n };\n this._hoverAttract = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < 0 || !mousePos) {\n return;\n }\n this._processAttract(mousePos, attractRadius, new Circle(mousePos.x, mousePos.y, attractRadius));\n };\n this._processAttract = (position, attractRadius, area) => {\n const container = this.container, attractOptions = container.actualOptions.interactivity.modes.attract;\n if (!attractOptions) {\n return;\n }\n const query = container.particles.quadTree.query(area, (p) => this.isEnabled(p));\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(particle.position, position);\n const velocity = attractOptions.speed * attractOptions.factor;\n const attractFactor = clamp(getEasing(attractOptions.easing)(1 - distance / attractRadius) * velocity, 0, attractOptions.maxSpeed);\n const normVec = Vector.create(distance === 0 ? velocity : (dx / distance) * attractFactor, distance === 0 ? velocity : (dy / distance) * attractFactor);\n particle.position.subFrom(normVec);\n }\n };\n this._engine = engine;\n if (!container.attract) {\n container.attract = { particles: [] };\n }\n this.handleClickMode = (mode) => {\n const options = this.container.actualOptions, attract = options.interactivity.modes.attract;\n if (!attract || mode !== 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 * 1000);\n };\n }\n clear() {\n }\n init() {\n const container = this.container, attract = container.actualOptions.interactivity.modes.attract;\n if (!attract) {\n return;\n }\n container.retina.attractModeDistance = attract.distance * container.retina.pixelRatio;\n }\n async interact() {\n const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, clickEnabled = events.onClick.enable, clickMode = events.onClick.mode;\n if (mouseMoveStatus && hoverEnabled && isInArray(attractMode, hoverMode)) {\n this._hoverAttract();\n }\n else if (clickEnabled && isInArray(attractMode, clickMode)) {\n this._clickAttract();\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events;\n if ((!mouse.position || !events.onHover.enable) && (!mouse.clickPosition || !events.onClick.enable)) {\n return false;\n }\n const hoverMode = events.onHover.mode, clickMode = events.onClick.mode;\n return isInArray(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 await engine.addInteractor(\"externalAttract\", (container) => new Attractor(engine, container), refresh);\n}\nexport * from \"./Options/Classes/Attract.js\";\nexport * from \"./Options/Interfaces/IAttract.js\";\n", "export class Bounce {\n constructor() {\n this.distance = 200;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n }\n}\n", "import { Circle, ExternalInteractorBase, Rectangle, Vector, calculateBounds, circleBounce, circleBounceDataFromParticle, divModeExecute, isDivModeEnabled, isInArray, mouseMoveEvent, rectBounce, } from \"@tsparticles/engine\";\nimport { Bounce } from \"./Options/Classes/Bounce.js\";\nconst bounceMode = \"bounce\";\nexport class Bouncer extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this._processBounce = (position, radius, area) => {\n const query = this.container.particles.quadTree.query(area, (p) => this.isEnabled(p));\n for (const particle of query) {\n if (area instanceof Circle) {\n circleBounce(circleBounceDataFromParticle(particle), {\n position,\n radius,\n mass: (radius ** 2 * Math.PI) / 2,\n velocity: Vector.origin,\n factor: Vector.origin,\n });\n }\n else if (area instanceof Rectangle) {\n rectBounce(particle, calculateBounds(position, radius));\n }\n }\n };\n this._processMouseBounce = () => {\n const container = this.container, pxRatio = container.retina.pixelRatio, tolerance = 10 * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;\n if (!radius || radius < 0 || !mousePos) {\n return;\n }\n this._processBounce(mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance));\n };\n this._singleSelectorBounce = (selector, div) => {\n const container = this.container, query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach((item) => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth / 2) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio,\n }, radius = (elem.offsetWidth / 2) * pxRatio, tolerance = 10 * pxRatio, area = div.type === \"circle\"\n ? new Circle(pos.x, pos.y, radius + tolerance)\n : new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * 2, elem.offsetHeight * pxRatio + tolerance * 2);\n this._processBounce(pos, radius, area);\n });\n };\n }\n clear() {\n }\n init() {\n const container = this.container, bounce = container.actualOptions.interactivity.modes.bounce;\n if (!bounce) {\n return;\n }\n container.retina.bounceModeDistance = bounce.distance * container.retina.pixelRatio;\n }\n async interact() {\n const container = this.container, options = container.actualOptions, events = options.interactivity.events, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && isInArray(bounceMode, hoverMode)) {\n this._processMouseBounce();\n }\n else {\n divModeExecute(bounceMode, divs, (selector, div) => this._singleSelectorBounce(selector, div));\n }\n }\n isEnabled(particle) {\n const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv;\n return ((mouse.position && events.onHover.enable && isInArray(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 await engine.addInteractor(\"externalBounce\", (container) => new Bouncer(container), refresh);\n}\nexport * from \"./Options/Classes/Bounce.js\";\nexport * from \"./Options/Interfaces/IBounce.js\";\n", "import { OptionsColor, executeOnSingleOrMultiple, isArray, } from \"@tsparticles/engine\";\nexport class BubbleBase {\n constructor() {\n this.distance = 200;\n this.duration = 0.4;\n this.mix = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n if (data.duration !== undefined) {\n this.duration = data.duration;\n }\n if (data.mix !== undefined) {\n this.mix = data.mix;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n if (data.color !== undefined) {\n const sourceColor = isArray(this.color) ? undefined : this.color;\n this.color = executeOnSingleOrMultiple(data.color, (color) => {\n return OptionsColor.create(sourceColor, color);\n });\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n }\n}\n", "import { BubbleBase } from \"./BubbleBase.js\";\nexport class BubbleDiv extends BubbleBase {\n constructor() {\n super();\n this.selectors = [];\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n }\n}\n", "import { executeOnSingleOrMultiple, } from \"@tsparticles/engine\";\nimport { BubbleBase } from \"./BubbleBase.js\";\nimport { BubbleDiv } from \"./BubbleDiv.js\";\nexport class Bubble extends BubbleBase {\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n this.divs = executeOnSingleOrMultiple(data.divs, (div) => {\n const tmp = new BubbleDiv();\n tmp.load(div);\n return tmp;\n });\n }\n}\n", "import { clamp } from \"@tsparticles/engine\";\nexport function calculateBubbleValue(particleValue, modeValue, optionsValue, ratio) {\n if (modeValue >= optionsValue) {\n const value = particleValue + (modeValue - optionsValue) * ratio;\n return clamp(value, particleValue, modeValue);\n }\n else if (modeValue < optionsValue) {\n const value = particleValue - (optionsValue - modeValue) * ratio;\n return clamp(value, modeValue, particleValue);\n }\n}\n", "import { Circle, ExternalInteractorBase, Rectangle, colorMix, divMode, divModeExecute, getDistance, getRangeMax, isDivModeEnabled, isInArray, itemFromSingleOrMultiple, mouseLeaveEvent, mouseMoveEvent, rangeColorToHsl, rgbToHsl, } from \"@tsparticles/engine\";\nimport { Bubble } from \"./Options/Classes/Bubble.js\";\nimport { calculateBubbleValue } from \"./Utils.js\";\nconst bubbleMode = \"bubble\";\nexport class Bubbler extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n this._clickBubble = () => {\n const container = this.container, options = container.actualOptions, mouseClickPos = container.interactivity.mouse.clickPosition, bubbleOptions = options.interactivity.modes.bubble;\n if (!bubbleOptions || !mouseClickPos) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n const distance = container.retina.bubbleModeDistance;\n if (!distance || distance < 0) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mouseClickPos, distance, (p) => this.isEnabled(p)), { bubble } = container;\n for (const particle of query) {\n if (!bubble.clicking) {\n continue;\n }\n particle.bubble.inRange = !bubble.durationEnd;\n const pos = particle.getPosition(), distMouse = getDistance(pos, mouseClickPos), timeSpent = (new Date().getTime() - (container.interactivity.mouse.clickTime || 0)) / 1000;\n if (timeSpent > bubbleOptions.duration) {\n bubble.durationEnd = true;\n }\n if (timeSpent > bubbleOptions.duration * 2) {\n bubble.clicking = false;\n bubble.durationEnd = false;\n }\n const sizeData = {\n bubbleObj: {\n optValue: container.retina.bubbleModeSize,\n value: particle.bubble.radius,\n },\n particlesObj: {\n optValue: getRangeMax(particle.options.size.value) * container.retina.pixelRatio,\n value: particle.size.value,\n },\n type: \"size\",\n };\n this._process(particle, distMouse, timeSpent, sizeData);\n const opacityData = {\n bubbleObj: {\n optValue: bubbleOptions.opacity,\n value: particle.bubble.opacity,\n },\n particlesObj: {\n optValue: getRangeMax(particle.options.opacity.value),\n value: particle.opacity?.value ?? 1,\n },\n type: \"opacity\",\n };\n this._process(particle, distMouse, timeSpent, opacityData);\n if (!bubble.durationEnd && distMouse <= distance) {\n this._hoverBubbleColor(particle, distMouse);\n }\n else {\n delete particle.bubble.color;\n }\n }\n };\n this._hoverBubble = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, distance = container.retina.bubbleModeDistance;\n if (!distance || distance < 0 || mousePos === undefined) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mousePos, distance, (p) => this.isEnabled(p));\n for (const particle of query) {\n particle.bubble.inRange = true;\n const pos = particle.getPosition(), pointDistance = getDistance(pos, mousePos), ratio = 1 - pointDistance / distance;\n if (pointDistance <= distance) {\n if (ratio >= 0 && container.interactivity.status === mouseMoveEvent) {\n this._hoverBubbleSize(particle, ratio);\n this._hoverBubbleOpacity(particle, ratio);\n this._hoverBubbleColor(particle, ratio);\n }\n }\n else {\n this.reset(particle);\n }\n if (container.interactivity.status === mouseLeaveEvent) {\n this.reset(particle);\n }\n }\n };\n this._hoverBubbleColor = (particle, ratio, divBubble) => {\n const options = this.container.actualOptions, bubbleOptions = divBubble ?? options.interactivity.modes.bubble;\n if (!bubbleOptions) {\n return;\n }\n if (!particle.bubble.finalColor) {\n const modeColor = bubbleOptions.color;\n if (!modeColor) {\n return;\n }\n const bubbleColor = itemFromSingleOrMultiple(modeColor);\n particle.bubble.finalColor = rangeColorToHsl(bubbleColor);\n }\n if (!particle.bubble.finalColor) {\n return;\n }\n if (bubbleOptions.mix) {\n particle.bubble.color = undefined;\n const pColor = particle.getFillColor();\n particle.bubble.color = pColor\n ? rgbToHsl(colorMix(pColor, particle.bubble.finalColor, 1 - ratio, ratio))\n : particle.bubble.finalColor;\n }\n else {\n particle.bubble.color = particle.bubble.finalColor;\n }\n };\n this._hoverBubbleOpacity = (particle, ratio, divBubble) => {\n const container = this.container, options = container.actualOptions, modeOpacity = divBubble?.opacity ?? options.interactivity.modes.bubble?.opacity;\n if (!modeOpacity) {\n return;\n }\n const optOpacity = particle.options.opacity.value, pOpacity = particle.opacity?.value ?? 1, opacity = calculateBubbleValue(pOpacity, modeOpacity, getRangeMax(optOpacity), ratio);\n if (opacity !== undefined) {\n particle.bubble.opacity = opacity;\n }\n };\n this._hoverBubbleSize = (particle, ratio, divBubble) => {\n const container = this.container, modeSize = divBubble?.size ? divBubble.size * container.retina.pixelRatio : container.retina.bubbleModeSize;\n if (modeSize === undefined) {\n return;\n }\n const optSize = getRangeMax(particle.options.size.value) * container.retina.pixelRatio, pSize = particle.size.value, size = calculateBubbleValue(pSize, modeSize, optSize, ratio);\n if (size !== undefined) {\n particle.bubble.radius = size;\n }\n };\n this._process = (particle, distMouse, timeSpent, data) => {\n const container = this.container, bubbleParam = data.bubbleObj.optValue, options = container.actualOptions, bubbleOptions = options.interactivity.modes.bubble;\n if (!bubbleOptions || bubbleParam === undefined) {\n return;\n }\n const bubbleDuration = bubbleOptions.duration, bubbleDistance = container.retina.bubbleModeDistance, particlesParam = data.particlesObj.optValue, pObjBubble = data.bubbleObj.value, pObj = data.particlesObj.value || 0, type = data.type;\n if (!bubbleDistance || bubbleDistance < 0 || bubbleParam === particlesParam) {\n return;\n }\n if (!container.bubble) {\n container.bubble = {};\n }\n if (container.bubble.durationEnd) {\n if (pObjBubble) {\n if (type === \"size\") {\n delete particle.bubble.radius;\n }\n if (type === \"opacity\") {\n delete particle.bubble.opacity;\n }\n }\n }\n else {\n if (distMouse <= bubbleDistance) {\n const obj = pObjBubble ?? pObj;\n if (obj !== bubbleParam) {\n const value = pObj - (timeSpent * (pObj - bubbleParam)) / bubbleDuration;\n if (type === \"size\") {\n particle.bubble.radius = value;\n }\n if (type === \"opacity\") {\n particle.bubble.opacity = value;\n }\n }\n }\n else {\n if (type === \"size\") {\n delete particle.bubble.radius;\n }\n if (type === \"opacity\") {\n delete particle.bubble.opacity;\n }\n }\n }\n };\n this._singleSelectorHover = (delta, selector, div) => {\n const container = this.container, selectors = document.querySelectorAll(selector), bubble = container.actualOptions.interactivity.modes.bubble;\n if (!bubble || !selectors.length) {\n return;\n }\n selectors.forEach((item) => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth / 2) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio,\n }, repulseRadius = (elem.offsetWidth / 2) * pxRatio, area = div.type === \"circle\"\n ? new Circle(pos.x, pos.y, repulseRadius)\n : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio), query = container.particles.quadTree.query(area, (p) => this.isEnabled(p));\n for (const particle of query) {\n if (!area.contains(particle.getPosition())) {\n continue;\n }\n particle.bubble.inRange = true;\n const divs = bubble.divs, divBubble = divMode(divs, elem);\n if (!particle.bubble.div || particle.bubble.div !== elem) {\n this.clear(particle, delta, true);\n particle.bubble.div = elem;\n }\n this._hoverBubbleSize(particle, 1, divBubble);\n this._hoverBubbleOpacity(particle, 1, divBubble);\n this._hoverBubbleColor(particle, 1, divBubble);\n }\n });\n };\n if (!container.bubble) {\n container.bubble = {};\n }\n this.handleClickMode = (mode) => {\n if (mode !== 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 async interact(delta) {\n const options = this.container.actualOptions, events = options.interactivity.events, onHover = events.onHover, onClick = events.onClick, hoverEnabled = onHover.enable, hoverMode = onHover.mode, clickEnabled = onClick.enable, clickMode = onClick.mode, divs = events.onDiv;\n if (hoverEnabled && isInArray(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 await engine.addInteractor(\"externalBubble\", (container) => new Bubbler(container), refresh);\n}\nexport * from \"./Options/Classes/BubbleBase.js\";\nexport * from \"./Options/Classes/BubbleDiv.js\";\nexport * from \"./Options/Classes/Bubble.js\";\nexport * from \"./Options/Interfaces/IBubbleBase.js\";\nexport * from \"./Options/Interfaces/IBubbleDiv.js\";\nexport * from \"./Options/Interfaces/IBubble.js\";\n", "export class ConnectLinks {\n constructor() {\n this.opacity = 0.5;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n", "import { ConnectLinks } from \"./ConnectLinks.js\";\nexport class Connect {\n constructor() {\n this.distance = 80;\n this.links = new ConnectLinks();\n this.radius = 60;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n this.links.load(data.links);\n if (data.radius !== undefined) {\n this.radius = data.radius;\n }\n }\n}\n", "import { colorMix, drawLine, getStyleFromHsl, getStyleFromRgb, } from \"@tsparticles/engine\";\nexport function gradient(context, p1, p2, opacity) {\n const gradStop = Math.floor(p2.getRadius() / p1.getRadius()), color1 = p1.getFillColor(), color2 = p2.getFillColor();\n if (!color1 || !color2) {\n return;\n }\n const sourcePos = p1.getPosition(), destPos = p2.getPosition(), midRgb = colorMix(color1, color2, p1.getRadius(), p2.getRadius()), grad = context.createLinearGradient(sourcePos.x, sourcePos.y, destPos.x, destPos.y);\n grad.addColorStop(0, getStyleFromHsl(color1, opacity));\n grad.addColorStop(gradStop > 1 ? 1 : gradStop, getStyleFromRgb(midRgb, opacity));\n grad.addColorStop(1, getStyleFromHsl(color2, opacity));\n return grad;\n}\nexport function drawConnectLine(context, width, lineStyle, begin, end) {\n drawLine(context, begin, end);\n context.lineWidth = width;\n context.strokeStyle = lineStyle;\n context.stroke();\n}\nexport function lineStyle(container, ctx, p1, p2) {\n const options = container.actualOptions, connectOptions = options.interactivity.modes.connect;\n if (!connectOptions) {\n return;\n }\n return gradient(ctx, p1, p2, connectOptions.links.opacity);\n}\nexport function drawConnection(container, p1, p2) {\n container.canvas.draw((ctx) => {\n const ls = lineStyle(container, ctx, p1, p2);\n if (!ls) {\n return;\n }\n const pos1 = p1.getPosition(), pos2 = p2.getPosition();\n drawConnectLine(ctx, p1.retina.linksWidth ?? 0, ls, pos1, pos2);\n });\n}\n", "import { ExternalInteractorBase, isInArray, } from \"@tsparticles/engine\";\nimport { Connect } from \"./Options/Classes/Connect.js\";\nimport { drawConnection } from \"./Utils.js\";\nconst connectMode = \"connect\";\nexport class Connector extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, connect = container.actualOptions.interactivity.modes.connect;\n if (!connect) {\n return;\n }\n container.retina.connectModeDistance = connect.distance * container.retina.pixelRatio;\n container.retina.connectModeRadius = connect.radius * container.retina.pixelRatio;\n }\n async interact() {\n const container = this.container, options = container.actualOptions;\n if (options.interactivity.events.onHover.enable && container.interactivity.status === \"pointermove\") {\n const mousePos = container.interactivity.mouse.position;\n if (!container.retina.connectModeDistance ||\n container.retina.connectModeDistance < 0 ||\n !container.retina.connectModeRadius ||\n container.retina.connectModeRadius < 0 ||\n !mousePos) {\n return;\n }\n const distance = Math.abs(container.retina.connectModeRadius), query = container.particles.quadTree.queryCircle(mousePos, distance, (p) => this.isEnabled(p));\n let i = 0;\n for (const p1 of query) {\n const pos1 = p1.getPosition();\n for (const p2 of query.slice(i + 1)) {\n const pos2 = p2.getPosition(), distMax = Math.abs(container.retina.connectModeDistance), xDiff = Math.abs(pos1.x - pos2.x), yDiff = Math.abs(pos1.y - pos2.y);\n if (xDiff < distMax && yDiff < distMax) {\n drawConnection(container, p1, p2);\n }\n }\n ++i;\n }\n }\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n if (!(events.onHover.enable && mouse.position)) {\n return false;\n }\n return isInArray(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 await engine.addInteractor(\"externalConnect\", (container) => new Connector(container), refresh);\n}\nexport * from \"./Options/Classes/Connect.js\";\nexport * from \"./Options/Classes/ConnectLinks.js\";\nexport * from \"./Options/Interfaces/IConnect.js\";\nexport * from \"./Options/Interfaces/IConnectLinks.js\";\n", "import { OptionsColor } from \"@tsparticles/engine\";\nexport class GrabLinks {\n constructor() {\n this.blink = false;\n this.consent = false;\n this.opacity = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.blink !== undefined) {\n this.blink = data.blink;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.consent !== undefined) {\n this.consent = data.consent;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n", "import { GrabLinks } from \"./GrabLinks.js\";\nexport class Grab {\n constructor() {\n this.distance = 100;\n this.links = new GrabLinks();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n this.links.load(data.links);\n }\n}\n", "import { drawLine, getStyleFromRgb } from \"@tsparticles/engine\";\nexport function drawGrabLine(context, width, begin, end, colorLine, opacity) {\n drawLine(context, begin, end);\n context.strokeStyle = getStyleFromRgb(colorLine, opacity);\n context.lineWidth = width;\n context.stroke();\n}\nexport function drawGrab(container, particle, lineColor, opacity, mousePos) {\n container.canvas.draw((ctx) => {\n const beginPos = particle.getPosition();\n drawGrabLine(ctx, particle.retina.linksWidth ?? 0, beginPos, mousePos, lineColor, opacity);\n });\n}\n", "import { ExternalInteractorBase, getDistance, getLinkColor, getLinkRandomColor, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Grab } from \"./Options/Classes/Grab.js\";\nimport { drawGrab } from \"./Utils.js\";\nconst grabMode = \"grab\";\nexport class Grabber extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n const container = this.container, grab = container.actualOptions.interactivity.modes.grab;\n if (!grab) {\n return;\n }\n container.retina.grabModeDistance = grab.distance * container.retina.pixelRatio;\n }\n async interact() {\n const container = this.container, options = container.actualOptions, interactivity = options.interactivity;\n if (!interactivity.modes.grab ||\n !interactivity.events.onHover.enable ||\n container.interactivity.status !== mouseMoveEvent) {\n return;\n }\n const mousePos = container.interactivity.mouse.position;\n if (!mousePos) {\n return;\n }\n const distance = container.retina.grabModeDistance;\n if (!distance || distance < 0) {\n return;\n }\n const query = container.particles.quadTree.queryCircle(mousePos, distance, (p) => this.isEnabled(p));\n for (const particle of query) {\n const pos = particle.getPosition(), pointDistance = getDistance(pos, mousePos);\n if (pointDistance > distance) {\n continue;\n }\n const grabLineOptions = interactivity.modes.grab.links, lineOpacity = grabLineOptions.opacity, opacityLine = lineOpacity - (pointDistance * lineOpacity) / distance;\n if (opacityLine <= 0) {\n continue;\n }\n const optColor = grabLineOptions.color ?? particle.options.links?.color;\n if (!container.particles.grabLineColor && optColor) {\n const linksOptions = interactivity.modes.grab.links;\n container.particles.grabLineColor = getLinkRandomColor(optColor, linksOptions.blink, linksOptions.consent);\n }\n const colorLine = getLinkColor(particle, undefined, container.particles.grabLineColor);\n if (!colorLine) {\n continue;\n }\n drawGrab(container, particle, colorLine, opacityLine, mousePos);\n }\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n return events.onHover.enable && !!mouse.position && isInArray(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 await engine.addInteractor(\"externalGrab\", (container) => new Grabber(container), 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.getAnimationStatus()) {\n container.pause();\n }\n else {\n container.play();\n }\n };\n }\n clear() {\n }\n init() {\n }\n async interact() {\n }\n isEnabled() {\n return true;\n }\n reset() {\n }\n}\n", "import { Pauser } from \"./Pauser.js\";\nexport async function loadExternalPauseInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalPause\", (container) => new Pauser(container), refresh);\n}\n", "import { setRangeValue } from \"@tsparticles/engine\";\nexport class Push {\n constructor() {\n this.default = true;\n this.groups = [];\n this.quantity = 4;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.default !== undefined) {\n this.default = data.default;\n }\n if (data.groups !== undefined) {\n this.groups = data.groups.map((t) => t);\n }\n if (!this.groups.length) {\n this.default = true;\n }\n const quantity = data.quantity;\n if (quantity !== undefined) {\n this.quantity = setRangeValue(quantity);\n }\n }\n}\n", "import { ExternalInteractorBase, getRangeValue, itemFromArray, } from \"@tsparticles/engine\";\nimport { Push } from \"./Options/Classes/Push.js\";\nconst pushMode = \"push\";\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 <= 0) {\n return;\n }\n const group = itemFromArray([undefined, ...pushOptions.groups]), groupOptions = group !== undefined ? container.actualOptions.particles.groups[group] : undefined;\n container.particles.push(quantity, container.interactivity.mouse, groupOptions, group);\n };\n }\n clear() {\n }\n init() {\n }\n async interact() {\n }\n isEnabled() {\n return true;\n }\n loadModeOptions(options, ...sources) {\n if (!options.push) {\n options.push = new Push();\n }\n for (const source of sources) {\n options.push.load(source?.push);\n }\n }\n reset() {\n }\n}\n", "import { Pusher } from \"./Pusher.js\";\nexport async function loadExternalPushInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalPush\", (container) => new Pusher(container), refresh);\n}\nexport * from \"./Options/Classes/Push.js\";\nexport * from \"./Options/Interfaces/IPush.js\";\n", "import { setRangeValue } from \"@tsparticles/engine\";\nexport class Remove {\n constructor() {\n this.quantity = 2;\n }\n load(data) {\n if (!data) {\n return;\n }\n const quantity = data.quantity;\n if (quantity !== undefined) {\n this.quantity = setRangeValue(quantity);\n }\n }\n}\n", "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 async interact() {\n }\n isEnabled() {\n return true;\n }\n loadModeOptions(options, ...sources) {\n if (!options.remove) {\n options.remove = new Remove();\n }\n for (const source of sources) {\n options.remove.load(source?.remove);\n }\n }\n reset() {\n }\n}\n", "import { Remover } from \"./Remover.js\";\nexport async function loadExternalRemoveInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalRemove\", (container) => new Remover(container), refresh);\n}\nexport * from \"./Options/Classes/Remove.js\";\nexport * from \"./Options/Interfaces/IRemove.js\";\n", "export class RepulseBase {\n constructor() {\n this.distance = 200;\n this.duration = 0.4;\n this.factor = 100;\n this.speed = 1;\n this.maxSpeed = 50;\n this.easing = \"ease-out-quad\";\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n if (data.duration !== undefined) {\n this.duration = data.duration;\n }\n if (data.easing !== undefined) {\n this.easing = data.easing;\n }\n if (data.factor !== undefined) {\n this.factor = data.factor;\n }\n if (data.speed !== undefined) {\n this.speed = data.speed;\n }\n if (data.maxSpeed !== undefined) {\n this.maxSpeed = data.maxSpeed;\n }\n }\n}\n", "import { RepulseBase } from \"./RepulseBase.js\";\nexport class RepulseDiv extends RepulseBase {\n constructor() {\n super();\n this.selectors = [];\n }\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n if (data.selectors !== undefined) {\n this.selectors = data.selectors;\n }\n }\n}\n", "import { executeOnSingleOrMultiple, } from \"@tsparticles/engine\";\nimport { RepulseBase } from \"./RepulseBase.js\";\nimport { RepulseDiv } from \"./RepulseDiv.js\";\nexport class Repulse extends RepulseBase {\n load(data) {\n super.load(data);\n if (!data) {\n return;\n }\n this.divs = executeOnSingleOrMultiple(data.divs, (div) => {\n const tmp = new RepulseDiv();\n tmp.load(div);\n return tmp;\n });\n }\n}\n", "import { Circle, ExternalInteractorBase, Rectangle, Vector, clamp, divMode, divModeExecute, getDistances, getEasing, isDivModeEnabled, isInArray, mouseMoveEvent, } from \"@tsparticles/engine\";\nimport { Repulse } from \"./Options/Classes/Repulse.js\";\nconst repulseMode = \"repulse\";\nexport class Repulser extends ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._clickRepulse = () => {\n const container = this.container, repulseOptions = container.actualOptions.interactivity.modes.repulse;\n if (!repulseOptions) {\n return;\n }\n const repulse = container.repulse || { particles: [] };\n if (!repulse.finish) {\n if (!repulse.count) {\n repulse.count = 0;\n }\n repulse.count++;\n if (repulse.count === container.particles.count) {\n repulse.finish = true;\n }\n }\n if (repulse.clicking) {\n const repulseDistance = container.retina.repulseModeDistance;\n if (!repulseDistance || repulseDistance < 0) {\n return;\n }\n const repulseRadius = Math.pow(repulseDistance / 6, 3), mouseClickPos = container.interactivity.mouse.clickPosition;\n if (mouseClickPos === undefined) {\n return;\n }\n const range = new Circle(mouseClickPos.x, mouseClickPos.y, repulseRadius), query = container.particles.quadTree.query(range, (p) => this.isEnabled(p));\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(mouseClickPos, particle.position), d = distance ** 2, velocity = repulseOptions.speed, force = (-repulseRadius * velocity) / d;\n if (d <= repulseRadius) {\n repulse.particles.push(particle);\n const vect = Vector.create(dx, dy);\n vect.length = force;\n particle.velocity.setTo(vect);\n }\n }\n }\n else if (repulse.clicking === false) {\n for (const particle of repulse.particles) {\n particle.velocity.setTo(particle.initialVelocity);\n }\n repulse.particles = [];\n }\n };\n this._hoverRepulse = () => {\n const container = this.container, mousePos = container.interactivity.mouse.position, repulseRadius = container.retina.repulseModeDistance;\n if (!repulseRadius || repulseRadius < 0 || !mousePos) {\n return;\n }\n this._processRepulse(mousePos, repulseRadius, new Circle(mousePos.x, mousePos.y, repulseRadius));\n };\n this._processRepulse = (position, repulseRadius, area, divRepulse) => {\n const container = this.container, query = container.particles.quadTree.query(area, (p) => this.isEnabled(p)), repulseOptions = container.actualOptions.interactivity.modes.repulse;\n if (!repulseOptions) {\n return;\n }\n const { easing, speed, factor, maxSpeed } = repulseOptions, easingFunc = getEasing(easing), velocity = (divRepulse?.speed ?? speed) * factor;\n for (const particle of query) {\n const { dx, dy, distance } = getDistances(particle.position, position), repulseFactor = clamp(easingFunc(1 - distance / repulseRadius) * velocity, 0, maxSpeed), normVec = Vector.create(distance === 0 ? velocity : (dx / distance) * repulseFactor, distance === 0 ? velocity : (dy / distance) * repulseFactor);\n particle.position.addTo(normVec);\n }\n };\n this._singleSelectorRepulse = (selector, div) => {\n const container = this.container, repulse = container.actualOptions.interactivity.modes.repulse;\n if (!repulse) {\n return;\n }\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach((item) => {\n const elem = item, pxRatio = container.retina.pixelRatio, pos = {\n x: (elem.offsetLeft + elem.offsetWidth / 2) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight / 2) * pxRatio,\n }, repulseRadius = (elem.offsetWidth / 2) * pxRatio, area = div.type === \"circle\"\n ? new Circle(pos.x, pos.y, repulseRadius)\n : new Rectangle(elem.offsetLeft * pxRatio, elem.offsetTop * pxRatio, elem.offsetWidth * pxRatio, elem.offsetHeight * pxRatio), divs = repulse.divs, divRepulse = divMode(divs, elem);\n this._processRepulse(pos, repulseRadius, area, divRepulse);\n });\n };\n this._engine = engine;\n if (!container.repulse) {\n container.repulse = { particles: [] };\n }\n this.handleClickMode = (mode) => {\n const options = this.container.actualOptions, repulseOpts = options.interactivity.modes.repulse;\n if (!repulseOpts || mode !== 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 * 1000);\n };\n }\n clear() {\n }\n init() {\n const container = this.container, repulse = container.actualOptions.interactivity.modes.repulse;\n if (!repulse) {\n return;\n }\n container.retina.repulseModeDistance = repulse.distance * container.retina.pixelRatio;\n }\n async interact() {\n const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, events = options.interactivity.events, hover = events.onHover, hoverEnabled = hover.enable, hoverMode = hover.mode, click = events.onClick, clickEnabled = click.enable, clickMode = click.mode, divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && isInArray(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 await engine.addInteractor(\"externalRepulse\", (container) => new Repulser(engine, container), refresh);\n}\nexport * from \"./Options/Classes/RepulseBase.js\";\nexport * from \"./Options/Classes/RepulseDiv.js\";\nexport * from \"./Options/Classes/Repulse.js\";\nexport * from \"./Options/Interfaces/IRepulseBase.js\";\nexport * from \"./Options/Interfaces/IRepulseDiv.js\";\nexport * from \"./Options/Interfaces/IRepulse.js\";\n", "export class Slow {\n constructor() {\n this.factor = 3;\n this.radius = 200;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.factor !== undefined) {\n this.factor = data.factor;\n }\n if (data.radius !== undefined) {\n this.radius = data.radius;\n }\n }\n}\n", "import { ExternalInteractorBase, getDistance, isInArray, } from \"@tsparticles/engine\";\nimport { Slow } from \"./Options/Classes/Slow.js\";\nconst slowMode = \"slow\";\nexport class Slower extends ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear(particle, delta, force) {\n if (particle.slow.inRange && !force) {\n return;\n }\n particle.slow.factor = 1;\n }\n init() {\n const container = this.container, slow = container.actualOptions.interactivity.modes.slow;\n if (!slow) {\n return;\n }\n container.retina.slowModeRadius = slow.radius * container.retina.pixelRatio;\n }\n async interact() {\n }\n isEnabled(particle) {\n const container = this.container, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? container.actualOptions.interactivity).events;\n return events.onHover.enable && !!mouse.position && isInArray(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 < 0 || !mousePos) {\n return;\n }\n const particlePos = particle.getPosition(), dist = getDistance(mousePos, particlePos), proximityFactor = dist / radius, slowFactor = slowOptions.factor, { slow } = particle;\n if (dist > radius) {\n return;\n }\n slow.inRange = true;\n slow.factor = proximityFactor / slowFactor;\n }\n}\n", "import { Slower } from \"./Slower.js\";\nexport async function loadExternalSlowInteraction(engine, refresh = true) {\n await engine.addInteractor(\"externalSlow\", (container) => new Slower(container), refresh);\n}\nexport * from \"./Options/Classes/Slow.js\";\nexport * from \"./Options/Interfaces/ISlow.js\";\n", "export const InterlaceOffsets = [0, 4, 2, 1];\nexport const InterlaceSteps = [8, 8, 4, 2];\n", "export class ByteStream {\n constructor(bytes) {\n this.pos = 0;\n this.data = new Uint8ClampedArray(bytes);\n }\n getString(count) {\n const slice = this.data.slice(this.pos, this.pos + count);\n this.pos += slice.length;\n return slice.reduce((acc, curr) => acc + String.fromCharCode(curr), \"\");\n }\n nextByte() {\n return this.data[this.pos++];\n }\n nextTwoBytes() {\n this.pos += 2;\n return this.data[this.pos - 2] + (this.data[this.pos - 1] << 8);\n }\n readSubBlocks() {\n let blockString = \"\", size = 0;\n do {\n size = this.data[this.pos++];\n for (let count = size; --count >= 0; blockString += String.fromCharCode(this.data[this.pos++])) {\n }\n } while (size !== 0);\n return blockString;\n }\n readSubBlocksBin() {\n let size = 0, len = 0;\n for (let offset = 0; (size = this.data[this.pos + offset]) !== 0; offset += size + 1) {\n len += size;\n }\n const blockData = new Uint8Array(len);\n for (let i = 0; (size = this.data[this.pos++]) !== 0;) {\n for (let count = size; --count >= 0; blockData[i++] = this.data[this.pos++]) {\n }\n }\n return blockData;\n }\n skipSubBlocks() {\n for (; this.data[this.pos] !== 0; this.pos += this.data[this.pos] + 1) {\n }\n this.pos++;\n }\n}\n", "import { InterlaceOffsets, InterlaceSteps } from \"./Constants.js\";\nimport { ByteStream } from \"./ByteStream.js\";\nfunction parseColorTable(byteStream, count) {\n const colors = [];\n for (let i = 0; i < count; i++) {\n colors.push({\n r: byteStream.data[byteStream.pos],\n g: byteStream.data[byteStream.pos + 1],\n b: byteStream.data[byteStream.pos + 2],\n });\n byteStream.pos += 3;\n }\n return colors;\n}\nasync function parseExtensionBlock(byteStream, gif, getFrameIndex, getTransparencyIndex) {\n switch (byteStream.nextByte()) {\n case 249: {\n const frame = gif.frames[getFrameIndex(false)];\n byteStream.pos++;\n const packedByte = byteStream.nextByte();\n frame.GCreserved = (packedByte & 0xe0) >>> 5;\n frame.disposalMethod = (packedByte & 0x1c) >>> 2;\n frame.userInputDelayFlag = (packedByte & 2) === 2;\n const transparencyFlag = (packedByte & 1) === 1;\n frame.delayTime = byteStream.nextTwoBytes() * 0xa;\n const transparencyIndex = byteStream.nextByte();\n if (transparencyFlag) {\n getTransparencyIndex(transparencyIndex);\n }\n byteStream.pos++;\n break;\n }\n case 255: {\n byteStream.pos++;\n const applicationExtension = {\n identifier: byteStream.getString(8),\n authenticationCode: byteStream.getString(3),\n data: byteStream.readSubBlocksBin(),\n };\n gif.applicationExtensions.push(applicationExtension);\n break;\n }\n case 254: {\n gif.comments.push([getFrameIndex(false), byteStream.readSubBlocks()]);\n break;\n }\n case 1: {\n if (gif.globalColorTable.length === 0) {\n throw new EvalError(\"plain text extension without global color table\");\n }\n byteStream.pos++;\n gif.frames[getFrameIndex(false)].plainTextData = {\n left: byteStream.nextTwoBytes(),\n top: byteStream.nextTwoBytes(),\n width: byteStream.nextTwoBytes(),\n height: byteStream.nextTwoBytes(),\n charSize: {\n width: byteStream.nextTwoBytes(),\n height: byteStream.nextTwoBytes(),\n },\n foregroundColor: byteStream.nextByte(),\n backgroundColor: byteStream.nextByte(),\n text: byteStream.readSubBlocks(),\n };\n break;\n }\n default:\n byteStream.skipSubBlocks();\n break;\n }\n}\nasync function parseImageBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback) {\n const frame = gif.frames[getFrameIndex(true)];\n frame.left = byteStream.nextTwoBytes();\n frame.top = byteStream.nextTwoBytes();\n frame.width = byteStream.nextTwoBytes();\n frame.height = byteStream.nextTwoBytes();\n const packedByte = byteStream.nextByte(), localColorTableFlag = (packedByte & 0x80) === 0x80, interlacedFlag = (packedByte & 0x40) === 0x40;\n frame.sortFlag = (packedByte & 0x20) === 0x20;\n frame.reserved = (packedByte & 0x18) >>> 3;\n const localColorCount = 1 << ((packedByte & 7) + 1);\n if (localColorTableFlag) {\n frame.localColorTable = parseColorTable(byteStream, localColorCount);\n }\n const getColor = (index) => {\n const { r, g, b } = (localColorTableFlag ? frame.localColorTable : gif.globalColorTable)[index];\n return { r, g, b, a: index === getTransparencyIndex(null) ? (avgAlpha ? ~~((r + g + b) / 3) : 0) : 255 };\n };\n const image = (() => {\n try {\n return new ImageData(frame.width, frame.height, { colorSpace: \"srgb\" });\n }\n catch (error) {\n if (error instanceof DOMException && error.name === \"IndexSizeError\") {\n return null;\n }\n throw error;\n }\n })();\n if (image == null) {\n throw new EvalError(\"GIF frame size is to large\");\n }\n const minCodeSize = byteStream.nextByte(), imageData = byteStream.readSubBlocksBin(), clearCode = 1 << minCodeSize;\n const readBits = (pos, len) => {\n const bytePos = pos >>> 3, bitPos = pos & 7;\n return (((imageData[bytePos] + (imageData[bytePos + 1] << 8) + (imageData[bytePos + 2] << 16)) &\n (((1 << len) - 1) << bitPos)) >>>\n bitPos);\n };\n if (interlacedFlag) {\n for (let code = 0, size = minCodeSize + 1, pos = 0, dic = [[0]], pass = 0; pass < 4; pass++) {\n if (InterlaceOffsets[pass] < frame.height) {\n for (let pixelPos = 0, lineIndex = 0;;) {\n const last = code;\n code = readBits(pos, size);\n pos += size + 1;\n if (code === clearCode) {\n size = minCodeSize + 1;\n dic.length = clearCode + 2;\n for (let i = 0; i < dic.length; i++) {\n dic[i] = i < clearCode ? [i] : [];\n }\n }\n else {\n if (code >= dic.length) {\n dic.push(dic[last].concat(dic[last][0]));\n }\n else if (last !== clearCode) {\n dic.push(dic[last].concat(dic[code][0]));\n }\n for (let i = 0; i < dic[code].length; i++) {\n const { r, g, b, a } = getColor(dic[code][i]);\n image.data.set([r, g, b, a], InterlaceOffsets[pass] * frame.width +\n InterlaceSteps[pass] * lineIndex +\n (pixelPos % (frame.width * 4)));\n pixelPos += 4;\n }\n if (dic.length === 1 << size && size < 0xc) {\n size++;\n }\n }\n if (pixelPos === frame.width * 4 * (lineIndex + 1)) {\n lineIndex++;\n if (InterlaceOffsets[pass] + InterlaceSteps[pass] * lineIndex >= frame.height) {\n break;\n }\n }\n }\n }\n progressCallback?.(byteStream.pos / (byteStream.data.length - 1), getFrameIndex(false) + 1, image, { x: frame.left, y: frame.top }, { width: gif.width, height: gif.height });\n }\n frame.image = image;\n frame.bitmap = await createImageBitmap(image);\n }\n else {\n for (let code = 0, size = minCodeSize + 1, pos = 0, dic = [[0]], pixelPos = -4;;) {\n const last = code;\n code = readBits(pos, size);\n pos += size;\n if (code === clearCode) {\n size = minCodeSize + 1;\n dic.length = clearCode + 2;\n for (let i = 0; i < dic.length; i++) {\n dic[i] = i < clearCode ? [i] : [];\n }\n }\n else {\n if (code === clearCode + 1) {\n break;\n }\n if (code >= dic.length) {\n dic.push(dic[last].concat(dic[last][0]));\n }\n else if (last !== clearCode) {\n dic.push(dic[last].concat(dic[code][0]));\n }\n for (let i = 0; i < dic[code].length; i++) {\n const { r, g, b, a } = getColor(dic[code][i]);\n image.data.set([r, g, b, a], (pixelPos += 4));\n }\n if (dic.length >= 1 << size && size < 0xc) {\n size++;\n }\n }\n }\n frame.image = image;\n frame.bitmap = await createImageBitmap(image);\n progressCallback?.((byteStream.pos + 1) / byteStream.data.length, getFrameIndex(false) + 1, frame.image, { x: frame.left, y: frame.top }, { width: gif.width, height: gif.height });\n }\n}\nasync function parseBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback) {\n switch (byteStream.nextByte()) {\n case 59:\n return true;\n case 44:\n await parseImageBlock(byteStream, gif, avgAlpha, getFrameIndex, getTransparencyIndex, progressCallback);\n break;\n case 33:\n await parseExtensionBlock(byteStream, gif, getFrameIndex, getTransparencyIndex);\n break;\n default:\n throw new EvalError(\"undefined block found\");\n }\n return false;\n}\nexport function getGIFLoopAmount(gif) {\n for (const extension of gif.applicationExtensions) {\n if (extension.identifier + extension.authenticationCode !== \"NETSCAPE2.0\") {\n continue;\n }\n return extension.data[1] + (extension.data[2] << 8);\n }\n return NaN;\n}\nexport async function decodeGIF(gifURL, progressCallback, avgAlpha) {\n if (!avgAlpha)\n avgAlpha = false;\n const res = await fetch(gifURL);\n if (!res.ok && res.status === 404) {\n throw new EvalError(\"file not found\");\n }\n const buffer = await res.arrayBuffer();\n const gif = {\n width: 0,\n height: 0,\n totalTime: 0,\n colorRes: 0,\n pixelAspectRatio: 0,\n frames: [],\n sortFlag: false,\n globalColorTable: [],\n backgroundImage: new ImageData(1, 1, { colorSpace: \"srgb\" }),\n comments: [],\n applicationExtensions: [],\n }, byteStream = new ByteStream(new Uint8ClampedArray(buffer));\n if (byteStream.getString(6) !== \"GIF89a\") {\n throw new Error(\"not a supported GIF file\");\n }\n gif.width = byteStream.nextTwoBytes();\n gif.height = byteStream.nextTwoBytes();\n const packedByte = byteStream.nextByte(), globalColorTableFlag = (packedByte & 0x80) === 0x80;\n gif.colorRes = (packedByte & 0x70) >>> 4;\n gif.sortFlag = (packedByte & 8) === 8;\n const globalColorCount = 1 << ((packedByte & 7) + 1), backgroundColorIndex = byteStream.nextByte();\n gif.pixelAspectRatio = byteStream.nextByte();\n if (gif.pixelAspectRatio !== 0) {\n gif.pixelAspectRatio = (gif.pixelAspectRatio + 0xf) / 0x40;\n }\n if (globalColorTableFlag) {\n gif.globalColorTable = parseColorTable(byteStream, globalColorCount);\n }\n const backgroundImage = (() => {\n try {\n return new ImageData(gif.width, gif.height, { colorSpace: \"srgb\" });\n }\n catch (error) {\n if (error instanceof DOMException && error.name === \"IndexSizeError\") {\n return null;\n }\n throw error;\n }\n })();\n if (backgroundImage == null) {\n throw new Error(\"GIF frame size is to large\");\n }\n const { r, g, b } = gif.globalColorTable[backgroundColorIndex];\n backgroundImage.data.set(globalColorTableFlag ? [r, g, b, 255] : [0, 0, 0, 0]);\n for (let i = 4; i < backgroundImage.data.length; i *= 2) {\n backgroundImage.data.copyWithin(i, 0, i);\n }\n gif.backgroundImage = backgroundImage;\n let frameIndex = -1, incrementFrameIndex = true, transparencyIndex = -1;\n const getframeIndex = (increment) => {\n if (increment) {\n incrementFrameIndex = true;\n }\n return frameIndex;\n };\n const getTransparencyIndex = (newValue) => {\n if (newValue != null) {\n transparencyIndex = newValue;\n }\n return transparencyIndex;\n };\n try {\n do {\n if (incrementFrameIndex) {\n gif.frames.push({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n disposalMethod: 0,\n image: new ImageData(1, 1, { colorSpace: \"srgb\" }),\n plainTextData: null,\n userInputDelayFlag: false,\n delayTime: 0,\n sortFlag: false,\n localColorTable: [],\n reserved: 0,\n GCreserved: 0,\n });\n frameIndex++;\n transparencyIndex = -1;\n incrementFrameIndex = false;\n }\n } while (!(await parseBlock(byteStream, gif, avgAlpha, getframeIndex, getTransparencyIndex, progressCallback)));\n gif.frames.length--;\n for (const frame of gif.frames) {\n if (frame.userInputDelayFlag && frame.delayTime === 0) {\n gif.totalTime = Infinity;\n break;\n }\n gif.totalTime += frame.delayTime;\n }\n return gif;\n }\n catch (error) {\n if (error instanceof EvalError) {\n throw new Error(`error while parsing frame ${frameIndex} \"${error.message}\"`);\n }\n throw error;\n }\n}\n", "import { errorPrefix, getLogger, getStyleFromHsl } from \"@tsparticles/engine\";\nimport { decodeGIF, getGIFLoopAmount } from \"./GifUtils/Utils.js\";\nconst currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d.]+%?\\))|currentcolor/gi;\nfunction replaceColorSvg(imageShape, color, opacity) {\n const { svgData } = imageShape;\n if (!svgData) {\n return \"\";\n }\n const colorStyle = getStyleFromHsl(color, opacity);\n if (svgData.includes(\"fill\")) {\n return svgData.replace(currentColorRegex, () => colorStyle);\n }\n const preFillIndex = svgData.indexOf(\">\");\n return `${svgData.substring(0, preFillIndex)} fill=\"${colorStyle}\"${svgData.substring(preFillIndex)}`;\n}\nexport async function loadImage(image) {\n return new Promise((resolve) => {\n image.loading = true;\n const img = new Image();\n image.element = img;\n img.addEventListener(\"load\", () => {\n image.loading = false;\n resolve();\n });\n img.addEventListener(\"error\", () => {\n image.element = undefined;\n image.error = true;\n image.loading = false;\n getLogger().error(`${errorPrefix} loading image: ${image.source}`);\n resolve();\n });\n img.src = image.source;\n });\n}\nexport async function loadGifImage(image) {\n if (image.type !== \"gif\") {\n await loadImage(image);\n return;\n }\n image.loading = true;\n try {\n image.gifData = await decodeGIF(image.source);\n image.gifLoopCount = getGIFLoopAmount(image.gifData) ?? 0;\n if (image.gifLoopCount === 0) {\n image.gifLoopCount = Infinity;\n }\n }\n catch {\n image.error = true;\n }\n image.loading = false;\n}\nexport async function downloadSvgImage(image) {\n if (image.type !== \"svg\") {\n await loadImage(image);\n return;\n }\n image.loading = true;\n const response = await fetch(image.source);\n if (!response.ok) {\n getLogger().error(`${errorPrefix} Image not found`);\n image.error = true;\n }\n else {\n image.svgData = await response.text();\n }\n image.loading = false;\n}\nexport function replaceImageColor(image, imageData, color, particle) {\n const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? 1), imageRes = {\n color,\n gif: imageData.gif,\n data: {\n ...image,\n svgData: svgColoredData,\n },\n loaded: false,\n ratio: imageData.width / imageData.height,\n replaceColor: imageData.replaceColor,\n source: imageData.src,\n };\n return new Promise((resolve) => {\n const svg = new Blob([svgColoredData], { type: \"image/svg+xml\" }), domUrl = URL || window.URL || window.webkitURL || window, url = domUrl.createObjectURL(svg), img = new Image();\n img.addEventListener(\"load\", () => {\n imageRes.loaded = true;\n imageRes.element = img;\n resolve(imageRes);\n domUrl.revokeObjectURL(url);\n });\n img.addEventListener(\"error\", async () => {\n domUrl.revokeObjectURL(url);\n const img2 = {\n ...image,\n error: false,\n loading: true,\n };\n await loadImage(img2);\n imageRes.loaded = true;\n imageRes.element = img2.element;\n resolve(imageRes);\n });\n img.src = url;\n });\n}\n", "import { errorPrefix } from \"@tsparticles/engine\";\nimport { replaceImageColor } from \"./Utils.js\";\nexport class ImageDrawer {\n constructor(engine) {\n this.loadImageShape = async (imageShape) => {\n if (!this._engine.loadImage) {\n throw new Error(`${errorPrefix} image shape not initialized`);\n }\n await this._engine.loadImage({\n gif: imageShape.gif,\n name: imageShape.name,\n replaceColor: imageShape.replaceColor ?? false,\n src: imageShape.src,\n });\n };\n this._engine = engine;\n }\n addImage(image) {\n if (!this._engine.images) {\n this._engine.images = [];\n }\n this._engine.images.push(image);\n }\n draw(data) {\n const { context, radius, particle, opacity, delta } = data, image = particle.image, element = image?.element;\n if (!image) {\n return;\n }\n context.globalAlpha = opacity;\n if (image.gif && image.gifData) {\n const offscreenCanvas = new OffscreenCanvas(image.gifData.width, image.gifData.height), offscreenContext = offscreenCanvas.getContext(\"2d\");\n if (!offscreenContext) {\n throw new Error(\"could not create offscreen canvas context\");\n }\n offscreenContext.imageSmoothingQuality = \"low\";\n offscreenContext.imageSmoothingEnabled = false;\n offscreenContext.clearRect(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n if (particle.gifLoopCount === undefined) {\n particle.gifLoopCount = image.gifLoopCount ?? 0;\n }\n let frameIndex = particle.gifFrame ?? 0;\n const pos = { x: -image.gifData.width * 0.5, y: -image.gifData.height * 0.5 }, frame = image.gifData.frames[frameIndex];\n if (particle.gifTime === undefined) {\n particle.gifTime = 0;\n }\n if (!frame.bitmap) {\n return;\n }\n context.scale(radius / image.gifData.width, radius / image.gifData.height);\n switch (frame.disposalMethod) {\n case 4:\n case 5:\n case 6:\n case 7:\n case 0:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n break;\n case 1:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n break;\n case 2:\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n if (image.gifData.globalColorTable.length === 0) {\n offscreenContext.putImageData(image.gifData.frames[0].image, pos.x + frame.left, pos.y + frame.top);\n }\n else {\n offscreenContext.putImageData(image.gifData.backgroundImage, pos.x, pos.y);\n }\n break;\n case 3:\n {\n const previousImageData = offscreenContext.getImageData(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);\n context.drawImage(offscreenCanvas, pos.x, pos.y);\n offscreenContext.clearRect(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n offscreenContext.putImageData(previousImageData, 0, 0);\n }\n break;\n }\n particle.gifTime += delta.value;\n if (particle.gifTime > frame.delayTime) {\n particle.gifTime -= frame.delayTime;\n if (++frameIndex >= image.gifData.frames.length) {\n if (--particle.gifLoopCount <= 0) {\n return;\n }\n frameIndex = 0;\n offscreenContext.clearRect(0, 0, offscreenCanvas.width, offscreenCanvas.height);\n }\n particle.gifFrame = frameIndex;\n }\n context.scale(image.gifData.width / radius, image.gifData.height / radius);\n }\n else if (element) {\n const ratio = image.ratio, pos = {\n x: -radius,\n y: -radius,\n }, diameter = radius * 2;\n context.drawImage(element, pos.x, pos.y, diameter, diameter / ratio);\n }\n context.globalAlpha = 1;\n }\n getSidesCount() {\n return 12;\n }\n async init(container) {\n const options = container.actualOptions;\n if (!options.preload || !this._engine.loadImage) {\n return;\n }\n for (const imageData of options.preload) {\n await this._engine.loadImage(imageData);\n }\n }\n loadShape(particle) {\n if (particle.shape !== \"image\" && particle.shape !== \"images\") {\n return;\n }\n if (!this._engine.images) {\n this._engine.images = [];\n }\n const imageData = particle.shapeData;\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 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 (async () => {\n let imageRes;\n if (image.svgData && color) {\n imageRes = await replaceImageColor(image, imageData, color, particle);\n }\n else {\n imageRes = {\n color,\n data: image,\n element: image.element,\n gif: image.gif,\n gifData: image.gifData,\n gifLoopCount: image.gifLoopCount,\n loaded: true,\n ratio: imageData.width && imageData.height ? imageData.width / imageData.height : image.ratio ?? 1,\n replaceColor: replaceColor,\n source: imageData.src,\n };\n }\n if (!imageRes.ratio) {\n imageRes.ratio = 1;\n }\n const fill = imageData.fill ?? particle.shapeFill, close = imageData.close ?? particle.shapeClose, imageShape = {\n image: imageRes,\n fill,\n close,\n };\n particle.image = imageShape.image;\n particle.shapeFill = imageShape.fill;\n particle.shapeClose = imageShape.close;\n })();\n }\n}\n", "export class Preload {\n constructor() {\n this.src = \"\";\n this.gif = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.gif !== undefined) {\n this.gif = data.gif;\n }\n if (data.height !== undefined) {\n this.height = data.height;\n }\n if (data.name !== undefined) {\n this.name = data.name;\n }\n if (data.replaceColor !== undefined) {\n this.replaceColor = data.replaceColor;\n }\n if (data.src !== undefined) {\n this.src = data.src;\n }\n if (data.width !== undefined) {\n this.width = data.width;\n }\n }\n}\n", "import { Preload } from \"./Options/Classes/Preload.js\";\nexport class ImagePreloaderPlugin {\n constructor(engine) {\n this.id = \"imagePreloader\";\n this._engine = engine;\n }\n getPlugin() {\n return {};\n }\n loadOptions(options, source) {\n if (!source || !source.preload) {\n return;\n }\n if (!options.preload) {\n options.preload = [];\n }\n const preloadOptions = options.preload;\n for (const item of source.preload) {\n const existing = preloadOptions.find((t) => t.name === item.name || t.src === item.src);\n if (existing) {\n existing.load(item);\n }\n else {\n const preload = new Preload();\n preload.load(item);\n preloadOptions.push(preload);\n }\n }\n }\n needsPlugin() {\n return true;\n }\n}\n", "import { downloadSvgImage, loadGifImage, loadImage } from \"./Utils.js\";\nimport { ImageDrawer } from \"./ImageDrawer.js\";\nimport { ImagePreloaderPlugin } from \"./ImagePreloader.js\";\nimport { errorPrefix } from \"@tsparticles/engine\";\nfunction addLoadImageToEngine(engine) {\n if (engine.loadImage) {\n return;\n }\n engine.loadImage = async (data) => {\n if (!data.name && !data.src) {\n throw new Error(`${errorPrefix} no image source provided`);\n }\n if (!engine.images) {\n engine.images = [];\n }\n if (engine.images.find((t) => t.name === data.name || t.source === data.src)) {\n return;\n }\n try {\n const image = {\n gif: data.gif ?? false,\n name: data.name ?? data.src,\n source: data.src,\n type: data.src.substring(data.src.length - 3),\n error: false,\n loading: true,\n replaceColor: data.replaceColor,\n ratio: data.width && data.height ? data.width / data.height : undefined,\n };\n engine.images.push(image);\n const imageFunc = data.gif ? loadGifImage : data.replaceColor ? downloadSvgImage : loadImage;\n await imageFunc(image);\n }\n catch {\n throw new Error(`${errorPrefix} ${data.name ?? data.src} not found`);\n }\n };\n}\nexport async function loadImageShape(engine, refresh = true) {\n addLoadImageToEngine(engine);\n const preloader = new ImagePreloaderPlugin(engine);\n await engine.addPlugin(preloader, refresh);\n await engine.addShape([\"image\", \"images\"], new ImageDrawer(engine), refresh);\n}\n", "import { ValueWithRandom } from \"@tsparticles/engine\";\nexport class LifeDelay extends ValueWithRandom {\n constructor() {\n super();\n this.sync = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n super.load(data);\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n", "import { ValueWithRandom } from \"@tsparticles/engine\";\nexport class LifeDuration extends ValueWithRandom {\n constructor() {\n super();\n this.sync = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n super.load(data);\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n", "import { LifeDelay } from \"./LifeDelay.js\";\nimport { LifeDuration } from \"./LifeDuration.js\";\nexport class Life {\n constructor() {\n this.count = 0;\n this.delay = new LifeDelay();\n this.duration = new LifeDuration();\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.count !== undefined) {\n this.count = data.count;\n }\n this.delay.load(data.delay);\n this.duration.load(data.duration);\n }\n}\n", "import { getRandom, getRangeValue, randomInRange, setRangeValue, } from \"@tsparticles/engine\";\nimport { Life } from \"./Options/Classes/Life.js\";\nexport class LifeUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const container = this.container, particlesOptions = particle.options, lifeOptions = particlesOptions.life;\n if (!lifeOptions) {\n return;\n }\n particle.life = {\n delay: container.retina.reduceFactor\n ? ((getRangeValue(lifeOptions.delay.value) * (lifeOptions.delay.sync ? 1 : getRandom())) /\n container.retina.reduceFactor) *\n 1000\n : 0,\n delayTime: 0,\n duration: container.retina.reduceFactor\n ? ((getRangeValue(lifeOptions.duration.value) * (lifeOptions.duration.sync ? 1 : getRandom())) /\n container.retina.reduceFactor) *\n 1000\n : 0,\n time: 0,\n count: lifeOptions.count,\n };\n if (particle.life.duration <= 0) {\n particle.life.duration = -1;\n }\n if (particle.life.count <= 0) {\n particle.life.count = -1;\n }\n if (particle.life) {\n particle.spawning = particle.life.delay > 0;\n }\n }\n isEnabled(particle) {\n return !particle.destroyed;\n }\n loadOptions(options, ...sources) {\n if (!options.life) {\n options.life = new Life();\n }\n for (const source of sources) {\n options.life.load(source?.life);\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle) || !particle.life) {\n return;\n }\n const life = particle.life;\n let justSpawned = false;\n if (particle.spawning) {\n life.delayTime += delta.value;\n if (life.delayTime >= particle.life.delay) {\n justSpawned = true;\n particle.spawning = false;\n life.delayTime = 0;\n life.time = 0;\n }\n else {\n return;\n }\n }\n if (life.duration === -1) {\n return;\n }\n if (particle.spawning) {\n return;\n }\n if (justSpawned) {\n life.time = 0;\n }\n else {\n life.time += delta.value;\n }\n if (life.time < life.duration) {\n return;\n }\n life.time = 0;\n if (particle.life.count > 0) {\n particle.life.count--;\n }\n if (particle.life.count === 0) {\n particle.destroy();\n return;\n }\n const canvasSize = this.container.canvas.size, widthRange = setRangeValue(0, canvasSize.width), heightRange = setRangeValue(0, canvasSize.width);\n particle.position.x = randomInRange(widthRange);\n particle.position.y = randomInRange(heightRange);\n particle.spawning = true;\n life.delayTime = 0;\n life.time = 0;\n particle.reset();\n const lifeOptions = particle.options.life;\n if (lifeOptions) {\n life.delay = getRangeValue(lifeOptions.delay.value) * 1000;\n life.duration = getRangeValue(lifeOptions.duration.value) * 1000;\n }\n }\n}\n", "import { LifeUpdater } from \"./LifeUpdater.js\";\nexport async function loadLifeUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"life\", (container) => new LifeUpdater(container), refresh);\n}\n", "export class LineDrawer {\n draw(data) {\n const { context, particle, radius } = data, shapeData = particle.shapeData;\n context.moveTo(-radius / 2, 0);\n context.lineTo(radius / 2, 0);\n context.lineCap = shapeData?.cap ?? \"butt\";\n }\n getSidesCount() {\n return 1;\n }\n}\n", "import { LineDrawer } from \"./LineDrawer.js\";\nexport async function loadLineShape(engine, refresh = true) {\n await engine.addShape(\"line\", new LineDrawer(), refresh);\n}\n", "import { isSsr } from \"@tsparticles/engine\";\nexport class ParallaxMover {\n init() {\n }\n isEnabled(particle) {\n return (!isSsr() &&\n !particle.destroyed &&\n particle.container.actualOptions.interactivity.events.onHover.parallax.enable);\n }\n move(particle) {\n const container = particle.container, options = container.actualOptions, parallaxOptions = options.interactivity.events.onHover.parallax;\n if (isSsr() || !parallaxOptions.enable) {\n return;\n }\n const parallaxForce = parallaxOptions.force, mousePos = container.interactivity.mouse.position;\n if (!mousePos) {\n return;\n }\n const canvasSize = container.canvas.size, canvasCenter = {\n x: canvasSize.width * 0.5,\n y: canvasSize.height * 0.5,\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 await engine.addMover(\"parallax\", () => new ParallaxMover(), refresh);\n}\n", "import { ParticlesInteractorBase, getDistances, getRangeValue, } from \"@tsparticles/engine\";\nexport class Attractor extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n }\n async interact(p1) {\n const container = this.container;\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 * 1000), ay = dy / (rotate.y * 1000), p1Factor = p2.size.value / p1.size.value, p2Factor = 1 / p1Factor;\n p1.velocity.x -= ax * p1Factor;\n p1.velocity.y -= ay * p1Factor;\n p2.velocity.x += ax * p2Factor;\n p2.velocity.y += ay * p2Factor;\n }\n }\n isEnabled(particle) {\n return particle.options.move.attract.enable;\n }\n reset() {\n }\n}\n", "import { Attractor } from \"./Attractor.js\";\nexport async function loadParticlesAttractInteraction(engine, refresh = true) {\n await engine.addInteractor(\"particlesAttract\", (container) => new Attractor(container), refresh);\n}\n", "import { clamp } from \"@tsparticles/engine\";\nfunction updateAbsorb(p1, r1, p2, r2, delta, pixelRatio) {\n const factor = clamp((p1.options.collisions.absorb.speed * delta.factor) / 10, 0, r2);\n p1.size.value += factor / 2;\n p2.size.value -= factor;\n if (r2 <= pixelRatio) {\n p2.size.value = 0;\n p2.destroy();\n }\n}\nexport function absorb(p1, p2, delta, pixelRatio) {\n const r1 = p1.getRadius(), r2 = p2.getRadius();\n if (r1 === undefined && r2 !== undefined) {\n p1.destroy();\n }\n else if (r1 !== undefined && r2 === undefined) {\n p2.destroy();\n }\n else if (r1 !== undefined && r2 !== undefined) {\n if (r1 >= r2) {\n updateAbsorb(p1, r1, p2, r2, delta, pixelRatio);\n }\n else {\n updateAbsorb(p2, r2, p1, r1, delta, pixelRatio);\n }\n }\n}\n", "import { circleBounce, circleBounceDataFromParticle, getRangeValue } from \"@tsparticles/engine\";\nconst fixBounceSpeed = (p) => {\n if (p.collisionMaxSpeed === undefined) {\n p.collisionMaxSpeed = getRangeValue(p.options.collisions.maxSpeed);\n }\n if (p.velocity.length > p.collisionMaxSpeed) {\n p.velocity.length = p.collisionMaxSpeed;\n }\n};\nexport function bounce(p1, p2) {\n circleBounce(circleBounceDataFromParticle(p1), circleBounceDataFromParticle(p2));\n fixBounceSpeed(p1);\n fixBounceSpeed(p2);\n}\n", "import { bounce } from \"./Bounce.js\";\nexport function destroy(p1, p2) {\n if (!p1.unbreakable && !p2.unbreakable) {\n bounce(p1, p2);\n }\n if (p1.getRadius() === undefined && p2.getRadius() !== undefined) {\n p1.destroy();\n }\n else if (p1.getRadius() !== undefined && p2.getRadius() === undefined) {\n p2.destroy();\n }\n else if (p1.getRadius() !== undefined && p2.getRadius() !== undefined) {\n const deleteP = p1.getRadius() >= p2.getRadius() ? p2 : p1;\n deleteP.destroy();\n }\n}\n", "import { absorb } from \"./Absorb.js\";\nimport { bounce } from \"./Bounce.js\";\nimport { destroy } from \"./Destroy.js\";\nexport function resolveCollision(p1, p2, delta, pixelRatio) {\n switch (p1.options.collisions.mode) {\n case \"absorb\": {\n absorb(p1, p2, delta, pixelRatio);\n break;\n }\n case \"bounce\": {\n bounce(p1, p2);\n break;\n }\n case \"destroy\": {\n destroy(p1, p2);\n break;\n }\n }\n}\n", "import { ParticlesInteractorBase, getDistance } from \"@tsparticles/engine\";\nimport { resolveCollision } from \"./ResolveCollision.js\";\nexport class Collider extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {\n }\n init() {\n }\n async interact(p1, delta) {\n if (p1.destroyed || p1.spawning) {\n return;\n }\n const container = this.container, pos1 = p1.getPosition(), radius1 = p1.getRadius(), query = container.particles.quadTree.queryCircle(pos1, radius1 * 2);\n for (const p2 of query) {\n if (p1 === p2 ||\n !p2.options.collisions.enable ||\n p1.options.collisions.mode !== p2.options.collisions.mode ||\n p2.destroyed ||\n p2.spawning) {\n continue;\n }\n const pos2 = p2.getPosition(), radius2 = p2.getRadius();\n if (Math.abs(Math.round(pos1.z) - Math.round(pos2.z)) > radius1 + radius2) {\n continue;\n }\n const dist = getDistance(pos1, pos2), distP = radius1 + radius2;\n if (dist > distP) {\n continue;\n }\n resolveCollision(p1, p2, delta, container.retina.pixelRatio);\n }\n }\n isEnabled(particle) {\n return particle.options.collisions.enable;\n }\n reset() {\n }\n}\n", "import { Collider } from \"./Collider.js\";\nexport async function loadParticlesCollisionsInteraction(engine, refresh = true) {\n await engine.addInteractor(\"particlesCollisions\", (container) => new Collider(container), refresh);\n}\n", "import { Circle, Rectangle } from \"@tsparticles/engine\";\nexport class CircleWarp extends Circle {\n constructor(x, y, radius, canvasSize) {\n super(x, y, radius);\n this.canvasSize = canvasSize;\n this.canvasSize = { ...canvasSize };\n }\n contains(point) {\n const { width, height } = this.canvasSize;\n const { x, y } = point;\n return (super.contains(point) ||\n super.contains({ x: x - width, y }) ||\n super.contains({ x: x - width, y: y - height }) ||\n super.contains({ x, y: y - height }));\n }\n intersects(range) {\n if (super.intersects(range)) {\n return true;\n }\n const rect = range, circle = range, newPos = {\n x: range.position.x - this.canvasSize.width,\n y: range.position.y - this.canvasSize.height,\n };\n if (circle.radius !== undefined) {\n const biggerCircle = new Circle(newPos.x, newPos.y, circle.radius * 2);\n return super.intersects(biggerCircle);\n }\n else if (rect.size !== undefined) {\n const rectSW = new Rectangle(newPos.x, newPos.y, rect.size.width * 2, rect.size.height * 2);\n return super.intersects(rectSW);\n }\n return false;\n }\n}\n", "import { OptionsColor } from \"@tsparticles/engine\";\nexport class LinksShadow {\n constructor() {\n this.blur = 5;\n this.color = new OptionsColor();\n this.color.value = \"#000\";\n this.enable = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.blur !== undefined) {\n this.blur = data.blur;\n }\n this.color = OptionsColor.create(this.color, data.color);\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n }\n}\n", "import { OptionsColor } from \"@tsparticles/engine\";\nexport class LinksTriangle {\n constructor() {\n this.enable = false;\n this.frequency = 1;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.color !== undefined) {\n this.color = OptionsColor.create(this.color, data.color);\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.frequency !== undefined) {\n this.frequency = data.frequency;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n", "import { OptionsColor } from \"@tsparticles/engine\";\nimport { LinksShadow } from \"./LinksShadow.js\";\nimport { LinksTriangle } from \"./LinksTriangle.js\";\nexport class Links {\n constructor() {\n this.blink = false;\n this.color = new OptionsColor();\n this.color.value = \"#fff\";\n this.consent = false;\n this.distance = 100;\n this.enable = false;\n this.frequency = 1;\n this.opacity = 1;\n this.shadow = new LinksShadow();\n this.triangles = new LinksTriangle();\n this.width = 1;\n this.warp = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.id !== undefined) {\n this.id = data.id;\n }\n if (data.blink !== undefined) {\n this.blink = data.blink;\n }\n this.color = OptionsColor.create(this.color, data.color);\n if (data.consent !== undefined) {\n this.consent = data.consent;\n }\n if (data.distance !== undefined) {\n this.distance = data.distance;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.frequency !== undefined) {\n this.frequency = data.frequency;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n this.shadow.load(data.shadow);\n this.triangles.load(data.triangles);\n if (data.width !== undefined) {\n this.width = data.width;\n }\n if (data.warp !== undefined) {\n this.warp = data.warp;\n }\n }\n}\n", "import { Circle, ParticlesInteractorBase, getDistances, getLinkRandomColor, } from \"@tsparticles/engine\";\nimport { CircleWarp } from \"./CircleWarp.js\";\nimport { Links } from \"./Options/Classes/Links.js\";\nfunction getLinkDistance(pos1, pos2, optDistance, canvasSize, warp) {\n const { dx, dy, distance } = getDistances(pos1, pos2);\n if (!warp || distance <= optDistance) {\n return distance;\n }\n const absDiffs = {\n x: Math.abs(dx),\n y: Math.abs(dy),\n }, warpDistances = {\n x: Math.min(absDiffs.x, canvasSize.width - absDiffs.x),\n y: Math.min(absDiffs.y, canvasSize.height - absDiffs.y),\n };\n return Math.sqrt(warpDistances.x ** 2 + warpDistances.y ** 2);\n}\nexport class Linker extends ParticlesInteractorBase {\n constructor(container) {\n super(container);\n this._setColor = (p1) => {\n if (!p1.options.links) {\n return;\n }\n const container = this.linkContainer, linksOptions = p1.options.links;\n let linkColor = linksOptions.id === undefined\n ? container.particles.linksColor\n : container.particles.linksColors.get(linksOptions.id);\n if (linkColor) {\n return;\n }\n const optColor = linksOptions.color;\n linkColor = getLinkRandomColor(optColor, linksOptions.blink, linksOptions.consent);\n if (linksOptions.id === undefined) {\n container.particles.linksColor = linkColor;\n }\n else {\n container.particles.linksColors.set(linksOptions.id, linkColor);\n }\n };\n this.linkContainer = container;\n }\n clear() {\n }\n init() {\n this.linkContainer.particles.linksColor = undefined;\n this.linkContainer.particles.linksColors = new Map();\n }\n async interact(p1) {\n if (!p1.options.links) {\n return;\n }\n p1.links = [];\n const pos1 = p1.getPosition(), container = this.container, canvasSize = container.canvas.size;\n if (pos1.x < 0 || pos1.y < 0 || pos1.x > canvasSize.width || pos1.y > canvasSize.height) {\n return;\n }\n const linkOpt1 = p1.options.links, optOpacity = linkOpt1.opacity, optDistance = p1.retina.linksDistance ?? 0, warp = linkOpt1.warp, range = warp\n ? new CircleWarp(pos1.x, pos1.y, optDistance, canvasSize)\n : new Circle(pos1.x, pos1.y, optDistance), query = container.particles.quadTree.query(range);\n for (const p2 of query) {\n const linkOpt2 = p2.options.links;\n if (p1 === p2 ||\n !linkOpt2?.enable ||\n linkOpt1.id !== linkOpt2.id ||\n p2.spawning ||\n p2.destroyed ||\n !p2.links ||\n p1.links.some((t) => t.destination === p2) ||\n p2.links.some((t) => t.destination === p1)) {\n continue;\n }\n const pos2 = p2.getPosition();\n if (pos2.x < 0 || pos2.y < 0 || pos2.x > canvasSize.width || pos2.y > canvasSize.height) {\n continue;\n }\n const distance = getLinkDistance(pos1, pos2, optDistance, canvasSize, warp && linkOpt2.warp);\n if (distance > optDistance) {\n continue;\n }\n const opacityLine = (1 - distance / optDistance) * optOpacity;\n this._setColor(p1);\n p1.links.push({\n destination: p2,\n opacity: opacityLine,\n });\n }\n }\n isEnabled(particle) {\n return !!particle.options.links?.enable;\n }\n loadParticlesOptions(options, ...sources) {\n if (!options.links) {\n options.links = new Links();\n }\n for (const source of sources) {\n options.links.load(source?.links);\n }\n }\n reset() {\n }\n}\n", "import { Linker } from \"./Linker.js\";\nexport async function loadLinksInteraction(engine, refresh = true) {\n await engine.addInteractor(\"particlesLinks\", (container) => new Linker(container), 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, maxDistance, context, canvasSize, width, backgroundMask, colorLine, opacity, links } = params;\n if (getDistance(begin, end) <= maxDistance) {\n drawLine(context, begin, end);\n drawn = true;\n }\n else if (links.warp) {\n let pi1;\n let pi2;\n const endNE = {\n x: end.x - canvasSize.width,\n y: end.y,\n };\n const d1 = getDistances(begin, endNE);\n if (d1.distance <= maxDistance) {\n const yi = begin.y - (d1.dy / d1.dx) * begin.x;\n pi1 = { x: 0, y: yi };\n pi2 = { x: canvasSize.width, y: yi };\n }\n else {\n const endSW = {\n x: end.x,\n y: end.y - canvasSize.height,\n };\n const d2 = getDistances(begin, endSW);\n if (d2.distance <= maxDistance) {\n const yi = begin.y - (d2.dy / d2.dx) * begin.x;\n const xi = -yi / (d2.dy / d2.dx);\n pi1 = { x: xi, y: 0 };\n pi2 = { x: xi, y: canvasSize.height };\n }\n else {\n const endSE = {\n x: end.x - canvasSize.width,\n y: end.y - canvasSize.height,\n };\n const d3 = getDistances(begin, endSE);\n if (d3.distance <= maxDistance) {\n const yi = begin.y - (d3.dy / d3.dx) * begin.x;\n const xi = -yi / (d3.dy / d3.dx);\n pi1 = { x: xi, y: yi };\n pi2 = { x: pi1.x + canvasSize.width, y: pi1.y + canvasSize.height };\n }\n }\n }\n if (pi1 && pi2) {\n drawLine(context, begin, pi1);\n drawLine(context, end, pi2);\n drawn = true;\n }\n }\n if (!drawn) {\n return;\n }\n context.lineWidth = width;\n if (backgroundMask.enable) {\n context.globalCompositeOperation = backgroundMask.composite;\n }\n context.strokeStyle = getStyleFromRgb(colorLine, opacity);\n const { shadow } = links;\n if (shadow.enable) {\n const shadowColor = rangeColorToRgb(shadow.color);\n if (shadowColor) {\n context.shadowBlur = shadow.blur;\n context.shadowColor = getStyleFromRgb(shadowColor);\n }\n }\n context.stroke();\n}\nexport function drawLinkTriangle(params) {\n const { context, pos1, pos2, pos3, backgroundMask, colorTriangle, opacityTriangle } = params;\n drawTriangle(context, pos1, pos2, pos3);\n if (backgroundMask.enable) {\n context.globalCompositeOperation = backgroundMask.composite;\n }\n context.fillStyle = getStyleFromRgb(colorTriangle, opacityTriangle);\n context.fill();\n}\nexport function getLinkKey(ids) {\n ids.sort((a, b) => a - b);\n return ids.join(\"_\");\n}\nexport function setLinkFrequency(particles, dictionary) {\n const key = getLinkKey(particles.map((t) => t.id));\n let res = dictionary.get(key);\n if (res === undefined) {\n res = getRandom();\n dictionary.set(key, res);\n }\n return res;\n}\n", "import { getDistance, getLinkColor, getRandom, getRangeValue, rangeColorToRgb, } from \"@tsparticles/engine\";\nimport { drawLinkLine, drawLinkTriangle, setLinkFrequency } from \"./Utils.js\";\nexport class LinkInstance {\n constructor(container) {\n this.container = container;\n this._drawLinkLine = (p1, link) => {\n const p1LinksOptions = p1.options.links;\n if (!p1LinksOptions?.enable) {\n return;\n }\n const container = this.container, options = container.actualOptions, p2 = link.destination, pos1 = p1.getPosition(), pos2 = p2.getPosition();\n let opacity = link.opacity;\n container.canvas.draw((ctx) => {\n let colorLine;\n const twinkle = p1.options.twinkle?.lines;\n if (twinkle?.enable) {\n const twinkleFreq = twinkle.frequency, twinkleRgb = rangeColorToRgb(twinkle.color), twinkling = getRandom() < twinkleFreq;\n if (twinkling && twinkleRgb) {\n colorLine = twinkleRgb;\n opacity = getRangeValue(twinkle.opacity);\n }\n }\n if (!colorLine) {\n const linkColor = p1LinksOptions.id !== undefined\n ? container.particles.linksColors.get(p1LinksOptions.id)\n : container.particles.linksColor;\n colorLine = getLinkColor(p1, p2, linkColor);\n }\n if (!colorLine) {\n return;\n }\n const width = p1.retina.linksWidth ?? 0, maxDistance = p1.retina.linksDistance ?? 0, { backgroundMask } = options;\n drawLinkLine({\n context: ctx,\n width,\n begin: pos1,\n end: pos2,\n maxDistance,\n canvasSize: container.canvas.size,\n links: p1LinksOptions,\n backgroundMask: backgroundMask,\n colorLine,\n opacity,\n });\n });\n };\n this._drawLinkTriangle = (p1, link1, link2) => {\n const linksOptions = p1.options.links;\n if (!linksOptions?.enable) {\n return;\n }\n const triangleOptions = linksOptions.triangles;\n if (!triangleOptions.enable) {\n return;\n }\n const container = this.container, options = container.actualOptions, p2 = link1.destination, p3 = link2.destination, opacityTriangle = triangleOptions.opacity ?? (link1.opacity + link2.opacity) / 2;\n if (opacityTriangle <= 0) {\n return;\n }\n container.canvas.draw((ctx) => {\n const pos1 = p1.getPosition(), pos2 = p2.getPosition(), pos3 = p3.getPosition(), linksDistance = p1.retina.linksDistance ?? 0;\n if (getDistance(pos1, pos2) > linksDistance ||\n getDistance(pos3, pos2) > linksDistance ||\n getDistance(pos3, pos1) > linksDistance) {\n return;\n }\n let colorTriangle = rangeColorToRgb(triangleOptions.color);\n if (!colorTriangle) {\n const linkColor = linksOptions.id !== undefined\n ? container.particles.linksColors.get(linksOptions.id)\n : container.particles.linksColor;\n colorTriangle = getLinkColor(p1, p2, linkColor);\n }\n if (!colorTriangle) {\n return;\n }\n drawLinkTriangle({\n context: ctx,\n pos1,\n pos2,\n pos3,\n backgroundMask: options.backgroundMask,\n colorTriangle,\n opacityTriangle,\n });\n });\n };\n this._drawTriangles = (options, p1, link, p1Links) => {\n const p2 = link.destination;\n if (!(options.links?.triangles.enable && p2.options.links?.triangles.enable)) {\n return;\n }\n const vertices = p2.links?.filter((t) => {\n const linkFreq = this._getLinkFrequency(p2, t.destination);\n return (p2.options.links &&\n linkFreq <= p2.options.links.frequency &&\n p1Links.findIndex((l) => l.destination === t.destination) >= 0);\n });\n if (!vertices?.length) {\n return;\n }\n for (const vertex of vertices) {\n const p3 = vertex.destination, triangleFreq = this._getTriangleFrequency(p1, p2, p3);\n if (triangleFreq > options.links.triangles.frequency) {\n continue;\n }\n this._drawLinkTriangle(p1, link, vertex);\n }\n };\n this._getLinkFrequency = (p1, p2) => {\n return setLinkFrequency([p1, p2], this._freqs.links);\n };\n this._getTriangleFrequency = (p1, p2, p3) => {\n return setLinkFrequency([p1, p2, p3], this._freqs.triangles);\n };\n this._freqs = {\n links: new Map(),\n triangles: new Map(),\n };\n }\n drawParticle(context, particle) {\n const { links, options } = particle;\n if (!links || links.length <= 0) {\n return;\n }\n const p1Links = links.filter((l) => options.links && this._getLinkFrequency(particle, l.destination) <= options.links.frequency);\n for (const link of p1Links) {\n this._drawTriangles(options, particle, link, p1Links);\n if (link.opacity > 0 && (particle.retina.linksWidth ?? 0) > 0) {\n this._drawLinkLine(particle, link);\n }\n }\n }\n async init() {\n this._freqs.links = new Map();\n this._freqs.triangles = new Map();\n }\n particleCreated(particle) {\n particle.links = [];\n if (!particle.options.links) {\n return;\n }\n const ratio = this.container.retina.pixelRatio, { retina } = particle, { distance, width } = particle.options.links;\n retina.linksDistance = distance * ratio;\n retina.linksWidth = width * ratio;\n }\n particleDestroyed(particle) {\n particle.links = [];\n }\n}\n", "import { LinkInstance } from \"./LinkInstance.js\";\nclass LinksPlugin {\n constructor() {\n this.id = \"links\";\n }\n getPlugin(container) {\n return new LinkInstance(container);\n }\n loadOptions() {\n }\n needsPlugin() {\n return true;\n }\n}\nexport async function loadLinksPlugin(engine, refresh = true) {\n const plugin = new LinksPlugin();\n await engine.addPlugin(plugin, refresh);\n}\n", "import { loadLinksInteraction } from \"./interaction.js\";\nimport { loadLinksPlugin } from \"./plugin.js\";\nexport async function loadParticlesLinksInteraction(engine, refresh = true) {\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 { getRangeValue, } from \"@tsparticles/engine\";\nexport class PolygonDrawerBase {\n draw(data) {\n const { context, particle, radius } = data, start = this.getCenter(particle, radius), side = this.getSidesData(particle, radius), sideCount = side.count.numerator * side.count.denominator, decimalSides = side.count.numerator / side.count.denominator, interiorAngleDegrees = (180 * (decimalSides - 2)) / decimalSides, interiorAngle = Math.PI - (Math.PI * interiorAngleDegrees) / 180;\n if (!context) {\n return;\n }\n context.beginPath();\n context.translate(start.x, start.y);\n context.moveTo(0, 0);\n for (let i = 0; i < sideCount; i++) {\n context.lineTo(side.length, 0);\n context.translate(side.length, 0);\n context.rotate(interiorAngle);\n }\n }\n getSidesCount(particle) {\n const polygon = particle.shapeData;\n return Math.round(getRangeValue(polygon?.sides ?? 5));\n }\n}\n", "import { PolygonDrawerBase } from \"./PolygonDrawerBase.js\";\nexport class PolygonDrawer extends PolygonDrawerBase {\n getCenter(particle, radius) {\n return {\n x: -radius / (particle.sides / 3.5),\n y: -radius / (2.66 / 3.5),\n };\n }\n getSidesData(particle, radius) {\n const sides = particle.sides;\n return {\n count: {\n denominator: 1,\n numerator: sides,\n },\n length: (radius * 2.66) / (sides / 3),\n };\n }\n}\n", "import { PolygonDrawerBase } from \"./PolygonDrawerBase.js\";\nexport class TriangleDrawer extends PolygonDrawerBase {\n getCenter(particle, radius) {\n return {\n x: -radius,\n y: radius / 1.66,\n };\n }\n getSidesCount() {\n return 3;\n }\n getSidesData(particle, radius) {\n return {\n count: {\n denominator: 2,\n numerator: 3,\n },\n length: radius * 2,\n };\n }\n}\n", "import { PolygonDrawer } from \"./PolygonDrawer.js\";\nimport { TriangleDrawer } from \"./TriangleDrawer.js\";\nexport async function loadGenericPolygonShape(engine, refresh = true) {\n await engine.addShape(\"polygon\", new PolygonDrawer(), refresh);\n}\nexport async function loadTriangleShape(engine, refresh = true) {\n await engine.addShape(\"triangle\", new TriangleDrawer(), refresh);\n}\nexport async function loadPolygonShape(engine, refresh = true) {\n await loadGenericPolygonShape(engine, refresh);\n await loadTriangleShape(engine, refresh);\n}\n", "import { setRangeValue } from \"@tsparticles/engine\";\nexport class RotateAnimation {\n constructor() {\n this.enable = false;\n this.speed = 0;\n this.decay = 0;\n this.sync = false;\n }\n load(data) {\n if (!data) {\n return;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.speed !== undefined) {\n this.speed = setRangeValue(data.speed);\n }\n if (data.decay !== undefined) {\n this.decay = setRangeValue(data.decay);\n }\n if (data.sync !== undefined) {\n this.sync = data.sync;\n }\n }\n}\n", "import { ValueWithRandom, } from \"@tsparticles/engine\";\nimport { RotateAnimation } from \"./RotateAnimation.js\";\nexport class Rotate extends ValueWithRandom {\n constructor() {\n super();\n this.animation = new RotateAnimation();\n this.direction = \"clockwise\";\n this.path = false;\n this.value = 0;\n }\n load(data) {\n if (!data) {\n return;\n }\n super.load(data);\n if (data.direction !== undefined) {\n this.direction = data.direction;\n }\n this.animation.load(data.animation);\n if (data.path !== undefined) {\n this.path = data.path;\n }\n }\n}\n", "import { getRandom, getRangeValue, } from \"@tsparticles/engine\";\nimport { Rotate } from \"./Options/Classes/Rotate.js\";\nfunction updateRotate(particle, delta) {\n const rotate = particle.rotate, rotateOptions = particle.options.rotate;\n if (!rotate || !rotateOptions) {\n return;\n }\n const rotateAnimation = rotateOptions.animation, speed = (rotate.velocity ?? 0) * delta.factor, max = 2 * Math.PI, decay = rotate.decay ?? 1;\n if (!rotateAnimation.enable) {\n return;\n }\n switch (rotate.status) {\n case \"increasing\":\n rotate.value += speed;\n if (rotate.value > max) {\n rotate.value -= max;\n }\n break;\n case \"decreasing\":\n default:\n rotate.value -= speed;\n if (rotate.value < 0) {\n rotate.value += max;\n }\n break;\n }\n if (rotate.velocity && decay !== 1) {\n rotate.velocity *= decay;\n }\n}\nexport class RotateUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const rotateOptions = particle.options.rotate;\n if (!rotateOptions) {\n return;\n }\n particle.rotate = {\n enable: rotateOptions.animation.enable,\n value: (getRangeValue(rotateOptions.value) * Math.PI) / 180,\n };\n particle.pathRotation = rotateOptions.path;\n let rotateDirection = rotateOptions.direction;\n if (rotateDirection === \"random\") {\n const index = Math.floor(getRandom() * 2);\n rotateDirection = index > 0 ? \"counter-clockwise\" : \"clockwise\";\n }\n switch (rotateDirection) {\n case \"counter-clockwise\":\n case \"counterClockwise\":\n particle.rotate.status = \"decreasing\";\n break;\n case \"clockwise\":\n particle.rotate.status = \"increasing\";\n break;\n }\n const rotateAnimation = rotateOptions.animation;\n if (rotateAnimation.enable) {\n particle.rotate.decay = 1 - getRangeValue(rotateAnimation.decay);\n particle.rotate.velocity =\n (getRangeValue(rotateAnimation.speed) / 360) * this.container.retina.reduceFactor;\n if (!rotateAnimation.sync) {\n particle.rotate.velocity *= getRandom();\n }\n }\n particle.rotation = particle.rotate.value;\n }\n isEnabled(particle) {\n const rotate = particle.options.rotate;\n if (!rotate) {\n return false;\n }\n return !particle.destroyed && !particle.spawning && rotate.animation.enable && !rotate.path;\n }\n loadOptions(options, ...sources) {\n if (!options.rotate) {\n options.rotate = new Rotate();\n }\n for (const source of sources) {\n options.rotate.load(source?.rotate);\n }\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateRotate(particle, delta);\n particle.rotation = particle.rotate?.value ?? 0;\n }\n}\n", "import { RotateUpdater } from \"./RotateUpdater.js\";\nexport async function loadRotateUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"rotate\", (container) => new RotateUpdater(container), refresh);\n}\n", "const fixFactor = Math.sqrt(2);\nexport class SquareDrawer {\n draw(data) {\n const { context, radius } = data, fixedRadius = radius / fixFactor, fixedDiameter = fixedRadius * 2;\n context.rect(-fixedRadius, -fixedRadius, fixedDiameter, fixedDiameter);\n }\n getSidesCount() {\n return 4;\n }\n}\n", "import { SquareDrawer } from \"./SquareDrawer.js\";\nexport async function loadSquareShape(engine, refresh = true) {\n await engine.addShape([\"edge\", \"square\"], new SquareDrawer(), refresh);\n}\n", "import { getRangeValue, } from \"@tsparticles/engine\";\nexport class StarDrawer {\n draw(data) {\n const { context, particle, radius } = data, sides = particle.sides, inset = particle.starInset ?? 2;\n context.moveTo(0, 0 - radius);\n for (let i = 0; i < sides; i++) {\n context.rotate(Math.PI / sides);\n context.lineTo(0, 0 - radius * inset);\n context.rotate(Math.PI / sides);\n context.lineTo(0, 0 - radius);\n }\n }\n getSidesCount(particle) {\n const star = particle.shapeData;\n return Math.round(getRangeValue(star?.sides ?? 5));\n }\n particleInit(container, particle) {\n const star = particle.shapeData;\n particle.starInset = getRangeValue(star?.inset ?? 2);\n }\n}\n", "import { StarDrawer } from \"./StarDrawer.js\";\nexport async function loadStarShape(engine, refresh = true) {\n await engine.addShape(\"star\", new StarDrawer(), refresh);\n}\n", "import { randomInRange, } from \"@tsparticles/engine\";\nfunction updateColorValue(delta, colorValue, valueAnimation, max, decrease) {\n if (!colorValue ||\n !valueAnimation.enable ||\n ((colorValue.maxLoops ?? 0) > 0 && (colorValue.loops ?? 0) > (colorValue.maxLoops ?? 0))) {\n return;\n }\n if (!colorValue.time) {\n colorValue.time = 0;\n }\n if ((colorValue.delayTime ?? 0) > 0 && colorValue.time < (colorValue.delayTime ?? 0)) {\n colorValue.time += delta.value;\n }\n if ((colorValue.delayTime ?? 0) > 0 && colorValue.time < (colorValue.delayTime ?? 0)) {\n return;\n }\n const offset = randomInRange(valueAnimation.offset), velocity = (colorValue.velocity ?? 0) * delta.factor + offset * 3.6, decay = colorValue.decay ?? 1;\n if (!decrease || colorValue.status === \"increasing\") {\n colorValue.value += velocity;\n if (colorValue.value > max) {\n if (!colorValue.loops) {\n colorValue.loops = 0;\n }\n colorValue.loops++;\n if (decrease) {\n colorValue.status = \"decreasing\";\n colorValue.value -= colorValue.value % max;\n }\n }\n }\n else {\n colorValue.value -= velocity;\n if (colorValue.value < 0) {\n if (!colorValue.loops) {\n colorValue.loops = 0;\n }\n colorValue.loops++;\n colorValue.status = \"increasing\";\n colorValue.value += colorValue.value;\n }\n }\n if (colorValue.velocity && decay !== 1) {\n colorValue.velocity *= decay;\n }\n if (colorValue.value > max) {\n colorValue.value %= max;\n }\n}\nexport function updateStrokeColor(particle, delta) {\n if (!particle.strokeColor || !particle.strokeAnimation) {\n return;\n }\n const { h, s, l } = particle.strokeColor, { h: hAnimation, s: sAnimation, l: lAnimation } = particle.strokeAnimation;\n if (h) {\n updateColorValue(delta, h, hAnimation, 360, false);\n }\n if (s) {\n updateColorValue(delta, s, sAnimation, 100, true);\n }\n if (l) {\n updateColorValue(delta, l, lAnimation, 100, true);\n }\n}\n", "import { getHslAnimationFromHsl, getRangeValue, itemFromSingleOrMultiple, rangeColorToHsl, } from \"@tsparticles/engine\";\nimport { updateStrokeColor } from \"./Utils.js\";\nexport class StrokeColorUpdater {\n constructor(container) {\n this.container = container;\n }\n init(particle) {\n const container = this.container, options = particle.options;\n const stroke = itemFromSingleOrMultiple(options.stroke, particle.id, options.reduceDuplicates);\n particle.strokeWidth = getRangeValue(stroke.width) * container.retina.pixelRatio;\n particle.strokeOpacity = getRangeValue(stroke.opacity ?? 1);\n particle.strokeAnimation = stroke.color?.animation;\n const strokeHslColor = rangeColorToHsl(stroke.color) ?? particle.getFillColor();\n if (strokeHslColor) {\n particle.strokeColor = getHslAnimationFromHsl(strokeHslColor, particle.strokeAnimation, container.retina.reduceFactor);\n }\n }\n isEnabled(particle) {\n const color = particle.strokeAnimation, { strokeColor } = particle;\n return (!particle.destroyed &&\n !particle.spawning &&\n !!color &&\n ((strokeColor?.h.value !== undefined && strokeColor.h.enable) ||\n (strokeColor?.s.value !== undefined && strokeColor.s.enable) ||\n (strokeColor?.l.value !== undefined && strokeColor.l.enable)));\n }\n update(particle, delta) {\n if (!this.isEnabled(particle)) {\n return;\n }\n updateStrokeColor(particle, delta);\n }\n}\n", "import { StrokeColorUpdater } from \"./StrokeColorUpdater.js\";\nexport async function loadStrokeColorUpdater(engine, refresh = true) {\n await engine.addParticleUpdater(\"strokeColor\", (container) => new StrokeColorUpdater(container), 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 await loadParallaxMover(engine, false);\n await loadExternalAttractInteraction(engine, false);\n await loadExternalBounceInteraction(engine, false);\n await loadExternalBubbleInteraction(engine, false);\n await loadExternalConnectInteraction(engine, false);\n await loadExternalGrabInteraction(engine, false);\n await loadExternalPauseInteraction(engine, false);\n await loadExternalPushInteraction(engine, false);\n await loadExternalRemoveInteraction(engine, false);\n await loadExternalRepulseInteraction(engine, false);\n await loadExternalSlowInteraction(engine, false);\n await loadParticlesAttractInteraction(engine, false);\n await loadParticlesCollisionsInteraction(engine, false);\n await loadParticlesLinksInteraction(engine, false);\n await loadEasingQuadPlugin();\n await loadEmojiShape(engine, false);\n await loadImageShape(engine, false);\n await loadLineShape(engine, false);\n await loadPolygonShape(engine, false);\n await loadSquareShape(engine, false);\n await loadStarShape(engine, false);\n await loadLifeUpdater(engine, false);\n await loadRotateUpdater(engine, false);\n await loadStrokeColorUpdater(engine, false);\n await loadBasic(engine, refresh);\n}\n", "export class HeartDrawer {\n draw(data) {\n const { context, radius } = data, diameter = radius * 2, halfRadius = radius * 0.5, radiusAndHalf = radius + halfRadius, x = -radius, y = -radius;\n context.moveTo(x, y + radius / 2);\n context.quadraticCurveTo(x, y, x + halfRadius, y);\n context.quadraticCurveTo(x + radius, y, x + radius, y + halfRadius);\n context.quadraticCurveTo(x + radius, y, x + radiusAndHalf, y);\n context.quadraticCurveTo(x + diameter, y, x + diameter, y + halfRadius);\n context.quadraticCurveTo(x + diameter, y + radius, x + radiusAndHalf, y + radiusAndHalf);\n context.lineTo(x + radius, y + diameter);\n context.lineTo(x + halfRadius, y + radiusAndHalf);\n context.quadraticCurveTo(x, y + radius, x, y + halfRadius);\n }\n}\n", "import { HeartDrawer } from \"./HeartDrawer.js\";\nexport async function loadHeartShape(engine, refresh = true) {\n await engine.addShape(\"heart\", new HeartDrawer(), refresh);\n}\n", "import { tsParticles } from \"@tsparticles/engine\";\nimport { loadSlim } from \"@tsparticles/slim\";\nimport { loadHeartShape } from \"@tsparticles/shape-heart\";\n\n\n\nconst allParticles = document.querySelectorAll(\"[data-ts-particles]\");\n\n(async () => {\n await loadSlim(tsParticles);\n await loadHeartShape(tsParticles);\n\n allParticles.forEach(async (el) => {\n await tsParticles.load({\n id: el.id,\n options: {\n preset: \"snow\",\n particles: {\n color: { value: \"#86DDDA\" },\n rotate: {\n animation:{\n enable: true,\n speed: 5\n },\n direction: \"random\",\n value: 10,\n random: true,\n },\n move: {\n direction: \"bottom\",\n enable: true,\n outModes: \"out\",\n speed: 2\n },\n number: {\n density: {\n enable: true,\n area: 400\n },\n value: 400\n },\n opacity: {\n value: .7\n },\n shape: {\n type: \"image\",\n options:{\n image:{\n src: \"/assets/art/heart_solid.svg\"\n }\n }\n\n },\n size: {\n value: 35\n },\n wobble: {\n enable: true,\n distance: 10,\n speed: 10\n },\n zIndex: {\n value: { min: 0, max: 100 }\n }\n },\n }\n });\n });\n})();\n\n\n"], "mappings": "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", "names": [] }