@tsparticles/engine 4.0.0-alpha.1 → 4.0.0-alpha.14

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 (429) hide show
  1. package/219.min.js +1 -0
  2. package/README.md +2 -5
  3. package/browser/Core/Canvas.js +238 -154
  4. package/browser/Core/Container.js +111 -227
  5. package/browser/Core/Engine.js +84 -124
  6. package/browser/Core/Particle.js +236 -140
  7. package/browser/Core/Particles.js +212 -123
  8. package/browser/Core/Retina.js +5 -0
  9. package/browser/Core/Utils/Constants.js +2 -2
  10. package/browser/Core/Utils/EventListeners.js +69 -310
  11. package/browser/Core/Utils/Point.js +2 -0
  12. package/browser/Core/Utils/QuadTree.js +13 -8
  13. package/browser/Core/Utils/Ranges.js +4 -0
  14. package/browser/Core/Utils/Vectors.js +7 -4
  15. package/browser/Enums/Types/EasingType.js +18 -3
  16. package/browser/Options/Classes/AnimatableColor.js +1 -0
  17. package/browser/Options/Classes/AnimationOptions.js +8 -0
  18. package/browser/Options/Classes/Background/Background.js +6 -0
  19. package/browser/Options/Classes/ColorAnimation.js +1 -0
  20. package/browser/Options/Classes/FullScreen/FullScreen.js +2 -0
  21. package/browser/Options/Classes/HslAnimation.js +3 -5
  22. package/browser/Options/Classes/Options.js +32 -78
  23. package/browser/Options/Classes/OptionsColor.js +1 -0
  24. package/browser/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  25. package/browser/Options/Classes/Particles/Effect/Effect.js +4 -0
  26. package/browser/Options/Classes/Particles/Move/Move.js +18 -0
  27. package/browser/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  28. package/browser/Options/Classes/Particles/Move/MoveAttract.js +3 -0
  29. package/browser/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  30. package/browser/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  31. package/browser/Options/Classes/Particles/Move/OutModes.js +5 -0
  32. package/browser/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  33. package/browser/Options/Classes/Particles/Move/Spin.js +3 -0
  34. package/browser/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  35. package/browser/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  36. package/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  37. package/browser/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  38. package/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  39. package/browser/Options/Classes/Particles/ParticlesOptions.js +19 -11
  40. package/browser/Options/Classes/Particles/Shape/Shape.js +4 -0
  41. package/browser/Options/Classes/Particles/Size/Size.js +1 -0
  42. package/browser/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  43. package/browser/Options/Classes/Particles/Stroke.js +3 -0
  44. package/browser/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  45. package/{esm/Options/Classes/Interactivity/Events → browser/Options/Classes}/ResizeEvent.js +3 -1
  46. package/browser/Options/Classes/ValueWithRandom.js +3 -4
  47. package/browser/Utils/CanvasUtils.js +31 -106
  48. package/browser/Utils/ColorUtils.js +17 -2
  49. package/browser/Utils/EventDispatcher.js +1 -0
  50. package/browser/Utils/MathUtils.js +3 -2
  51. package/browser/Utils/Utils.js +53 -44
  52. package/browser/exports.js +1 -21
  53. package/cjs/Core/Canvas.js +238 -154
  54. package/cjs/Core/Container.js +111 -227
  55. package/cjs/Core/Engine.js +84 -124
  56. package/cjs/Core/Particle.js +236 -140
  57. package/cjs/Core/Particles.js +212 -123
  58. package/cjs/Core/Retina.js +5 -0
  59. package/cjs/Core/Utils/Constants.js +2 -2
  60. package/cjs/Core/Utils/EventListeners.js +69 -310
  61. package/cjs/Core/Utils/Point.js +2 -0
  62. package/cjs/Core/Utils/QuadTree.js +13 -8
  63. package/cjs/Core/Utils/Ranges.js +4 -0
  64. package/cjs/Core/Utils/Vectors.js +7 -4
  65. package/cjs/Enums/Types/EasingType.js +18 -3
  66. package/cjs/Options/Classes/AnimatableColor.js +1 -0
  67. package/cjs/Options/Classes/AnimationOptions.js +8 -0
  68. package/cjs/Options/Classes/Background/Background.js +6 -0
  69. package/cjs/Options/Classes/ColorAnimation.js +1 -0
  70. package/cjs/Options/Classes/FullScreen/FullScreen.js +2 -0
  71. package/cjs/Options/Classes/HslAnimation.js +3 -5
  72. package/cjs/Options/Classes/Options.js +32 -78
  73. package/cjs/Options/Classes/OptionsColor.js +1 -0
  74. package/cjs/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  75. package/cjs/Options/Classes/Particles/Effect/Effect.js +4 -0
  76. package/cjs/Options/Classes/Particles/Move/Move.js +18 -0
  77. package/cjs/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  78. package/cjs/Options/Classes/Particles/Move/MoveAttract.js +3 -0
  79. package/cjs/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  80. package/cjs/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  81. package/cjs/Options/Classes/Particles/Move/OutModes.js +5 -0
  82. package/cjs/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  83. package/cjs/Options/Classes/Particles/Move/Spin.js +3 -0
  84. package/cjs/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  85. package/cjs/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  86. package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  87. package/cjs/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  88. package/cjs/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  89. package/cjs/Options/Classes/Particles/ParticlesOptions.js +19 -11
  90. package/cjs/Options/Classes/Particles/Shape/Shape.js +4 -0
  91. package/cjs/Options/Classes/Particles/Size/Size.js +1 -0
  92. package/cjs/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  93. package/cjs/Options/Classes/Particles/Stroke.js +3 -0
  94. package/cjs/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  95. package/cjs/Options/Classes/{Interactivity/Events/ResizeEvent.js → ResizeEvent.js} +3 -1
  96. package/cjs/Options/Classes/ValueWithRandom.js +3 -4
  97. package/cjs/Utils/CanvasUtils.js +31 -106
  98. package/cjs/Utils/ColorUtils.js +17 -2
  99. package/cjs/Utils/EventDispatcher.js +1 -0
  100. package/cjs/Utils/MathUtils.js +3 -2
  101. package/cjs/Utils/Utils.js +53 -44
  102. package/cjs/exports.js +1 -21
  103. package/dist_browser_Core_Container_js.js +8 -18
  104. package/esm/Core/Canvas.js +238 -154
  105. package/esm/Core/Container.js +111 -227
  106. package/esm/Core/Engine.js +84 -124
  107. package/esm/Core/Particle.js +236 -140
  108. package/esm/Core/Particles.js +212 -123
  109. package/esm/Core/Retina.js +5 -0
  110. package/esm/Core/Utils/Constants.js +2 -2
  111. package/esm/Core/Utils/EventListeners.js +69 -310
  112. package/esm/Core/Utils/Point.js +2 -0
  113. package/esm/Core/Utils/QuadTree.js +13 -8
  114. package/esm/Core/Utils/Ranges.js +4 -0
  115. package/esm/Core/Utils/Vectors.js +7 -4
  116. package/esm/Enums/Types/EasingType.js +18 -3
  117. package/esm/Options/Classes/AnimatableColor.js +1 -0
  118. package/esm/Options/Classes/AnimationOptions.js +8 -0
  119. package/esm/Options/Classes/Background/Background.js +6 -0
  120. package/esm/Options/Classes/ColorAnimation.js +1 -0
  121. package/esm/Options/Classes/FullScreen/FullScreen.js +2 -0
  122. package/esm/Options/Classes/HslAnimation.js +3 -5
  123. package/esm/Options/Classes/Options.js +32 -78
  124. package/esm/Options/Classes/OptionsColor.js +1 -0
  125. package/esm/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  126. package/esm/Options/Classes/Particles/Effect/Effect.js +4 -0
  127. package/esm/Options/Classes/Particles/Move/Move.js +18 -0
  128. package/esm/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  129. package/esm/Options/Classes/Particles/Move/MoveAttract.js +3 -0
  130. package/esm/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  131. package/esm/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  132. package/esm/Options/Classes/Particles/Move/OutModes.js +5 -0
  133. package/esm/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  134. package/esm/Options/Classes/Particles/Move/Spin.js +3 -0
  135. package/esm/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  136. package/esm/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  137. package/esm/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  138. package/esm/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  139. package/esm/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  140. package/esm/Options/Classes/Particles/ParticlesOptions.js +19 -11
  141. package/esm/Options/Classes/Particles/Shape/Shape.js +4 -0
  142. package/esm/Options/Classes/Particles/Size/Size.js +1 -0
  143. package/esm/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  144. package/esm/Options/Classes/Particles/Stroke.js +3 -0
  145. package/esm/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  146. package/{browser/Options/Classes/Interactivity/Events → esm/Options/Classes}/ResizeEvent.js +3 -1
  147. package/esm/Options/Classes/ValueWithRandom.js +3 -4
  148. package/esm/Utils/CanvasUtils.js +31 -106
  149. package/esm/Utils/ColorUtils.js +17 -2
  150. package/esm/Utils/EventDispatcher.js +1 -0
  151. package/esm/Utils/MathUtils.js +3 -2
  152. package/esm/Utils/Utils.js +53 -44
  153. package/esm/exports.js +1 -21
  154. package/package.json +1 -1
  155. package/report.html +3 -3
  156. package/scripts/install.js +28 -9
  157. package/tsparticles.engine.js +67 -247
  158. package/tsparticles.engine.min.js +2 -2
  159. package/types/Core/Canvas.d.ts +15 -4
  160. package/types/Core/Container.d.ts +5 -20
  161. package/types/Core/Engine.d.ts +18 -32
  162. package/types/Core/Interfaces/IColorManager.d.ts +0 -1
  163. package/types/Core/Interfaces/IContainerPlugin.d.ts +12 -2
  164. package/types/Core/Interfaces/IDrawParticleParams.d.ts +1 -1
  165. package/types/Core/Interfaces/IMovePathGenerator.d.ts +1 -2
  166. package/types/Core/Interfaces/IParticleOpacityData.d.ts +4 -0
  167. package/types/Core/Interfaces/IParticleRotateData.d.ts +4 -0
  168. package/types/Core/Interfaces/IParticleTransformValues.d.ts +4 -4
  169. package/types/Core/Interfaces/IParticleUpdater.d.ts +1 -1
  170. package/types/Core/Interfaces/IPlugin.d.ts +5 -1
  171. package/types/Core/Interfaces/IShapeDrawer.d.ts +0 -1
  172. package/types/Core/Particle.d.ts +13 -2
  173. package/types/Core/Particles.d.ts +17 -8
  174. package/types/Core/Utils/Constants.d.ts +2 -2
  175. package/types/Core/Utils/EventListeners.d.ts +0 -14
  176. package/types/Enums/Types/EasingType.d.ts +20 -5
  177. package/types/Options/Classes/HslAnimation.d.ts +3 -4
  178. package/types/Options/Classes/Options.d.ts +2 -11
  179. package/types/Options/Classes/Particles/ParticlesOptions.d.ts +0 -2
  180. package/types/Options/Classes/ResizeEvent.d.ts +9 -0
  181. package/types/Options/Classes/ValueWithRandom.d.ts +0 -1
  182. package/types/Options/Interfaces/IOptions.d.ts +2 -8
  183. package/types/Options/Interfaces/Particles/IParticlesOptions.d.ts +0 -3
  184. package/types/Types/CustomEventListener.d.ts +1 -1
  185. package/types/Types/EngineInitializers.d.ts +19 -0
  186. package/types/Utils/CanvasUtils.d.ts +6 -25
  187. package/types/Utils/EventDispatcher.d.ts +1 -1
  188. package/types/Utils/Utils.d.ts +5 -7
  189. package/types/export-types.d.ts +3 -19
  190. package/types/exports.d.ts +1 -21
  191. package/umd/Core/Canvas.js +236 -152
  192. package/umd/Core/Container.js +111 -227
  193. package/umd/Core/Engine.js +83 -123
  194. package/umd/Core/Particle.js +236 -140
  195. package/umd/Core/Particles.js +213 -124
  196. package/umd/Core/Retina.js +5 -0
  197. package/umd/Core/Utils/Constants.js +3 -3
  198. package/umd/Core/Utils/EventListeners.js +69 -310
  199. package/umd/Core/Utils/Point.js +2 -0
  200. package/umd/Core/Utils/QuadTree.js +13 -8
  201. package/umd/Core/Utils/Ranges.js +4 -0
  202. package/umd/Core/Utils/Vectors.js +7 -4
  203. package/umd/Enums/Types/EasingType.js +18 -3
  204. package/umd/Options/Classes/AnimatableColor.js +1 -0
  205. package/umd/Options/Classes/AnimationOptions.js +8 -0
  206. package/umd/Options/Classes/Background/Background.js +6 -0
  207. package/umd/Options/Classes/ColorAnimation.js +1 -0
  208. package/umd/Options/Classes/FullScreen/FullScreen.js +2 -0
  209. package/umd/Options/Classes/HslAnimation.js +3 -5
  210. package/umd/Options/Classes/Options.js +32 -78
  211. package/umd/Options/Classes/OptionsColor.js +1 -0
  212. package/umd/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -0
  213. package/umd/Options/Classes/Particles/Effect/Effect.js +4 -0
  214. package/umd/Options/Classes/Particles/Move/Move.js +18 -0
  215. package/umd/Options/Classes/Particles/Move/MoveAngle.js +2 -0
  216. package/umd/Options/Classes/Particles/Move/MoveAttract.js +3 -0
  217. package/umd/Options/Classes/Particles/Move/MoveCenter.js +4 -0
  218. package/umd/Options/Classes/Particles/Move/MoveGravity.js +4 -0
  219. package/umd/Options/Classes/Particles/Move/OutModes.js +5 -0
  220. package/umd/Options/Classes/Particles/Move/Path/MovePath.js +5 -0
  221. package/umd/Options/Classes/Particles/Move/Spin.js +3 -0
  222. package/umd/Options/Classes/Particles/Number/ParticlesDensity.js +3 -0
  223. package/umd/Options/Classes/Particles/Number/ParticlesNumber.js +3 -0
  224. package/umd/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -0
  225. package/umd/Options/Classes/Particles/Opacity/Opacity.js +1 -0
  226. package/umd/Options/Classes/Particles/Opacity/OpacityAnimation.js +1 -0
  227. package/umd/Options/Classes/Particles/ParticlesOptions.js +19 -11
  228. package/umd/Options/Classes/Particles/Shape/Shape.js +4 -0
  229. package/umd/Options/Classes/Particles/Size/Size.js +1 -0
  230. package/umd/Options/Classes/Particles/Size/SizeAnimation.js +1 -0
  231. package/umd/Options/Classes/Particles/Stroke.js +3 -0
  232. package/umd/Options/Classes/Particles/ZIndex/ZIndex.js +3 -0
  233. package/umd/Options/Classes/{Interactivity/Events/ResizeEvent.js → ResizeEvent.js} +4 -2
  234. package/umd/Options/Classes/ValueWithRandom.js +3 -4
  235. package/umd/Utils/CanvasUtils.js +30 -108
  236. package/umd/Utils/ColorUtils.js +17 -2
  237. package/umd/Utils/EventDispatcher.js +1 -0
  238. package/umd/Utils/MathUtils.js +3 -2
  239. package/umd/Utils/Utils.js +55 -48
  240. package/umd/exports.js +2 -22
  241. package/638.min.js +0 -2
  242. package/638.min.js.LICENSE.txt +0 -1
  243. package/browser/Core/Utils/ExternalInteractorBase.js +0 -7
  244. package/browser/Core/Utils/InteractionManager.js +0 -60
  245. package/browser/Core/Utils/ParticlesInteractorBase.js +0 -7
  246. package/browser/Enums/InteractivityDetect.js +0 -6
  247. package/browser/Enums/Modes/ResponsiveMode.js +0 -5
  248. package/browser/Enums/Modes/ThemeMode.js +0 -6
  249. package/browser/Enums/Types/DivType.js +0 -5
  250. package/browser/Enums/Types/InteractorType.js +0 -5
  251. package/browser/Options/Classes/Interactivity/Events/ClickEvent.js +0 -18
  252. package/browser/Options/Classes/Interactivity/Events/DivEvent.js +0 -27
  253. package/browser/Options/Classes/Interactivity/Events/Events.js +0 -30
  254. package/browser/Options/Classes/Interactivity/Events/HoverEvent.js +0 -21
  255. package/browser/Options/Classes/Interactivity/Events/Parallax.js +0 -22
  256. package/browser/Options/Classes/Interactivity/Interactivity.js +0 -22
  257. package/browser/Options/Classes/Interactivity/Modes/Modes.js +0 -25
  258. package/browser/Options/Classes/ManualParticle.js +0 -21
  259. package/browser/Options/Classes/Responsive.js +0 -29
  260. package/browser/Options/Classes/Theme/Theme.js +0 -21
  261. package/browser/Options/Classes/Theme/ThemeDefault.js +0 -23
  262. package/browser/Options/Interfaces/Interactivity/Events/IEvents.js +0 -1
  263. package/browser/Options/Interfaces/Interactivity/Events/IHoverEvent.js +0 -1
  264. package/browser/Options/Interfaces/Interactivity/Events/IParallax.js +0 -1
  265. package/browser/Options/Interfaces/Interactivity/IInteractivity.js +0 -1
  266. package/browser/Options/Interfaces/Interactivity/Modes/IModeDiv.js +0 -1
  267. package/browser/Options/Interfaces/Interactivity/Modes/IModes.js +0 -1
  268. package/browser/Options/Interfaces/Theme/ITheme.js +0 -1
  269. package/browser/Options/Interfaces/Theme/IThemeDefault.js +0 -1
  270. package/cjs/Core/Interfaces/IContainerInteractivity.js +0 -1
  271. package/cjs/Core/Interfaces/IExternalInteractor.js +0 -1
  272. package/cjs/Core/Interfaces/IInteractor.js +0 -1
  273. package/cjs/Core/Interfaces/IMouseData.js +0 -1
  274. package/cjs/Core/Interfaces/IParticlesInteractor.js +0 -1
  275. package/cjs/Core/Utils/ExternalInteractorBase.js +0 -7
  276. package/cjs/Core/Utils/InteractionManager.js +0 -60
  277. package/cjs/Core/Utils/ParticlesInteractorBase.js +0 -7
  278. package/cjs/Enums/InteractivityDetect.js +0 -6
  279. package/cjs/Enums/Modes/ResponsiveMode.js +0 -5
  280. package/cjs/Enums/Modes/ThemeMode.js +0 -6
  281. package/cjs/Enums/Types/DivType.js +0 -5
  282. package/cjs/Enums/Types/InteractorType.js +0 -5
  283. package/cjs/Options/Classes/Interactivity/Events/ClickEvent.js +0 -18
  284. package/cjs/Options/Classes/Interactivity/Events/DivEvent.js +0 -27
  285. package/cjs/Options/Classes/Interactivity/Events/Events.js +0 -30
  286. package/cjs/Options/Classes/Interactivity/Events/HoverEvent.js +0 -21
  287. package/cjs/Options/Classes/Interactivity/Events/Parallax.js +0 -22
  288. package/cjs/Options/Classes/Interactivity/Interactivity.js +0 -22
  289. package/cjs/Options/Classes/Interactivity/Modes/Modes.js +0 -25
  290. package/cjs/Options/Classes/ManualParticle.js +0 -21
  291. package/cjs/Options/Classes/Responsive.js +0 -29
  292. package/cjs/Options/Classes/Theme/Theme.js +0 -21
  293. package/cjs/Options/Classes/Theme/ThemeDefault.js +0 -23
  294. package/cjs/Options/Interfaces/IManualParticle.js +0 -1
  295. package/cjs/Options/Interfaces/IResponsive.js +0 -1
  296. package/cjs/Options/Interfaces/Interactivity/Events/IClickEvent.js +0 -1
  297. package/cjs/Options/Interfaces/Interactivity/Events/IDivEvent.js +0 -1
  298. package/cjs/Options/Interfaces/Interactivity/Events/IEvents.js +0 -1
  299. package/cjs/Options/Interfaces/Interactivity/Events/IHoverEvent.js +0 -1
  300. package/cjs/Options/Interfaces/Interactivity/Events/IParallax.js +0 -1
  301. package/cjs/Options/Interfaces/Interactivity/IInteractivity.js +0 -1
  302. package/cjs/Options/Interfaces/Interactivity/Modes/IModeDiv.js +0 -1
  303. package/cjs/Options/Interfaces/Interactivity/Modes/IModes.js +0 -1
  304. package/cjs/Options/Interfaces/Theme/ITheme.js +0 -1
  305. package/cjs/Options/Interfaces/Theme/IThemeDefault.js +0 -1
  306. package/esm/Core/Interfaces/IContainerInteractivity.js +0 -1
  307. package/esm/Core/Interfaces/IExternalInteractor.js +0 -1
  308. package/esm/Core/Interfaces/IInteractor.js +0 -1
  309. package/esm/Core/Interfaces/IMouseData.js +0 -1
  310. package/esm/Core/Interfaces/IParticlesInteractor.js +0 -1
  311. package/esm/Core/Utils/ExternalInteractorBase.js +0 -7
  312. package/esm/Core/Utils/InteractionManager.js +0 -60
  313. package/esm/Core/Utils/ParticlesInteractorBase.js +0 -7
  314. package/esm/Enums/InteractivityDetect.js +0 -6
  315. package/esm/Enums/Modes/ResponsiveMode.js +0 -5
  316. package/esm/Enums/Modes/ThemeMode.js +0 -6
  317. package/esm/Enums/Types/DivType.js +0 -5
  318. package/esm/Enums/Types/InteractorType.js +0 -5
  319. package/esm/Options/Classes/Interactivity/Events/ClickEvent.js +0 -18
  320. package/esm/Options/Classes/Interactivity/Events/DivEvent.js +0 -27
  321. package/esm/Options/Classes/Interactivity/Events/Events.js +0 -30
  322. package/esm/Options/Classes/Interactivity/Events/HoverEvent.js +0 -21
  323. package/esm/Options/Classes/Interactivity/Events/Parallax.js +0 -22
  324. package/esm/Options/Classes/Interactivity/Interactivity.js +0 -22
  325. package/esm/Options/Classes/Interactivity/Modes/Modes.js +0 -25
  326. package/esm/Options/Classes/ManualParticle.js +0 -21
  327. package/esm/Options/Classes/Responsive.js +0 -29
  328. package/esm/Options/Classes/Theme/Theme.js +0 -21
  329. package/esm/Options/Classes/Theme/ThemeDefault.js +0 -23
  330. package/esm/Options/Interfaces/IManualParticle.js +0 -1
  331. package/esm/Options/Interfaces/IResponsive.js +0 -1
  332. package/esm/Options/Interfaces/Interactivity/Events/IClickEvent.js +0 -1
  333. package/esm/Options/Interfaces/Interactivity/Events/IDivEvent.js +0 -1
  334. package/esm/Options/Interfaces/Interactivity/Events/IEvents.js +0 -1
  335. package/esm/Options/Interfaces/Interactivity/Events/IHoverEvent.js +0 -1
  336. package/esm/Options/Interfaces/Interactivity/Events/IParallax.js +0 -1
  337. package/esm/Options/Interfaces/Interactivity/IInteractivity.js +0 -1
  338. package/esm/Options/Interfaces/Interactivity/Modes/IModeDiv.js +0 -1
  339. package/esm/Options/Interfaces/Interactivity/Modes/IModes.js +0 -1
  340. package/esm/Options/Interfaces/Theme/ITheme.js +0 -1
  341. package/esm/Options/Interfaces/Theme/IThemeDefault.js +0 -1
  342. package/tsparticles.engine.min.js.LICENSE.txt +0 -1
  343. package/types/Core/Interfaces/IContainerInteractivity.d.ts +0 -6
  344. package/types/Core/Interfaces/IExternalInteractor.d.ts +0 -12
  345. package/types/Core/Interfaces/IInteractor.d.ts +0 -16
  346. package/types/Core/Interfaces/IMouseData.d.ts +0 -9
  347. package/types/Core/Interfaces/IParticlesInteractor.d.ts +0 -7
  348. package/types/Core/Utils/ExternalInteractorBase.d.ts +0 -15
  349. package/types/Core/Utils/InteractionManager.d.ts +0 -17
  350. package/types/Core/Utils/ParticlesInteractorBase.d.ts +0 -15
  351. package/types/Enums/InteractivityDetect.d.ts +0 -5
  352. package/types/Enums/Modes/ResponsiveMode.d.ts +0 -4
  353. package/types/Enums/Modes/ThemeMode.d.ts +0 -5
  354. package/types/Enums/Types/DivType.d.ts +0 -4
  355. package/types/Enums/Types/InteractorType.d.ts +0 -4
  356. package/types/Options/Classes/Interactivity/Events/ClickEvent.d.ts +0 -10
  357. package/types/Options/Classes/Interactivity/Events/DivEvent.d.ts +0 -13
  358. package/types/Options/Classes/Interactivity/Events/Events.d.ts +0 -16
  359. package/types/Options/Classes/Interactivity/Events/HoverEvent.d.ts +0 -12
  360. package/types/Options/Classes/Interactivity/Events/Parallax.d.ts +0 -10
  361. package/types/Options/Classes/Interactivity/Events/ResizeEvent.d.ts +0 -9
  362. package/types/Options/Classes/Interactivity/Interactivity.d.ts +0 -16
  363. package/types/Options/Classes/Interactivity/Modes/Modes.d.ts +0 -12
  364. package/types/Options/Classes/ManualParticle.d.ts +0 -10
  365. package/types/Options/Classes/Responsive.d.ts +0 -12
  366. package/types/Options/Classes/Theme/Theme.d.ts +0 -12
  367. package/types/Options/Classes/Theme/ThemeDefault.d.ts +0 -11
  368. package/types/Options/Interfaces/IManualParticle.d.ts +0 -7
  369. package/types/Options/Interfaces/IResponsive.d.ts +0 -7
  370. package/types/Options/Interfaces/Interactivity/Events/IClickEvent.d.ts +0 -5
  371. package/types/Options/Interfaces/Interactivity/Events/IDivEvent.d.ts +0 -8
  372. package/types/Options/Interfaces/Interactivity/Events/IEvents.d.ts +0 -11
  373. package/types/Options/Interfaces/Interactivity/Events/IHoverEvent.d.ts +0 -7
  374. package/types/Options/Interfaces/Interactivity/Events/IParallax.d.ts +0 -5
  375. package/types/Options/Interfaces/Interactivity/IInteractivity.d.ts +0 -9
  376. package/types/Options/Interfaces/Interactivity/Modes/IModeDiv.d.ts +0 -4
  377. package/types/Options/Interfaces/Interactivity/Modes/IModes.d.ts +0 -1
  378. package/types/Options/Interfaces/Theme/ITheme.d.ts +0 -7
  379. package/types/Options/Interfaces/Theme/IThemeDefault.d.ts +0 -6
  380. package/umd/Core/Interfaces/IMouseData.js +0 -12
  381. package/umd/Core/Interfaces/IParticlesInteractor.js +0 -12
  382. package/umd/Core/Utils/ExternalInteractorBase.js +0 -21
  383. package/umd/Core/Utils/InteractionManager.js +0 -74
  384. package/umd/Core/Utils/ParticlesInteractorBase.js +0 -21
  385. package/umd/Enums/InteractivityDetect.js +0 -19
  386. package/umd/Enums/Modes/ResponsiveMode.js +0 -18
  387. package/umd/Enums/Modes/ThemeMode.js +0 -19
  388. package/umd/Enums/Types/DivType.js +0 -18
  389. package/umd/Enums/Types/InteractorType.js +0 -18
  390. package/umd/Options/Classes/Interactivity/Events/ClickEvent.js +0 -32
  391. package/umd/Options/Classes/Interactivity/Events/DivEvent.js +0 -41
  392. package/umd/Options/Classes/Interactivity/Events/Events.js +0 -44
  393. package/umd/Options/Classes/Interactivity/Events/HoverEvent.js +0 -35
  394. package/umd/Options/Classes/Interactivity/Events/Parallax.js +0 -36
  395. package/umd/Options/Classes/Interactivity/Interactivity.js +0 -36
  396. package/umd/Options/Classes/Interactivity/Modes/Modes.js +0 -39
  397. package/umd/Options/Classes/ManualParticle.js +0 -35
  398. package/umd/Options/Classes/Responsive.js +0 -43
  399. package/umd/Options/Classes/Theme/Theme.js +0 -35
  400. package/umd/Options/Classes/Theme/ThemeDefault.js +0 -37
  401. package/umd/Options/Interfaces/IManualParticle.js +0 -12
  402. package/umd/Options/Interfaces/IResponsive.js +0 -12
  403. package/umd/Options/Interfaces/Interactivity/Events/IClickEvent.js +0 -12
  404. package/umd/Options/Interfaces/Interactivity/Events/IDivEvent.js +0 -12
  405. package/umd/Options/Interfaces/Interactivity/Events/IEvents.js +0 -12
  406. package/umd/Options/Interfaces/Interactivity/Events/IHoverEvent.js +0 -12
  407. package/umd/Options/Interfaces/Interactivity/Events/IParallax.js +0 -12
  408. package/umd/Options/Interfaces/Interactivity/IInteractivity.js +0 -12
  409. package/umd/Options/Interfaces/Interactivity/Modes/IModeDiv.js +0 -12
  410. package/umd/Options/Interfaces/Interactivity/Modes/IModes.js +0 -12
  411. package/umd/Options/Interfaces/Theme/ITheme.js +0 -12
  412. package/umd/Options/Interfaces/Theme/IThemeDefault.js +0 -12
  413. /package/browser/Core/Interfaces/{IContainerInteractivity.js → IParticleOpacityData.js} +0 -0
  414. /package/browser/Core/Interfaces/{IExternalInteractor.js → IParticleRotateData.js} +0 -0
  415. /package/browser/Options/Interfaces/{Interactivity/Events/IResizeEvent.js → IResizeEvent.js} +0 -0
  416. /package/browser/{Core/Interfaces/IInteractor.js → Types/EngineInitializers.js} +0 -0
  417. /package/{browser/Core/Interfaces/IMouseData.js → cjs/Core/Interfaces/IParticleOpacityData.js} +0 -0
  418. /package/{browser/Core/Interfaces/IParticlesInteractor.js → cjs/Core/Interfaces/IParticleRotateData.js} +0 -0
  419. /package/cjs/Options/Interfaces/{Interactivity/Events/IResizeEvent.js → IResizeEvent.js} +0 -0
  420. /package/{browser/Options/Interfaces/IManualParticle.js → cjs/Types/EngineInitializers.js} +0 -0
  421. /package/{browser/Options/Interfaces/IResponsive.js → esm/Core/Interfaces/IParticleOpacityData.js} +0 -0
  422. /package/{browser/Options/Interfaces/Interactivity/Events/IClickEvent.js → esm/Core/Interfaces/IParticleRotateData.js} +0 -0
  423. /package/esm/Options/Interfaces/{Interactivity/Events/IResizeEvent.js → IResizeEvent.js} +0 -0
  424. /package/{browser/Options/Interfaces/Interactivity/Events/IDivEvent.js → esm/Types/EngineInitializers.js} +0 -0
  425. /package/types/Options/Interfaces/{Interactivity/Events/IResizeEvent.d.ts → IResizeEvent.d.ts} +0 -0
  426. /package/umd/Core/Interfaces/{IContainerInteractivity.js → IParticleOpacityData.js} +0 -0
  427. /package/umd/Core/Interfaces/{IExternalInteractor.js → IParticleRotateData.js} +0 -0
  428. /package/umd/Options/Interfaces/{Interactivity/Events/IResizeEvent.js → IResizeEvent.js} +0 -0
  429. /package/umd/{Core/Interfaces/IInteractor.js → Types/EngineInitializers.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { animate, cancelAnimation, getRangeValue } from "../Utils/MathUtils.js";
2
- import { clickRadius, defaultFps, defaultFpsLimit, millisecondsToSeconds, minCoordinate, minFpsLimit, removeDeleteCount, removeMinIndex, touchEndLengthOffset, } from "./Utils/Constants.js";
2
+ import { defaultFps, defaultFpsLimit, millisecondsToSeconds, minFpsLimit, removeDeleteCount, removeMinIndex, } from "./Utils/Constants.js";
3
3
  import { Canvas } from "./Canvas.js";
4
4
  import { EventListeners } from "./Utils/EventListeners.js";
5
5
  import { EventType } from "../Enums/Types/EventType.js";
@@ -8,15 +8,12 @@ import { Particles } from "./Particles.js";
8
8
  import { Retina } from "./Retina.js";
9
9
  import { getLogger } from "../Utils/LogUtils.js";
10
10
  import { loadOptions } from "../Utils/OptionsUtils.js";
11
- import { safeIntersectionObserver } from "../Utils/Utils.js";
12
11
  function guardCheck(container) {
13
12
  return !container.destroyed;
14
13
  }
15
- function initDelta(value, fpsLimit = defaultFps, smooth = false) {
16
- return {
17
- value,
18
- factor: smooth ? defaultFps / fpsLimit : (defaultFps * value) / millisecondsToSeconds,
19
- };
14
+ function updateDelta(delta, value, fpsLimit = defaultFps, smooth = false) {
15
+ delta.value = value;
16
+ delta.factor = smooth ? defaultFps / fpsLimit : (defaultFps * value) / millisecondsToSeconds;
20
17
  }
21
18
  function loadContainerOptions(engine, container, ...sourceOptionsArr) {
22
19
  const options = new Options(engine, container);
@@ -24,52 +21,37 @@ function loadContainerOptions(engine, container, ...sourceOptionsArr) {
24
21
  return options;
25
22
  }
26
23
  export class Container {
24
+ actualOptions;
25
+ canvas;
26
+ destroyed;
27
+ fpsLimit;
28
+ hdr;
29
+ id;
30
+ pageHidden;
31
+ particleCreatedPlugins;
32
+ particleDestroyedPlugins;
33
+ particlePositionPlugins;
34
+ particles;
35
+ plugins;
36
+ retina;
37
+ started;
38
+ zLayers;
39
+ _delay;
40
+ _delayTimeout;
41
+ _delta = { value: 0, factor: 0 };
42
+ _drawAnimationFrame;
43
+ _duration;
44
+ _engine;
45
+ _eventListeners;
46
+ _firstStart;
47
+ _initialSourceOptions;
48
+ _lastFrameTime;
49
+ _lifeTime;
50
+ _options;
51
+ _paused;
52
+ _smooth;
53
+ _sourceOptions;
27
54
  constructor(engine, id, sourceOptions) {
28
- this._intersectionManager = entries => {
29
- if (!guardCheck(this) || !this.actualOptions.pauseOnOutsideViewport) {
30
- return;
31
- }
32
- for (const entry of entries) {
33
- if (entry.target !== this.interactivity.element) {
34
- continue;
35
- }
36
- if (entry.isIntersecting) {
37
- this.play();
38
- }
39
- else {
40
- this.pause();
41
- }
42
- }
43
- };
44
- this._nextFrame = (timestamp) => {
45
- try {
46
- if (!this._smooth &&
47
- this._lastFrameTime !== undefined &&
48
- timestamp < this._lastFrameTime + millisecondsToSeconds / this.fpsLimit) {
49
- this.draw(false);
50
- return;
51
- }
52
- this._lastFrameTime ??= timestamp;
53
- const delta = initDelta(timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);
54
- this.addLifeTime(delta.value);
55
- this._lastFrameTime = timestamp;
56
- if (delta.value > millisecondsToSeconds) {
57
- this.draw(false);
58
- return;
59
- }
60
- this.canvas.drawParticles(delta);
61
- if (!this.alive()) {
62
- this.destroy();
63
- return;
64
- }
65
- if (this.animationStatus) {
66
- this.draw(false);
67
- }
68
- }
69
- catch (e) {
70
- getLogger().error("error in animation loop", e);
71
- }
72
- };
73
55
  this._engine = engine;
74
56
  this.id = Symbol(id);
75
57
  this.fpsLimit = 120;
@@ -85,28 +67,18 @@ export class Container {
85
67
  this._lastFrameTime = 0;
86
68
  this.zLayers = 100;
87
69
  this.pageHidden = false;
88
- this._clickHandlers = new Map();
89
70
  this._sourceOptions = sourceOptions;
90
71
  this._initialSourceOptions = sourceOptions;
91
72
  this.retina = new Retina(this);
92
73
  this.canvas = new Canvas(this, this._engine);
93
74
  this.particles = new Particles(this._engine, this);
94
- this.pathGenerators = new Map();
95
- this.interactivity = {
96
- mouse: {
97
- clicking: false,
98
- inside: false,
99
- },
100
- };
101
- this.plugins = new Map();
102
- this.effectDrawers = new Map();
103
- this.shapeDrawers = new Map();
75
+ this.plugins = [];
76
+ this.particleDestroyedPlugins = [];
77
+ this.particleCreatedPlugins = [];
78
+ this.particlePositionPlugins = [];
104
79
  this._options = loadContainerOptions(this._engine, this);
105
80
  this.actualOptions = loadContainerOptions(this._engine, this);
106
81
  this._eventListeners = new EventListeners(this);
107
- this._intersectionObserver = safeIntersectionObserver(entries => {
108
- this._intersectionManager(entries);
109
- });
110
82
  this._engine.dispatchEvent(EventType.containerBuilt, { container: this });
111
83
  }
112
84
  get animationStatus() {
@@ -118,123 +90,27 @@ export class Container {
118
90
  get sourceOptions() {
119
91
  return this._sourceOptions;
120
92
  }
121
- addClickHandler(callback) {
122
- if (!guardCheck(this)) {
123
- return;
124
- }
125
- const el = this.interactivity.element;
126
- if (!el) {
127
- return;
128
- }
129
- const clickOrTouchHandler = (e, pos, radius) => {
130
- if (!guardCheck(this)) {
131
- return;
132
- }
133
- const pxRatio = this.retina.pixelRatio, posRetina = {
134
- x: pos.x * pxRatio,
135
- y: pos.y * pxRatio,
136
- }, particles = this.particles.quadTree.queryCircle(posRetina, radius * pxRatio);
137
- callback(e, particles);
138
- }, clickHandler = (e) => {
139
- if (!guardCheck(this)) {
140
- return;
141
- }
142
- const mouseEvent = e, pos = {
143
- x: mouseEvent.offsetX || mouseEvent.clientX,
144
- y: mouseEvent.offsetY || mouseEvent.clientY,
145
- };
146
- clickOrTouchHandler(e, pos, clickRadius);
147
- }, touchStartHandler = () => {
148
- if (!guardCheck(this)) {
149
- return;
150
- }
151
- touched = true;
152
- touchMoved = false;
153
- }, touchMoveHandler = () => {
154
- if (!guardCheck(this)) {
155
- return;
156
- }
157
- touchMoved = true;
158
- }, touchEndHandler = (e) => {
159
- if (!guardCheck(this)) {
160
- return;
161
- }
162
- if (touched && !touchMoved) {
163
- const touchEvent = e, lastTouch = touchEvent.touches[touchEvent.touches.length - touchEndLengthOffset];
164
- if (!lastTouch) {
165
- return;
166
- }
167
- const element = this.canvas.element, canvasRect = element ? element.getBoundingClientRect() : undefined, pos = {
168
- x: lastTouch.clientX - (canvasRect ? canvasRect.left : minCoordinate),
169
- y: lastTouch.clientY - (canvasRect ? canvasRect.top : minCoordinate),
170
- };
171
- clickOrTouchHandler(e, pos, Math.max(lastTouch.radiusX, lastTouch.radiusY));
172
- }
173
- touched = false;
174
- touchMoved = false;
175
- }, touchCancelHandler = () => {
176
- if (!guardCheck(this)) {
177
- return;
178
- }
179
- touched = false;
180
- touchMoved = false;
181
- };
182
- let touched = false, touchMoved = false;
183
- this._clickHandlers.set("click", clickHandler);
184
- this._clickHandlers.set("touchstart", touchStartHandler);
185
- this._clickHandlers.set("touchmove", touchMoveHandler);
186
- this._clickHandlers.set("touchend", touchEndHandler);
187
- this._clickHandlers.set("touchcancel", touchCancelHandler);
188
- for (const [key, handler] of this._clickHandlers) {
189
- el.addEventListener(key, handler);
190
- }
191
- }
192
93
  addLifeTime(value) {
193
94
  this._lifeTime += value;
194
95
  }
195
- addPath(key, generator, override = false) {
196
- if (!guardCheck(this) || (!override && this.pathGenerators.has(key))) {
197
- return false;
198
- }
199
- this.pathGenerators.set(key, generator);
200
- return true;
201
- }
202
96
  alive() {
203
97
  return !this._duration || this._lifeTime <= this._duration;
204
98
  }
205
- clearClickHandlers() {
206
- if (!guardCheck(this)) {
207
- return;
208
- }
209
- for (const [key, handler] of this._clickHandlers) {
210
- this.interactivity.element?.removeEventListener(key, handler);
211
- }
212
- this._clickHandlers.clear();
213
- }
214
99
  destroy(remove = true) {
215
100
  if (!guardCheck(this)) {
216
101
  return;
217
102
  }
218
103
  this.stop();
219
- this.clearClickHandlers();
220
104
  this.particles.destroy();
221
105
  this.canvas.destroy();
222
- for (const effectDrawer of this.effectDrawers.values()) {
223
- effectDrawer.destroy?.(this);
224
- }
225
- for (const shapeDrawer of this.shapeDrawers.values()) {
226
- shapeDrawer.destroy?.(this);
227
- }
228
- for (const key of this.effectDrawers.keys()) {
229
- this.effectDrawers.delete(key);
230
- }
231
- for (const key of this.shapeDrawers.keys()) {
232
- this.shapeDrawers.delete(key);
106
+ for (const plugin of this.plugins) {
107
+ plugin.destroy?.();
233
108
  }
109
+ this.plugins.length = 0;
234
110
  this._engine.clearPlugins(this);
235
111
  this.destroyed = true;
236
112
  if (remove) {
237
- const mainArr = this._engine.items, idx = mainArr.findIndex(t => t === this);
113
+ const mainArr = this._engine.items, idx = mainArr.indexOf(this);
238
114
  if (idx >= removeMinIndex) {
239
115
  mainArr.splice(idx, removeDeleteCount);
240
116
  }
@@ -258,7 +134,7 @@ export class Container {
258
134
  });
259
135
  }
260
136
  async export(type, options = {}) {
261
- for (const plugin of this.plugins.values()) {
137
+ for (const plugin of this.plugins) {
262
138
  if (!plugin.export) {
263
139
  continue;
264
140
  }
@@ -271,39 +147,38 @@ export class Container {
271
147
  getLogger().error(`Export plugin with type ${type} not found`);
272
148
  return undefined;
273
149
  }
274
- handleClickMode(mode) {
275
- if (!guardCheck(this)) {
276
- return;
277
- }
278
- this.particles.handleClickMode(mode);
279
- for (const plugin of this.plugins.values()) {
280
- plugin.handleClickMode?.(mode);
281
- }
282
- }
283
150
  async init() {
284
151
  if (!guardCheck(this)) {
285
152
  return;
286
153
  }
287
- const effects = this._engine.getSupportedEffects();
288
- for (const type of effects) {
289
- const drawer = this._engine.getEffectDrawer(type);
290
- if (drawer) {
291
- this.effectDrawers.set(type, drawer);
292
- }
293
- }
294
- const shapes = this._engine.getSupportedShapes();
295
- for (const type of shapes) {
296
- const drawer = this._engine.getShapeDrawer(type);
297
- if (drawer) {
298
- this.shapeDrawers.set(type, drawer);
154
+ const allContainerPlugins = new Map();
155
+ for (const plugin of this._engine.plugins) {
156
+ const containerPlugin = await plugin.getPlugin(this);
157
+ if (containerPlugin.preInit) {
158
+ await containerPlugin.preInit();
299
159
  }
160
+ allContainerPlugins.set(plugin, containerPlugin);
300
161
  }
301
162
  await this.particles.initPlugins();
302
163
  this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);
303
164
  this.actualOptions = loadContainerOptions(this._engine, this, this._options);
304
- const availablePlugins = await this._engine.getAvailablePlugins(this);
305
- for (const [id, plugin] of availablePlugins) {
306
- this.plugins.set(id, plugin);
165
+ this.plugins.length = 0;
166
+ this.particleDestroyedPlugins.length = 0;
167
+ this.particleCreatedPlugins.length = 0;
168
+ this.particlePositionPlugins.length = 0;
169
+ for (const [plugin, containerPlugin] of allContainerPlugins) {
170
+ if (plugin.needsPlugin(this.actualOptions)) {
171
+ this.plugins.push(containerPlugin);
172
+ if (containerPlugin.particleCreated) {
173
+ this.particleCreatedPlugins.push(containerPlugin);
174
+ }
175
+ if (containerPlugin.particleDestroyed) {
176
+ this.particleDestroyedPlugins.push(containerPlugin);
177
+ }
178
+ if (containerPlugin.particlePosition) {
179
+ this.particlePositionPlugins.push(containerPlugin);
180
+ }
181
+ }
307
182
  }
308
183
  this.retina.init();
309
184
  this.canvas.init();
@@ -318,30 +193,17 @@ export class Container {
318
193
  this._lifeTime = 0;
319
194
  this.fpsLimit = fpsLimit > minFpsLimit ? fpsLimit : defaultFpsLimit;
320
195
  this._smooth = smooth;
321
- for (const drawer of this.effectDrawers.values()) {
322
- await drawer.init?.(this);
323
- }
324
- for (const drawer of this.shapeDrawers.values()) {
325
- await drawer.init?.(this);
326
- }
327
- for (const plugin of this.plugins.values()) {
196
+ for (const plugin of this.plugins) {
328
197
  await plugin.init?.();
329
198
  }
330
- this._engine.dispatchEvent(EventType.containerInit, { container: this });
331
199
  await this.particles.init();
200
+ this._engine.dispatchEvent(EventType.containerInit, { container: this });
332
201
  this.particles.setDensity();
333
- for (const plugin of this.plugins.values()) {
202
+ for (const plugin of this.plugins) {
334
203
  plugin.particlesSetup?.();
335
204
  }
336
205
  this._engine.dispatchEvent(EventType.particlesSetup, { container: this });
337
206
  }
338
- async loadTheme(name) {
339
- if (!guardCheck(this)) {
340
- return;
341
- }
342
- this._currentTheme = name;
343
- await this.refresh();
344
- }
345
207
  pause() {
346
208
  if (!guardCheck(this)) {
347
209
  return;
@@ -353,7 +215,7 @@ export class Container {
353
215
  if (this._paused) {
354
216
  return;
355
217
  }
356
- for (const plugin of this.plugins.values()) {
218
+ for (const plugin of this.plugins) {
357
219
  plugin.pause?.();
358
220
  }
359
221
  if (!this.pageHidden) {
@@ -374,7 +236,7 @@ export class Container {
374
236
  this._paused = false;
375
237
  }
376
238
  if (needsUpdate) {
377
- for (const plugin of this.plugins.values()) {
239
+ for (const plugin of this.plugins) {
378
240
  if (plugin.play) {
379
241
  plugin.play();
380
242
  }
@@ -409,10 +271,7 @@ export class Container {
409
271
  await new Promise(resolve => {
410
272
  const start = async () => {
411
273
  this._eventListeners.addListeners();
412
- if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {
413
- this._intersectionObserver.observe(this.interactivity.element);
414
- }
415
- for (const plugin of this.plugins.values()) {
274
+ for (const plugin of this.plugins) {
416
275
  await plugin.start?.();
417
276
  }
418
277
  this._engine.dispatchEvent(EventType.containerStarted, { container: this });
@@ -436,26 +295,51 @@ export class Container {
436
295
  this.pause();
437
296
  this.particles.clear();
438
297
  this.canvas.stop();
439
- if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {
440
- this._intersectionObserver.unobserve(this.interactivity.element);
441
- }
442
- for (const plugin of this.plugins.values()) {
298
+ for (const plugin of this.plugins) {
443
299
  plugin.stop?.();
444
300
  }
445
- for (const key of this.plugins.keys()) {
446
- this.plugins.delete(key);
447
- }
301
+ this.particleCreatedPlugins.length = 0;
302
+ this.particleDestroyedPlugins.length = 0;
303
+ this.particlePositionPlugins.length = 0;
448
304
  this._sourceOptions = this._options;
449
305
  this._engine.dispatchEvent(EventType.containerStopped, { container: this });
450
306
  }
451
307
  updateActualOptions() {
452
- this.actualOptions.responsive = [];
453
- const newMaxWidth = this.actualOptions.setResponsive(this.canvas.size.width, this.retina.pixelRatio, this._options);
454
- this.actualOptions.setTheme(this._currentTheme);
455
- if (this._responsiveMaxWidth === newMaxWidth) {
456
- return false;
308
+ let refresh = false;
309
+ for (const plugin of this.plugins) {
310
+ if (plugin.updateActualOptions) {
311
+ refresh = plugin.updateActualOptions() || refresh;
312
+ }
457
313
  }
458
- this._responsiveMaxWidth = newMaxWidth;
459
- return true;
314
+ return refresh;
460
315
  }
316
+ _nextFrame = (timestamp) => {
317
+ try {
318
+ if (!this._smooth &&
319
+ this._lastFrameTime !== undefined &&
320
+ timestamp < this._lastFrameTime + millisecondsToSeconds / this.fpsLimit) {
321
+ this.draw(false);
322
+ return;
323
+ }
324
+ this._lastFrameTime ??= timestamp;
325
+ updateDelta(this._delta, timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);
326
+ this.addLifeTime(this._delta.value);
327
+ this._lastFrameTime = timestamp;
328
+ if (this._delta.value > millisecondsToSeconds) {
329
+ this.draw(false);
330
+ return;
331
+ }
332
+ this.canvas.drawParticles(this._delta);
333
+ if (!this.alive()) {
334
+ this.destroy();
335
+ return;
336
+ }
337
+ if (this.animationStatus) {
338
+ this.draw(false);
339
+ }
340
+ }
341
+ catch (e) {
342
+ getLogger().error("error in animation loop", e);
343
+ }
344
+ };
461
345
  }