@tsparticles/engine 3.9.1 → 4.0.0-alpha.1

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 (431) hide show
  1. package/638.min.js +2 -0
  2. package/638.min.js.LICENSE.txt +1 -0
  3. package/browser/Core/Canvas.js +126 -181
  4. package/browser/Core/Container.js +22 -18
  5. package/browser/Core/Engine.js +64 -54
  6. package/browser/Core/Particle.js +43 -48
  7. package/browser/Core/Particles.js +33 -24
  8. package/browser/Core/Retina.js +2 -3
  9. package/browser/Core/Utils/Constants.js +2 -2
  10. package/browser/Core/Utils/EventListeners.js +74 -64
  11. package/browser/Core/Utils/QuadTree.js +1 -1
  12. package/browser/Core/Utils/Ranges.js +2 -2
  13. package/browser/Core/Utils/Vectors.js +15 -21
  14. package/browser/Options/Classes/AnimatableColor.js +3 -3
  15. package/browser/Options/Classes/AnimationOptions.js +1 -1
  16. package/browser/Options/Classes/ColorAnimation.js +1 -1
  17. package/browser/Options/Classes/Options.js +13 -10
  18. package/browser/Options/Classes/Particles/Move/Move.js +1 -4
  19. package/browser/Options/Classes/Particles/Move/MoveAngle.js +1 -1
  20. package/browser/Options/Classes/Particles/Move/MoveAttract.js +1 -1
  21. package/browser/Options/Classes/Particles/Move/MoveGravity.js +1 -1
  22. package/browser/Options/Classes/Particles/Move/Spin.js +1 -1
  23. package/browser/Options/Classes/Particles/ParticlesOptions.js +0 -6
  24. package/browser/Options/Classes/Particles/Stroke.js +1 -1
  25. package/browser/Options/Classes/ValueWithRandom.js +1 -1
  26. package/browser/Utils/CanvasUtils.js +65 -21
  27. package/browser/Utils/ColorUtils.js +61 -45
  28. package/browser/Utils/EventDispatcher.js +3 -1
  29. package/browser/Utils/LogUtils.js +22 -0
  30. package/browser/Utils/{NumberUtils.js → MathUtils.js} +14 -7
  31. package/browser/Utils/Utils.js +23 -125
  32. package/browser/bundle.js +3 -3
  33. package/browser/export-types.js +1 -99
  34. package/browser/exports.js +2 -9
  35. package/browser/index.js +3 -7
  36. package/browser/initEngine.js +4 -0
  37. package/cjs/Core/Canvas.js +136 -195
  38. package/cjs/Core/Container.js +57 -57
  39. package/cjs/Core/Engine.js +77 -71
  40. package/cjs/Core/Interfaces/Colors.js +1 -2
  41. package/cjs/Core/Interfaces/IBounds.js +1 -2
  42. package/cjs/Core/Interfaces/IBubbleParticleData.js +1 -2
  43. package/cjs/Core/Interfaces/ICircleBouncer.js +1 -2
  44. package/cjs/Core/Interfaces/IColorManager.js +1 -2
  45. package/cjs/Core/Interfaces/IContainerInteractivity.js +1 -2
  46. package/cjs/Core/Interfaces/IContainerPlugin.js +1 -2
  47. package/cjs/Core/Interfaces/ICoordinates.js +1 -2
  48. package/cjs/Core/Interfaces/IDelta.js +1 -2
  49. package/cjs/Core/Interfaces/IDimension.js +1 -2
  50. package/cjs/Core/Interfaces/IDistance.js +1 -2
  51. package/cjs/Core/Interfaces/IDrawParticleParams.js +1 -2
  52. package/cjs/Core/Interfaces/IEffectDrawer.js +1 -2
  53. package/cjs/Core/Interfaces/IExternalInteractor.js +1 -2
  54. package/cjs/Core/Interfaces/IInteractor.js +1 -2
  55. package/cjs/Core/Interfaces/ILoadParams.js +1 -2
  56. package/cjs/Core/Interfaces/IMouseData.js +1 -2
  57. package/cjs/Core/Interfaces/IMovePathGenerator.js +1 -2
  58. package/cjs/Core/Interfaces/IParticleColorStyle.js +1 -2
  59. package/cjs/Core/Interfaces/IParticleHslAnimation.js +1 -2
  60. package/cjs/Core/Interfaces/IParticleLife.js +1 -2
  61. package/cjs/Core/Interfaces/IParticleMover.js +1 -2
  62. package/cjs/Core/Interfaces/IParticleRetinaProps.js +1 -2
  63. package/cjs/Core/Interfaces/IParticleRoll.js +1 -2
  64. package/cjs/Core/Interfaces/IParticleTransformValues.js +1 -2
  65. package/cjs/Core/Interfaces/IParticleUpdater.js +1 -2
  66. package/cjs/Core/Interfaces/IParticleValueAnimation.js +1 -2
  67. package/cjs/Core/Interfaces/IParticlesInteractor.js +1 -2
  68. package/cjs/Core/Interfaces/IPlugin.js +1 -2
  69. package/cjs/Core/Interfaces/IPositionFromSizeParams.js +1 -2
  70. package/cjs/Core/Interfaces/IRangeValue.js +1 -2
  71. package/cjs/Core/Interfaces/IShapeDrawData.js +1 -2
  72. package/cjs/Core/Interfaces/IShapeDrawer.js +1 -2
  73. package/cjs/Core/Interfaces/IShapeValues.js +1 -2
  74. package/cjs/Core/Interfaces/ISlowParticleData.js +1 -2
  75. package/cjs/Core/Particle.js +99 -108
  76. package/cjs/Core/Particles.js +63 -58
  77. package/cjs/Core/Retina.js +13 -18
  78. package/cjs/Core/Utils/Constants.js +3 -7
  79. package/cjs/Core/Utils/EventListeners.js +94 -88
  80. package/cjs/Core/Utils/ExternalInteractorBase.js +3 -7
  81. package/cjs/Core/Utils/InteractionManager.js +4 -8
  82. package/cjs/Core/Utils/ParticlesInteractorBase.js +3 -7
  83. package/cjs/Core/Utils/Point.js +1 -5
  84. package/cjs/Core/Utils/QuadTree.js +10 -14
  85. package/cjs/Core/Utils/Ranges.js +14 -20
  86. package/cjs/Core/Utils/Vectors.js +24 -35
  87. package/cjs/Enums/AnimationStatus.js +2 -5
  88. package/cjs/Enums/Directions/MoveDirection.js +2 -5
  89. package/cjs/Enums/Directions/OutModeDirection.js +2 -5
  90. package/cjs/Enums/Directions/RotateDirection.js +2 -5
  91. package/cjs/Enums/InteractivityDetect.js +2 -5
  92. package/cjs/Enums/Modes/AnimationMode.js +2 -5
  93. package/cjs/Enums/Modes/LimitMode.js +2 -5
  94. package/cjs/Enums/Modes/OutMode.js +2 -5
  95. package/cjs/Enums/Modes/PixelMode.js +2 -5
  96. package/cjs/Enums/Modes/ResponsiveMode.js +2 -5
  97. package/cjs/Enums/Modes/ThemeMode.js +2 -5
  98. package/cjs/Enums/Types/AlterType.js +2 -5
  99. package/cjs/Enums/Types/DestroyType.js +2 -5
  100. package/cjs/Enums/Types/DivType.js +2 -5
  101. package/cjs/Enums/Types/EasingType.js +2 -5
  102. package/cjs/Enums/Types/EventType.js +2 -5
  103. package/cjs/Enums/Types/GradientType.js +2 -5
  104. package/cjs/Enums/Types/InteractorType.js +2 -5
  105. package/cjs/Enums/Types/ParticleOutType.js +2 -5
  106. package/cjs/Enums/Types/StartValueType.js +2 -5
  107. package/cjs/Options/Classes/AnimatableColor.js +10 -14
  108. package/cjs/Options/Classes/AnimationOptions.js +14 -19
  109. package/cjs/Options/Classes/Background/Background.js +6 -10
  110. package/cjs/Options/Classes/ColorAnimation.js +6 -10
  111. package/cjs/Options/Classes/FullScreen/FullScreen.js +3 -7
  112. package/cjs/Options/Classes/HslAnimation.js +7 -11
  113. package/cjs/Options/Classes/Interactivity/Events/ClickEvent.js +3 -7
  114. package/cjs/Options/Classes/Interactivity/Events/DivEvent.js +5 -9
  115. package/cjs/Options/Classes/Interactivity/Events/Events.js +14 -18
  116. package/cjs/Options/Classes/Interactivity/Events/HoverEvent.js +5 -9
  117. package/cjs/Options/Classes/Interactivity/Events/Parallax.js +3 -7
  118. package/cjs/Options/Classes/Interactivity/Events/ResizeEvent.js +3 -7
  119. package/cjs/Options/Classes/Interactivity/Interactivity.js +9 -13
  120. package/cjs/Options/Classes/Interactivity/Modes/Modes.js +3 -7
  121. package/cjs/Options/Classes/ManualParticle.js +10 -14
  122. package/cjs/Options/Classes/Options.js +41 -42
  123. package/cjs/Options/Classes/OptionsColor.js +5 -9
  124. package/cjs/Options/Classes/Particles/Bounce/ParticlesBounce.js +6 -10
  125. package/cjs/Options/Classes/Particles/Bounce/ParticlesBounceFactor.js +2 -6
  126. package/cjs/Options/Classes/Particles/Effect/Effect.js +5 -9
  127. package/cjs/Options/Classes/Particles/Move/Move.js +26 -33
  128. package/cjs/Options/Classes/Particles/Move/MoveAngle.js +6 -10
  129. package/cjs/Options/Classes/Particles/Move/MoveAttract.js +5 -9
  130. package/cjs/Options/Classes/Particles/Move/MoveCenter.js +5 -9
  131. package/cjs/Options/Classes/Particles/Move/MoveGravity.js +6 -10
  132. package/cjs/Options/Classes/Particles/Move/OutModes.js +5 -9
  133. package/cjs/Options/Classes/Particles/Move/Path/MovePath.js +7 -11
  134. package/cjs/Options/Classes/Particles/Move/Spin.js +7 -11
  135. package/cjs/Options/Classes/Particles/Number/ParticlesDensity.js +3 -7
  136. package/cjs/Options/Classes/Particles/Number/ParticlesNumber.js +7 -11
  137. package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +5 -9
  138. package/cjs/Options/Classes/Particles/Opacity/Opacity.js +6 -10
  139. package/cjs/Options/Classes/Particles/Opacity/OpacityAnimation.js +6 -10
  140. package/cjs/Options/Classes/Particles/ParticlesOptions.js +29 -39
  141. package/cjs/Options/Classes/Particles/Shape/Shape.js +5 -9
  142. package/cjs/Options/Classes/Particles/Size/Size.js +6 -10
  143. package/cjs/Options/Classes/Particles/Size/SizeAnimation.js +6 -10
  144. package/cjs/Options/Classes/Particles/Stroke.js +8 -12
  145. package/cjs/Options/Classes/Particles/ZIndex/ZIndex.js +4 -8
  146. package/cjs/Options/Classes/Responsive.js +13 -17
  147. package/cjs/Options/Classes/Theme/Theme.js +7 -11
  148. package/cjs/Options/Classes/Theme/ThemeDefault.js +5 -9
  149. package/cjs/Options/Classes/ValueWithRandom.js +12 -18
  150. package/cjs/Options/Interfaces/Background/IBackground.js +1 -2
  151. package/cjs/Options/Interfaces/FullScreen/IFullScreen.js +1 -2
  152. package/cjs/Options/Interfaces/IAnimatable.js +1 -2
  153. package/cjs/Options/Interfaces/IAnimatableColor.js +1 -2
  154. package/cjs/Options/Interfaces/IAnimation.js +1 -2
  155. package/cjs/Options/Interfaces/IColorAnimation.js +1 -2
  156. package/cjs/Options/Interfaces/IHslAnimation.js +1 -2
  157. package/cjs/Options/Interfaces/IManualParticle.js +1 -2
  158. package/cjs/Options/Interfaces/IOptionLoader.js +1 -2
  159. package/cjs/Options/Interfaces/IOptions.js +1 -2
  160. package/cjs/Options/Interfaces/IOptionsColor.js +1 -2
  161. package/cjs/Options/Interfaces/IResponsive.js +1 -2
  162. package/cjs/Options/Interfaces/IValueWithRandom.js +1 -2
  163. package/cjs/Options/Interfaces/Interactivity/Events/IClickEvent.js +1 -2
  164. package/cjs/Options/Interfaces/Interactivity/Events/IDivEvent.js +1 -2
  165. package/cjs/Options/Interfaces/Interactivity/Events/IEvents.js +1 -2
  166. package/cjs/Options/Interfaces/Interactivity/Events/IHoverEvent.js +1 -2
  167. package/cjs/Options/Interfaces/Interactivity/Events/IParallax.js +1 -2
  168. package/cjs/Options/Interfaces/Interactivity/Events/IResizeEvent.js +1 -2
  169. package/cjs/Options/Interfaces/Interactivity/IInteractivity.js +1 -2
  170. package/cjs/Options/Interfaces/Interactivity/Modes/IModeDiv.js +1 -2
  171. package/cjs/Options/Interfaces/Interactivity/Modes/IModes.js +1 -2
  172. package/cjs/Options/Interfaces/Particles/Bounce/IParticlesBounce.js +1 -2
  173. package/cjs/Options/Interfaces/Particles/Effect/IEffect.js +1 -2
  174. package/cjs/Options/Interfaces/Particles/IParticlesOptions.js +1 -2
  175. package/cjs/Options/Interfaces/Particles/IStroke.js +1 -2
  176. package/cjs/Options/Interfaces/Particles/Move/IMove.js +1 -2
  177. package/cjs/Options/Interfaces/Particles/Move/IMoveAngle.js +1 -2
  178. package/cjs/Options/Interfaces/Particles/Move/IMoveAttract.js +1 -2
  179. package/cjs/Options/Interfaces/Particles/Move/IMoveCenter.js +1 -2
  180. package/cjs/Options/Interfaces/Particles/Move/IMoveGravity.js +1 -2
  181. package/cjs/Options/Interfaces/Particles/Move/IOutModes.js +1 -2
  182. package/cjs/Options/Interfaces/Particles/Move/ISpin.js +1 -2
  183. package/cjs/Options/Interfaces/Particles/Move/Path/IMovePath.js +1 -2
  184. package/cjs/Options/Interfaces/Particles/Number/IParticlesDensity.js +1 -2
  185. package/cjs/Options/Interfaces/Particles/Number/IParticlesNumber.js +1 -2
  186. package/cjs/Options/Interfaces/Particles/Number/IParticlesNumberLimit.js +1 -2
  187. package/cjs/Options/Interfaces/Particles/Opacity/IOpacity.js +1 -2
  188. package/cjs/Options/Interfaces/Particles/Opacity/IOpacityAnimation.js +1 -2
  189. package/cjs/Options/Interfaces/Particles/Shape/IShape.js +1 -2
  190. package/cjs/Options/Interfaces/Particles/Size/ISize.js +1 -2
  191. package/cjs/Options/Interfaces/Particles/Size/ISizeAnimation.js +1 -2
  192. package/cjs/Options/Interfaces/Particles/ZIndex/IZIndex.js +1 -2
  193. package/cjs/Options/Interfaces/Theme/ITheme.js +1 -2
  194. package/cjs/Options/Interfaces/Theme/IThemeDefault.js +1 -2
  195. package/cjs/Types/CustomEventArgs.js +1 -2
  196. package/cjs/Types/CustomEventListener.js +1 -2
  197. package/cjs/Types/EasingFunction.js +1 -2
  198. package/cjs/Types/ExportResult.js +1 -2
  199. package/cjs/Types/ISourceOptions.js +1 -2
  200. package/cjs/Types/ParticlesGroups.js +1 -2
  201. package/cjs/Types/PathOptions.js +1 -2
  202. package/cjs/Types/RangeValue.js +1 -2
  203. package/cjs/Types/RecursivePartial.js +1 -2
  204. package/cjs/Types/ShapeData.js +1 -2
  205. package/cjs/Types/SingleOrMultiple.js +1 -2
  206. package/cjs/Utils/CanvasUtils.js +86 -55
  207. package/cjs/Utils/ColorUtils.js +136 -141
  208. package/cjs/Utils/EventDispatcher.js +8 -10
  209. package/cjs/Utils/LogUtils.js +22 -0
  210. package/{esm/Utils/NumberUtils.js → cjs/Utils/MathUtils.js} +14 -7
  211. package/cjs/Utils/OptionsUtils.js +4 -8
  212. package/cjs/Utils/TypeUtils.js +7 -16
  213. package/cjs/Utils/Utils.js +104 -239
  214. package/cjs/bundle.js +5 -22
  215. package/cjs/export-types.js +1 -115
  216. package/cjs/exports.js +77 -100
  217. package/cjs/index.js +5 -26
  218. package/cjs/initEngine.js +4 -0
  219. package/dist_browser_Core_Container_js.js +102 -0
  220. package/esm/Core/Canvas.js +126 -181
  221. package/esm/Core/Container.js +22 -18
  222. package/esm/Core/Engine.js +64 -54
  223. package/esm/Core/Particle.js +43 -48
  224. package/esm/Core/Particles.js +33 -24
  225. package/esm/Core/Retina.js +2 -3
  226. package/esm/Core/Utils/Constants.js +2 -2
  227. package/esm/Core/Utils/EventListeners.js +74 -64
  228. package/esm/Core/Utils/QuadTree.js +1 -1
  229. package/esm/Core/Utils/Ranges.js +2 -2
  230. package/esm/Core/Utils/Vectors.js +15 -21
  231. package/esm/Enums/RangeType.js +5 -0
  232. package/esm/Options/Classes/AnimatableColor.js +3 -3
  233. package/esm/Options/Classes/AnimationOptions.js +1 -1
  234. package/esm/Options/Classes/ColorAnimation.js +1 -1
  235. package/esm/Options/Classes/Options.js +13 -10
  236. package/esm/Options/Classes/Particles/Move/Move.js +1 -4
  237. package/esm/Options/Classes/Particles/Move/MoveAngle.js +1 -1
  238. package/esm/Options/Classes/Particles/Move/MoveAttract.js +1 -1
  239. package/esm/Options/Classes/Particles/Move/MoveGravity.js +1 -1
  240. package/esm/Options/Classes/Particles/Move/Spin.js +1 -1
  241. package/esm/Options/Classes/Particles/ParticlesOptions.js +0 -6
  242. package/esm/Options/Classes/Particles/Stroke.js +1 -1
  243. package/esm/Options/Classes/ValueWithRandom.js +1 -1
  244. package/esm/Utils/CanvasUtils.js +65 -21
  245. package/esm/Utils/ColorUtils.js +61 -45
  246. package/esm/Utils/EventDispatcher.js +3 -1
  247. package/esm/Utils/LogUtils.js +22 -0
  248. package/esm/Utils/MathUtils.js +158 -0
  249. package/esm/Utils/Utils.js +23 -125
  250. package/esm/bundle.js +3 -3
  251. package/esm/export-types.js +1 -99
  252. package/esm/exports.js +2 -9
  253. package/esm/index.js +3 -7
  254. package/esm/initEngine.js +4 -0
  255. package/package.json +3 -2
  256. package/report.html +5 -4
  257. package/scripts/install.js +204 -118
  258. package/tsparticles.engine.js +492 -451
  259. package/tsparticles.engine.min.js +1 -1
  260. package/tsparticles.engine.min.js.LICENSE.txt +1 -1
  261. package/types/Core/Canvas.d.ts +6 -9
  262. package/types/Core/Container.d.ts +1 -0
  263. package/types/Core/Engine.d.ts +20 -16
  264. package/types/Core/Interfaces/Colors.d.ts +46 -2
  265. package/types/Core/Interfaces/IColorManager.d.ts +1 -1
  266. package/types/Core/Interfaces/IContainerPlugin.d.ts +4 -0
  267. package/types/Core/Interfaces/IDrawParticleParams.d.ts +0 -4
  268. package/types/Core/Interfaces/IEffectDrawer.d.ts +2 -1
  269. package/types/Core/Interfaces/IShapeDrawData.d.ts +2 -0
  270. package/types/Core/Interfaces/IShapeDrawer.d.ts +1 -0
  271. package/types/Core/Particle.d.ts +4 -5
  272. package/types/Core/Particles.d.ts +1 -1
  273. package/types/Core/Utils/Constants.d.ts +2 -2
  274. package/types/Core/Utils/EventListeners.d.ts +1 -0
  275. package/types/Core/Utils/Vectors.d.ts +3 -3
  276. package/types/Options/Classes/Options.d.ts +1 -2
  277. package/types/Options/Classes/OptionsColor.d.ts +2 -2
  278. package/types/Options/Classes/Particles/Move/Move.d.ts +0 -2
  279. package/types/Options/Classes/Particles/ParticlesOptions.d.ts +0 -4
  280. package/types/Options/Interfaces/IOptions.d.ts +1 -2
  281. package/types/Options/Interfaces/Particles/IParticlesOptions.d.ts +0 -4
  282. package/types/Options/Interfaces/Particles/Move/IMove.d.ts +0 -2
  283. package/types/Utils/CanvasUtils.d.ts +4 -1
  284. package/types/Utils/ColorUtils.d.ts +2 -2
  285. package/types/Utils/LogUtils.d.ts +11 -0
  286. package/types/Utils/{NumberUtils.d.ts → MathUtils.d.ts} +2 -1
  287. package/types/Utils/TypeUtils.d.ts +2 -2
  288. package/types/Utils/Utils.d.ts +4 -16
  289. package/types/export-types.d.ts +91 -101
  290. package/types/exports.d.ts +2 -9
  291. package/types/index.d.ts +1 -1
  292. package/types/initEngine.d.ts +2 -0
  293. package/umd/Core/Canvas.js +123 -178
  294. package/umd/Core/Container.js +25 -21
  295. package/umd/Core/Engine.js +97 -53
  296. package/umd/Core/Particle.js +54 -59
  297. package/umd/Core/Particles.js +33 -24
  298. package/umd/Core/Retina.js +9 -10
  299. package/umd/Core/Utils/Constants.js +3 -3
  300. package/umd/Core/Utils/EventListeners.js +72 -62
  301. package/umd/Core/Utils/QuadTree.js +3 -3
  302. package/umd/Core/Utils/Ranges.js +4 -4
  303. package/umd/Core/Utils/Vectors.js +15 -21
  304. package/umd/Options/Classes/AnimatableColor.js +3 -3
  305. package/umd/Options/Classes/AnimationOptions.js +6 -6
  306. package/umd/Options/Classes/ColorAnimation.js +3 -3
  307. package/umd/Options/Classes/Options.js +16 -13
  308. package/umd/Options/Classes/Particles/Move/Move.js +5 -8
  309. package/umd/Options/Classes/Particles/Move/MoveAngle.js +4 -4
  310. package/umd/Options/Classes/Particles/Move/MoveAttract.js +3 -3
  311. package/umd/Options/Classes/Particles/Move/MoveGravity.js +4 -4
  312. package/umd/Options/Classes/Particles/Move/Spin.js +3 -3
  313. package/umd/Options/Classes/Particles/ParticlesOptions.js +1 -7
  314. package/umd/Options/Classes/Particles/Stroke.js +4 -4
  315. package/umd/Options/Classes/ValueWithRandom.js +3 -3
  316. package/umd/Utils/CanvasUtils.js +69 -22
  317. package/umd/Utils/ColorUtils.js +72 -56
  318. package/umd/Utils/EventDispatcher.js +3 -1
  319. package/umd/Utils/LogUtils.js +36 -0
  320. package/umd/Utils/{NumberUtils.js → MathUtils.js} +16 -8
  321. package/umd/Utils/Utils.js +36 -141
  322. package/umd/bundle.js +4 -4
  323. package/umd/export-types.js +1 -114
  324. package/umd/exports.js +3 -10
  325. package/umd/index.js +4 -8
  326. package/umd/{init.js → initEngine.js} +3 -5
  327. package/browser/Core/Interfaces/IRectSideResult.js +0 -1
  328. package/browser/Core/Interfaces/ITrailFillData.js +0 -1
  329. package/browser/Enums/Modes/CollisionMode.js +0 -6
  330. package/browser/Options/Classes/BackgroundMask/BackgroundMask.js +0 -24
  331. package/browser/Options/Classes/BackgroundMask/BackgroundMaskCover.js +0 -21
  332. package/browser/Options/Classes/Particles/Collisions/Collisions.js +0 -33
  333. package/browser/Options/Classes/Particles/Collisions/CollisionsAbsorb.js +0 -14
  334. package/browser/Options/Classes/Particles/Collisions/CollisionsOverlap.js +0 -18
  335. package/browser/Options/Classes/Particles/Move/MoveTrail.js +0 -23
  336. package/browser/Options/Classes/Particles/Move/MoveTrailFill.js +0 -15
  337. package/browser/Options/Classes/Particles/Shadow.js +0 -35
  338. package/browser/Options/Interfaces/BackgroundMask/IBackgroundMask.js +0 -1
  339. package/browser/Options/Interfaces/BackgroundMask/IBackgroundMaskCover.js +0 -1
  340. package/browser/Options/Interfaces/Particles/Collisions/ICollisions.js +0 -1
  341. package/browser/Options/Interfaces/Particles/Collisions/ICollisionsAbsorb.js +0 -1
  342. package/browser/Options/Interfaces/Particles/Collisions/ICollisionsOverlap.js +0 -1
  343. package/browser/Options/Interfaces/Particles/IShadow.js +0 -1
  344. package/browser/Options/Interfaces/Particles/Move/IMoveTrail.js +0 -1
  345. package/browser/Options/Interfaces/Particles/Move/IMoveTrailFill.js +0 -1
  346. package/browser/init.js +0 -6
  347. package/cjs/Core/Interfaces/IRectSideResult.js +0 -2
  348. package/cjs/Core/Interfaces/ITrailFillData.js +0 -2
  349. package/cjs/Enums/Modes/CollisionMode.js +0 -9
  350. package/cjs/Options/Classes/BackgroundMask/BackgroundMask.js +0 -28
  351. package/cjs/Options/Classes/BackgroundMask/BackgroundMaskCover.js +0 -25
  352. package/cjs/Options/Classes/Particles/Collisions/Collisions.js +0 -37
  353. package/cjs/Options/Classes/Particles/Collisions/CollisionsAbsorb.js +0 -18
  354. package/cjs/Options/Classes/Particles/Collisions/CollisionsOverlap.js +0 -22
  355. package/cjs/Options/Classes/Particles/Move/MoveTrail.js +0 -27
  356. package/cjs/Options/Classes/Particles/Move/MoveTrailFill.js +0 -19
  357. package/cjs/Options/Classes/Particles/Shadow.js +0 -39
  358. package/cjs/Options/Interfaces/BackgroundMask/IBackgroundMask.js +0 -2
  359. package/cjs/Options/Interfaces/BackgroundMask/IBackgroundMaskCover.js +0 -2
  360. package/cjs/Options/Interfaces/Particles/Collisions/ICollisions.js +0 -2
  361. package/cjs/Options/Interfaces/Particles/Collisions/ICollisionsAbsorb.js +0 -2
  362. package/cjs/Options/Interfaces/Particles/Collisions/ICollisionsOverlap.js +0 -2
  363. package/cjs/Options/Interfaces/Particles/IShadow.js +0 -2
  364. package/cjs/Options/Interfaces/Particles/Move/IMoveTrail.js +0 -2
  365. package/cjs/Options/Interfaces/Particles/Move/IMoveTrailFill.js +0 -2
  366. package/cjs/Types/RangeType.js +0 -8
  367. package/cjs/Utils/NumberUtils.js +0 -177
  368. package/cjs/init.js +0 -9
  369. package/esm/Core/Interfaces/IRectSideResult.js +0 -1
  370. package/esm/Core/Interfaces/ITrailFillData.js +0 -1
  371. package/esm/Enums/Modes/CollisionMode.js +0 -6
  372. package/esm/Options/Classes/BackgroundMask/BackgroundMask.js +0 -24
  373. package/esm/Options/Classes/BackgroundMask/BackgroundMaskCover.js +0 -21
  374. package/esm/Options/Classes/Particles/Collisions/Collisions.js +0 -33
  375. package/esm/Options/Classes/Particles/Collisions/CollisionsAbsorb.js +0 -14
  376. package/esm/Options/Classes/Particles/Collisions/CollisionsOverlap.js +0 -18
  377. package/esm/Options/Classes/Particles/Move/MoveTrail.js +0 -23
  378. package/esm/Options/Classes/Particles/Move/MoveTrailFill.js +0 -15
  379. package/esm/Options/Classes/Particles/Shadow.js +0 -35
  380. package/esm/Options/Interfaces/BackgroundMask/IBackgroundMask.js +0 -1
  381. package/esm/Options/Interfaces/BackgroundMask/IBackgroundMaskCover.js +0 -1
  382. package/esm/Options/Interfaces/Particles/Collisions/ICollisions.js +0 -1
  383. package/esm/Options/Interfaces/Particles/Collisions/ICollisionsAbsorb.js +0 -1
  384. package/esm/Options/Interfaces/Particles/Collisions/ICollisionsOverlap.js +0 -1
  385. package/esm/Options/Interfaces/Particles/IShadow.js +0 -1
  386. package/esm/Options/Interfaces/Particles/Move/IMoveTrail.js +0 -1
  387. package/esm/Options/Interfaces/Particles/Move/IMoveTrailFill.js +0 -1
  388. package/esm/init.js +0 -6
  389. package/types/Core/Interfaces/IRectSideResult.d.ts +0 -5
  390. package/types/Core/Interfaces/ITrailFillData.d.ts +0 -6
  391. package/types/Enums/Modes/CollisionMode.d.ts +0 -5
  392. package/types/Options/Classes/BackgroundMask/BackgroundMask.d.ts +0 -11
  393. package/types/Options/Classes/BackgroundMask/BackgroundMaskCover.d.ts +0 -11
  394. package/types/Options/Classes/Particles/Collisions/Collisions.d.ts +0 -18
  395. package/types/Options/Classes/Particles/Collisions/CollisionsAbsorb.d.ts +0 -8
  396. package/types/Options/Classes/Particles/Collisions/CollisionsOverlap.d.ts +0 -9
  397. package/types/Options/Classes/Particles/Move/MoveTrail.d.ts +0 -11
  398. package/types/Options/Classes/Particles/Move/MoveTrailFill.d.ts +0 -9
  399. package/types/Options/Classes/Particles/Shadow.d.ts +0 -13
  400. package/types/Options/Interfaces/BackgroundMask/IBackgroundMask.d.ts +0 -8
  401. package/types/Options/Interfaces/BackgroundMask/IBackgroundMaskCover.d.ts +0 -6
  402. package/types/Options/Interfaces/Particles/Collisions/ICollisions.d.ts +0 -13
  403. package/types/Options/Interfaces/Particles/Collisions/ICollisionsAbsorb.d.ts +0 -3
  404. package/types/Options/Interfaces/Particles/Collisions/ICollisionsOverlap.d.ts +0 -4
  405. package/types/Options/Interfaces/Particles/IShadow.d.ts +0 -8
  406. package/types/Options/Interfaces/Particles/Move/IMoveTrail.d.ts +0 -6
  407. package/types/Options/Interfaces/Particles/Move/IMoveTrailFill.d.ts +0 -5
  408. package/types/init.d.ts +0 -2
  409. package/umd/Core/Interfaces/IRectSideResult.js +0 -12
  410. package/umd/Core/Interfaces/ITrailFillData.js +0 -12
  411. package/umd/Enums/Modes/CollisionMode.js +0 -19
  412. package/umd/Options/Classes/BackgroundMask/BackgroundMask.js +0 -38
  413. package/umd/Options/Classes/BackgroundMask/BackgroundMaskCover.js +0 -35
  414. package/umd/Options/Classes/Particles/Collisions/Collisions.js +0 -47
  415. package/umd/Options/Classes/Particles/Collisions/CollisionsAbsorb.js +0 -28
  416. package/umd/Options/Classes/Particles/Collisions/CollisionsOverlap.js +0 -32
  417. package/umd/Options/Classes/Particles/Move/MoveTrail.js +0 -37
  418. package/umd/Options/Classes/Particles/Move/MoveTrailFill.js +0 -29
  419. package/umd/Options/Classes/Particles/Shadow.js +0 -49
  420. package/umd/Options/Interfaces/BackgroundMask/IBackgroundMask.js +0 -12
  421. package/umd/Options/Interfaces/BackgroundMask/IBackgroundMaskCover.js +0 -12
  422. package/umd/Options/Interfaces/Particles/Collisions/ICollisions.js +0 -12
  423. package/umd/Options/Interfaces/Particles/Collisions/ICollisionsAbsorb.js +0 -12
  424. package/umd/Options/Interfaces/Particles/Collisions/ICollisionsOverlap.js +0 -12
  425. package/umd/Options/Interfaces/Particles/IShadow.js +0 -12
  426. package/umd/Options/Interfaces/Particles/Move/IMoveTrail.js +0 -12
  427. package/umd/Options/Interfaces/Particles/Move/IMoveTrailFill.js +0 -12
  428. /package/browser/{Types → Enums}/RangeType.js +0 -0
  429. /package/{esm/Types → cjs/Enums}/RangeType.js +0 -0
  430. /package/types/{Types → Enums}/RangeType.d.ts +0 -0
  431. /package/umd/{Types → Enums}/RangeType.js +0 -0
@@ -1,6 +1,11 @@
1
- import { defaultAngle, defaultTransform, identity, lFactor, minStrokeWidth, originPoint, } from "../Core/Utils/Constants.js";
1
+ import { defaultTransform, identity, lFactor, minStrokeWidth, originPoint } from "../Core/Utils/Constants.js";
2
2
  import { AlterType } from "../Enums/Types/AlterType.js";
3
- import { getStyleFromRgb } from "./ColorUtils.js";
3
+ export function clearDrawPlugin(context, plugin, delta) {
4
+ if (!plugin.clearDraw) {
5
+ return;
6
+ }
7
+ plugin.clearDraw(context, delta);
8
+ }
4
9
  export function drawLine(context, begin, end) {
5
10
  context.beginPath();
6
11
  context.moveTo(begin.x, begin.y);
@@ -23,26 +28,16 @@ export function clear(context, dimension) {
23
28
  context.clearRect(originPoint.x, originPoint.y, dimension.width, dimension.height);
24
29
  }
25
30
  export function drawParticle(data) {
26
- const { container, context, particle, delta, colorStyles, backgroundMask, composite, radius, opacity, shadow, transform, } = data, pos = particle.getPosition(), angle = particle.rotation + (particle.pathRotation ? particle.velocity.angle : defaultAngle), rotateData = {
31
+ const { container, context, particle, delta, colorStyles, radius, opacity, transform } = data, pos = particle.getPosition(), angle = particle.getAngle(), rotateData = {
27
32
  sin: Math.sin(angle),
28
33
  cos: Math.cos(angle),
29
- }, rotating = !!angle, transformData = {
34
+ }, rotating = particle.isRotating, transformData = {
30
35
  a: rotateData.cos * (transform.a ?? defaultTransform.a),
31
36
  b: rotating ? rotateData.sin * (transform.b ?? identity) : (transform.b ?? defaultTransform.b),
32
37
  c: rotating ? -rotateData.sin * (transform.c ?? identity) : (transform.c ?? defaultTransform.c),
33
38
  d: rotateData.cos * (transform.d ?? defaultTransform.d),
34
39
  };
35
40
  context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);
36
- if (backgroundMask) {
37
- context.globalCompositeOperation = composite;
38
- }
39
- const shadowColor = particle.shadowColor;
40
- if (shadow.enable && shadowColor) {
41
- context.shadowBlur = shadow.blur;
42
- context.shadowColor = getStyleFromRgb(shadowColor);
43
- context.shadowOffsetX = shadow.offset.x;
44
- context.shadowOffsetY = shadow.offset.y;
45
- }
46
41
  if (colorStyles.fill) {
47
42
  context.fillStyle = colorStyles.fill;
48
43
  }
@@ -61,28 +56,52 @@ export function drawParticle(data) {
61
56
  transformData,
62
57
  strokeWidth,
63
58
  };
59
+ drawBeforeEffect(drawData);
60
+ drawShapeBeforeDraw(drawData);
64
61
  drawShape(drawData);
65
62
  drawShapeAfterDraw(drawData);
66
- drawEffect(drawData);
67
- context.globalCompositeOperation = "source-over";
63
+ drawAfterEffect(drawData);
68
64
  context.resetTransform();
69
65
  }
70
- export function drawEffect(data) {
71
- const { container, context, particle, radius, opacity, delta, transformData } = data;
66
+ export function drawAfterEffect(data) {
67
+ const { container, context, particle, radius, opacity, strokeWidth, delta, transformData } = data;
68
+ if (!particle.effect) {
69
+ return;
70
+ }
71
+ const drawer = container.effectDrawers.get(particle.effect), drawFunc = drawer?.drawAfter;
72
+ if (!drawFunc) {
73
+ return;
74
+ }
75
+ drawFunc({
76
+ context,
77
+ particle,
78
+ radius,
79
+ opacity,
80
+ delta,
81
+ pixelRatio: container.retina.pixelRatio,
82
+ fill: particle.shapeFill,
83
+ stroke: strokeWidth > minStrokeWidth || !particle.shapeFill,
84
+ transformData: { ...transformData },
85
+ });
86
+ }
87
+ export function drawBeforeEffect(data) {
88
+ const { container, context, particle, radius, opacity, strokeWidth, delta, transformData } = data;
72
89
  if (!particle.effect) {
73
90
  return;
74
91
  }
75
92
  const drawer = container.effectDrawers.get(particle.effect);
76
- if (!drawer) {
93
+ if (!drawer?.drawBefore) {
77
94
  return;
78
95
  }
79
- drawer.draw({
96
+ drawer.drawBefore({
80
97
  context,
81
98
  particle,
82
99
  radius,
83
100
  opacity,
84
101
  delta,
85
102
  pixelRatio: container.retina.pixelRatio,
103
+ fill: particle.shapeFill,
104
+ stroke: strokeWidth > minStrokeWidth || !particle.shapeFill,
86
105
  transformData: { ...transformData },
87
106
  });
88
107
  }
@@ -103,6 +122,8 @@ export function drawShape(data) {
103
122
  opacity,
104
123
  delta,
105
124
  pixelRatio: container.retina.pixelRatio,
125
+ fill: particle.shapeFill,
126
+ stroke: strokeWidth > minStrokeWidth || !particle.shapeFill,
106
127
  transformData: { ...transformData },
107
128
  });
108
129
  if (particle.shapeClose) {
@@ -116,7 +137,7 @@ export function drawShape(data) {
116
137
  }
117
138
  }
118
139
  export function drawShapeAfterDraw(data) {
119
- const { container, context, particle, radius, opacity, delta, transformData } = data;
140
+ const { container, context, particle, radius, opacity, strokeWidth, delta, transformData } = data;
120
141
  if (!particle.shape) {
121
142
  return;
122
143
  }
@@ -131,6 +152,29 @@ export function drawShapeAfterDraw(data) {
131
152
  opacity,
132
153
  delta,
133
154
  pixelRatio: container.retina.pixelRatio,
155
+ fill: particle.shapeFill,
156
+ stroke: strokeWidth > minStrokeWidth || !particle.shapeFill,
157
+ transformData: { ...transformData },
158
+ });
159
+ }
160
+ export function drawShapeBeforeDraw(data) {
161
+ const { container, context, particle, radius, opacity, strokeWidth, delta, transformData } = data;
162
+ if (!particle.shape) {
163
+ return;
164
+ }
165
+ const drawer = container.shapeDrawers.get(particle.shape);
166
+ if (!drawer?.beforeDraw) {
167
+ return;
168
+ }
169
+ drawer.beforeDraw({
170
+ context,
171
+ particle,
172
+ radius,
173
+ opacity,
174
+ delta,
175
+ pixelRatio: container.retina.pixelRatio,
176
+ fill: particle.shapeFill,
177
+ stroke: strokeWidth > minStrokeWidth || !particle.shapeFill,
134
178
  transformData: { ...transformData },
135
179
  });
136
180
  }
@@ -1,5 +1,5 @@
1
- import { clamp, getRandom, getRangeMax, getRangeMin, getRangeValue, mix, randomInRange, setRangeValue, } from "./NumberUtils.js";
2
- import { decayOffset, defaultLoops, defaultOpacity, defaultRgbMin, defaultTime, defaultVelocity, double, hMax, hMin, hPhase, half, identity, lMax, lMin, midColorValue, millisecondsToSeconds, percentDenominator, phaseNumerator, randomColorValue, rgbFactor, rgbMax, sMax, sMin, sNormalizedOffset, sextuple, triple, } from "../Core/Utils/Constants.js";
1
+ import { clamp, getRandom, getRandomInRange, getRangeMax, getRangeMin, getRangeValue, mix, randomInRangeValue, setRangeValue, } from "./MathUtils.js";
2
+ import { decayOffset, defaultLoops, defaultOpacity, defaultRgbMin, defaultTime, defaultVelocity, double, hMax, hMin, hPhase, half, identity, lMax, lMin, midColorValue, millisecondsToSeconds, percentDenominator, phaseNumerator, randomColorValue, rgbMax, sMax, sMin, sNormalizedOffset, sextuple, triple, } from "../Core/Utils/Constants.js";
3
3
  import { isArray, isString } from "./TypeUtils.js";
4
4
  import { AnimationStatus } from "../Enums/AnimationStatus.js";
5
5
  import { itemFromArray } from "./Utils.js";
@@ -8,10 +8,11 @@ function stringToRgba(engine, input) {
8
8
  return;
9
9
  }
10
10
  for (const manager of engine.colorManagers.values()) {
11
- if (input.startsWith(manager.stringPrefix)) {
11
+ if (manager.accepts(input)) {
12
12
  return manager.parseString(input);
13
13
  }
14
14
  }
15
+ return undefined;
15
16
  }
16
17
  export function rangeColorToRgb(engine, input, index, useIndex = true) {
17
18
  if (!input) {
@@ -22,8 +23,12 @@ export function rangeColorToRgb(engine, input, index, useIndex = true) {
22
23
  return colorToRgb(engine, color.value, index, useIndex);
23
24
  }
24
25
  if (isArray(color.value)) {
26
+ const value = itemFromArray(color.value, index, useIndex);
27
+ if (!value) {
28
+ return;
29
+ }
25
30
  return rangeColorToRgb(engine, {
26
- value: itemFromArray(color.value, index, useIndex),
31
+ value,
27
32
  });
28
33
  }
29
34
  for (const manager of engine.colorManagers.values()) {
@@ -32,6 +37,7 @@ export function rangeColorToRgb(engine, input, index, useIndex = true) {
32
37
  return res;
33
38
  }
34
39
  }
40
+ return undefined;
35
41
  }
36
42
  export function colorToRgb(engine, input, index, useIndex = true) {
37
43
  if (!input) {
@@ -42,8 +48,12 @@ export function colorToRgb(engine, input, index, useIndex = true) {
42
48
  return color.value === randomColorValue ? getRandomRgbColor() : stringToRgb(engine, color.value);
43
49
  }
44
50
  if (isArray(color.value)) {
51
+ const value = itemFromArray(color.value, index, useIndex);
52
+ if (!value) {
53
+ return;
54
+ }
45
55
  return colorToRgb(engine, {
46
- value: itemFromArray(color.value, index, useIndex),
56
+ value,
47
57
  });
48
58
  }
49
59
  for (const manager of engine.colorManagers.values()) {
@@ -52,6 +62,7 @@ export function colorToRgb(engine, input, index, useIndex = true) {
52
62
  return res;
53
63
  }
54
64
  }
65
+ return undefined;
55
66
  }
56
67
  export function colorToHsl(engine, color, index, useIndex = true) {
57
68
  const rgb = colorToRgb(engine, color, index, useIndex);
@@ -69,10 +80,15 @@ export function rgbToHsl(color) {
69
80
  };
70
81
  if (max !== min) {
71
82
  res.s = res.l < half ? (max - min) / (max + min) : (max - min) / (double - max - min);
72
- res.h =
73
- r1 === max
74
- ? (g1 - b1) / (max - min)
75
- : (res.h = g1 === max ? double + (b1 - r1) / (max - min) : double * double + (r1 - g1) / (max - min));
83
+ if (r1 === max) {
84
+ res.h = (g1 - b1) / (max - min);
85
+ }
86
+ else if (g1 === max) {
87
+ res.h = double + (b1 - r1) / (max - min);
88
+ }
89
+ else {
90
+ res.h = double * double + (r1 - g1) / (max - min);
91
+ }
76
92
  }
77
93
  res.l *= lMax;
78
94
  res.s *= sMax;
@@ -94,7 +110,7 @@ export function stringToRgb(engine, input) {
94
110
  export function hslToRgb(hsl) {
95
111
  const h = ((hsl.h % hMax) + hMax) % hMax, s = Math.max(sMin, Math.min(sMax, hsl.s)), l = Math.max(lMin, Math.min(lMax, hsl.l)), hNormalized = h / hMax, sNormalized = s / sMax, lNormalized = l / lMax;
96
112
  if (s === sMin) {
97
- const grayscaleValue = Math.round(lNormalized * rgbFactor);
113
+ const grayscaleValue = Math.round(lNormalized * rgbMax);
98
114
  return { r: grayscaleValue, g: grayscaleValue, b: grayscaleValue };
99
115
  }
100
116
  const channel = (temp1, temp2, temp3) => {
@@ -118,7 +134,7 @@ export function hslToRgb(hsl) {
118
134
  return temp1;
119
135
  }, temp1 = lNormalized < half
120
136
  ? lNormalized * (sNormalizedOffset + sNormalized)
121
- : lNormalized + sNormalized - lNormalized * sNormalized, temp2 = double * lNormalized - temp1, phaseThird = phaseNumerator / triple, red = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized + phaseThird)), green = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized)), blue = Math.min(rgbFactor, rgbFactor * channel(temp2, temp1, hNormalized - phaseThird));
137
+ : lNormalized + sNormalized - lNormalized * sNormalized, temp2 = double * lNormalized - temp1, phaseThird = phaseNumerator / triple, red = Math.min(rgbMax, rgbMax * channel(temp2, temp1, hNormalized + phaseThird)), green = Math.min(rgbMax, rgbMax * channel(temp2, temp1, hNormalized)), blue = Math.min(rgbMax, rgbMax * channel(temp2, temp1, hNormalized - phaseThird));
122
138
  return { r: Math.round(red), g: Math.round(green), b: Math.round(blue) };
123
139
  }
124
140
  export function hslaToRgba(hsla) {
@@ -131,25 +147,37 @@ export function hslaToRgba(hsla) {
131
147
  };
132
148
  }
133
149
  export function getRandomRgbColor(min) {
134
- const fixedMin = min ?? defaultRgbMin, fixedMax = rgbMax + identity;
150
+ const fixedMin = min ?? defaultRgbMin, fixedMax = rgbMax + identity, getRgbInRangeValue = () => Math.floor(getRandomInRange(fixedMin, fixedMax));
135
151
  return {
136
- b: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),
137
- g: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),
138
- r: Math.floor(randomInRange(setRangeValue(fixedMin, fixedMax))),
152
+ b: getRgbInRangeValue(),
153
+ g: getRgbInRangeValue(),
154
+ r: getRgbInRangeValue(),
139
155
  };
140
156
  }
141
- export function getStyleFromRgb(color, opacity) {
142
- return `rgba(${color.r}, ${color.g}, ${color.b}, ${opacity ?? defaultOpacity})`;
157
+ export function getStyleFromRgb(color, hdr, opacity) {
158
+ return hdr ? getHdrStyleFromRgb(color, opacity) : getSdrStyleFromRgb(color, opacity);
159
+ }
160
+ function getHdrStyleFromRgb(color, opacity) {
161
+ return `color(display-p3 ${(color.r / rgbMax).toString()} ${(color.g / rgbMax).toString()} ${(color.b / rgbMax).toString()} / ${(opacity ?? defaultOpacity).toString()})`;
162
+ }
163
+ function getSdrStyleFromRgb(color, opacity) {
164
+ return `rgba(${color.r.toString()}, ${color.g.toString()}, ${color.b.toString()}, ${(opacity ?? defaultOpacity).toString()})`;
143
165
  }
144
- export function getStyleFromHsl(color, opacity) {
145
- return `hsla(${color.h}, ${color.s}%, ${color.l}%, ${opacity ?? defaultOpacity})`;
166
+ export function getStyleFromHsl(color, hdr, opacity) {
167
+ return hdr ? getHdrStyleFromHsl(color, opacity) : getSdrStyleFromHsl(color, opacity);
168
+ }
169
+ function getHdrStyleFromHsl(color, opacity) {
170
+ return getHdrStyleFromRgb(hslToRgb(color), opacity);
171
+ }
172
+ function getSdrStyleFromHsl(color, opacity) {
173
+ return `hsla(${color.h.toString()}, ${color.s.toString()}%, ${color.l.toString()}%, ${(opacity ?? defaultOpacity).toString()})`;
146
174
  }
147
175
  export function colorMix(color1, color2, size1, size2) {
148
176
  let rgb1 = color1, rgb2 = color2;
149
- if (rgb1.r === undefined) {
177
+ if (!Object.hasOwn(rgb1, "r")) {
150
178
  rgb1 = hslToRgb(color1);
151
179
  }
152
- if (rgb2.r === undefined) {
180
+ if (!Object.hasOwn(rgb2, "r")) {
153
181
  rgb2 = hslToRgb(color2);
154
182
  }
155
183
  return {
@@ -177,6 +205,7 @@ export function getLinkColor(p1, p2, linkColor) {
177
205
  else {
178
206
  return linkColor;
179
207
  }
208
+ return undefined;
180
209
  }
181
210
  export function getLinkRandomColor(engine, optColor, blink, consent) {
182
211
  const color = isString(optColor) ? optColor : optColor.value;
@@ -254,27 +283,22 @@ function setColorAnimation(colorValue, colorAnimation, reduceFactor) {
254
283
  }
255
284
  export function updateColorValue(data, range, decrease, delta) {
256
285
  const minLoops = 0, minDelay = 0, identity = 1, minVelocity = 0, minOffset = 0, velocityFactor = 3.6;
257
- if (!data ||
258
- !data.enable ||
286
+ if (!data.enable ||
259
287
  ((data.maxLoops ?? minLoops) > minLoops && (data.loops ?? minLoops) > (data.maxLoops ?? minLoops))) {
260
288
  return;
261
289
  }
262
- if (!data.time) {
263
- data.time = 0;
264
- }
290
+ data.time ??= 0;
265
291
  if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {
266
292
  data.time += delta.value;
267
293
  }
268
294
  if ((data.delayTime ?? minDelay) > minDelay && data.time < (data.delayTime ?? minDelay)) {
269
295
  return;
270
296
  }
271
- const offset = data.offset ? randomInRange(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = getRangeMax(range), min = getRangeMin(range);
297
+ const offset = data.offset ? randomInRangeValue(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = getRangeMax(range), min = getRangeMin(range);
272
298
  if (!decrease || data.status === AnimationStatus.increasing) {
273
299
  data.value += velocity;
274
300
  if (data.value > max) {
275
- if (!data.loops) {
276
- data.loops = 0;
277
- }
301
+ data.loops ??= 0;
278
302
  data.loops++;
279
303
  if (decrease) {
280
304
  data.status = AnimationStatus.decreasing;
@@ -288,9 +312,7 @@ export function updateColorValue(data, range, decrease, delta) {
288
312
  data.value -= velocity;
289
313
  const minValue = 0;
290
314
  if (data.value < minValue) {
291
- if (!data.loops) {
292
- data.loops = 0;
293
- }
315
+ data.loops ??= 0;
294
316
  data.loops++;
295
317
  data.status = AnimationStatus.increasing;
296
318
  }
@@ -305,17 +327,11 @@ export function updateColor(color, delta) {
305
327
  return;
306
328
  }
307
329
  const { h, s, l } = color, ranges = {
308
- h: { min: 0, max: 360 },
309
- s: { min: 0, max: 100 },
310
- l: { min: 0, max: 100 },
330
+ h: { min: hMin, max: hMax },
331
+ s: { min: sMin, max: sMax },
332
+ l: { min: lMin, max: lMax },
311
333
  };
312
- if (h) {
313
- updateColorValue(h, ranges.h, false, delta);
314
- }
315
- if (s) {
316
- updateColorValue(s, ranges.s, true, delta);
317
- }
318
- if (l) {
319
- updateColorValue(l, ranges.l, true, delta);
320
- }
334
+ updateColorValue(h, ranges.h, false, delta);
335
+ updateColorValue(s, ranges.s, true, delta);
336
+ updateColorValue(l, ranges.l, true, delta);
321
337
  }
@@ -14,7 +14,9 @@ export class EventDispatcher {
14
14
  }
15
15
  dispatchEvent(type, args) {
16
16
  const listeners = this._listeners.get(type);
17
- listeners?.forEach(handler => handler(args));
17
+ listeners?.forEach(handler => {
18
+ handler(args);
19
+ });
18
20
  }
19
21
  hasEventListener(type) {
20
22
  return !!this._listeners.get(type);
@@ -0,0 +1,22 @@
1
+ const errorPrefix = "tsParticles - Error";
2
+ const _logger = {
3
+ debug: console.debug,
4
+ error: (message, optionalParams) => {
5
+ console.error(`${errorPrefix} - ${message}`, optionalParams);
6
+ },
7
+ info: console.info,
8
+ log: console.log,
9
+ verbose: console.log,
10
+ warning: console.warn,
11
+ };
12
+ export function setLogger(logger) {
13
+ _logger.debug = logger.debug;
14
+ _logger.error = logger.error;
15
+ _logger.info = logger.info;
16
+ _logger.log = logger.log;
17
+ _logger.verbose = logger.verbose;
18
+ _logger.warning = logger.warning;
19
+ }
20
+ export function getLogger() {
21
+ return _logger;
22
+ }
@@ -0,0 +1,158 @@
1
+ import { MoveDirection } from "../Enums/Directions/MoveDirection.js";
2
+ import { double, doublePI, empty, half, percentDenominator, quarter, threeQuarter } from "../Core/Utils/Constants.js";
3
+ import { Vector } from "../Core/Utils/Vectors.js";
4
+ import { isNumber } from "./TypeUtils.js";
5
+ const piDeg = 180, degToRadFactor = Math.PI / piDeg;
6
+ let _random = Math.random;
7
+ const _animationLoop = {
8
+ nextFrame: (cb) => requestAnimationFrame(cb),
9
+ cancel: (idx) => {
10
+ cancelAnimationFrame(idx);
11
+ },
12
+ };
13
+ export function setRandom(rnd = Math.random) {
14
+ _random = rnd;
15
+ }
16
+ export function getRandom() {
17
+ const min = 0, max = 1;
18
+ return clamp(_random(), min, max - Number.EPSILON);
19
+ }
20
+ export function getRandomInRange(min, max) {
21
+ return getRandom() * (max - min) + min;
22
+ }
23
+ export function setAnimationFunctions(nextFrame, cancel) {
24
+ _animationLoop.nextFrame = (callback) => nextFrame(callback);
25
+ _animationLoop.cancel = (handle) => {
26
+ cancel(handle);
27
+ };
28
+ }
29
+ export function animate(fn) {
30
+ return _animationLoop.nextFrame(fn);
31
+ }
32
+ export function cancelAnimation(handle) {
33
+ _animationLoop.cancel(handle);
34
+ }
35
+ export function clamp(num, min, max) {
36
+ return Math.min(Math.max(num, min), max);
37
+ }
38
+ export function mix(comp1, comp2, weight1, weight2) {
39
+ return Math.floor((comp1 * weight1 + comp2 * weight2) / (weight1 + weight2));
40
+ }
41
+ export function randomInRangeValue(r) {
42
+ const max = getRangeMax(r), minOffset = 0;
43
+ let min = getRangeMin(r);
44
+ if (max === min) {
45
+ min = minOffset;
46
+ }
47
+ return getRandomInRange(min, max);
48
+ }
49
+ export function getRangeValue(value) {
50
+ return isNumber(value) ? value : randomInRangeValue(value);
51
+ }
52
+ export function getRangeMin(value) {
53
+ return isNumber(value) ? value : value.min;
54
+ }
55
+ export function getRangeMax(value) {
56
+ return isNumber(value) ? value : value.max;
57
+ }
58
+ export function setRangeValue(source, value) {
59
+ if (source === value || (value === undefined && isNumber(source))) {
60
+ return source;
61
+ }
62
+ const min = getRangeMin(source), max = getRangeMax(source);
63
+ return value !== undefined
64
+ ? {
65
+ min: Math.min(min, value),
66
+ max: Math.max(max, value),
67
+ }
68
+ : setRangeValue(min, max);
69
+ }
70
+ export function getDistances(pointA, pointB) {
71
+ const dx = pointA.x - pointB.x, dy = pointA.y - pointB.y, squareExp = 2;
72
+ return { dx: dx, dy: dy, distance: Math.sqrt(dx ** squareExp + dy ** squareExp) };
73
+ }
74
+ export function getDistance(pointA, pointB) {
75
+ return getDistances(pointA, pointB).distance;
76
+ }
77
+ export function degToRad(degrees) {
78
+ return degrees * degToRadFactor;
79
+ }
80
+ export function getParticleDirectionAngle(direction, position, center) {
81
+ if (isNumber(direction)) {
82
+ return degToRad(direction);
83
+ }
84
+ switch (direction) {
85
+ case MoveDirection.top:
86
+ return -Math.PI * half;
87
+ case MoveDirection.topRight:
88
+ return -Math.PI * quarter;
89
+ case MoveDirection.right:
90
+ return empty;
91
+ case MoveDirection.bottomRight:
92
+ return Math.PI * quarter;
93
+ case MoveDirection.bottom:
94
+ return Math.PI * half;
95
+ case MoveDirection.bottomLeft:
96
+ return Math.PI * threeQuarter;
97
+ case MoveDirection.left:
98
+ return Math.PI;
99
+ case MoveDirection.topLeft:
100
+ return -Math.PI * threeQuarter;
101
+ case MoveDirection.inside:
102
+ return Math.atan2(center.y - position.y, center.x - position.x);
103
+ case MoveDirection.outside:
104
+ return Math.atan2(position.y - center.y, position.x - center.x);
105
+ default:
106
+ return getRandom() * doublePI;
107
+ }
108
+ }
109
+ export function getParticleBaseVelocity(direction) {
110
+ const baseVelocity = Vector.origin;
111
+ baseVelocity.length = 1;
112
+ baseVelocity.angle = direction;
113
+ return baseVelocity;
114
+ }
115
+ export function collisionVelocity(v1, v2, m1, m2) {
116
+ return Vector.create((v1.x * (m1 - m2)) / (m1 + m2) + (v2.x * double * m2) / (m1 + m2), v1.y);
117
+ }
118
+ export function calcPositionFromSize(data) {
119
+ return data.position?.x !== undefined && data.position.y !== undefined
120
+ ? {
121
+ x: (data.position.x * data.size.width) / percentDenominator,
122
+ y: (data.position.y * data.size.height) / percentDenominator,
123
+ }
124
+ : undefined;
125
+ }
126
+ export function calcPositionOrRandomFromSize(data) {
127
+ return {
128
+ x: ((data.position?.x ?? getRandom() * percentDenominator) * data.size.width) / percentDenominator,
129
+ y: ((data.position?.y ?? getRandom() * percentDenominator) * data.size.height) / percentDenominator,
130
+ };
131
+ }
132
+ export function calcPositionOrRandomFromSizeRanged(data) {
133
+ const position = {
134
+ x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,
135
+ y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,
136
+ };
137
+ return calcPositionOrRandomFromSize({ size: data.size, position });
138
+ }
139
+ export function calcExactPositionOrRandomFromSize(data) {
140
+ return {
141
+ x: data.position?.x ?? getRandom() * data.size.width,
142
+ y: data.position?.y ?? getRandom() * data.size.height,
143
+ };
144
+ }
145
+ export function calcExactPositionOrRandomFromSizeRanged(data) {
146
+ const position = {
147
+ x: data.position?.x !== undefined ? getRangeValue(data.position.x) : undefined,
148
+ y: data.position?.y !== undefined ? getRangeValue(data.position.y) : undefined,
149
+ };
150
+ return calcExactPositionOrRandomFromSize({ size: data.size, position });
151
+ }
152
+ export function parseAlpha(input) {
153
+ const defaultAlpha = 1;
154
+ if (!input) {
155
+ return defaultAlpha;
156
+ }
157
+ return input.endsWith("%") ? parseFloat(input) / percentDenominator : parseFloat(input);
158
+ }