tsparticles 1.41.4 → 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/Core/Canvas.js +4 -5
  2. package/Core/Interfaces/ICoordinates.d.ts +8 -0
  3. package/Core/Interfaces/IParticleGravity.d.ts +5 -0
  4. package/Core/Interfaces/IParticleGravity.js +2 -0
  5. package/Core/Interfaces/index.d.ts +1 -0
  6. package/Core/Interfaces/index.js +1 -0
  7. package/Core/Particle.d.ts +3 -1
  8. package/Core/Particle.js +9 -7
  9. package/Core/Particles.js +2 -1
  10. package/Core/Retina.js +7 -7
  11. package/Core/Utils/ParticlesMover.js +2 -2
  12. package/Interactions/Particles/Links/LinkInstance.js +1 -1
  13. package/Options/Classes/AnimatableGradient.d.ts +4 -4
  14. package/Options/Classes/AnimatableGradient.js +4 -4
  15. package/Options/Classes/AnimationOptions.d.ts +5 -5
  16. package/Options/Classes/AnimationOptions.js +3 -2
  17. package/Options/Classes/ColorAnimation.d.ts +2 -2
  18. package/Options/Classes/ColorAnimation.js +2 -2
  19. package/Options/Classes/Particles/Move/Attract.d.ts +2 -2
  20. package/Options/Classes/Particles/Move/Attract.js +2 -1
  21. package/Options/Classes/Particles/Move/MoveAngle.d.ts +3 -3
  22. package/Options/Classes/Particles/Move/MoveAngle.js +3 -2
  23. package/Options/Classes/Particles/Move/MoveGravity.d.ts +5 -5
  24. package/Options/Classes/Particles/Move/MoveGravity.js +3 -2
  25. package/Options/Classes/Particles/Orbit/Orbit.d.ts +4 -4
  26. package/Options/Classes/Particles/Orbit/Orbit.js +4 -3
  27. package/Options/Classes/Particles/Repulse/Repulse.d.ts +5 -5
  28. package/Options/Classes/Particles/Repulse/Repulse.js +5 -4
  29. package/Options/Classes/Particles/Roll/RollLight.d.ts +2 -2
  30. package/Options/Classes/Particles/Roll/RollLight.js +2 -1
  31. package/Options/Classes/Particles/Rotate/RotateAnimation.d.ts +2 -2
  32. package/Options/Classes/Particles/Rotate/RotateAnimation.js +2 -1
  33. package/Options/Classes/Particles/Tilt/TiltAnimation.d.ts +2 -2
  34. package/Options/Classes/Particles/Tilt/TiltAnimation.js +2 -1
  35. package/Options/Classes/Particles/Twinkle/TwinkleValues.d.ts +2 -2
  36. package/Options/Classes/Particles/Twinkle/TwinkleValues.js +2 -1
  37. package/Options/Interfaces/IAnimation.d.ts +3 -2
  38. package/Options/Interfaces/Particles/Move/IAttract.d.ts +3 -2
  39. package/Options/Interfaces/Particles/Move/IMoveAngle.d.ts +3 -2
  40. package/Options/Interfaces/Particles/Move/IMoveGravity.d.ts +3 -2
  41. package/Options/Interfaces/Particles/Orbit/IOrbit.d.ts +4 -3
  42. package/Options/Interfaces/Particles/Repulse/IRepulse.d.ts +5 -4
  43. package/Options/Interfaces/Particles/Roll/IRollLight.d.ts +2 -1
  44. package/Options/Interfaces/Particles/Rotate/IRotateAnimation.d.ts +2 -1
  45. package/Options/Interfaces/Particles/Tilt/ITiltAnimation.d.ts +2 -1
  46. package/Options/Interfaces/Particles/Twinkle/ITwinkleValues.d.ts +3 -2
  47. package/Plugins/Absorbers/AbsorberInstance.js +1 -1
  48. package/Plugins/Absorbers/Options/Classes/Absorber.d.ts +2 -2
  49. package/Plugins/Absorbers/Options/Classes/Absorber.js +8 -4
  50. package/Plugins/Absorbers/Options/Interfaces/IAbsorber.d.ts +2 -2
  51. package/Plugins/Emitters/EmitterInstance.js +11 -10
  52. package/Plugins/Emitters/Options/Classes/Emitter.d.ts +2 -2
  53. package/Plugins/Emitters/Options/Classes/Emitter.js +8 -5
  54. package/Plugins/Emitters/Options/Interfaces/IEmitter.d.ts +2 -2
  55. package/Updaters/Angle/AngleUpdater.js +2 -1
  56. package/Updaters/Opacity/OpacityUpdater.js +3 -2
  57. package/Updaters/Roll/RollUpdater.js +3 -3
  58. package/Updaters/Tilt/TiltUpdater.js +1 -1
  59. package/Utils/ColorUtils.js +1 -1
  60. package/browser/Core/Canvas.js +5 -6
  61. package/browser/Core/Interfaces/ICoordinates.d.ts +8 -0
  62. package/browser/Core/Interfaces/IParticleGravity.d.ts +5 -0
  63. package/browser/Core/Interfaces/IParticleGravity.js +1 -0
  64. package/browser/Core/Interfaces/index.d.ts +1 -0
  65. package/browser/Core/Interfaces/index.js +1 -0
  66. package/browser/Core/Particle.d.ts +3 -1
  67. package/browser/Core/Particle.js +9 -7
  68. package/browser/Core/Particles.js +2 -1
  69. package/browser/Core/Retina.js +7 -7
  70. package/browser/Core/Utils/ParticlesMover.js +2 -2
  71. package/browser/Interactions/Particles/Links/LinkInstance.js +2 -2
  72. package/browser/Options/Classes/AnimatableGradient.d.ts +4 -4
  73. package/browser/Options/Classes/AnimatableGradient.js +4 -4
  74. package/browser/Options/Classes/AnimationOptions.d.ts +5 -5
  75. package/browser/Options/Classes/AnimationOptions.js +3 -2
  76. package/browser/Options/Classes/ColorAnimation.d.ts +2 -2
  77. package/browser/Options/Classes/ColorAnimation.js +2 -2
  78. package/browser/Options/Classes/Particles/Move/Attract.d.ts +2 -2
  79. package/browser/Options/Classes/Particles/Move/Attract.js +2 -1
  80. package/browser/Options/Classes/Particles/Move/MoveAngle.d.ts +3 -3
  81. package/browser/Options/Classes/Particles/Move/MoveAngle.js +3 -2
  82. package/browser/Options/Classes/Particles/Move/MoveGravity.d.ts +5 -5
  83. package/browser/Options/Classes/Particles/Move/MoveGravity.js +3 -2
  84. package/browser/Options/Classes/Particles/Orbit/Orbit.d.ts +4 -4
  85. package/browser/Options/Classes/Particles/Orbit/Orbit.js +4 -3
  86. package/browser/Options/Classes/Particles/Repulse/Repulse.d.ts +5 -5
  87. package/browser/Options/Classes/Particles/Repulse/Repulse.js +5 -4
  88. package/browser/Options/Classes/Particles/Roll/RollLight.d.ts +2 -2
  89. package/browser/Options/Classes/Particles/Roll/RollLight.js +2 -1
  90. package/browser/Options/Classes/Particles/Rotate/RotateAnimation.d.ts +2 -2
  91. package/browser/Options/Classes/Particles/Rotate/RotateAnimation.js +2 -1
  92. package/browser/Options/Classes/Particles/Tilt/TiltAnimation.d.ts +2 -2
  93. package/browser/Options/Classes/Particles/Tilt/TiltAnimation.js +2 -1
  94. package/browser/Options/Classes/Particles/Twinkle/TwinkleValues.d.ts +2 -2
  95. package/browser/Options/Classes/Particles/Twinkle/TwinkleValues.js +2 -1
  96. package/browser/Options/Interfaces/IAnimation.d.ts +3 -2
  97. package/browser/Options/Interfaces/Particles/Move/IAttract.d.ts +3 -2
  98. package/browser/Options/Interfaces/Particles/Move/IMoveAngle.d.ts +3 -2
  99. package/browser/Options/Interfaces/Particles/Move/IMoveGravity.d.ts +3 -2
  100. package/browser/Options/Interfaces/Particles/Orbit/IOrbit.d.ts +4 -3
  101. package/browser/Options/Interfaces/Particles/Repulse/IRepulse.d.ts +5 -4
  102. package/browser/Options/Interfaces/Particles/Roll/IRollLight.d.ts +2 -1
  103. package/browser/Options/Interfaces/Particles/Rotate/IRotateAnimation.d.ts +2 -1
  104. package/browser/Options/Interfaces/Particles/Tilt/ITiltAnimation.d.ts +2 -1
  105. package/browser/Options/Interfaces/Particles/Twinkle/ITwinkleValues.d.ts +3 -2
  106. package/browser/Plugins/Absorbers/AbsorberInstance.js +1 -1
  107. package/browser/Plugins/Absorbers/Options/Classes/Absorber.d.ts +2 -2
  108. package/browser/Plugins/Absorbers/Options/Classes/Absorber.js +8 -4
  109. package/browser/Plugins/Absorbers/Options/Interfaces/IAbsorber.d.ts +2 -2
  110. package/browser/Plugins/Emitters/EmitterInstance.js +11 -10
  111. package/browser/Plugins/Emitters/Options/Classes/Emitter.d.ts +2 -2
  112. package/browser/Plugins/Emitters/Options/Classes/Emitter.js +8 -5
  113. package/browser/Plugins/Emitters/Options/Interfaces/IEmitter.d.ts +2 -2
  114. package/browser/Updaters/Angle/AngleUpdater.js +2 -1
  115. package/browser/Updaters/Opacity/OpacityUpdater.js +3 -2
  116. package/browser/Updaters/Roll/RollUpdater.js +3 -3
  117. package/browser/Updaters/Tilt/TiltUpdater.js +1 -1
  118. package/browser/Utils/ColorUtils.js +2 -2
  119. package/esm/Core/Canvas.js +5 -6
  120. package/esm/Core/Interfaces/ICoordinates.d.ts +8 -0
  121. package/esm/Core/Interfaces/IParticleGravity.d.ts +5 -0
  122. package/esm/Core/Interfaces/IParticleGravity.js +1 -0
  123. package/esm/Core/Interfaces/index.d.ts +1 -0
  124. package/esm/Core/Interfaces/index.js +1 -0
  125. package/esm/Core/Particle.d.ts +3 -1
  126. package/esm/Core/Particle.js +9 -7
  127. package/esm/Core/Particles.js +2 -1
  128. package/esm/Core/Retina.js +7 -7
  129. package/esm/Core/Utils/ParticlesMover.js +2 -2
  130. package/esm/Interactions/Particles/Links/LinkInstance.js +2 -2
  131. package/esm/Options/Classes/AnimatableGradient.d.ts +4 -4
  132. package/esm/Options/Classes/AnimatableGradient.js +4 -4
  133. package/esm/Options/Classes/AnimationOptions.d.ts +5 -5
  134. package/esm/Options/Classes/AnimationOptions.js +3 -2
  135. package/esm/Options/Classes/ColorAnimation.d.ts +2 -2
  136. package/esm/Options/Classes/ColorAnimation.js +2 -2
  137. package/esm/Options/Classes/Particles/Move/Attract.d.ts +2 -2
  138. package/esm/Options/Classes/Particles/Move/Attract.js +2 -1
  139. package/esm/Options/Classes/Particles/Move/MoveAngle.d.ts +3 -3
  140. package/esm/Options/Classes/Particles/Move/MoveAngle.js +3 -2
  141. package/esm/Options/Classes/Particles/Move/MoveGravity.d.ts +5 -5
  142. package/esm/Options/Classes/Particles/Move/MoveGravity.js +3 -2
  143. package/esm/Options/Classes/Particles/Orbit/Orbit.d.ts +4 -4
  144. package/esm/Options/Classes/Particles/Orbit/Orbit.js +4 -3
  145. package/esm/Options/Classes/Particles/Repulse/Repulse.d.ts +5 -5
  146. package/esm/Options/Classes/Particles/Repulse/Repulse.js +5 -4
  147. package/esm/Options/Classes/Particles/Roll/RollLight.d.ts +2 -2
  148. package/esm/Options/Classes/Particles/Roll/RollLight.js +2 -1
  149. package/esm/Options/Classes/Particles/Rotate/RotateAnimation.d.ts +2 -2
  150. package/esm/Options/Classes/Particles/Rotate/RotateAnimation.js +2 -1
  151. package/esm/Options/Classes/Particles/Tilt/TiltAnimation.d.ts +2 -2
  152. package/esm/Options/Classes/Particles/Tilt/TiltAnimation.js +2 -1
  153. package/esm/Options/Classes/Particles/Twinkle/TwinkleValues.d.ts +2 -2
  154. package/esm/Options/Classes/Particles/Twinkle/TwinkleValues.js +2 -1
  155. package/esm/Options/Interfaces/IAnimation.d.ts +3 -2
  156. package/esm/Options/Interfaces/Particles/Move/IAttract.d.ts +3 -2
  157. package/esm/Options/Interfaces/Particles/Move/IMoveAngle.d.ts +3 -2
  158. package/esm/Options/Interfaces/Particles/Move/IMoveGravity.d.ts +3 -2
  159. package/esm/Options/Interfaces/Particles/Orbit/IOrbit.d.ts +4 -3
  160. package/esm/Options/Interfaces/Particles/Repulse/IRepulse.d.ts +5 -4
  161. package/esm/Options/Interfaces/Particles/Roll/IRollLight.d.ts +2 -1
  162. package/esm/Options/Interfaces/Particles/Rotate/IRotateAnimation.d.ts +2 -1
  163. package/esm/Options/Interfaces/Particles/Tilt/ITiltAnimation.d.ts +2 -1
  164. package/esm/Options/Interfaces/Particles/Twinkle/ITwinkleValues.d.ts +3 -2
  165. package/esm/Plugins/Absorbers/AbsorberInstance.js +1 -1
  166. package/esm/Plugins/Absorbers/Options/Classes/Absorber.d.ts +2 -2
  167. package/esm/Plugins/Absorbers/Options/Classes/Absorber.js +8 -4
  168. package/esm/Plugins/Absorbers/Options/Interfaces/IAbsorber.d.ts +2 -2
  169. package/esm/Plugins/Emitters/EmitterInstance.js +11 -10
  170. package/esm/Plugins/Emitters/Options/Classes/Emitter.d.ts +2 -2
  171. package/esm/Plugins/Emitters/Options/Classes/Emitter.js +8 -5
  172. package/esm/Plugins/Emitters/Options/Interfaces/IEmitter.d.ts +2 -2
  173. package/esm/Updaters/Angle/AngleUpdater.js +2 -1
  174. package/esm/Updaters/Opacity/OpacityUpdater.js +3 -2
  175. package/esm/Updaters/Roll/RollUpdater.js +3 -3
  176. package/esm/Updaters/Tilt/TiltUpdater.js +1 -1
  177. package/esm/Utils/ColorUtils.js +2 -2
  178. package/package.json +1 -1
  179. package/report.html +2 -2
  180. package/report.slim.html +2 -2
  181. package/scripts/install.js +11 -2
  182. package/tsparticles.engine.js +47 -47
  183. package/tsparticles.engine.min.js +2 -2
  184. package/tsparticles.interaction.external.attract.js +319 -36
  185. package/tsparticles.interaction.external.attract.min.js +1 -1
  186. package/tsparticles.interaction.external.bounce.js +319 -36
  187. package/tsparticles.interaction.external.bounce.min.js +1 -1
  188. package/tsparticles.interaction.external.bubble.js +319 -36
  189. package/tsparticles.interaction.external.bubble.min.js +1 -1
  190. package/tsparticles.interaction.external.connect.js +319 -36
  191. package/tsparticles.interaction.external.connect.min.js +1 -1
  192. package/tsparticles.interaction.external.grab.js +319 -36
  193. package/tsparticles.interaction.external.grab.min.js +1 -1
  194. package/tsparticles.interaction.external.repulse.js +319 -36
  195. package/tsparticles.interaction.external.repulse.min.js +1 -1
  196. package/tsparticles.interaction.external.trail.js +319 -36
  197. package/tsparticles.interaction.external.trail.min.js +1 -1
  198. package/tsparticles.interaction.particles.attract.js +319 -36
  199. package/tsparticles.interaction.particles.attract.min.js +1 -1
  200. package/tsparticles.interaction.particles.collisions.js +319 -36
  201. package/tsparticles.interaction.particles.collisions.min.js +1 -1
  202. package/tsparticles.interaction.particles.links.js +320 -37
  203. package/tsparticles.interaction.particles.links.min.js +2 -2
  204. package/tsparticles.js +81 -74
  205. package/tsparticles.min.js +2 -2
  206. package/tsparticles.pathseg.min.js +1 -1
  207. package/tsparticles.plugins.absorbers.js +327 -41
  208. package/tsparticles.plugins.absorbers.min.js +2 -2
  209. package/tsparticles.plugins.emitters.js +438 -151
  210. package/tsparticles.plugins.emitters.min.js +2 -2
  211. package/tsparticles.plugins.polygonMask.js +319 -36
  212. package/tsparticles.plugins.polygonMask.min.js +1 -1
  213. package/tsparticles.shape.circle.min.js +1 -1
  214. package/tsparticles.shape.image.js +319 -36
  215. package/tsparticles.shape.image.min.js +1 -1
  216. package/tsparticles.shape.line.min.js +1 -1
  217. package/tsparticles.shape.polygon.min.js +1 -1
  218. package/tsparticles.shape.square.min.js +1 -1
  219. package/tsparticles.shape.star.min.js +1 -1
  220. package/tsparticles.shape.text.js +319 -36
  221. package/tsparticles.shape.text.min.js +1 -1
  222. package/tsparticles.slim.js +51 -51
  223. package/tsparticles.slim.min.js +2 -2
  224. package/tsparticles.updater.angle.js +320 -37
  225. package/tsparticles.updater.angle.min.js +2 -2
  226. package/tsparticles.updater.color.js +319 -36
  227. package/tsparticles.updater.color.min.js +2 -2
  228. package/tsparticles.updater.life.js +319 -36
  229. package/tsparticles.updater.life.min.js +1 -1
  230. package/tsparticles.updater.opacity.js +321 -38
  231. package/tsparticles.updater.opacity.min.js +2 -2
  232. package/tsparticles.updater.outModes.js +319 -36
  233. package/tsparticles.updater.outModes.min.js +1 -1
  234. package/tsparticles.updater.roll.js +322 -39
  235. package/tsparticles.updater.roll.min.js +2 -2
  236. package/tsparticles.updater.size.js +319 -36
  237. package/tsparticles.updater.size.min.js +1 -1
  238. package/tsparticles.updater.strokeColor.js +319 -36
  239. package/tsparticles.updater.strokeColor.min.js +2 -2
  240. package/tsparticles.updater.tilt.js +320 -37
  241. package/tsparticles.updater.tilt.min.js +2 -2
  242. package/tsparticles.updater.wobble.js +319 -36
  243. package/tsparticles.updater.wobble.min.js +1 -1
  244. package/umd/Core/Canvas.js +4 -5
  245. package/umd/Core/Interfaces/ICoordinates.d.ts +8 -0
  246. package/umd/Core/Interfaces/IParticleGravity.d.ts +5 -0
  247. package/umd/Core/Interfaces/IParticleGravity.js +12 -0
  248. package/umd/Core/Interfaces/index.d.ts +1 -0
  249. package/umd/Core/Interfaces/index.js +2 -1
  250. package/umd/Core/Particle.d.ts +3 -1
  251. package/umd/Core/Particle.js +9 -7
  252. package/umd/Core/Particles.js +2 -1
  253. package/umd/Core/Retina.js +7 -7
  254. package/umd/Core/Utils/ParticlesMover.js +2 -2
  255. package/umd/Interactions/Particles/Links/LinkInstance.js +1 -1
  256. package/umd/Options/Classes/AnimatableGradient.d.ts +4 -4
  257. package/umd/Options/Classes/AnimatableGradient.js +4 -4
  258. package/umd/Options/Classes/AnimationOptions.d.ts +5 -5
  259. package/umd/Options/Classes/AnimationOptions.js +4 -3
  260. package/umd/Options/Classes/ColorAnimation.d.ts +2 -2
  261. package/umd/Options/Classes/ColorAnimation.js +2 -2
  262. package/umd/Options/Classes/Particles/Move/Attract.d.ts +2 -2
  263. package/umd/Options/Classes/Particles/Move/Attract.js +3 -2
  264. package/umd/Options/Classes/Particles/Move/MoveAngle.d.ts +3 -3
  265. package/umd/Options/Classes/Particles/Move/MoveAngle.js +4 -3
  266. package/umd/Options/Classes/Particles/Move/MoveGravity.d.ts +5 -5
  267. package/umd/Options/Classes/Particles/Move/MoveGravity.js +4 -3
  268. package/umd/Options/Classes/Particles/Orbit/Orbit.d.ts +4 -4
  269. package/umd/Options/Classes/Particles/Orbit/Orbit.js +5 -4
  270. package/umd/Options/Classes/Particles/Repulse/Repulse.d.ts +5 -5
  271. package/umd/Options/Classes/Particles/Repulse/Repulse.js +6 -5
  272. package/umd/Options/Classes/Particles/Roll/RollLight.d.ts +2 -2
  273. package/umd/Options/Classes/Particles/Roll/RollLight.js +3 -2
  274. package/umd/Options/Classes/Particles/Rotate/RotateAnimation.d.ts +2 -2
  275. package/umd/Options/Classes/Particles/Rotate/RotateAnimation.js +3 -2
  276. package/umd/Options/Classes/Particles/Tilt/TiltAnimation.d.ts +2 -2
  277. package/umd/Options/Classes/Particles/Tilt/TiltAnimation.js +3 -2
  278. package/umd/Options/Classes/Particles/Twinkle/TwinkleValues.d.ts +2 -2
  279. package/umd/Options/Classes/Particles/Twinkle/TwinkleValues.js +3 -2
  280. package/umd/Options/Interfaces/IAnimation.d.ts +3 -2
  281. package/umd/Options/Interfaces/Particles/Move/IAttract.d.ts +3 -2
  282. package/umd/Options/Interfaces/Particles/Move/IMoveAngle.d.ts +3 -2
  283. package/umd/Options/Interfaces/Particles/Move/IMoveGravity.d.ts +3 -2
  284. package/umd/Options/Interfaces/Particles/Orbit/IOrbit.d.ts +4 -3
  285. package/umd/Options/Interfaces/Particles/Repulse/IRepulse.d.ts +5 -4
  286. package/umd/Options/Interfaces/Particles/Roll/IRollLight.d.ts +2 -1
  287. package/umd/Options/Interfaces/Particles/Rotate/IRotateAnimation.d.ts +2 -1
  288. package/umd/Options/Interfaces/Particles/Tilt/ITiltAnimation.d.ts +2 -1
  289. package/umd/Options/Interfaces/Particles/Twinkle/ITwinkleValues.d.ts +3 -2
  290. package/umd/Plugins/Absorbers/AbsorberInstance.js +1 -1
  291. package/umd/Plugins/Absorbers/Options/Classes/Absorber.d.ts +2 -2
  292. package/umd/Plugins/Absorbers/Options/Classes/Absorber.js +9 -5
  293. package/umd/Plugins/Absorbers/Options/Interfaces/IAbsorber.d.ts +2 -2
  294. package/umd/Plugins/Emitters/EmitterInstance.js +11 -10
  295. package/umd/Plugins/Emitters/Options/Classes/Emitter.d.ts +2 -2
  296. package/umd/Plugins/Emitters/Options/Classes/Emitter.js +9 -6
  297. package/umd/Plugins/Emitters/Options/Interfaces/IEmitter.d.ts +2 -2
  298. package/umd/Updaters/Angle/AngleUpdater.js +2 -1
  299. package/umd/Updaters/Opacity/OpacityUpdater.js +3 -2
  300. package/umd/Updaters/Roll/RollUpdater.js +3 -3
  301. package/umd/Updaters/Tilt/TiltUpdater.js +1 -1
  302. package/umd/Utils/ColorUtils.js +1 -1
@@ -1,8 +1,9 @@
1
+ import type { RangeValue } from "../../../../Types";
1
2
  /**
2
3
  * @category Options
3
4
  */
4
5
  export interface IRotateAnimation {
5
6
  enable: boolean;
6
- speed: number;
7
+ speed: RangeValue;
7
8
  sync: boolean;
8
9
  }
@@ -1,8 +1,9 @@
1
+ import type { RangeValue } from "../../../../Types";
1
2
  /**
2
3
  * @category Options
3
4
  */
4
5
  export interface ITiltAnimation {
5
6
  enable: boolean;
6
- speed: number;
7
+ speed: RangeValue;
7
8
  sync: boolean;
8
9
  }
@@ -1,4 +1,5 @@
1
- import type { IColor } from "../../../../Core/Interfaces/Colors";
1
+ import type { IColor } from "../../../../Core";
2
+ import type { RangeValue } from "../../../../Types";
2
3
  /**
3
4
  * @category Options
4
5
  */
@@ -6,5 +7,5 @@ export interface ITwinkleValues {
6
7
  color?: string | IColor;
7
8
  enable: boolean;
8
9
  frequency: number;
9
- opacity: number;
10
+ opacity: RangeValue;
10
11
  }
@@ -105,7 +105,7 @@ export class AbsorberInstance {
105
105
  var _a, _b;
106
106
  const container = this.container;
107
107
  const percentPosition = this.options.position;
108
- return Vector.create((((_a = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.x) !== null && _a !== void 0 ? _a : Math.random() * 100) / 100) * container.canvas.size.width, (((_b = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.y) !== null && _b !== void 0 ? _b : Math.random() * 100) / 100) * container.canvas.size.height);
108
+ return Vector.create((getRangeValue((_a = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.x) !== null && _a !== void 0 ? _a : Math.random() * 100) / 100) * container.canvas.size.width, (getRangeValue((_b = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.y) !== null && _b !== void 0 ? _b : Math.random() * 100) / 100) * container.canvas.size.height);
109
109
  }
110
110
  updateParticlePosition(particle, v) {
111
111
  var _a;
@@ -1,7 +1,7 @@
1
1
  import { AbsorberSize } from "./AbsorberSize";
2
2
  import type { IAbsorber } from "../Interfaces/IAbsorber";
3
- import type { ICoordinates } from "../../../../Core";
4
3
  import type { IOptionLoader } from "../../../../Options/Interfaces/IOptionLoader";
4
+ import type { IRangedCoordinates } from "../../../../Core";
5
5
  import { OptionsColor } from "../../../../Options/Classes/OptionsColor";
6
6
  import type { RecursivePartial } from "../../../../Types";
7
7
  /**
@@ -13,7 +13,7 @@ export declare class Absorber implements IAbsorber, IOptionLoader<IAbsorber> {
13
13
  draggable: boolean;
14
14
  name?: string;
15
15
  opacity: number;
16
- position?: RecursivePartial<ICoordinates>;
16
+ position?: RecursivePartial<IRangedCoordinates>;
17
17
  size: AbsorberSize;
18
18
  destroy: boolean;
19
19
  orbits: boolean;
@@ -1,5 +1,6 @@
1
1
  import { AbsorberSize } from "./AbsorberSize";
2
2
  import { OptionsColor } from "../../../../Options/Classes/OptionsColor";
3
+ import { setRangeValue } from "../../../../Utils";
3
4
  /**
4
5
  * [[include:Options/Plugins/Absorbers.md]]
5
6
  * @category Absorbers Plugin
@@ -29,10 +30,13 @@ export class Absorber {
29
30
  this.opacity = data.opacity;
30
31
  }
31
32
  if (data.position !== undefined) {
32
- this.position = {
33
- x: data.position.x,
34
- y: data.position.y,
35
- };
33
+ this.position = {};
34
+ if (data.position.x !== undefined) {
35
+ this.position.x = setRangeValue(data.position.x);
36
+ }
37
+ if (data.position.y !== undefined) {
38
+ this.position.y = setRangeValue(data.position.y);
39
+ }
36
40
  }
37
41
  if (data.size !== undefined) {
38
42
  this.size.load(data.size);
@@ -1,4 +1,4 @@
1
- import type { IColor, ICoordinates } from "../../../../Core";
1
+ import type { IColor, IRangedCoordinates } from "../../../../Core";
2
2
  import type { IAbsorberSize } from "./IAbsorberSize";
3
3
  import { RecursivePartial } from "../../../../Types";
4
4
  /**
@@ -22,7 +22,7 @@ export interface IAbsorber {
22
22
  /**
23
23
  * Absorber position, percent values calculated on canvas size
24
24
  */
25
- position?: RecursivePartial<ICoordinates>;
25
+ position?: RecursivePartial<IRangedCoordinates>;
26
26
  /**
27
27
  * Absorber size, these values will be used as pixels
28
28
  */
@@ -18,8 +18,8 @@ import { EmitterSize } from "./Options/Classes/EmitterSize";
18
18
  */
19
19
  export class EmitterInstance {
20
20
  constructor(engine, emitters, container, options, position) {
21
- var _a, _b, _c, _d, _e, _f;
22
- var _g;
21
+ var _a, _b, _c, _d, _e, _f, _g;
22
+ var _h;
23
23
  this.emitters = emitters;
24
24
  this.container = container;
25
25
  _EmitterInstance_firstSpawn.set(this, void 0);
@@ -38,22 +38,23 @@ export class EmitterInstance {
38
38
  this.options.load(options);
39
39
  }
40
40
  this.spawnDelay = (((_a = this.options.life.delay) !== null && _a !== void 0 ? _a : 0) * 1000) / this.container.retina.reduceFactor;
41
+ this.position = (_b = this.initialPosition) !== null && _b !== void 0 ? _b : this.calcPosition();
41
42
  this.name = this.options.name;
42
- this.shape = (_b = __classPrivateFieldGet(this, _EmitterInstance_engine, "f").emitterShapeManager) === null || _b === void 0 ? void 0 : _b.getShape(this.options.shape);
43
+ this.shape = (_c = __classPrivateFieldGet(this, _EmitterInstance_engine, "f").emitterShapeManager) === null || _c === void 0 ? void 0 : _c.getShape(this.options.shape);
43
44
  this.fill = this.options.fill;
44
45
  __classPrivateFieldSet(this, _EmitterInstance_firstSpawn, !this.options.life.wait, "f");
45
46
  __classPrivateFieldSet(this, _EmitterInstance_startParticlesAdded, false, "f");
46
47
  let particlesOptions = deepExtend({}, this.options.particles);
47
48
  particlesOptions !== null && particlesOptions !== void 0 ? particlesOptions : (particlesOptions = {});
48
- (_c = particlesOptions.move) !== null && _c !== void 0 ? _c : (particlesOptions.move = {});
49
- (_d = (_g = particlesOptions.move).direction) !== null && _d !== void 0 ? _d : (_g.direction = this.options.direction);
49
+ (_d = particlesOptions.move) !== null && _d !== void 0 ? _d : (particlesOptions.move = {});
50
+ (_e = (_h = particlesOptions.move).direction) !== null && _e !== void 0 ? _e : (_h.direction = this.options.direction);
50
51
  if (this.options.spawnColor) {
51
52
  this.spawnColor = colorToHsl(this.options.spawnColor);
52
53
  }
53
54
  this.paused = !this.options.autoPlay;
54
55
  this.particlesOptions = particlesOptions;
55
56
  this.size =
56
- (_e = this.options.size) !== null && _e !== void 0 ? _e : (() => {
57
+ (_f = this.options.size) !== null && _f !== void 0 ? _f : (() => {
57
58
  const size = new EmitterSize();
58
59
  size.load({
59
60
  height: 0,
@@ -62,7 +63,7 @@ export class EmitterInstance {
62
63
  });
63
64
  return size;
64
65
  })();
65
- this.lifeCount = (_f = this.options.life.count) !== null && _f !== void 0 ? _f : -1;
66
+ this.lifeCount = (_g = this.options.life.count) !== null && _g !== void 0 ? _g : -1;
66
67
  this.immortal = this.lifeCount <= 0;
67
68
  this.play();
68
69
  }
@@ -210,8 +211,8 @@ export class EmitterInstance {
210
211
  const container = this.container;
211
212
  const percentPosition = this.options.position;
212
213
  return {
213
- x: (((_a = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.x) !== null && _a !== void 0 ? _a : Math.random() * 100) / 100) * container.canvas.size.width,
214
- y: (((_b = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.y) !== null && _b !== void 0 ? _b : Math.random() * 100) / 100) * container.canvas.size.height,
214
+ x: (getRangeValue((_a = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.x) !== null && _a !== void 0 ? _a : Math.random() * 100) / 100) * container.canvas.size.width,
215
+ y: (getRangeValue((_b = percentPosition === null || percentPosition === void 0 ? void 0 : percentPosition.y) !== null && _b !== void 0 ? _b : Math.random() * 100) / 100) * container.canvas.size.height,
215
216
  };
216
217
  }
217
218
  emit() {
@@ -260,7 +261,7 @@ export class EmitterInstance {
260
261
  const colorOffset = randomInRange(animation.offset);
261
262
  const delay = getRangeValue(this.options.rate.delay);
262
263
  const emitFactor = (1000 * delay) / container.retina.reduceFactor;
263
- const colorSpeed = (_a = animation.speed) !== null && _a !== void 0 ? _a : 0;
264
+ const colorSpeed = getRangeValue((_a = animation.speed) !== null && _a !== void 0 ? _a : 0);
264
265
  return (initValue + (colorSpeed * container.fpsLimit) / emitFactor + colorOffset * 3.6) % maxValue;
265
266
  }
266
267
  }
@@ -4,10 +4,10 @@ import { EmitterLife } from "./EmitterLife";
4
4
  import { EmitterRate } from "./EmitterRate";
5
5
  import { EmitterShapeType } from "../../Enums";
6
6
  import { EmitterSize } from "./EmitterSize";
7
- import type { ICoordinates } from "../../../../Core";
8
7
  import type { IEmitter } from "../Interfaces/IEmitter";
9
8
  import type { IOptionLoader } from "../../../../Options/Interfaces/IOptionLoader";
10
9
  import type { IParticles } from "../../../../Options/Interfaces/Particles/IParticles";
10
+ import type { IRangedCoordinates } from "../../../../Core";
11
11
  import type { RecursivePartial } from "../../../../Types";
12
12
  /**
13
13
  * [[include:Options/Plugins/Emitters.md]]
@@ -22,7 +22,7 @@ export declare class Emitter implements IEmitter, IOptionLoader<IEmitter> {
22
22
  life: EmitterLife;
23
23
  name?: string;
24
24
  particles?: RecursivePartial<IParticles>;
25
- position?: RecursivePartial<ICoordinates>;
25
+ position?: RecursivePartial<IRangedCoordinates>;
26
26
  rate: EmitterRate;
27
27
  shape: EmitterShapeType | keyof typeof EmitterShapeType;
28
28
  spawnColor?: AnimatableColor;
@@ -1,8 +1,8 @@
1
+ import { deepExtend, setRangeValue } from "../../../../Utils";
1
2
  import { AnimatableColor } from "../../../../Options/Classes/AnimatableColor";
2
3
  import { EmitterLife } from "./EmitterLife";
3
4
  import { EmitterRate } from "./EmitterRate";
4
5
  import { EmitterSize } from "./EmitterSize";
5
- import { deepExtend } from "../../../../Utils";
6
6
  /**
7
7
  * [[include:Options/Plugins/Emitters.md]]
8
8
  * @category Emitters Plugin
@@ -46,10 +46,13 @@ export class Emitter {
46
46
  this.shape = data.shape;
47
47
  }
48
48
  if (data.position !== undefined) {
49
- this.position = {
50
- x: data.position.x,
51
- y: data.position.y,
52
- };
49
+ this.position = {};
50
+ if (data.position.x) {
51
+ this.position.x = setRangeValue(data.position.x);
52
+ }
53
+ if (data.position.y) {
54
+ this.position.y = setRangeValue(data.position.y);
55
+ }
53
56
  }
54
57
  if (data.spawnColor !== undefined) {
55
58
  if (this.spawnColor === undefined) {
@@ -1,11 +1,11 @@
1
1
  import type { MoveDirection, MoveDirectionAlt } from "../../../../Enums";
2
2
  import type { EmitterShapeType } from "../../Enums";
3
3
  import type { IAnimatableColor } from "../../../../Options/Interfaces/IAnimatableColor";
4
- import type { ICoordinates } from "../../../../Core";
5
4
  import type { IEmitterLife } from "./IEmitterLife";
6
5
  import type { IEmitterRate } from "./IEmitterRate";
7
6
  import type { IEmitterSize } from "./IEmitterSize";
8
7
  import type { IParticles } from "../../../../Options/Interfaces/Particles/IParticles";
8
+ import type { IRangedCoordinates } from "../../../../Core";
9
9
  import type { RecursivePartial } from "../../../../Types";
10
10
  /**
11
11
  * Particles emitter object options
@@ -51,7 +51,7 @@ export interface IEmitter {
51
51
  * The relative position (in percent) of the emitter, where particles spawns.
52
52
  * If size is specified the position will be the center of the size options
53
53
  */
54
- position?: RecursivePartial<ICoordinates>;
54
+ position?: RecursivePartial<IRangedCoordinates>;
55
55
  /**
56
56
  * The particles emitting rate options
57
57
  */
@@ -54,7 +54,8 @@ export class AngleUpdater {
54
54
  }
55
55
  const rotateAnimation = particle.options.rotate.animation;
56
56
  if (rotateAnimation.enable) {
57
- particle.rotate.velocity = (rotateAnimation.speed / 360) * this.container.retina.reduceFactor;
57
+ particle.rotate.velocity =
58
+ (getRangeValue(rotateAnimation.speed) / 360) * this.container.retina.reduceFactor;
58
59
  if (!rotateAnimation.sync) {
59
60
  particle.rotate.velocity *= Math.random();
60
61
  }
@@ -69,7 +69,7 @@ export class OpacityUpdater {
69
69
  min: getRangeMin(opacityOptions.value),
70
70
  value: getRangeValue(opacityOptions.value),
71
71
  loops: 0,
72
- maxLoops: opacityOptions.animation.count,
72
+ maxLoops: getRangeValue(opacityOptions.animation.count),
73
73
  };
74
74
  const opacityAnimation = opacityOptions.animation;
75
75
  if (opacityAnimation.enable) {
@@ -93,7 +93,8 @@ export class OpacityUpdater {
93
93
  particle.opacity.status = 1 /* decreasing */;
94
94
  break;
95
95
  }
96
- particle.opacity.velocity = (opacityAnimation.speed / 100) * this.container.retina.reduceFactor;
96
+ particle.opacity.velocity =
97
+ (getRangeValue(opacityAnimation.speed) / 100) * this.container.retina.reduceFactor;
97
98
  if (!opacityAnimation.sync) {
98
99
  particle.opacity.velocity *= Math.random();
99
100
  }
@@ -26,19 +26,19 @@ export class RollUpdater {
26
26
  const alterType = Math.random() >= 0.5 ? "darken" /* darken */ : "enlighten" /* enlighten */;
27
27
  particle.roll.alter = {
28
28
  type: alterType,
29
- value: alterType === "darken" /* darken */ ? rollOpt.darken.value : rollOpt.enlighten.value,
29
+ value: getRangeValue(alterType === "darken" /* darken */ ? rollOpt.darken.value : rollOpt.enlighten.value),
30
30
  };
31
31
  }
32
32
  else if (rollOpt.darken.enable) {
33
33
  particle.roll.alter = {
34
34
  type: "darken" /* darken */,
35
- value: rollOpt.darken.value,
35
+ value: getRangeValue(rollOpt.darken.value),
36
36
  };
37
37
  }
38
38
  else if (rollOpt.enlighten.enable) {
39
39
  particle.roll.alter = {
40
40
  type: "enlighten" /* enlighten */,
41
- value: rollOpt.enlighten.value,
41
+ value: getRangeValue(rollOpt.enlighten.value),
42
42
  };
43
43
  }
44
44
  }
@@ -55,7 +55,7 @@ export class TiltUpdater {
55
55
  }
56
56
  const tiltAnimation = particle.options.tilt.animation;
57
57
  if (tiltAnimation.enable) {
58
- particle.tilt.velocity = (tiltAnimation.speed / 360) * this.container.retina.reduceFactor;
58
+ particle.tilt.velocity = (getRangeValue(tiltAnimation.speed) / 360) * this.container.retina.reduceFactor;
59
59
  if (!tiltAnimation.sync) {
60
60
  particle.tilt.velocity *= Math.random();
61
61
  }
@@ -1,4 +1,4 @@
1
- import { mix, randomInRange, setRangeValue } from "./NumberUtils";
1
+ import { getRangeValue, mix, randomInRange, setRangeValue } from "./NumberUtils";
2
2
  import { Constants } from "../Core";
3
3
  import { itemFromArray } from "./Utils";
4
4
  /**
@@ -465,7 +465,7 @@ export function getHslAnimationFromHsl(hsl, animationOptions, reduceFactor) {
465
465
  function setColorAnimation(colorValue, colorAnimation, reduceFactor) {
466
466
  colorValue.enable = colorAnimation.enable;
467
467
  if (colorValue.enable) {
468
- colorValue.velocity = (colorAnimation.speed / 100) * reduceFactor;
468
+ colorValue.velocity = (getRangeValue(colorAnimation.speed) / 100) * reduceFactor;
469
469
  if (colorAnimation.sync) {
470
470
  return;
471
471
  }
@@ -1,4 +1,4 @@
1
- import { clear, colorToHsl, colorToRgb, deepExtend, drawConnectLine, drawGrabLine, drawParticle, drawParticlePlugin, drawPlugin, getStyleFromHsl, getStyleFromRgb, gradient, paintBase, } from "../Utils";
1
+ import { clear, colorToHsl, colorToRgb, deepExtend, drawConnectLine, drawGrabLine, drawParticle, drawParticlePlugin, drawPlugin, getRangeValue, getStyleFromHsl, getStyleFromRgb, gradient, paintBase, } from "../Utils";
2
2
  import { Constants } from "./Utils";
3
3
  export class Canvas {
4
4
  constructor(container) {
@@ -95,10 +95,7 @@ export class Canvas {
95
95
  const container = this.container;
96
96
  const pxRatio = container.retina.pixelRatio;
97
97
  const size = container.canvas.size;
98
- const oldSize = {
99
- width: size.width,
100
- height: size.height,
101
- };
98
+ const oldSize = Object.assign({}, size);
102
99
  size.width = this.element.offsetWidth * pxRatio;
103
100
  size.height = this.element.offsetHeight * pxRatio;
104
101
  this.element.width = size.width;
@@ -157,7 +154,9 @@ export class Canvas {
157
154
  const zIndexOptions = particle.options.zIndex;
158
155
  const zOpacityFactor = (1 - particle.zIndexFactor) ** zIndexOptions.opacityRate;
159
156
  const radius = particle.getRadius();
160
- const opacity = twinkling ? twinkle.opacity : (_d = (_b = particle.bubble.opacity) !== null && _b !== void 0 ? _b : (_c = particle.opacity) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : 1;
157
+ const opacity = twinkling
158
+ ? getRangeValue(twinkle.opacity)
159
+ : (_d = (_b = particle.bubble.opacity) !== null && _b !== void 0 ? _b : (_c = particle.opacity) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : 1;
161
160
  const strokeOpacity = (_f = (_e = particle.stroke) === null || _e === void 0 ? void 0 : _e.opacity) !== null && _f !== void 0 ? _f : opacity;
162
161
  const zOpacity = opacity * zOpacityFactor;
163
162
  const fillColorValue = fColor ? getStyleFromHsl(fColor, zOpacity) : undefined;
@@ -1,3 +1,4 @@
1
+ import type { RangeValue } from "../../Types";
1
2
  export interface ICoordinates {
2
3
  x: number;
3
4
  y: number;
@@ -5,3 +6,10 @@ export interface ICoordinates {
5
6
  export interface ICoordinates3d extends ICoordinates {
6
7
  z: number;
7
8
  }
9
+ export interface IRangedCoordinates {
10
+ x: RangeValue;
11
+ y: RangeValue;
12
+ }
13
+ export interface IRangedCoordinates3d extends IRangedCoordinates {
14
+ z: RangeValue;
15
+ }
@@ -0,0 +1,5 @@
1
+ export interface IParticleGravity {
2
+ enable: boolean;
3
+ acceleration: number;
4
+ inverse: boolean;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -18,6 +18,7 @@ export * from "./IMovePathGenerator";
18
18
  export * from "./IParticle";
19
19
  export * from "./IParticleGradientAnimation";
20
20
  export * from "./IParticleGradientColorAnimation";
21
+ export * from "./IParticleGravity";
21
22
  export * from "./IParticleHslAnimation";
22
23
  export * from "./IParticlesInteractor";
23
24
  export * from "./IParticleLife";
@@ -18,6 +18,7 @@ export * from "./IMovePathGenerator";
18
18
  export * from "./IParticle";
19
19
  export * from "./IParticleGradientAnimation";
20
20
  export * from "./IParticleGradientColorAnimation";
21
+ export * from "./IParticleGravity";
21
22
  export * from "./IParticleHslAnimation";
22
23
  export * from "./IParticlesInteractor";
23
24
  export * from "./IParticleLife";
@@ -1,5 +1,5 @@
1
1
  import { ShapeType } from "../Enums";
2
- import type { IBubbleParticleData, ICoordinates, ICoordinates3d, IDelta, IHsl, IParticle, IParticleGradientAnimation, IParticleHslAnimation, IParticleLife, IParticleNumericValueAnimation, IParticleRetinaProps, IParticleRoll, IParticleSpin, IParticleTiltValueAnimation, IParticleValueAnimation, IParticleWobble, IRgb, IShapeValues } from "./Interfaces";
2
+ import type { IBubbleParticleData, ICoordinates, ICoordinates3d, IDelta, IHsl, IParticle, IParticleGradientAnimation, IParticleGravity, IParticleHslAnimation, IParticleLife, IParticleNumericValueAnimation, IParticleRetinaProps, IParticleRoll, IParticleSpin, IParticleTiltValueAnimation, IParticleValueAnimation, IParticleWobble, IRgb, IShapeValues } from "./Interfaces";
3
3
  import { Vector, Vector3d } from "./Utils";
4
4
  import type { Container } from "./Container";
5
5
  import type { Engine } from "../engine";
@@ -13,6 +13,7 @@ export declare class Particle implements IParticle {
13
13
  readonly container: Container;
14
14
  readonly group?: string | undefined;
15
15
  destroyed: boolean;
16
+ ignoresResizeRatio: boolean;
16
17
  lastPathTime: number;
17
18
  misplaced: boolean;
18
19
  spawning: boolean;
@@ -36,6 +37,7 @@ export declare class Particle implements IParticle {
36
37
  strokeWidth?: number;
37
38
  stroke?: Stroke;
38
39
  strokeColor?: IParticleHslAnimation;
40
+ readonly gravity: IParticleGravity;
39
41
  readonly moveDecay: number;
40
42
  readonly direction: number;
41
43
  readonly position: Vector3d;
@@ -42,6 +42,7 @@ export class Particle {
42
42
  this.retina = {
43
43
  maxDistance: {},
44
44
  };
45
+ this.ignoresResizeRatio = true;
45
46
  const pxRatio = container.retina.pixelRatio;
46
47
  const mainOptions = container.actualOptions;
47
48
  const particlesOptions = new ParticlesOptions();
@@ -85,7 +86,7 @@ export class Particle {
85
86
  max: getRangeMax(sizeRange) * pxRatio,
86
87
  min: getRangeMin(sizeRange) * pxRatio,
87
88
  loops: 0,
88
- maxLoops: sizeOptions.animation.count,
89
+ maxLoops: getRangeValue(sizeOptions.animation.count),
89
90
  };
90
91
  const sizeAnimation = sizeOptions.animation;
91
92
  if (sizeAnimation.enable) {
@@ -119,6 +120,12 @@ export class Particle {
119
120
  this.initialVelocity = this.calculateVelocity();
120
121
  this.velocity = this.initialVelocity.copy();
121
122
  this.moveDecay = 1 - getRangeValue(this.options.move.decay);
123
+ const gravityOptions = this.options.move.gravity;
124
+ this.gravity = {
125
+ enable: gravityOptions.enable,
126
+ acceleration: getRangeValue(gravityOptions.acceleration),
127
+ inverse: gravityOptions.inverse,
128
+ };
122
129
  this.position = this.calcPosition(container, position, clamp(zIndexValue, 0, container.zLayers));
123
130
  this.initialPosition = this.position.copy();
124
131
  this.offset = Vector.origin;
@@ -326,12 +333,7 @@ export class Particle {
326
333
  return overlaps;
327
334
  }
328
335
  calculateVelocity() {
329
- const baseVelocity = getParticleBaseVelocity(this.direction);
330
- const res = baseVelocity.copy();
331
- const moveOptions = this.options.move;
332
- const rad = (Math.PI / 180) * moveOptions.angle.value;
333
- const radOffset = (Math.PI / 180) * moveOptions.angle.offset;
334
- const range = {
336
+ const baseVelocity = getParticleBaseVelocity(this.direction), res = baseVelocity.copy(), moveOptions = this.options.move, rad = (Math.PI / 180) * getRangeValue(moveOptions.angle.value), radOffset = (Math.PI / 180) * getRangeValue(moveOptions.angle.offset), range = {
335
337
  left: radOffset - rad / 2,
336
338
  right: radOffset + rad / 2,
337
339
  };
@@ -108,10 +108,11 @@ export class Particles {
108
108
  }
109
109
  for (const particle of this.array) {
110
110
  const resizeFactor = container.canvas.resizeFactor;
111
- if (resizeFactor) {
111
+ if (resizeFactor && !particle.ignoresResizeRatio) {
112
112
  particle.position.x *= resizeFactor.width;
113
113
  particle.position.y *= resizeFactor.height;
114
114
  }
115
+ particle.ignoresResizeRatio = false;
115
116
  particle.bubble.inRange = false;
116
117
  for (const [, plugin] of this.container.plugins) {
117
118
  if (particle.destroyed) {
@@ -40,13 +40,13 @@ export class Retina {
40
40
  container.canvas.size.height = element.offsetHeight * ratio;
41
41
  }
42
42
  const particles = options.particles;
43
- this.attractDistance = particles.move.attract.distance * ratio;
43
+ this.attractDistance = getRangeValue(particles.move.attract.distance) * ratio;
44
44
  this.linksDistance = particles.links.distance * ratio;
45
45
  this.linksWidth = particles.links.width * ratio;
46
- this.sizeAnimationSpeed = particles.size.animation.speed * ratio;
47
- this.maxSpeed = particles.move.gravity.maxSpeed * ratio;
46
+ this.sizeAnimationSpeed = getRangeValue(particles.size.animation.speed) * ratio;
47
+ this.maxSpeed = getRangeValue(particles.move.gravity.maxSpeed) * ratio;
48
48
  if (particles.orbit.radius !== undefined) {
49
- this.orbitRadius = particles.orbit.radius * this.container.retina.pixelRatio;
49
+ this.orbitRadius = getRangeValue(particles.orbit.radius) * this.container.retina.pixelRatio;
50
50
  }
51
51
  const modes = options.interactivity.modes;
52
52
  this.connectModeDistance = modes.connect.distance * ratio;
@@ -66,19 +66,19 @@ export class Retina {
66
66
  const ratio = this.pixelRatio;
67
67
  const moveDistance = options.move.distance;
68
68
  const props = particle.retina;
69
- props.attractDistance = options.move.attract.distance * ratio;
69
+ props.attractDistance = getRangeValue(options.move.attract.distance) * ratio;
70
70
  props.linksDistance = options.links.distance * ratio;
71
71
  props.linksWidth = options.links.width * ratio;
72
72
  props.moveDrift = getRangeValue(options.move.drift) * ratio;
73
73
  props.moveSpeed = getRangeValue(options.move.speed) * ratio;
74
- props.sizeAnimationSpeed = options.size.animation.speed * ratio;
74
+ props.sizeAnimationSpeed = getRangeValue(options.size.animation.speed) * ratio;
75
75
  if (particle.spin) {
76
76
  props.spinAcceleration = getRangeValue(options.move.spin.acceleration) * ratio;
77
77
  }
78
78
  const maxDistance = props.maxDistance;
79
79
  maxDistance.horizontal = moveDistance.horizontal !== undefined ? moveDistance.horizontal * ratio : undefined;
80
80
  maxDistance.vertical = moveDistance.vertical !== undefined ? moveDistance.vertical * ratio : undefined;
81
- props.maxSpeed = options.move.gravity.maxSpeed * ratio;
81
+ props.maxSpeed = getRangeValue(options.move.gravity.maxSpeed) * ratio;
82
82
  }
83
83
  handleMotionChange(mediaQuery) {
84
84
  const options = this.container.actualOptions;
@@ -52,7 +52,7 @@ export class ParticlesMover {
52
52
  const container = this.container, slowFactor = this.getProximitySpeedFactor(particle), baseSpeed = ((_a = (_d = particle.retina).moveSpeed) !== null && _a !== void 0 ? _a : (_d.moveSpeed = getRangeValue(moveOptions.speed) * container.retina.pixelRatio)) *
53
53
  container.retina.reduceFactor, moveDrift = ((_b = (_e = particle.retina).moveDrift) !== null && _b !== void 0 ? _b : (_e.moveDrift = getRangeValue(particle.options.move.drift) * container.retina.pixelRatio)), maxSize = getRangeMax(particleOptions.size.value) * container.retina.pixelRatio, sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : 1, diffFactor = 2, speedFactor = (sizeFactor * slowFactor * (delta.factor || 1)) / diffFactor, moveSpeed = baseSpeed * speedFactor;
54
54
  this.applyPath(particle, delta);
55
- const gravityOptions = moveOptions.gravity;
55
+ const gravityOptions = particle.gravity;
56
56
  const gravityFactor = gravityOptions.enable && gravityOptions.inverse ? -1 : 1;
57
57
  if (gravityOptions.enable && moveSpeed) {
58
58
  particle.velocity.y += (gravityFactor * (gravityOptions.acceleration * delta.factor)) / (60 * moveSpeed);
@@ -67,7 +67,7 @@ export class ParticlesMover {
67
67
  const velocity = particle.velocity.mult(moveSpeed);
68
68
  const maxSpeed = (_c = particle.retina.maxSpeed) !== null && _c !== void 0 ? _c : container.retina.maxSpeed;
69
69
  if (gravityOptions.enable &&
70
- gravityOptions.maxSpeed > 0 &&
70
+ maxSpeed > 0 &&
71
71
  ((!gravityOptions.inverse && velocity.y >= 0 && velocity.y >= maxSpeed) ||
72
72
  (gravityOptions.inverse && velocity.y <= 0 && velocity.y <= -maxSpeed))) {
73
73
  velocity.y = gravityFactor * maxSpeed;
@@ -1,4 +1,4 @@
1
- import { colorToRgb, drawLinkLine, drawLinkTriangle, getDistance, getLinkColor } from "../../../Utils";
1
+ import { colorToRgb, drawLinkLine, drawLinkTriangle, getDistance, getLinkColor, getRangeValue } from "../../../Utils";
2
2
  export class LinkInstance {
3
3
  constructor(container) {
4
4
  this.container = container;
@@ -99,7 +99,7 @@ export class LinkInstance {
99
99
  const twinkling = Math.random() < twinkleFreq;
100
100
  if (twinkling && twinkleRgb !== undefined) {
101
101
  colorLine = twinkleRgb;
102
- opacity = twinkle.opacity;
102
+ opacity = getRangeValue(twinkle.opacity);
103
103
  }
104
104
  }
105
105
  if (!colorLine) {
@@ -35,17 +35,17 @@ export declare class AnimatableGradientColor implements IAnimatableGradientColor
35
35
  load(data?: RecursivePartial<IAnimatableGradientColor>): void;
36
36
  }
37
37
  export declare class GradientAngleAnimation implements IAnimation, IOptionLoader<IAnimation> {
38
- count: number;
38
+ count: RangeValue;
39
39
  enable: boolean;
40
- speed: number;
40
+ speed: RangeValue;
41
41
  sync: boolean;
42
42
  constructor();
43
43
  load(data?: RecursivePartial<IAnimation>): void;
44
44
  }
45
45
  export declare class GradientColorOpacityAnimation implements IGradientColorOpacityAnimation, IOptionLoader<IGradientColorOpacityAnimation> {
46
- count: number;
46
+ count: RangeValue;
47
47
  enable: boolean;
48
- speed: number;
48
+ speed: RangeValue;
49
49
  sync: boolean;
50
50
  startValue: StartValueType | keyof typeof StartValueType;
51
51
  constructor();
@@ -93,13 +93,13 @@ export class GradientAngleAnimation {
93
93
  return;
94
94
  }
95
95
  if (data.count !== undefined) {
96
- this.count = data.count;
96
+ this.count = setRangeValue(data.count);
97
97
  }
98
98
  if (data.enable !== undefined) {
99
99
  this.enable = data.enable;
100
100
  }
101
101
  if (data.speed !== undefined) {
102
- this.speed = data.speed;
102
+ this.speed = setRangeValue(data.speed);
103
103
  }
104
104
  if (data.sync !== undefined) {
105
105
  this.sync = data.sync;
@@ -119,13 +119,13 @@ export class GradientColorOpacityAnimation {
119
119
  return;
120
120
  }
121
121
  if (data.count !== undefined) {
122
- this.count = data.count;
122
+ this.count = setRangeValue(data.count);
123
123
  }
124
124
  if (data.enable !== undefined) {
125
125
  this.enable = data.enable;
126
126
  }
127
127
  if (data.speed !== undefined) {
128
- this.speed = data.speed;
128
+ this.speed = setRangeValue(data.speed);
129
129
  }
130
130
  if (data.sync !== undefined) {
131
131
  this.sync = data.sync;
@@ -1,10 +1,10 @@
1
- import { IAnimation } from "../Interfaces/IAnimation";
2
- import { IOptionLoader } from "../Interfaces/IOptionLoader";
3
- import { RecursivePartial } from "../../Types";
1
+ import type { RangeValue, RecursivePartial } from "../../Types";
2
+ import type { IAnimation } from "../Interfaces/IAnimation";
3
+ import type { IOptionLoader } from "../Interfaces/IOptionLoader";
4
4
  export declare class AnimationOptions implements IAnimation, IOptionLoader<IAnimation> {
5
- count: number;
5
+ count: RangeValue;
6
6
  enable: boolean;
7
- speed: number;
7
+ speed: RangeValue;
8
8
  sync: boolean;
9
9
  constructor();
10
10
  load(data?: RecursivePartial<IAnimation>): void;