@tsparticles/engine 3.6.0-beta.1 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/README.md +6 -1
  2. package/browser/Core/Canvas.js +32 -21
  3. package/browser/Core/Container.js +1 -1
  4. package/browser/Core/Engine.js +17 -1
  5. package/browser/Core/Particle.js +1 -1
  6. package/browser/Options/Classes/AnimatableColor.js +2 -2
  7. package/browser/Options/Classes/AnimationOptions.js +3 -2
  8. package/browser/Options/Classes/Background/Background.js +2 -1
  9. package/browser/Options/Classes/BackgroundMask/BackgroundMask.js +2 -2
  10. package/browser/Options/Classes/BackgroundMask/BackgroundMaskCover.js +2 -1
  11. package/browser/Options/Classes/ColorAnimation.js +2 -1
  12. package/browser/Options/Classes/FullScreen/FullScreen.js +2 -1
  13. package/browser/Options/Classes/HslAnimation.js +2 -1
  14. package/browser/Options/Classes/Interactivity/Events/ClickEvent.js +2 -1
  15. package/browser/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
  16. package/browser/Options/Classes/Interactivity/Events/Events.js +2 -1
  17. package/browser/Options/Classes/Interactivity/Events/HoverEvent.js +2 -1
  18. package/browser/Options/Classes/Interactivity/Events/Parallax.js +2 -1
  19. package/browser/Options/Classes/Interactivity/Events/ResizeEvent.js +2 -1
  20. package/browser/Options/Classes/Interactivity/Interactivity.js +2 -1
  21. package/browser/Options/Classes/Interactivity/Modes/Modes.js +2 -1
  22. package/browser/Options/Classes/ManualParticle.js +2 -1
  23. package/browser/Options/Classes/Options.js +2 -2
  24. package/browser/Options/Classes/OptionsColor.js +5 -3
  25. package/browser/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -1
  26. package/browser/Options/Classes/Particles/Collisions/Collisions.js +2 -1
  27. package/browser/Options/Classes/Particles/Collisions/CollisionsAbsorb.js +2 -1
  28. package/browser/Options/Classes/Particles/Collisions/CollisionsOverlap.js +2 -1
  29. package/browser/Options/Classes/Particles/Effect/Effect.js +2 -1
  30. package/browser/Options/Classes/Particles/Move/Move.js +2 -2
  31. package/browser/Options/Classes/Particles/Move/MoveAngle.js +2 -1
  32. package/browser/Options/Classes/Particles/Move/MoveAttract.js +2 -1
  33. package/browser/Options/Classes/Particles/Move/MoveCenter.js +2 -1
  34. package/browser/Options/Classes/Particles/Move/MoveGravity.js +2 -1
  35. package/browser/Options/Classes/Particles/Move/MoveTrail.js +2 -1
  36. package/browser/Options/Classes/Particles/Move/MoveTrailFill.js +2 -1
  37. package/browser/Options/Classes/Particles/Move/OutModes.js +2 -1
  38. package/browser/Options/Classes/Particles/Move/Path/MovePath.js +2 -1
  39. package/browser/Options/Classes/Particles/Move/Spin.js +2 -1
  40. package/browser/Options/Classes/Particles/Number/ParticlesDensity.js +2 -1
  41. package/browser/Options/Classes/Particles/Number/ParticlesNumber.js +2 -1
  42. package/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
  43. package/browser/Options/Classes/Particles/Opacity/Opacity.js +2 -1
  44. package/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
  45. package/browser/Options/Classes/Particles/ParticlesOptions.js +2 -1
  46. package/browser/Options/Classes/Particles/Shadow.js +2 -1
  47. package/browser/Options/Classes/Particles/Shape/Shape.js +2 -1
  48. package/browser/Options/Classes/Particles/Size/Size.js +2 -1
  49. package/browser/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
  50. package/browser/Options/Classes/Particles/Stroke.js +2 -1
  51. package/browser/Options/Classes/Particles/ZIndex/ZIndex.js +2 -1
  52. package/browser/Options/Classes/Responsive.js +5 -4
  53. package/browser/Options/Classes/Theme/Theme.js +2 -1
  54. package/browser/Options/Classes/Theme/ThemeDefault.js +2 -1
  55. package/browser/Options/Classes/ValueWithRandom.js +4 -3
  56. package/browser/Types/EasingFunction.js +1 -0
  57. package/browser/Utils/ColorUtils.js +25 -45
  58. package/browser/Utils/NumberUtils.js +1 -10
  59. package/browser/Utils/TypeUtils.js +3 -0
  60. package/browser/Utils/Utils.js +6 -0
  61. package/browser/exports.js +0 -2
  62. package/browser/init.js +0 -6
  63. package/cjs/Core/Canvas.js +32 -21
  64. package/cjs/Core/Container.js +1 -1
  65. package/cjs/Core/Engine.js +17 -1
  66. package/cjs/Core/Particle.js +1 -1
  67. package/cjs/Options/Classes/AnimatableColor.js +1 -1
  68. package/cjs/Options/Classes/AnimationOptions.js +3 -2
  69. package/cjs/Options/Classes/Background/Background.js +2 -1
  70. package/cjs/Options/Classes/BackgroundMask/BackgroundMask.js +2 -2
  71. package/cjs/Options/Classes/BackgroundMask/BackgroundMaskCover.js +2 -1
  72. package/cjs/Options/Classes/ColorAnimation.js +2 -1
  73. package/cjs/Options/Classes/FullScreen/FullScreen.js +2 -1
  74. package/cjs/Options/Classes/HslAnimation.js +2 -1
  75. package/cjs/Options/Classes/Interactivity/Events/ClickEvent.js +2 -1
  76. package/cjs/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
  77. package/cjs/Options/Classes/Interactivity/Events/Events.js +2 -1
  78. package/cjs/Options/Classes/Interactivity/Events/HoverEvent.js +2 -1
  79. package/cjs/Options/Classes/Interactivity/Events/Parallax.js +2 -1
  80. package/cjs/Options/Classes/Interactivity/Events/ResizeEvent.js +2 -1
  81. package/cjs/Options/Classes/Interactivity/Interactivity.js +2 -1
  82. package/cjs/Options/Classes/Interactivity/Modes/Modes.js +2 -1
  83. package/cjs/Options/Classes/ManualParticle.js +2 -1
  84. package/cjs/Options/Classes/Options.js +2 -2
  85. package/cjs/Options/Classes/OptionsColor.js +4 -2
  86. package/cjs/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -1
  87. package/cjs/Options/Classes/Particles/Collisions/Collisions.js +2 -1
  88. package/cjs/Options/Classes/Particles/Collisions/CollisionsAbsorb.js +2 -1
  89. package/cjs/Options/Classes/Particles/Collisions/CollisionsOverlap.js +2 -1
  90. package/cjs/Options/Classes/Particles/Effect/Effect.js +2 -1
  91. package/cjs/Options/Classes/Particles/Move/Move.js +1 -1
  92. package/cjs/Options/Classes/Particles/Move/MoveAngle.js +2 -1
  93. package/cjs/Options/Classes/Particles/Move/MoveAttract.js +2 -1
  94. package/cjs/Options/Classes/Particles/Move/MoveCenter.js +2 -1
  95. package/cjs/Options/Classes/Particles/Move/MoveGravity.js +2 -1
  96. package/cjs/Options/Classes/Particles/Move/MoveTrail.js +2 -1
  97. package/cjs/Options/Classes/Particles/Move/MoveTrailFill.js +2 -1
  98. package/cjs/Options/Classes/Particles/Move/OutModes.js +2 -1
  99. package/cjs/Options/Classes/Particles/Move/Path/MovePath.js +2 -1
  100. package/cjs/Options/Classes/Particles/Move/Spin.js +2 -1
  101. package/cjs/Options/Classes/Particles/Number/ParticlesDensity.js +2 -1
  102. package/cjs/Options/Classes/Particles/Number/ParticlesNumber.js +2 -1
  103. package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
  104. package/cjs/Options/Classes/Particles/Opacity/Opacity.js +2 -1
  105. package/cjs/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
  106. package/cjs/Options/Classes/Particles/ParticlesOptions.js +2 -1
  107. package/cjs/Options/Classes/Particles/Shadow.js +2 -1
  108. package/cjs/Options/Classes/Particles/Shape/Shape.js +2 -1
  109. package/cjs/Options/Classes/Particles/Size/Size.js +2 -1
  110. package/cjs/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
  111. package/cjs/Options/Classes/Particles/Stroke.js +2 -1
  112. package/cjs/Options/Classes/Particles/ZIndex/ZIndex.js +2 -1
  113. package/cjs/Options/Classes/Responsive.js +5 -4
  114. package/cjs/Options/Classes/Theme/Theme.js +2 -1
  115. package/cjs/Options/Classes/Theme/ThemeDefault.js +2 -1
  116. package/cjs/Options/Classes/ValueWithRandom.js +4 -3
  117. package/cjs/Types/EasingFunction.js +2 -0
  118. package/cjs/Utils/ColorUtils.js +25 -46
  119. package/cjs/Utils/NumberUtils.js +1 -12
  120. package/cjs/Utils/TypeUtils.js +4 -0
  121. package/cjs/Utils/Utils.js +7 -0
  122. package/cjs/exports.js +0 -2
  123. package/cjs/init.js +0 -6
  124. package/esm/Core/Canvas.js +32 -21
  125. package/esm/Core/Container.js +1 -1
  126. package/esm/Core/Engine.js +17 -1
  127. package/esm/Core/Particle.js +1 -1
  128. package/esm/Options/Classes/AnimatableColor.js +2 -2
  129. package/esm/Options/Classes/AnimationOptions.js +3 -2
  130. package/esm/Options/Classes/Background/Background.js +2 -1
  131. package/esm/Options/Classes/BackgroundMask/BackgroundMask.js +2 -2
  132. package/esm/Options/Classes/BackgroundMask/BackgroundMaskCover.js +2 -1
  133. package/esm/Options/Classes/ColorAnimation.js +2 -1
  134. package/esm/Options/Classes/FullScreen/FullScreen.js +2 -1
  135. package/esm/Options/Classes/HslAnimation.js +2 -1
  136. package/esm/Options/Classes/Interactivity/Events/ClickEvent.js +2 -1
  137. package/esm/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
  138. package/esm/Options/Classes/Interactivity/Events/Events.js +2 -1
  139. package/esm/Options/Classes/Interactivity/Events/HoverEvent.js +2 -1
  140. package/esm/Options/Classes/Interactivity/Events/Parallax.js +2 -1
  141. package/esm/Options/Classes/Interactivity/Events/ResizeEvent.js +2 -1
  142. package/esm/Options/Classes/Interactivity/Interactivity.js +2 -1
  143. package/esm/Options/Classes/Interactivity/Modes/Modes.js +2 -1
  144. package/esm/Options/Classes/ManualParticle.js +2 -1
  145. package/esm/Options/Classes/Options.js +2 -2
  146. package/esm/Options/Classes/OptionsColor.js +5 -3
  147. package/esm/Options/Classes/Particles/Bounce/ParticlesBounce.js +2 -1
  148. package/esm/Options/Classes/Particles/Collisions/Collisions.js +2 -1
  149. package/esm/Options/Classes/Particles/Collisions/CollisionsAbsorb.js +2 -1
  150. package/esm/Options/Classes/Particles/Collisions/CollisionsOverlap.js +2 -1
  151. package/esm/Options/Classes/Particles/Effect/Effect.js +2 -1
  152. package/esm/Options/Classes/Particles/Move/Move.js +2 -2
  153. package/esm/Options/Classes/Particles/Move/MoveAngle.js +2 -1
  154. package/esm/Options/Classes/Particles/Move/MoveAttract.js +2 -1
  155. package/esm/Options/Classes/Particles/Move/MoveCenter.js +2 -1
  156. package/esm/Options/Classes/Particles/Move/MoveGravity.js +2 -1
  157. package/esm/Options/Classes/Particles/Move/MoveTrail.js +2 -1
  158. package/esm/Options/Classes/Particles/Move/MoveTrailFill.js +2 -1
  159. package/esm/Options/Classes/Particles/Move/OutModes.js +2 -1
  160. package/esm/Options/Classes/Particles/Move/Path/MovePath.js +2 -1
  161. package/esm/Options/Classes/Particles/Move/Spin.js +2 -1
  162. package/esm/Options/Classes/Particles/Number/ParticlesDensity.js +2 -1
  163. package/esm/Options/Classes/Particles/Number/ParticlesNumber.js +2 -1
  164. package/esm/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
  165. package/esm/Options/Classes/Particles/Opacity/Opacity.js +2 -1
  166. package/esm/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
  167. package/esm/Options/Classes/Particles/ParticlesOptions.js +2 -1
  168. package/esm/Options/Classes/Particles/Shadow.js +2 -1
  169. package/esm/Options/Classes/Particles/Shape/Shape.js +2 -1
  170. package/esm/Options/Classes/Particles/Size/Size.js +2 -1
  171. package/esm/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
  172. package/esm/Options/Classes/Particles/Stroke.js +2 -1
  173. package/esm/Options/Classes/Particles/ZIndex/ZIndex.js +2 -1
  174. package/esm/Options/Classes/Responsive.js +5 -4
  175. package/esm/Options/Classes/Theme/Theme.js +2 -1
  176. package/esm/Options/Classes/Theme/ThemeDefault.js +2 -1
  177. package/esm/Options/Classes/ValueWithRandom.js +4 -3
  178. package/esm/Types/EasingFunction.js +1 -0
  179. package/esm/Utils/ColorUtils.js +25 -45
  180. package/esm/Utils/NumberUtils.js +1 -10
  181. package/esm/Utils/TypeUtils.js +3 -0
  182. package/esm/Utils/Utils.js +6 -0
  183. package/esm/exports.js +0 -2
  184. package/esm/init.js +0 -6
  185. package/package.json +1 -1
  186. package/report.html +1 -1
  187. package/tsparticles.engine.js +62 -82
  188. package/tsparticles.engine.min.js +1 -1
  189. package/tsparticles.engine.min.js.LICENSE.txt +1 -1
  190. package/types/Core/Canvas.d.ts +4 -1
  191. package/types/Core/Engine.d.ts +9 -1
  192. package/types/Core/Interfaces/Colors.d.ts +28 -0
  193. package/types/Types/EasingFunction.d.ts +1 -0
  194. package/types/Utils/ColorUtils.d.ts +8 -9
  195. package/types/Utils/NumberUtils.d.ts +0 -5
  196. package/types/Utils/TypeUtils.d.ts +1 -0
  197. package/types/Utils/Utils.d.ts +2 -0
  198. package/types/exports.d.ts +0 -2
  199. package/umd/Core/Canvas.js +32 -21
  200. package/umd/Core/Container.js +1 -1
  201. package/umd/Core/Engine.js +17 -1
  202. package/umd/Core/Particle.js +1 -1
  203. package/umd/Options/Classes/AnimatableColor.js +1 -1
  204. package/umd/Options/Classes/AnimationOptions.js +4 -3
  205. package/umd/Options/Classes/Background/Background.js +3 -2
  206. package/umd/Options/Classes/BackgroundMask/BackgroundMask.js +3 -3
  207. package/umd/Options/Classes/BackgroundMask/BackgroundMaskCover.js +3 -2
  208. package/umd/Options/Classes/ColorAnimation.js +3 -2
  209. package/umd/Options/Classes/FullScreen/FullScreen.js +3 -2
  210. package/umd/Options/Classes/HslAnimation.js +3 -2
  211. package/umd/Options/Classes/Interactivity/Events/ClickEvent.js +3 -2
  212. package/umd/Options/Classes/Interactivity/Events/DivEvent.js +3 -2
  213. package/umd/Options/Classes/Interactivity/Events/Events.js +3 -2
  214. package/umd/Options/Classes/Interactivity/Events/HoverEvent.js +3 -2
  215. package/umd/Options/Classes/Interactivity/Events/Parallax.js +3 -2
  216. package/umd/Options/Classes/Interactivity/Events/ResizeEvent.js +3 -2
  217. package/umd/Options/Classes/Interactivity/Interactivity.js +3 -2
  218. package/umd/Options/Classes/Interactivity/Modes/Modes.js +3 -2
  219. package/umd/Options/Classes/ManualParticle.js +3 -2
  220. package/umd/Options/Classes/Options.js +3 -3
  221. package/umd/Options/Classes/OptionsColor.js +4 -2
  222. package/umd/Options/Classes/Particles/Bounce/ParticlesBounce.js +3 -2
  223. package/umd/Options/Classes/Particles/Collisions/Collisions.js +3 -2
  224. package/umd/Options/Classes/Particles/Collisions/CollisionsAbsorb.js +3 -2
  225. package/umd/Options/Classes/Particles/Collisions/CollisionsOverlap.js +3 -2
  226. package/umd/Options/Classes/Particles/Effect/Effect.js +3 -2
  227. package/umd/Options/Classes/Particles/Move/Move.js +1 -1
  228. package/umd/Options/Classes/Particles/Move/MoveAngle.js +3 -2
  229. package/umd/Options/Classes/Particles/Move/MoveAttract.js +3 -2
  230. package/umd/Options/Classes/Particles/Move/MoveCenter.js +3 -2
  231. package/umd/Options/Classes/Particles/Move/MoveGravity.js +3 -2
  232. package/umd/Options/Classes/Particles/Move/MoveTrail.js +3 -2
  233. package/umd/Options/Classes/Particles/Move/MoveTrailFill.js +3 -2
  234. package/umd/Options/Classes/Particles/Move/OutModes.js +3 -2
  235. package/umd/Options/Classes/Particles/Move/Path/MovePath.js +3 -2
  236. package/umd/Options/Classes/Particles/Move/Spin.js +3 -2
  237. package/umd/Options/Classes/Particles/Number/ParticlesDensity.js +3 -2
  238. package/umd/Options/Classes/Particles/Number/ParticlesNumber.js +3 -2
  239. package/umd/Options/Classes/Particles/Number/ParticlesNumberLimit.js +3 -2
  240. package/umd/Options/Classes/Particles/Opacity/Opacity.js +3 -2
  241. package/umd/Options/Classes/Particles/Opacity/OpacityAnimation.js +3 -2
  242. package/umd/Options/Classes/Particles/ParticlesOptions.js +3 -2
  243. package/umd/Options/Classes/Particles/Shadow.js +3 -2
  244. package/umd/Options/Classes/Particles/Shape/Shape.js +3 -2
  245. package/umd/Options/Classes/Particles/Size/Size.js +3 -2
  246. package/umd/Options/Classes/Particles/Size/SizeAnimation.js +3 -2
  247. package/umd/Options/Classes/Particles/Stroke.js +3 -2
  248. package/umd/Options/Classes/Particles/ZIndex/ZIndex.js +3 -2
  249. package/umd/Options/Classes/Responsive.js +6 -5
  250. package/umd/Options/Classes/Theme/Theme.js +3 -2
  251. package/umd/Options/Classes/Theme/ThemeDefault.js +3 -2
  252. package/umd/Options/Classes/ValueWithRandom.js +5 -4
  253. package/umd/Types/EasingFunction.js +12 -0
  254. package/umd/Utils/ColorUtils.js +25 -46
  255. package/umd/Utils/NumberUtils.js +1 -12
  256. package/umd/Utils/TypeUtils.js +4 -0
  257. package/umd/Utils/Utils.js +7 -0
  258. package/umd/exports.js +1 -3
  259. package/umd/init.js +1 -7
  260. package/browser/Utils/HslColorManager.js +0 -45
  261. package/browser/Utils/RgbColorManager.js +0 -44
  262. package/cjs/Utils/HslColorManager.js +0 -49
  263. package/cjs/Utils/RgbColorManager.js +0 -48
  264. package/esm/Utils/HslColorManager.js +0 -45
  265. package/esm/Utils/RgbColorManager.js +0 -44
  266. package/types/Utils/HslColorManager.d.ts +0 -10
  267. package/types/Utils/RgbColorManager.d.ts +0 -10
  268. package/umd/Utils/HslColorManager.js +0 -59
  269. package/umd/Utils/RgbColorManager.js +0 -58
package/cjs/init.js CHANGED
@@ -2,13 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.init = init;
4
4
  const Engine_js_1 = require("./Core/Engine.js");
5
- const HslColorManager_js_1 = require("./Utils/HslColorManager.js");
6
- const RgbColorManager_js_1 = require("./Utils/RgbColorManager.js");
7
- const ColorUtils_js_1 = require("./Utils/ColorUtils.js");
8
5
  function init() {
9
- const rgbColorManager = new RgbColorManager_js_1.RgbColorManager(), hslColorManager = new HslColorManager_js_1.HslColorManager();
10
- (0, ColorUtils_js_1.addColorManager)(rgbColorManager);
11
- (0, ColorUtils_js_1.addColorManager)(hslColorManager);
12
6
  const engine = new Engine_js_1.Engine();
13
7
  engine.init();
14
8
  return engine;
@@ -26,7 +26,7 @@ function setStyle(canvas, style, important = false) {
26
26
  }
27
27
  }
28
28
  export class Canvas {
29
- constructor(container) {
29
+ constructor(container, engine) {
30
30
  this.container = container;
31
31
  this._applyPostDrawUpdaters = particle => {
32
32
  for (const updater of this._postDrawUpdaters) {
@@ -62,10 +62,10 @@ export class Canvas {
62
62
  let fColor, sColor;
63
63
  for (const plugin of this._colorPlugins) {
64
64
  if (!fColor && plugin.particleFillColor) {
65
- fColor = rangeColorToHsl(plugin.particleFillColor(particle));
65
+ fColor = rangeColorToHsl(this._engine, plugin.particleFillColor(particle));
66
66
  }
67
67
  if (!sColor && plugin.particleStrokeColor) {
68
- sColor = rangeColorToHsl(plugin.particleStrokeColor(particle));
68
+ sColor = rangeColorToHsl(this._engine, plugin.particleStrokeColor(particle));
69
69
  }
70
70
  if (fColor && sColor) {
71
71
  break;
@@ -76,7 +76,7 @@ export class Canvas {
76
76
  this._initCover = async () => {
77
77
  const options = this.container.actualOptions, cover = options.backgroundMask.cover, color = cover.color;
78
78
  if (color) {
79
- const coverRgb = rangeColorToRgb(color);
79
+ const coverRgb = rangeColorToRgb(this._engine, color);
80
80
  if (coverRgb) {
81
81
  const coverColor = {
82
82
  ...coverRgb,
@@ -135,7 +135,7 @@ export class Canvas {
135
135
  }
136
136
  const factorNumerator = 1, opacity = factorNumerator / trail.length;
137
137
  if (trailFill.color) {
138
- const fillColor = rangeColorToRgb(trailFill.color);
138
+ const fillColor = rangeColorToRgb(this._engine, trailFill.color);
139
139
  if (!fillColor) {
140
140
  return;
141
141
  }
@@ -216,10 +216,16 @@ export class Canvas {
216
216
  height: "100%",
217
217
  }, true);
218
218
  };
219
- this.size = {
219
+ this._engine = engine;
220
+ this._standardSize = {
220
221
  height: 0,
221
222
  width: 0,
222
223
  };
224
+ const pxRatio = container.retina.pixelRatio, stdSize = this._standardSize;
225
+ this.size = {
226
+ height: stdSize.height * pxRatio,
227
+ width: stdSize.width * pxRatio,
228
+ };
223
229
  this._context = null;
224
230
  this._generated = false;
225
231
  this._preDrawUpdaters = [];
@@ -363,7 +369,7 @@ export class Canvas {
363
369
  return;
364
370
  }
365
371
  if (background.color) {
366
- const color = rangeColorToRgb(background.color);
372
+ const color = rangeColorToRgb(this._engine, background.color);
367
373
  elementStyle.backgroundColor = color ? getStyleFromRgb(color, background.opacity) : "";
368
374
  }
369
375
  else {
@@ -408,8 +414,13 @@ export class Canvas {
408
414
  this.element = canvas;
409
415
  this.element.ariaHidden = "true";
410
416
  this._originalStyle = deepExtend({}, this.element.style);
411
- this.size.height = canvas.offsetHeight;
412
- this.size.width = canvas.offsetWidth;
417
+ const standardSize = this._standardSize;
418
+ standardSize.height = canvas.offsetHeight;
419
+ standardSize.width = canvas.offsetWidth;
420
+ const pxRatio = this.container.retina.pixelRatio;
421
+ const retinaSize = this.size;
422
+ retinaSize.height = standardSize.height * pxRatio;
423
+ retinaSize.width = standardSize.width * pxRatio;
413
424
  this._context = this.element.getContext("2d");
414
425
  this._safeMutationObserver(obs => {
415
426
  if (!this.element || !(this.element instanceof Node)) {
@@ -444,23 +455,23 @@ export class Canvas {
444
455
  if (!this.element) {
445
456
  return false;
446
457
  }
447
- const container = this.container, pxRatio = container.retina.pixelRatio, size = container.canvas.size, newSize = {
448
- width: this.element.offsetWidth * pxRatio,
449
- height: this.element.offsetHeight * pxRatio,
458
+ const container = this.container, currentSize = container.canvas._standardSize, newSize = {
459
+ width: this.element.offsetWidth,
460
+ height: this.element.offsetHeight,
450
461
  };
451
- if (newSize.height === size.height &&
452
- newSize.width === size.width &&
453
- newSize.height === this.element.height &&
454
- newSize.width === this.element.width) {
462
+ if (newSize.height === currentSize.height && newSize.width === currentSize.width) {
455
463
  return false;
456
464
  }
457
- const oldSize = { ...size };
458
- this.element.width = size.width = this.element.offsetWidth * pxRatio;
459
- this.element.height = size.height = this.element.offsetHeight * pxRatio;
465
+ const oldSize = { ...currentSize }, pxRatio = container.retina.pixelRatio;
466
+ currentSize.height = newSize.height;
467
+ currentSize.width = newSize.width;
468
+ const retinaSize = this.size;
469
+ this.element.width = retinaSize.width = currentSize.width * pxRatio;
470
+ this.element.height = retinaSize.height = currentSize.height * pxRatio;
460
471
  if (this.container.started) {
461
472
  container.particles.setResizeFactor({
462
- width: size.width / oldSize.width,
463
- height: size.height / oldSize.height,
473
+ width: currentSize.width / oldSize.width,
474
+ height: currentSize.height / oldSize.height,
464
475
  });
465
476
  }
466
477
  return true;
@@ -88,7 +88,7 @@ export class Container {
88
88
  this._sourceOptions = sourceOptions;
89
89
  this._initialSourceOptions = sourceOptions;
90
90
  this.retina = new Retina(this);
91
- this.canvas = new Canvas(this);
91
+ this.canvas = new Canvas(this, this._engine);
92
92
  this.particles = new Particles(this._engine, this);
93
93
  this.pathGenerators = new Map();
94
94
  this.interactivity = {
@@ -71,6 +71,8 @@ export class Engine {
71
71
  this._eventDispatcher = new EventDispatcher();
72
72
  this._initialized = false;
73
73
  this.plugins = [];
74
+ this.colorManagers = new Map();
75
+ this.easingFunctions = new Map();
74
76
  this._initializers = {
75
77
  interactors: new Map(),
76
78
  movers: new Map(),
@@ -95,13 +97,24 @@ export class Engine {
95
97
  return this._domArray;
96
98
  }
97
99
  get version() {
98
- return "3.6.0-beta.1";
100
+ return "3.7.0";
101
+ }
102
+ async addColorManager(manager, refresh = true) {
103
+ this.colorManagers.set(manager.key, manager);
104
+ await this.refresh(refresh);
99
105
  }
100
106
  addConfig(config) {
101
107
  const key = config.key ?? config.name ?? "default";
102
108
  this._configs.set(key, config);
103
109
  this._eventDispatcher.dispatchEvent(EventType.configAdded, { data: { name: key, config } });
104
110
  }
111
+ async addEasing(name, easing, refresh = true) {
112
+ if (this.getEasing(name)) {
113
+ return;
114
+ }
115
+ this.easingFunctions.set(name, easing);
116
+ await this.refresh(refresh);
117
+ }
105
118
  async addEffect(effect, drawer, refresh = true) {
106
119
  executeOnSingleOrMultiple(effect, type => {
107
120
  if (!this.getEffectDrawer(type)) {
@@ -175,6 +188,9 @@ export class Engine {
175
188
  }
176
189
  return res;
177
190
  }
191
+ getEasing(name) {
192
+ return this.easingFunctions.get(name) ?? ((value) => value);
193
+ }
178
194
  getEffectDrawer(type) {
179
195
  return this.effectDrawers.get(type);
180
196
  }
@@ -325,7 +325,7 @@ export class Particle {
325
325
  this.sides = sideCountFunc(this);
326
326
  }
327
327
  this.spawning = false;
328
- this.shadowColor = rangeColorToRgb(this.options.shadow.color);
328
+ this.shadowColor = rangeColorToRgb(this._engine, this.options.shadow.color);
329
329
  for (const updater of particles.updaters) {
330
330
  updater.init(this);
331
331
  }
@@ -1,4 +1,4 @@
1
- import { isArray, isString } from "../../Utils/TypeUtils.js";
1
+ import { isArray, isNull, isString } from "../../Utils/TypeUtils.js";
2
2
  import { HslAnimation } from "./HslAnimation.js";
3
3
  import { OptionsColor } from "./OptionsColor.js";
4
4
  export class AnimatableColor extends OptionsColor {
@@ -21,7 +21,7 @@ export class AnimatableColor extends OptionsColor {
21
21
  }
22
22
  load(data) {
23
23
  super.load(data);
24
- if (!data) {
24
+ if (isNull(data)) {
25
25
  return;
26
26
  }
27
27
  const colorAnimation = data.animation;
@@ -1,5 +1,6 @@
1
1
  import { AnimationMode } from "../../Enums/Modes/AnimationMode.js";
2
2
  import { StartValueType } from "../../Enums/Types/StartValueType.js";
3
+ import { isNull } from "../../Utils/TypeUtils.js";
3
4
  import { setRangeValue } from "../../Utils/NumberUtils.js";
4
5
  export class AnimationOptions {
5
6
  constructor() {
@@ -11,7 +12,7 @@ export class AnimationOptions {
11
12
  this.sync = false;
12
13
  }
13
14
  load(data) {
14
- if (!data) {
15
+ if (isNull(data)) {
15
16
  return;
16
17
  }
17
18
  if (data.count !== undefined) {
@@ -42,7 +43,7 @@ export class RangedAnimationOptions extends AnimationOptions {
42
43
  }
43
44
  load(data) {
44
45
  super.load(data);
45
- if (!data) {
46
+ if (isNull(data)) {
46
47
  return;
47
48
  }
48
49
  if (data.mode !== undefined) {
@@ -1,4 +1,5 @@
1
1
  import { OptionsColor } from "../OptionsColor.js";
2
+ import { isNull } from "../../../Utils/TypeUtils.js";
2
3
  export class Background {
3
4
  constructor() {
4
5
  this.color = new OptionsColor();
@@ -10,7 +11,7 @@ export class Background {
10
11
  this.opacity = 1;
11
12
  }
12
13
  load(data) {
13
- if (!data) {
14
+ if (isNull(data)) {
14
15
  return;
15
16
  }
16
17
  if (data.color !== undefined) {
@@ -1,5 +1,5 @@
1
+ import { isNull, isString } from "../../../Utils/TypeUtils.js";
1
2
  import { BackgroundMaskCover } from "./BackgroundMaskCover.js";
2
- import { isString } from "../../../Utils/TypeUtils.js";
3
3
  export class BackgroundMask {
4
4
  constructor() {
5
5
  this.composite = "destination-out";
@@ -7,7 +7,7 @@ export class BackgroundMask {
7
7
  this.enable = false;
8
8
  }
9
9
  load(data) {
10
- if (!data) {
10
+ if (isNull(data)) {
11
11
  return;
12
12
  }
13
13
  if (data.composite !== undefined) {
@@ -1,10 +1,11 @@
1
1
  import { OptionsColor } from "../OptionsColor.js";
2
+ import { isNull } from "../../../Utils/TypeUtils.js";
2
3
  export class BackgroundMaskCover {
3
4
  constructor() {
4
5
  this.opacity = 1;
5
6
  }
6
7
  load(data) {
7
- if (!data) {
8
+ if (isNull(data)) {
8
9
  return;
9
10
  }
10
11
  if (data.color !== undefined) {
@@ -1,4 +1,5 @@
1
1
  import { AnimationOptions } from "./AnimationOptions.js";
2
+ import { isNull } from "../../Utils/TypeUtils.js";
2
3
  import { setRangeValue } from "../../Utils/NumberUtils.js";
3
4
  export class ColorAnimation extends AnimationOptions {
4
5
  constructor() {
@@ -8,7 +9,7 @@ export class ColorAnimation extends AnimationOptions {
8
9
  }
9
10
  load(data) {
10
11
  super.load(data);
11
- if (!data) {
12
+ if (isNull(data)) {
12
13
  return;
13
14
  }
14
15
  if (data.offset !== undefined) {
@@ -1,10 +1,11 @@
1
+ import { isNull } from "../../../Utils/TypeUtils.js";
1
2
  export class FullScreen {
2
3
  constructor() {
3
4
  this.enable = true;
4
5
  this.zIndex = 0;
5
6
  }
6
7
  load(data) {
7
- if (!data) {
8
+ if (isNull(data)) {
8
9
  return;
9
10
  }
10
11
  if (data.enable !== undefined) {
@@ -1,4 +1,5 @@
1
1
  import { ColorAnimation } from "./ColorAnimation.js";
2
+ import { isNull } from "../../Utils/TypeUtils.js";
2
3
  export class HslAnimation {
3
4
  constructor() {
4
5
  this.h = new ColorAnimation();
@@ -6,7 +7,7 @@ export class HslAnimation {
6
7
  this.l = new ColorAnimation();
7
8
  }
8
9
  load(data) {
9
- if (!data) {
10
+ if (isNull(data)) {
10
11
  return;
11
12
  }
12
13
  this.h.load(data.h);
@@ -1,10 +1,11 @@
1
+ import { isNull } from "../../../../Utils/TypeUtils.js";
1
2
  export class ClickEvent {
2
3
  constructor() {
3
4
  this.enable = false;
4
5
  this.mode = [];
5
6
  }
6
7
  load(data) {
7
- if (!data) {
8
+ if (isNull(data)) {
8
9
  return;
9
10
  }
10
11
  if (data.enable !== undefined) {
@@ -1,4 +1,5 @@
1
1
  import { DivType } from "../../../../Enums/Types/DivType.js";
2
+ import { isNull } from "../../../../Utils/TypeUtils.js";
2
3
  export class DivEvent {
3
4
  constructor() {
4
5
  this.selectors = [];
@@ -7,7 +8,7 @@ export class DivEvent {
7
8
  this.type = DivType.circle;
8
9
  }
9
10
  load(data) {
10
- if (!data) {
11
+ if (isNull(data)) {
11
12
  return;
12
13
  }
13
14
  if (data.selectors !== undefined) {
@@ -3,6 +3,7 @@ import { DivEvent } from "./DivEvent.js";
3
3
  import { HoverEvent } from "./HoverEvent.js";
4
4
  import { ResizeEvent } from "./ResizeEvent.js";
5
5
  import { executeOnSingleOrMultiple } from "../../../../Utils/Utils.js";
6
+ import { isNull } from "../../../../Utils/TypeUtils.js";
6
7
  export class Events {
7
8
  constructor() {
8
9
  this.onClick = new ClickEvent();
@@ -11,7 +12,7 @@ export class Events {
11
12
  this.resize = new ResizeEvent();
12
13
  }
13
14
  load(data) {
14
- if (!data) {
15
+ if (isNull(data)) {
15
16
  return;
16
17
  }
17
18
  this.onClick.load(data.onClick);
@@ -1,4 +1,5 @@
1
1
  import { Parallax } from "./Parallax.js";
2
+ import { isNull } from "../../../../Utils/TypeUtils.js";
2
3
  export class HoverEvent {
3
4
  constructor() {
4
5
  this.enable = false;
@@ -6,7 +7,7 @@ export class HoverEvent {
6
7
  this.parallax = new Parallax();
7
8
  }
8
9
  load(data) {
9
- if (!data) {
10
+ if (isNull(data)) {
10
11
  return;
11
12
  }
12
13
  if (data.enable !== undefined) {
@@ -1,3 +1,4 @@
1
+ import { isNull } from "../../../../Utils/TypeUtils.js";
1
2
  export class Parallax {
2
3
  constructor() {
3
4
  this.enable = false;
@@ -5,7 +6,7 @@ export class Parallax {
5
6
  this.smooth = 10;
6
7
  }
7
8
  load(data) {
8
- if (!data) {
9
+ if (isNull(data)) {
9
10
  return;
10
11
  }
11
12
  if (data.enable !== undefined) {
@@ -1,10 +1,11 @@
1
+ import { isNull } from "../../../../Utils/TypeUtils.js";
1
2
  export class ResizeEvent {
2
3
  constructor() {
3
4
  this.delay = 0.5;
4
5
  this.enable = true;
5
6
  }
6
7
  load(data) {
7
- if (data === undefined) {
8
+ if (isNull(data)) {
8
9
  return;
9
10
  }
10
11
  if (data.delay !== undefined) {
@@ -1,6 +1,7 @@
1
1
  import { Events } from "./Events/Events.js";
2
2
  import { InteractivityDetect } from "../../../Enums/InteractivityDetect.js";
3
3
  import { Modes } from "./Modes/Modes.js";
4
+ import { isNull } from "../../../Utils/TypeUtils.js";
4
5
  export class Interactivity {
5
6
  constructor(engine, container) {
6
7
  this.detectsOn = InteractivityDetect.window;
@@ -8,7 +9,7 @@ export class Interactivity {
8
9
  this.modes = new Modes(engine, container);
9
10
  }
10
11
  load(data) {
11
- if (!data) {
12
+ if (isNull(data)) {
12
13
  return;
13
14
  }
14
15
  const detectsOn = data.detectsOn;
@@ -1,10 +1,11 @@
1
+ import { isNull } from "../../../../Utils/TypeUtils.js";
1
2
  export class Modes {
2
3
  constructor(engine, container) {
3
4
  this._engine = engine;
4
5
  this._container = container;
5
6
  }
6
7
  load(data) {
7
- if (!data) {
8
+ if (isNull(data)) {
8
9
  return;
9
10
  }
10
11
  if (!this._container) {
@@ -1,9 +1,10 @@
1
1
  import { PixelMode } from "../../Enums/Modes/PixelMode.js";
2
2
  import { deepExtend } from "../../Utils/Utils.js";
3
+ import { isNull } from "../../Utils/TypeUtils.js";
3
4
  const defaultPosition = 50;
4
5
  export class ManualParticle {
5
6
  load(data) {
6
- if (!data) {
7
+ if (isNull(data)) {
7
8
  return;
8
9
  }
9
10
  if (data.position) {
@@ -1,4 +1,5 @@
1
1
  import { deepExtend, executeOnSingleOrMultiple, safeMatchMedia } from "../../Utils/Utils.js";
2
+ import { isBoolean, isNull } from "../../Utils/TypeUtils.js";
2
3
  import { Background } from "./Background/Background.js";
3
4
  import { BackgroundMask } from "./BackgroundMask/BackgroundMask.js";
4
5
  import { FullScreen } from "./FullScreen/FullScreen.js";
@@ -8,7 +9,6 @@ import { Responsive } from "./Responsive.js";
8
9
  import { ResponsiveMode } from "../../Enums/Modes/ResponsiveMode.js";
9
10
  import { Theme } from "./Theme/Theme.js";
10
11
  import { ThemeMode } from "../../Enums/Modes/ThemeMode.js";
11
- import { isBoolean } from "../../Utils/TypeUtils.js";
12
12
  import { loadParticlesOptions } from "../../Utils/OptionsUtils.js";
13
13
  import { setRangeValue } from "../../Utils/NumberUtils.js";
14
14
  export class Options {
@@ -44,7 +44,7 @@ export class Options {
44
44
  this.zLayers = 100;
45
45
  }
46
46
  load(data) {
47
- if (!data) {
47
+ if (isNull(data)) {
48
48
  return;
49
49
  }
50
50
  if (data.preset !== undefined) {
@@ -1,4 +1,4 @@
1
- import { isArray, isString } from "../../Utils/TypeUtils.js";
1
+ import { isArray, isNull, isString } from "../../Utils/TypeUtils.js";
2
2
  export class OptionsColor {
3
3
  constructor() {
4
4
  this.value = "";
@@ -17,9 +17,11 @@ export class OptionsColor {
17
17
  return color;
18
18
  }
19
19
  load(data) {
20
- if (data?.value === undefined) {
20
+ if (isNull(data)) {
21
21
  return;
22
22
  }
23
- this.value = data.value;
23
+ if (!isNull(data.value)) {
24
+ this.value = data.value;
25
+ }
24
26
  }
25
27
  }
@@ -1,11 +1,12 @@
1
1
  import { ParticlesBounceFactor } from "./ParticlesBounceFactor.js";
2
+ import { isNull } from "../../../../Utils/TypeUtils.js";
2
3
  export class ParticlesBounce {
3
4
  constructor() {
4
5
  this.horizontal = new ParticlesBounceFactor();
5
6
  this.vertical = new ParticlesBounceFactor();
6
7
  }
7
8
  load(data) {
8
- if (!data) {
9
+ if (isNull(data)) {
9
10
  return;
10
11
  }
11
12
  this.horizontal.load(data.horizontal);
@@ -2,6 +2,7 @@ import { CollisionMode } from "../../../../Enums/Modes/CollisionMode.js";
2
2
  import { CollisionsAbsorb } from "./CollisionsAbsorb.js";
3
3
  import { CollisionsOverlap } from "./CollisionsOverlap.js";
4
4
  import { ParticlesBounce } from "../Bounce/ParticlesBounce.js";
5
+ import { isNull } from "../../../../Utils/TypeUtils.js";
5
6
  import { setRangeValue } from "../../../../Utils/NumberUtils.js";
6
7
  export class Collisions {
7
8
  constructor() {
@@ -13,7 +14,7 @@ export class Collisions {
13
14
  this.overlap = new CollisionsOverlap();
14
15
  }
15
16
  load(data) {
16
- if (!data) {
17
+ if (isNull(data)) {
17
18
  return;
18
19
  }
19
20
  this.absorb.load(data.absorb);
@@ -1,9 +1,10 @@
1
+ import { isNull } from "../../../../Utils/TypeUtils.js";
1
2
  export class CollisionsAbsorb {
2
3
  constructor() {
3
4
  this.speed = 2;
4
5
  }
5
6
  load(data) {
6
- if (!data) {
7
+ if (isNull(data)) {
7
8
  return;
8
9
  }
9
10
  if (data.speed !== undefined) {
@@ -1,10 +1,11 @@
1
+ import { isNull } from "../../../../Utils/TypeUtils.js";
1
2
  export class CollisionsOverlap {
2
3
  constructor() {
3
4
  this.enable = true;
4
5
  this.retries = 0;
5
6
  }
6
7
  load(data) {
7
- if (!data) {
8
+ if (isNull(data)) {
8
9
  return;
9
10
  }
10
11
  if (data.enable !== undefined) {
@@ -1,4 +1,5 @@
1
1
  import { deepExtend } from "../../../../Utils/Utils.js";
2
+ import { isNull } from "../../../../Utils/TypeUtils.js";
2
3
  export class Effect {
3
4
  constructor() {
4
5
  this.close = true;
@@ -7,7 +8,7 @@ export class Effect {
7
8
  this.type = [];
8
9
  }
9
10
  load(data) {
10
- if (!data) {
11
+ if (isNull(data)) {
11
12
  return;
12
13
  }
13
14
  const options = data.options;
@@ -1,5 +1,5 @@
1
1
  import { MoveDirection } from "../../../../Enums/Directions/MoveDirection.js";
2
- import { isNumber, isObject } from "../../../../Utils/TypeUtils.js";
2
+ import { isNull, isNumber, isObject } from "../../../../Utils/TypeUtils.js";
3
3
  import { MoveAngle } from "./MoveAngle.js";
4
4
  import { MoveAttract } from "./MoveAttract.js";
5
5
  import { MoveCenter } from "./MoveCenter.js";
@@ -32,7 +32,7 @@ export class Move {
32
32
  this.warp = false;
33
33
  }
34
34
  load(data) {
35
- if (!data) {
35
+ if (isNull(data)) {
36
36
  return;
37
37
  }
38
38
  this.angle.load(isNumber(data.angle) ? { value: data.angle } : data.angle);
@@ -1,3 +1,4 @@
1
+ import { isNull } from "../../../../Utils/TypeUtils.js";
1
2
  import { setRangeValue } from "../../../../Utils/NumberUtils.js";
2
3
  export class MoveAngle {
3
4
  constructor() {
@@ -5,7 +6,7 @@ export class MoveAngle {
5
6
  this.value = 90;
6
7
  }
7
8
  load(data) {
8
- if (!data) {
9
+ if (isNull(data)) {
9
10
  return;
10
11
  }
11
12
  if (data.offset !== undefined) {
@@ -1,3 +1,4 @@
1
+ import { isNull } from "../../../../Utils/TypeUtils.js";
1
2
  import { setRangeValue } from "../../../../Utils/NumberUtils.js";
2
3
  export class MoveAttract {
3
4
  constructor() {
@@ -9,7 +10,7 @@ export class MoveAttract {
9
10
  };
10
11
  }
11
12
  load(data) {
12
- if (!data) {
13
+ if (isNull(data)) {
13
14
  return;
14
15
  }
15
16
  if (data.distance !== undefined) {
@@ -1,4 +1,5 @@
1
1
  import { PixelMode } from "../../../../Enums/Modes/PixelMode.js";
2
+ import { isNull } from "../../../../Utils/TypeUtils.js";
2
3
  export class MoveCenter {
3
4
  constructor() {
4
5
  this.x = 50;
@@ -7,7 +8,7 @@ export class MoveCenter {
7
8
  this.radius = 0;
8
9
  }
9
10
  load(data) {
10
- if (!data) {
11
+ if (isNull(data)) {
11
12
  return;
12
13
  }
13
14
  if (data.x !== undefined) {