@tsparticles/engine 3.3.0 → 3.4.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 (265) hide show
  1. package/README.md +0 -4
  2. package/browser/Core/Canvas.js +27 -22
  3. package/browser/Core/Container.js +55 -42
  4. package/browser/Core/Engine.js +82 -74
  5. package/browser/Core/Particle.js +29 -15
  6. package/browser/Core/Particles.js +23 -24
  7. package/browser/Core/Utils/EventListeners.js +18 -17
  8. package/browser/Core/Utils/ExternalInteractorBase.js +2 -1
  9. package/browser/Core/Utils/InteractionManager.js +3 -2
  10. package/browser/Core/Utils/ParticlesInteractorBase.js +2 -1
  11. package/browser/Core/Utils/QuadTree.js +1 -1
  12. package/browser/Core/Utils/Ranges.js +5 -4
  13. package/browser/Enums/AnimationStatus.js +5 -1
  14. package/browser/Enums/Directions/MoveDirection.js +14 -1
  15. package/browser/Enums/Directions/OutModeDirection.js +7 -1
  16. package/browser/Enums/Directions/RotateDirection.js +6 -1
  17. package/browser/Enums/InteractivityDetect.js +6 -1
  18. package/browser/Enums/Modes/AnimationMode.js +7 -1
  19. package/browser/Enums/Modes/CollisionMode.js +6 -1
  20. package/browser/Enums/Modes/LimitMode.js +5 -1
  21. package/browser/Enums/Modes/OutMode.js +8 -1
  22. package/browser/Enums/Modes/PixelMode.js +5 -1
  23. package/browser/Enums/Modes/ResponsiveMode.js +5 -1
  24. package/browser/Enums/Modes/ThemeMode.js +6 -1
  25. package/browser/Enums/Types/AlterType.js +5 -1
  26. package/browser/Enums/Types/DestroyType.js +6 -1
  27. package/browser/Enums/Types/DivType.js +5 -1
  28. package/browser/Enums/Types/EasingType.js +30 -1
  29. package/browser/Enums/Types/EventType.js +15 -1
  30. package/browser/Enums/Types/GradientType.js +6 -1
  31. package/browser/Enums/Types/InteractorType.js +5 -1
  32. package/browser/Enums/Types/ParticleOutType.js +6 -1
  33. package/browser/Enums/Types/StartValueType.js +6 -1
  34. package/browser/Options/Classes/AnimationOptions.js +4 -2
  35. package/browser/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
  36. package/browser/Options/Classes/Interactivity/Events/Events.js +1 -1
  37. package/browser/Options/Classes/Interactivity/Interactivity.js +2 -1
  38. package/browser/Options/Classes/ManualParticle.js +2 -1
  39. package/browser/Options/Classes/Options.js +14 -12
  40. package/browser/Options/Classes/Particles/Collisions/Collisions.js +2 -1
  41. package/browser/Options/Classes/Particles/Move/Move.js +2 -1
  42. package/browser/Options/Classes/Particles/Move/MoveCenter.js +2 -1
  43. package/browser/Options/Classes/Particles/Move/OutModes.js +2 -1
  44. package/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
  45. package/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
  46. package/browser/Options/Classes/Particles/ParticlesOptions.js +1 -1
  47. package/browser/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
  48. package/browser/Options/Classes/Responsive.js +5 -4
  49. package/browser/Options/Classes/Theme/ThemeDefault.js +2 -1
  50. package/browser/Types/RangeType.js +5 -1
  51. package/browser/Utils/CanvasUtils.js +13 -7
  52. package/browser/Utils/ColorUtils.js +17 -9
  53. package/browser/Utils/EventDispatcher.js +1 -1
  54. package/browser/Utils/HslColorManager.js +11 -4
  55. package/browser/Utils/NumberUtils.js +11 -10
  56. package/browser/Utils/RgbColorManager.js +11 -4
  57. package/browser/Utils/Utils.js +37 -31
  58. package/cjs/Core/Canvas.js +27 -22
  59. package/cjs/Core/Container.js +55 -42
  60. package/cjs/Core/Engine.js +82 -74
  61. package/cjs/Core/Particle.js +29 -15
  62. package/cjs/Core/Particles.js +23 -24
  63. package/cjs/Core/Utils/EventListeners.js +18 -17
  64. package/cjs/Core/Utils/ExternalInteractorBase.js +2 -1
  65. package/cjs/Core/Utils/InteractionManager.js +3 -2
  66. package/cjs/Core/Utils/ParticlesInteractorBase.js +2 -1
  67. package/cjs/Core/Utils/QuadTree.js +1 -1
  68. package/cjs/Core/Utils/Ranges.js +5 -4
  69. package/cjs/Enums/AnimationStatus.js +6 -0
  70. package/cjs/Enums/Directions/MoveDirection.js +15 -0
  71. package/cjs/Enums/Directions/OutModeDirection.js +8 -0
  72. package/cjs/Enums/Directions/RotateDirection.js +7 -0
  73. package/cjs/Enums/InteractivityDetect.js +7 -0
  74. package/cjs/Enums/Modes/AnimationMode.js +8 -0
  75. package/cjs/Enums/Modes/CollisionMode.js +7 -0
  76. package/cjs/Enums/Modes/LimitMode.js +6 -0
  77. package/cjs/Enums/Modes/OutMode.js +9 -0
  78. package/cjs/Enums/Modes/PixelMode.js +6 -0
  79. package/cjs/Enums/Modes/ResponsiveMode.js +6 -0
  80. package/cjs/Enums/Modes/ThemeMode.js +7 -0
  81. package/cjs/Enums/Types/AlterType.js +6 -0
  82. package/cjs/Enums/Types/DestroyType.js +7 -0
  83. package/cjs/Enums/Types/DivType.js +6 -0
  84. package/cjs/Enums/Types/EasingType.js +31 -0
  85. package/cjs/Enums/Types/EventType.js +16 -0
  86. package/cjs/Enums/Types/GradientType.js +7 -0
  87. package/cjs/Enums/Types/InteractorType.js +6 -0
  88. package/cjs/Enums/Types/ParticleOutType.js +7 -0
  89. package/cjs/Enums/Types/StartValueType.js +7 -0
  90. package/cjs/Options/Classes/AnimationOptions.js +4 -2
  91. package/cjs/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
  92. package/cjs/Options/Classes/Interactivity/Events/Events.js +1 -1
  93. package/cjs/Options/Classes/Interactivity/Interactivity.js +2 -1
  94. package/cjs/Options/Classes/ManualParticle.js +2 -1
  95. package/cjs/Options/Classes/Options.js +14 -12
  96. package/cjs/Options/Classes/Particles/Collisions/Collisions.js +2 -1
  97. package/cjs/Options/Classes/Particles/Move/Move.js +2 -1
  98. package/cjs/Options/Classes/Particles/Move/MoveCenter.js +2 -1
  99. package/cjs/Options/Classes/Particles/Move/OutModes.js +2 -1
  100. package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
  101. package/cjs/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
  102. package/cjs/Options/Classes/Particles/ParticlesOptions.js +1 -1
  103. package/cjs/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
  104. package/cjs/Options/Classes/Responsive.js +5 -4
  105. package/cjs/Options/Classes/Theme/ThemeDefault.js +2 -1
  106. package/cjs/Types/RangeType.js +6 -0
  107. package/cjs/Utils/CanvasUtils.js +13 -7
  108. package/cjs/Utils/ColorUtils.js +17 -9
  109. package/cjs/Utils/EventDispatcher.js +1 -1
  110. package/cjs/Utils/HslColorManager.js +11 -4
  111. package/cjs/Utils/NumberUtils.js +11 -10
  112. package/cjs/Utils/RgbColorManager.js +11 -4
  113. package/cjs/Utils/Utils.js +37 -31
  114. package/esm/Core/Canvas.js +27 -22
  115. package/esm/Core/Container.js +55 -42
  116. package/esm/Core/Engine.js +82 -74
  117. package/esm/Core/Particle.js +29 -15
  118. package/esm/Core/Particles.js +23 -24
  119. package/esm/Core/Utils/EventListeners.js +18 -17
  120. package/esm/Core/Utils/ExternalInteractorBase.js +2 -1
  121. package/esm/Core/Utils/InteractionManager.js +3 -2
  122. package/esm/Core/Utils/ParticlesInteractorBase.js +2 -1
  123. package/esm/Core/Utils/QuadTree.js +1 -1
  124. package/esm/Core/Utils/Ranges.js +5 -4
  125. package/esm/Enums/AnimationStatus.js +5 -1
  126. package/esm/Enums/Directions/MoveDirection.js +14 -1
  127. package/esm/Enums/Directions/OutModeDirection.js +7 -1
  128. package/esm/Enums/Directions/RotateDirection.js +6 -1
  129. package/esm/Enums/InteractivityDetect.js +6 -1
  130. package/esm/Enums/Modes/AnimationMode.js +7 -1
  131. package/esm/Enums/Modes/CollisionMode.js +6 -1
  132. package/esm/Enums/Modes/LimitMode.js +5 -1
  133. package/esm/Enums/Modes/OutMode.js +8 -1
  134. package/esm/Enums/Modes/PixelMode.js +5 -1
  135. package/esm/Enums/Modes/ResponsiveMode.js +5 -1
  136. package/esm/Enums/Modes/ThemeMode.js +6 -1
  137. package/esm/Enums/Types/AlterType.js +5 -1
  138. package/esm/Enums/Types/DestroyType.js +6 -1
  139. package/esm/Enums/Types/DivType.js +5 -1
  140. package/esm/Enums/Types/EasingType.js +30 -1
  141. package/esm/Enums/Types/EventType.js +15 -1
  142. package/esm/Enums/Types/GradientType.js +6 -1
  143. package/esm/Enums/Types/InteractorType.js +5 -1
  144. package/esm/Enums/Types/ParticleOutType.js +6 -1
  145. package/esm/Enums/Types/StartValueType.js +6 -1
  146. package/esm/Options/Classes/AnimationOptions.js +4 -2
  147. package/esm/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
  148. package/esm/Options/Classes/Interactivity/Events/Events.js +1 -1
  149. package/esm/Options/Classes/Interactivity/Interactivity.js +2 -1
  150. package/esm/Options/Classes/ManualParticle.js +2 -1
  151. package/esm/Options/Classes/Options.js +14 -12
  152. package/esm/Options/Classes/Particles/Collisions/Collisions.js +2 -1
  153. package/esm/Options/Classes/Particles/Move/Move.js +2 -1
  154. package/esm/Options/Classes/Particles/Move/MoveCenter.js +2 -1
  155. package/esm/Options/Classes/Particles/Move/OutModes.js +2 -1
  156. package/esm/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
  157. package/esm/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
  158. package/esm/Options/Classes/Particles/ParticlesOptions.js +1 -1
  159. package/esm/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
  160. package/esm/Options/Classes/Responsive.js +5 -4
  161. package/esm/Options/Classes/Theme/ThemeDefault.js +2 -1
  162. package/esm/Types/RangeType.js +5 -1
  163. package/esm/Utils/CanvasUtils.js +13 -7
  164. package/esm/Utils/ColorUtils.js +17 -9
  165. package/esm/Utils/EventDispatcher.js +1 -1
  166. package/esm/Utils/HslColorManager.js +11 -4
  167. package/esm/Utils/NumberUtils.js +11 -10
  168. package/esm/Utils/RgbColorManager.js +11 -4
  169. package/esm/Utils/Utils.js +37 -31
  170. package/package.json +1 -1
  171. package/report.html +1 -1
  172. package/tsparticles.engine.js +327 -225
  173. package/tsparticles.engine.min.js +1 -1
  174. package/tsparticles.engine.min.js.LICENSE.txt +1 -1
  175. package/types/Core/Container.d.ts +4 -2
  176. package/types/Core/Engine.d.ts +6 -5
  177. package/types/Core/Interfaces/IPlugin.d.ts +3 -4
  178. package/types/Core/Interfaces/IShapeDrawer.d.ts +1 -0
  179. package/types/Core/Particle.d.ts +1 -0
  180. package/types/Enums/AnimationStatus.d.ts +1 -1
  181. package/types/Enums/Directions/MoveDirection.d.ts +1 -1
  182. package/types/Enums/Directions/OutModeDirection.d.ts +1 -1
  183. package/types/Enums/Directions/RotateDirection.d.ts +1 -1
  184. package/types/Enums/InteractivityDetect.d.ts +1 -1
  185. package/types/Enums/Modes/AnimationMode.d.ts +1 -1
  186. package/types/Enums/Modes/CollisionMode.d.ts +1 -1
  187. package/types/Enums/Modes/LimitMode.d.ts +1 -1
  188. package/types/Enums/Modes/OutMode.d.ts +1 -1
  189. package/types/Enums/Modes/PixelMode.d.ts +1 -1
  190. package/types/Enums/Modes/ResponsiveMode.d.ts +1 -1
  191. package/types/Enums/Modes/ThemeMode.d.ts +1 -1
  192. package/types/Enums/Types/AlterType.d.ts +1 -1
  193. package/types/Enums/Types/DestroyType.d.ts +1 -1
  194. package/types/Enums/Types/DivType.d.ts +1 -1
  195. package/types/Enums/Types/EasingType.d.ts +1 -1
  196. package/types/Enums/Types/EventType.d.ts +1 -1
  197. package/types/Enums/Types/GradientType.d.ts +1 -1
  198. package/types/Enums/Types/InteractorType.d.ts +1 -1
  199. package/types/Enums/Types/ParticleOutType.d.ts +1 -1
  200. package/types/Enums/Types/StartValueType.d.ts +1 -1
  201. package/types/Options/Classes/Options.d.ts +2 -1
  202. package/types/Options/Classes/Responsive.d.ts +2 -2
  203. package/types/Options/Classes/Theme/Theme.d.ts +2 -2
  204. package/types/Options/Interfaces/IResponsive.d.ts +2 -3
  205. package/types/Options/Interfaces/Theme/ITheme.d.ts +2 -3
  206. package/types/Types/RangeType.d.ts +1 -1
  207. package/umd/Core/Canvas.js +27 -22
  208. package/umd/Core/Container.js +56 -43
  209. package/umd/Core/Engine.js +83 -99
  210. package/umd/Core/Particle.js +30 -16
  211. package/umd/Core/Particles.js +24 -25
  212. package/umd/Core/Utils/EventListeners.js +19 -18
  213. package/umd/Core/Utils/ExternalInteractorBase.js +3 -2
  214. package/umd/Core/Utils/InteractionManager.js +4 -3
  215. package/umd/Core/Utils/ParticlesInteractorBase.js +3 -2
  216. package/umd/Core/Utils/QuadTree.js +1 -1
  217. package/umd/Core/Utils/Ranges.js +6 -5
  218. package/umd/Enums/AnimationStatus.js +6 -0
  219. package/umd/Enums/Directions/MoveDirection.js +15 -0
  220. package/umd/Enums/Directions/OutModeDirection.js +8 -0
  221. package/umd/Enums/Directions/RotateDirection.js +7 -0
  222. package/umd/Enums/InteractivityDetect.js +7 -0
  223. package/umd/Enums/Modes/AnimationMode.js +8 -0
  224. package/umd/Enums/Modes/CollisionMode.js +7 -0
  225. package/umd/Enums/Modes/LimitMode.js +6 -0
  226. package/umd/Enums/Modes/OutMode.js +9 -0
  227. package/umd/Enums/Modes/PixelMode.js +6 -0
  228. package/umd/Enums/Modes/ResponsiveMode.js +6 -0
  229. package/umd/Enums/Modes/ThemeMode.js +7 -0
  230. package/umd/Enums/Types/AlterType.js +6 -0
  231. package/umd/Enums/Types/DestroyType.js +7 -0
  232. package/umd/Enums/Types/DivType.js +6 -0
  233. package/umd/Enums/Types/EasingType.js +31 -0
  234. package/umd/Enums/Types/EventType.js +16 -0
  235. package/umd/Enums/Types/GradientType.js +7 -0
  236. package/umd/Enums/Types/InteractorType.js +6 -0
  237. package/umd/Enums/Types/ParticleOutType.js +7 -0
  238. package/umd/Enums/Types/StartValueType.js +7 -0
  239. package/umd/Options/Classes/AnimationOptions.js +5 -3
  240. package/umd/Options/Classes/Interactivity/Events/DivEvent.js +3 -2
  241. package/umd/Options/Classes/Interactivity/Events/Events.js +1 -1
  242. package/umd/Options/Classes/Interactivity/Interactivity.js +3 -2
  243. package/umd/Options/Classes/ManualParticle.js +3 -2
  244. package/umd/Options/Classes/Options.js +15 -13
  245. package/umd/Options/Classes/Particles/Collisions/Collisions.js +3 -2
  246. package/umd/Options/Classes/Particles/Move/Move.js +3 -2
  247. package/umd/Options/Classes/Particles/Move/MoveCenter.js +3 -2
  248. package/umd/Options/Classes/Particles/Move/OutModes.js +3 -2
  249. package/umd/Options/Classes/Particles/Number/ParticlesNumberLimit.js +3 -2
  250. package/umd/Options/Classes/Particles/Opacity/OpacityAnimation.js +3 -2
  251. package/umd/Options/Classes/Particles/ParticlesOptions.js +1 -1
  252. package/umd/Options/Classes/Particles/Size/SizeAnimation.js +3 -2
  253. package/umd/Options/Classes/Responsive.js +6 -5
  254. package/umd/Options/Classes/Theme/ThemeDefault.js +3 -2
  255. package/umd/Types/RangeType.js +6 -0
  256. package/umd/Utils/CanvasUtils.js +14 -8
  257. package/umd/Utils/ColorUtils.js +18 -10
  258. package/umd/Utils/EventDispatcher.js +1 -1
  259. package/umd/Utils/HslColorManager.js +11 -4
  260. package/umd/Utils/NumberUtils.js +12 -11
  261. package/umd/Utils/RgbColorManager.js +11 -4
  262. package/umd/Utils/Utils.js +38 -32
  263. package/174.min.js +0 -2
  264. package/174.min.js.LICENSE.txt +0 -1
  265. package/dist_browser_Core_Container_js.js +0 -102
@@ -5,17 +5,19 @@ import { FullScreen } from "./FullScreen/FullScreen.js";
5
5
  import { Interactivity } from "./Interactivity/Interactivity.js";
6
6
  import { ManualParticle } from "./ManualParticle.js";
7
7
  import { Responsive } from "./Responsive.js";
8
+ import { ResponsiveMode } from "../../Enums/Modes/ResponsiveMode.js";
8
9
  import { Theme } from "./Theme/Theme.js";
10
+ import { ThemeMode } from "../../Enums/Modes/ThemeMode.js";
9
11
  import { isBoolean } from "../../Utils/TypeUtils.js";
10
12
  import { loadParticlesOptions } from "../../Utils/OptionsUtils.js";
11
13
  import { setRangeValue } from "../../Utils/NumberUtils.js";
12
14
  export class Options {
13
15
  constructor(engine, container) {
14
- this._findDefaultTheme = (mode) => {
15
- return (this.themes.find((theme) => theme.default.value && theme.default.mode === mode) ??
16
- this.themes.find((theme) => theme.default.value && theme.default.mode === "any"));
16
+ this._findDefaultTheme = mode => {
17
+ return (this.themes.find(theme => theme.default.value && theme.default.mode === mode) ??
18
+ this.themes.find(theme => theme.default.value && theme.default.mode === ThemeMode.any));
17
19
  };
18
- this._importPreset = (preset) => {
20
+ this._importPreset = preset => {
19
21
  this.load(this._engine.getPreset(preset));
20
22
  };
21
23
  this._engine = engine;
@@ -46,7 +48,7 @@ export class Options {
46
48
  return;
47
49
  }
48
50
  if (data.preset !== undefined) {
49
- executeOnSingleOrMultiple(data.preset, (preset) => this._importPreset(preset));
51
+ executeOnSingleOrMultiple(data.preset, preset => this._importPreset(preset));
50
52
  }
51
53
  if (data.autoPlay !== undefined) {
52
54
  this.autoPlay = data.autoPlay;
@@ -94,7 +96,7 @@ export class Options {
94
96
  this.backgroundMask.load(data.backgroundMask);
95
97
  this.interactivity.load(data.interactivity);
96
98
  if (data.manualParticles) {
97
- this.manualParticles = data.manualParticles.map((t) => {
99
+ this.manualParticles = data.manualParticles.map(t => {
98
100
  const tmp = new ManualParticle();
99
101
  tmp.load(t);
100
102
  return tmp;
@@ -124,7 +126,7 @@ export class Options {
124
126
  this.responsive.sort((a, b) => a.maxWidth - b.maxWidth);
125
127
  if (data.themes !== undefined) {
126
128
  for (const theme of data.themes) {
127
- const existingTheme = this.themes.find((t) => t.name === theme.name);
129
+ const existingTheme = this.themes.find(t => t.name === theme.name);
128
130
  if (!existingTheme) {
129
131
  const optTheme = new Theme();
130
132
  optTheme.load(theme);
@@ -135,24 +137,24 @@ export class Options {
135
137
  }
136
138
  }
137
139
  }
138
- this.defaultThemes.dark = this._findDefaultTheme("dark")?.name;
139
- this.defaultThemes.light = this._findDefaultTheme("light")?.name;
140
+ this.defaultThemes.dark = this._findDefaultTheme(ThemeMode.dark)?.name;
141
+ this.defaultThemes.light = this._findDefaultTheme(ThemeMode.light)?.name;
140
142
  }
141
143
  setResponsive(width, pxRatio, defaultOptions) {
142
144
  this.load(defaultOptions);
143
- const responsiveOptions = this.responsive.find((t) => t.mode === "screen" && screen ? t.maxWidth > screen.availWidth : t.maxWidth * pxRatio > width);
145
+ const responsiveOptions = this.responsive.find(t => t.mode === ResponsiveMode.screen && screen ? t.maxWidth > screen.availWidth : t.maxWidth * pxRatio > width);
144
146
  this.load(responsiveOptions?.options);
145
147
  return responsiveOptions?.maxWidth;
146
148
  }
147
149
  setTheme(name) {
148
150
  if (name) {
149
- const chosenTheme = this.themes.find((theme) => theme.name === name);
151
+ const chosenTheme = this.themes.find(theme => theme.name === name);
150
152
  if (chosenTheme) {
151
153
  this.load(chosenTheme.options);
152
154
  }
153
155
  }
154
156
  else {
155
- const mediaMatch = safeMatchMedia("(prefers-color-scheme: dark)"), clientDarkMode = mediaMatch && mediaMatch.matches, defaultTheme = this._findDefaultTheme(clientDarkMode ? "dark" : "light");
157
+ const mediaMatch = safeMatchMedia("(prefers-color-scheme: dark)"), clientDarkMode = mediaMatch?.matches, defaultTheme = this._findDefaultTheme(clientDarkMode ? ThemeMode.dark : ThemeMode.light);
156
158
  if (defaultTheme) {
157
159
  this.load(defaultTheme.options);
158
160
  }
@@ -1,3 +1,4 @@
1
+ import { CollisionMode } from "../../../../Enums/Modes/CollisionMode.js";
1
2
  import { CollisionsAbsorb } from "./CollisionsAbsorb.js";
2
3
  import { CollisionsOverlap } from "./CollisionsOverlap.js";
3
4
  import { ParticlesBounce } from "../Bounce/ParticlesBounce.js";
@@ -8,7 +9,7 @@ export class Collisions {
8
9
  this.bounce = new ParticlesBounce();
9
10
  this.enable = false;
10
11
  this.maxSpeed = 50;
11
- this.mode = "bounce";
12
+ this.mode = CollisionMode.bounce;
12
13
  this.overlap = new CollisionsOverlap();
13
14
  }
14
15
  load(data) {
@@ -1,3 +1,4 @@
1
+ import { MoveDirection } from "../../../../Enums/Directions/MoveDirection.js";
1
2
  import { isNumber, isObject } from "../../../../Utils/TypeUtils.js";
2
3
  import { MoveAngle } from "./MoveAngle.js";
3
4
  import { MoveAttract } from "./MoveAttract.js";
@@ -15,7 +16,7 @@ export class Move {
15
16
  this.center = new MoveCenter();
16
17
  this.decay = 0;
17
18
  this.distance = {};
18
- this.direction = "none";
19
+ this.direction = MoveDirection.none;
19
20
  this.drift = 0;
20
21
  this.enable = false;
21
22
  this.gravity = new MoveGravity();
@@ -1,8 +1,9 @@
1
+ import { PixelMode } from "../../../../Enums/Modes/PixelMode.js";
1
2
  export class MoveCenter {
2
3
  constructor() {
3
4
  this.x = 50;
4
5
  this.y = 50;
5
- this.mode = "percent";
6
+ this.mode = PixelMode.percent;
6
7
  this.radius = 0;
7
8
  }
8
9
  load(data) {
@@ -1,6 +1,7 @@
1
+ import { OutMode } from "../../../../Enums/Modes/OutMode.js";
1
2
  export class OutModes {
2
3
  constructor() {
3
- this.default = "out";
4
+ this.default = OutMode.out;
4
5
  }
5
6
  load(data) {
6
7
  if (!data) {
@@ -1,6 +1,7 @@
1
+ import { LimitMode } from "../../../../Enums/Modes/LimitMode.js";
1
2
  export class ParticlesNumberLimit {
2
3
  constructor() {
3
- this.mode = "delete";
4
+ this.mode = LimitMode.delete;
4
5
  this.value = 0;
5
6
  }
6
7
  load(data) {
@@ -1,8 +1,9 @@
1
+ import { DestroyType } from "../../../../Enums/Types/DestroyType.js";
1
2
  import { RangedAnimationOptions } from "../../AnimationOptions.js";
2
3
  export class OpacityAnimation extends RangedAnimationOptions {
3
4
  constructor() {
4
5
  super();
5
- this.destroy = "none";
6
+ this.destroy = DestroyType.none;
6
7
  this.speed = 2;
7
8
  }
8
9
  load(data) {
@@ -65,7 +65,7 @@ export class ParticlesOptions {
65
65
  }
66
66
  const strokeToLoad = data.stroke;
67
67
  if (strokeToLoad) {
68
- this.stroke = executeOnSingleOrMultiple(strokeToLoad, (t) => {
68
+ this.stroke = executeOnSingleOrMultiple(strokeToLoad, t => {
69
69
  const tmp = new Stroke();
70
70
  tmp.load(t);
71
71
  return tmp;
@@ -1,8 +1,9 @@
1
+ import { DestroyType } from "../../../../Enums/Types/DestroyType.js";
1
2
  import { RangedAnimationOptions } from "../../AnimationOptions.js";
2
3
  export class SizeAnimation extends RangedAnimationOptions {
3
4
  constructor() {
4
5
  super();
5
- this.destroy = "none";
6
+ this.destroy = DestroyType.none;
6
7
  this.speed = 5;
7
8
  }
8
9
  load(data) {
@@ -1,9 +1,10 @@
1
+ import { ResponsiveMode } from "../../Enums/Modes/ResponsiveMode.js";
1
2
  import { deepExtend } from "../../Utils/Utils.js";
2
3
  export class Responsive {
3
4
  constructor() {
4
5
  this.maxWidth = Infinity;
5
6
  this.options = {};
6
- this.mode = "canvas";
7
+ this.mode = ResponsiveMode.canvas;
7
8
  }
8
9
  load(data) {
9
10
  if (!data) {
@@ -13,11 +14,11 @@ export class Responsive {
13
14
  this.maxWidth = data.maxWidth;
14
15
  }
15
16
  if (data.mode !== undefined) {
16
- if (data.mode === "screen") {
17
- this.mode = "screen";
17
+ if (data.mode === ResponsiveMode.screen) {
18
+ this.mode = ResponsiveMode.screen;
18
19
  }
19
20
  else {
20
- this.mode = "canvas";
21
+ this.mode = ResponsiveMode.canvas;
21
22
  }
22
23
  }
23
24
  if (data.options !== undefined) {
@@ -1,7 +1,8 @@
1
+ import { ThemeMode } from "../../../Enums/Modes/ThemeMode.js";
1
2
  export class ThemeDefault {
2
3
  constructor() {
3
4
  this.auto = false;
4
- this.mode = "any";
5
+ this.mode = ThemeMode.any;
5
6
  this.value = false;
6
7
  }
7
8
  load(data) {
@@ -1 +1,5 @@
1
- export {};
1
+ export var RangeType;
2
+ (function (RangeType) {
3
+ RangeType["circle"] = "circle";
4
+ RangeType["rectangle"] = "rectangle";
5
+ })(RangeType || (RangeType = {}));
@@ -1,5 +1,11 @@
1
+ import { AlterType } from "../Enums/Types/AlterType.js";
1
2
  import { getStyleFromRgb } from "./ColorUtils.js";
2
- const origin = { x: 0, y: 0 };
3
+ const origin = { x: 0, y: 0 }, defaultTransform = {
4
+ a: 1,
5
+ b: 0,
6
+ c: 0,
7
+ d: 1,
8
+ };
3
9
  export function drawLine(context, begin, end) {
4
10
  context.beginPath();
5
11
  context.moveTo(begin.x, begin.y);
@@ -25,11 +31,11 @@ export function drawParticle(data) {
25
31
  const { container, context, particle, delta, colorStyles, backgroundMask, composite, radius, opacity, shadow, transform, } = data, pos = particle.getPosition(), defaultAngle = 0, angle = particle.rotation + (particle.pathRotation ? particle.velocity.angle : defaultAngle), rotateData = {
26
32
  sin: Math.sin(angle),
27
33
  cos: Math.cos(angle),
28
- }, defaultTransformFactor = 1, transformData = {
29
- a: rotateData.cos * (transform.a ?? defaultTransformFactor),
30
- b: rotateData.sin * (transform.b ?? defaultTransformFactor),
31
- c: -rotateData.sin * (transform.c ?? defaultTransformFactor),
32
- d: rotateData.cos * (transform.d ?? defaultTransformFactor),
34
+ }, rotating = !!angle, identity = 1, transformData = {
35
+ a: rotateData.cos * (transform.a ?? defaultTransform.a),
36
+ b: rotating ? rotateData.sin * (transform.b ?? identity) : transform.b ?? defaultTransform.b,
37
+ c: rotating ? -rotateData.sin * (transform.c ?? identity) : transform.c ?? defaultTransform.c,
38
+ d: rotateData.cos * (transform.d ?? defaultTransform.d),
33
39
  };
34
40
  context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);
35
41
  if (backgroundMask) {
@@ -150,6 +156,6 @@ export function alterHsl(color, type, value) {
150
156
  return {
151
157
  h: color.h,
152
158
  s: color.s,
153
- l: color.l + (type === "darken" ? -lFactor : lFactor) * value,
159
+ l: color.l + (type === AlterType.darken ? -lFactor : lFactor) * value,
154
160
  };
155
161
  }
@@ -1,7 +1,15 @@
1
1
  import { clamp, getRandom, getRangeMax, getRangeMin, getRangeValue, mix, randomInRange, setRangeValue, } from "./NumberUtils.js";
2
2
  import { isArray, isString } from "./TypeUtils.js";
3
3
  import { millisecondsToSeconds, percentDenominator } from "../Core/Utils/Constants.js";
4
+ import { AnimationStatus } from "../Enums/AnimationStatus.js";
4
5
  import { itemFromArray } from "./Utils.js";
6
+ var RgbIndexes;
7
+ (function (RgbIndexes) {
8
+ RgbIndexes[RgbIndexes["r"] = 1] = "r";
9
+ RgbIndexes[RgbIndexes["g"] = 2] = "g";
10
+ RgbIndexes[RgbIndexes["b"] = 3] = "b";
11
+ RgbIndexes[RgbIndexes["a"] = 4] = "a";
12
+ })(RgbIndexes || (RgbIndexes = {}));
5
13
  const randomColorValue = "random", midColorValue = "mid", colorManagers = new Map();
6
14
  export function addColorManager(manager) {
7
15
  colorManagers.set(manager.key, manager);
@@ -17,12 +25,12 @@ function stringToRgba(input) {
17
25
  }), regex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i, result = regex.exec(hexFixed), radix = 16, defaultAlpha = 1, alphaFactor = 0xff;
18
26
  return result
19
27
  ? {
20
- a: result[4] !== undefined
21
- ? parseInt(result[4], radix) / alphaFactor
28
+ a: result[RgbIndexes.a] !== undefined
29
+ ? parseInt(result[RgbIndexes.a], radix) / alphaFactor
22
30
  : defaultAlpha,
23
- b: parseInt(result[3], radix),
24
- g: parseInt(result[2], radix),
25
- r: parseInt(result[1], radix),
31
+ b: parseInt(result[RgbIndexes.b], radix),
32
+ g: parseInt(result[RgbIndexes.g], radix),
33
+ r: parseInt(result[RgbIndexes.r], radix),
26
34
  }
27
35
  : undefined;
28
36
  }
@@ -252,7 +260,7 @@ function setColorAnimation(colorValue, colorAnimation, reduceFactor) {
252
260
  if (colorValue.enable) {
253
261
  colorValue.velocity = (getRangeValue(colorAnimation.speed) / percentDenominator) * reduceFactor;
254
262
  colorValue.decay = decayOffset - getRangeValue(colorAnimation.decay);
255
- colorValue.status = "increasing";
263
+ colorValue.status = AnimationStatus.increasing;
256
264
  colorValue.loops = defaultLoops;
257
265
  colorValue.maxLoops = getRangeValue(colorAnimation.count);
258
266
  colorValue.time = defaultTime;
@@ -285,7 +293,7 @@ export function updateColorValue(data, range, decrease, delta) {
285
293
  return;
286
294
  }
287
295
  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);
288
- if (!decrease || data.status === "increasing") {
296
+ if (!decrease || data.status === AnimationStatus.increasing) {
289
297
  data.value += velocity;
290
298
  if (data.value > max) {
291
299
  if (!data.loops) {
@@ -293,7 +301,7 @@ export function updateColorValue(data, range, decrease, delta) {
293
301
  }
294
302
  data.loops++;
295
303
  if (decrease) {
296
- data.status = "decreasing";
304
+ data.status = AnimationStatus.decreasing;
297
305
  }
298
306
  else {
299
307
  data.value -= max;
@@ -308,7 +316,7 @@ export function updateColorValue(data, range, decrease, delta) {
308
316
  data.loops = 0;
309
317
  }
310
318
  data.loops++;
311
- data.status = "increasing";
319
+ data.status = AnimationStatus.increasing;
312
320
  }
313
321
  }
314
322
  if (data.velocity && decay !== identity) {
@@ -13,7 +13,7 @@ export class EventDispatcher {
13
13
  }
14
14
  dispatchEvent(type, args) {
15
15
  const listeners = this._listeners.get(type);
16
- listeners?.forEach((handler) => handler(args));
16
+ listeners?.forEach(handler => handler(args));
17
17
  }
18
18
  hasEventListener(type) {
19
19
  return !!this._listeners.get(type);
@@ -1,5 +1,12 @@
1
1
  import { getRangeValue, parseAlpha } from "./NumberUtils.js";
2
2
  import { hslToRgb, hslaToRgba } from "./ColorUtils.js";
3
+ var HslIndexes;
4
+ (function (HslIndexes) {
5
+ HslIndexes[HslIndexes["h"] = 1] = "h";
6
+ HslIndexes[HslIndexes["s"] = 2] = "s";
7
+ HslIndexes[HslIndexes["l"] = 3] = "l";
8
+ HslIndexes[HslIndexes["a"] = 5] = "a";
9
+ })(HslIndexes || (HslIndexes = {}));
3
10
  export class HslColorManager {
4
11
  constructor() {
5
12
  this.key = "hsl";
@@ -28,10 +35,10 @@ export class HslColorManager {
28
35
  const regex = /hsla?\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.%]+)\s*)?\)/i, result = regex.exec(input), minLength = 4, defaultAlpha = 1, radix = 10;
29
36
  return result
30
37
  ? hslaToRgba({
31
- a: result.length > minLength ? parseAlpha(result[5]) : defaultAlpha,
32
- h: parseInt(result[1], radix),
33
- l: parseInt(result[3], radix),
34
- s: parseInt(result[2], radix),
38
+ a: result.length > minLength ? parseAlpha(result[HslIndexes.a]) : defaultAlpha,
39
+ h: parseInt(result[HslIndexes.h], radix),
40
+ l: parseInt(result[HslIndexes.l], radix),
41
+ s: parseInt(result[HslIndexes.s], radix),
35
42
  })
36
43
  : undefined;
37
44
  }
@@ -1,3 +1,4 @@
1
+ import { MoveDirection } from "../Enums/Directions/MoveDirection.js";
1
2
  import { Vector } from "../Core/Utils/Vectors.js";
2
3
  import { isNumber } from "./TypeUtils.js";
3
4
  import { percentDenominator } from "../Core/Utils/Constants.js";
@@ -71,25 +72,25 @@ export function getParticleDirectionAngle(direction, position, center) {
71
72
  }
72
73
  const empty = 0, half = 0.5, quarter = 0.25, threeQuarter = half + quarter;
73
74
  switch (direction) {
74
- case "top":
75
+ case MoveDirection.top:
75
76
  return -Math.PI * half;
76
- case "top-right":
77
+ case MoveDirection.topRight:
77
78
  return -Math.PI * quarter;
78
- case "right":
79
+ case MoveDirection.right:
79
80
  return empty;
80
- case "bottom-right":
81
+ case MoveDirection.bottomRight:
81
82
  return Math.PI * quarter;
82
- case "bottom":
83
+ case MoveDirection.bottom:
83
84
  return Math.PI * half;
84
- case "bottom-left":
85
+ case MoveDirection.bottomLeft:
85
86
  return Math.PI * threeQuarter;
86
- case "left":
87
+ case MoveDirection.left:
87
88
  return Math.PI;
88
- case "top-left":
89
+ case MoveDirection.topLeft:
89
90
  return -Math.PI * threeQuarter;
90
- case "inside":
91
+ case MoveDirection.inside:
91
92
  return Math.atan2(center.y - position.y, center.x - position.x);
92
- case "outside":
93
+ case MoveDirection.outside:
93
94
  return Math.atan2(position.y - center.y, position.x - center.x);
94
95
  default:
95
96
  return getRandom() * doublePI;
@@ -1,4 +1,11 @@
1
1
  import { getRangeValue, parseAlpha } from "./NumberUtils.js";
2
+ var RgbIndexes;
3
+ (function (RgbIndexes) {
4
+ RgbIndexes[RgbIndexes["r"] = 1] = "r";
5
+ RgbIndexes[RgbIndexes["g"] = 2] = "g";
6
+ RgbIndexes[RgbIndexes["b"] = 3] = "b";
7
+ RgbIndexes[RgbIndexes["a"] = 5] = "a";
8
+ })(RgbIndexes || (RgbIndexes = {}));
2
9
  export class RgbColorManager {
3
10
  constructor() {
4
11
  this.key = "rgb";
@@ -27,10 +34,10 @@ export class RgbColorManager {
27
34
  const regex = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.%]+)\s*)?\)/i, result = regex.exec(input), radix = 10, minLength = 4, defaultAlpha = 1;
28
35
  return result
29
36
  ? {
30
- a: result.length > minLength ? parseAlpha(result[5]) : defaultAlpha,
31
- b: parseInt(result[3], radix),
32
- g: parseInt(result[2], radix),
33
- r: parseInt(result[1], radix),
37
+ a: result.length > minLength ? parseAlpha(result[RgbIndexes.a]) : defaultAlpha,
38
+ b: parseInt(result[RgbIndexes.b], radix),
39
+ g: parseInt(result[RgbIndexes.g], radix),
40
+ r: parseInt(result[RgbIndexes.r], radix),
34
41
  }
35
42
  : undefined;
36
43
  }
@@ -1,6 +1,12 @@
1
1
  import { clamp, collisionVelocity, getDistances, getRandom, getRangeMax, getRangeMin, getRangeValue, randomInRange, } from "./NumberUtils.js";
2
2
  import { halfRandom, millisecondsToSeconds, percentDenominator } from "../Core/Utils/Constants.js";
3
3
  import { isArray, isObject } from "./TypeUtils.js";
4
+ import { AnimationMode } from "../Enums/Modes/AnimationMode.js";
5
+ import { AnimationStatus } from "../Enums/AnimationStatus.js";
6
+ import { DestroyType } from "../Enums/Types/DestroyType.js";
7
+ import { OutModeDirection } from "../Enums/Directions/OutModeDirection.js";
8
+ import { PixelMode } from "../Enums/Modes/PixelMode.js";
9
+ import { StartValueType } from "../Enums/Types/StartValueType.js";
4
10
  import { Vector } from "../Core/Utils/Vectors.js";
5
11
  const _logger = {
6
12
  debug: console.debug,
@@ -37,10 +43,10 @@ function rectSideBounce(data) {
37
43
  return res;
38
44
  }
39
45
  function checkSelector(element, selectors) {
40
- const res = executeOnSingleOrMultiple(selectors, (selector) => {
46
+ const res = executeOnSingleOrMultiple(selectors, selector => {
41
47
  return element.matches(selector);
42
48
  });
43
- return isArray(res) ? res.some((t) => t) : res;
49
+ return isArray(res) ? res.some(t => t) : res;
44
50
  }
45
51
  export function isSsr() {
46
52
  return typeof window === "undefined" || !window || typeof window.document === "undefined" || !window.document;
@@ -89,16 +95,16 @@ export function isPointInside(point, size, offset, radius, direction) {
89
95
  }
90
96
  export function areBoundsInside(bounds, size, offset, direction) {
91
97
  let inside = true;
92
- if (!direction || direction === "bottom") {
98
+ if (!direction || direction === OutModeDirection.bottom) {
93
99
  inside = bounds.top < size.height + offset.x;
94
100
  }
95
- if (inside && (!direction || direction === "left")) {
101
+ if (inside && (!direction || direction === OutModeDirection.left)) {
96
102
  inside = bounds.right > offset.x;
97
103
  }
98
- if (inside && (!direction || direction === "right")) {
104
+ if (inside && (!direction || direction === OutModeDirection.right)) {
99
105
  inside = bounds.left < size.width + offset.y;
100
106
  }
101
- if (inside && (!direction || direction === "top")) {
107
+ if (inside && (!direction || direction === OutModeDirection.top)) {
102
108
  inside = bounds.bottom > offset.y;
103
109
  }
104
110
  return inside;
@@ -134,17 +140,17 @@ export function deepExtend(destination, ...sources) {
134
140
  const sourceDict = source, value = sourceDict[key], destDict = destination;
135
141
  destDict[key] =
136
142
  isObject(value) && Array.isArray(value)
137
- ? value.map((v) => deepExtend(destDict[key], v))
143
+ ? value.map(v => deepExtend(destDict[key], v))
138
144
  : deepExtend(destDict[key], value);
139
145
  }
140
146
  }
141
147
  return destination;
142
148
  }
143
149
  export function isDivModeEnabled(mode, divs) {
144
- return !!findItemFromSingleOrMultiple(divs, (t) => t.enable && isInArray(mode, t.mode));
150
+ return !!findItemFromSingleOrMultiple(divs, t => t.enable && isInArray(mode, t.mode));
145
151
  }
146
152
  export function divModeExecute(mode, divs, callback) {
147
- executeOnSingleOrMultiple(divs, (div) => {
153
+ executeOnSingleOrMultiple(divs, div => {
148
154
  const divMode = div.mode, divEnabled = div.enable;
149
155
  if (divEnabled && isInArray(mode, divMode)) {
150
156
  singleDivModeExecute(div, callback);
@@ -153,7 +159,7 @@ export function divModeExecute(mode, divs, callback) {
153
159
  }
154
160
  export function singleDivModeExecute(div, callback) {
155
161
  const selectors = div.selectors;
156
- executeOnSingleOrMultiple(selectors, (selector) => {
162
+ executeOnSingleOrMultiple(selectors, selector => {
157
163
  callback(selector, div);
158
164
  });
159
165
  }
@@ -161,7 +167,7 @@ export function divMode(divs, element) {
161
167
  if (!element || !divs) {
162
168
  return;
163
169
  }
164
- return findItemFromSingleOrMultiple(divs, (div) => {
170
+ return findItemFromSingleOrMultiple(divs, div => {
165
171
  return checkSelector(element, div.selectors);
166
172
  });
167
173
  }
@@ -271,35 +277,35 @@ export function initParticleNumericAnimationValue(options, pxRatio) {
271
277
  if (animationOptions.enable) {
272
278
  res.decay = decayOffset - getRangeValue(animationOptions.decay);
273
279
  switch (animationOptions.mode) {
274
- case "increase":
275
- res.status = "increasing";
280
+ case AnimationMode.increase:
281
+ res.status = AnimationStatus.increasing;
276
282
  break;
277
- case "decrease":
278
- res.status = "decreasing";
283
+ case AnimationMode.decrease:
284
+ res.status = AnimationStatus.decreasing;
279
285
  break;
280
- case "random":
281
- res.status = getRandom() >= halfRandom ? "increasing" : "decreasing";
286
+ case AnimationMode.random:
287
+ res.status = getRandom() >= halfRandom ? AnimationStatus.increasing : AnimationStatus.decreasing;
282
288
  break;
283
289
  }
284
- const autoStatus = animationOptions.mode === "auto";
290
+ const autoStatus = animationOptions.mode === AnimationMode.auto;
285
291
  switch (animationOptions.startValue) {
286
- case "min":
292
+ case StartValueType.min:
287
293
  res.value = res.min;
288
294
  if (autoStatus) {
289
- res.status = "increasing";
295
+ res.status = AnimationStatus.increasing;
290
296
  }
291
297
  break;
292
- case "max":
298
+ case StartValueType.max:
293
299
  res.value = res.max;
294
300
  if (autoStatus) {
295
- res.status = "decreasing";
301
+ res.status = AnimationStatus.decreasing;
296
302
  }
297
303
  break;
298
- case "random":
304
+ case StartValueType.random:
299
305
  default:
300
306
  res.value = randomInRange(res);
301
307
  if (autoStatus) {
302
- res.status = getRandom() >= halfRandom ? "increasing" : "decreasing";
308
+ res.status = getRandom() >= halfRandom ? AnimationStatus.increasing : AnimationStatus.decreasing;
303
309
  }
304
310
  break;
305
311
  }
@@ -308,7 +314,7 @@ export function initParticleNumericAnimationValue(options, pxRatio) {
308
314
  return res;
309
315
  }
310
316
  function getPositionOrSize(positionOrSize, canvasSize) {
311
- const isPercent = positionOrSize.mode === "percent";
317
+ const isPercent = positionOrSize.mode === PixelMode.percent;
312
318
  if (!isPercent) {
313
319
  const { mode: _, ...rest } = positionOrSize;
314
320
  return rest;
@@ -335,12 +341,12 @@ export function getSize(size, canvasSize) {
335
341
  }
336
342
  function checkDestroy(particle, destroyType, value, minValue, maxValue) {
337
343
  switch (destroyType) {
338
- case "max":
344
+ case DestroyType.max:
339
345
  if (value >= maxValue) {
340
346
  particle.destroy();
341
347
  }
342
348
  break;
343
- case "min":
349
+ case DestroyType.min:
344
350
  if (value <= minValue) {
345
351
  particle.destroy();
346
352
  }
@@ -366,10 +372,10 @@ export function updateAnimation(particle, data, changeDirection, destroyType, de
366
372
  return;
367
373
  }
368
374
  switch (data.status) {
369
- case "increasing":
375
+ case AnimationStatus.increasing:
370
376
  if (data.value >= maxValue) {
371
377
  if (changeDirection) {
372
- data.status = "decreasing";
378
+ data.status = AnimationStatus.decreasing;
373
379
  }
374
380
  else {
375
381
  data.value -= maxValue;
@@ -383,10 +389,10 @@ export function updateAnimation(particle, data, changeDirection, destroyType, de
383
389
  data.value += velocity;
384
390
  }
385
391
  break;
386
- case "decreasing":
392
+ case AnimationStatus.decreasing:
387
393
  if (data.value <= minValue) {
388
394
  if (changeDirection) {
389
- data.status = "increasing";
395
+ data.status = AnimationStatus.increasing;
390
396
  }
391
397
  else {
392
398
  data.value += maxValue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/engine",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "description": "Easily create highly customizable particle, confetti and fireworks animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.",
5
5
  "homepage": "https://particles.js.org",
6
6
  "scripts": {
package/report.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8"/>
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
6
- <title>@tsparticles/engine [27 Feb 2024 at 12:13]</title>
6
+ <title>@tsparticles/engine [13 May 2024 at 00:05]</title>
7
7
  <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
8
8
 
9
9
  <script>