@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
@@ -3,12 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Engine = void 0;
4
4
  const Constants_js_1 = require("./Utils/Constants.js");
5
5
  const Utils_js_1 = require("../Utils/Utils.js");
6
+ const Container_js_1 = require("./Container.js");
6
7
  const EventDispatcher_js_1 = require("../Utils/EventDispatcher.js");
8
+ const EventType_js_1 = require("../Enums/Types/EventType.js");
7
9
  const NumberUtils_js_1 = require("../Utils/NumberUtils.js");
8
10
  async function getItemsFromInitializer(container, map, initializers, force = false) {
9
11
  let res = map.get(container);
10
12
  if (!res || force) {
11
- res = await Promise.all([...initializers.values()].map((t) => t(container)));
13
+ res = await Promise.all([...initializers.values()].map(t => t(container)));
12
14
  map.set(container, res);
13
15
  }
14
16
  return res;
@@ -25,6 +27,46 @@ async function getDataFromUrl(data) {
25
27
  (0, Utils_js_1.getLogger)().error(`${Constants_js_1.errorPrefix} ${response.status} while retrieving config file`);
26
28
  return data.fallback;
27
29
  }
30
+ const generatedTrue = "true", generatedFalse = "false", canvasTag = "canvas", getCanvasFromContainer = (domContainer) => {
31
+ let canvasEl;
32
+ if (domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag) {
33
+ canvasEl = domContainer;
34
+ if (!canvasEl.dataset[Constants_js_1.generatedAttribute]) {
35
+ canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedFalse;
36
+ }
37
+ }
38
+ else {
39
+ const existingCanvases = domContainer.getElementsByTagName(canvasTag);
40
+ if (existingCanvases.length) {
41
+ const firstIndex = 0;
42
+ canvasEl = existingCanvases[firstIndex];
43
+ canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedFalse;
44
+ }
45
+ else {
46
+ canvasEl = document.createElement(canvasTag);
47
+ canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedTrue;
48
+ domContainer.appendChild(canvasEl);
49
+ }
50
+ }
51
+ const fullPercent = "100%";
52
+ if (!canvasEl.style.width) {
53
+ canvasEl.style.width = fullPercent;
54
+ }
55
+ if (!canvasEl.style.height) {
56
+ canvasEl.style.height = fullPercent;
57
+ }
58
+ return canvasEl;
59
+ }, getDomContainer = (id, source) => {
60
+ let domContainer = source ?? document.getElementById(id);
61
+ if (domContainer) {
62
+ return domContainer;
63
+ }
64
+ domContainer = document.createElement("div");
65
+ domContainer.id = id;
66
+ domContainer.dataset[Constants_js_1.generatedAttribute] = generatedTrue;
67
+ document.body.append(domContainer);
68
+ return domContainer;
69
+ };
28
70
  class Engine {
29
71
  constructor() {
30
72
  this._configs = new Map();
@@ -52,16 +94,19 @@ class Engine {
52
94
  }
53
95
  return res;
54
96
  }
97
+ get items() {
98
+ return this._domArray;
99
+ }
55
100
  get version() {
56
- return "3.3.0";
101
+ return "3.4.0";
57
102
  }
58
103
  addConfig(config) {
59
104
  const key = config.key ?? config.name ?? "default";
60
105
  this._configs.set(key, config);
61
- this._eventDispatcher.dispatchEvent("configAdded", { data: { name: key, config } });
106
+ this._eventDispatcher.dispatchEvent(EventType_js_1.EventType.configAdded, { data: { name: key, config } });
62
107
  }
63
108
  async addEffect(effect, drawer, refresh = true) {
64
- (0, Utils_js_1.executeOnSingleOrMultiple)(effect, (type) => {
109
+ (0, Utils_js_1.executeOnSingleOrMultiple)(effect, type => {
65
110
  if (!this.getEffectDrawer(type)) {
66
111
  this.effectDrawers.set(type, drawer);
67
112
  }
@@ -101,12 +146,13 @@ class Engine {
101
146
  }
102
147
  await this.refresh(refresh);
103
148
  }
104
- async addShape(shape, drawer, refresh = true) {
105
- (0, Utils_js_1.executeOnSingleOrMultiple)(shape, (type) => {
106
- if (!this.getShapeDrawer(type)) {
107
- this.shapeDrawers.set(type, drawer);
149
+ async addShape(drawer, refresh = true) {
150
+ for (const validType of drawer.validTypes) {
151
+ if (this.getShapeDrawer(validType)) {
152
+ continue;
108
153
  }
109
- });
154
+ this.shapeDrawers.set(validType, drawer);
155
+ }
110
156
  await this.refresh(refresh);
111
157
  }
112
158
  clearPlugins(container) {
@@ -118,16 +164,10 @@ class Engine {
118
164
  this._eventDispatcher.dispatchEvent(type, args);
119
165
  }
120
166
  dom() {
121
- return this._domArray;
167
+ return this.items;
122
168
  }
123
169
  domItem(index) {
124
- const dom = this.dom(), item = dom[index];
125
- if (!item || item.destroyed) {
126
- const deleteCount = 1;
127
- dom.splice(index, deleteCount);
128
- return;
129
- }
130
- return item;
170
+ return this.item(index);
131
171
  }
132
172
  async getAvailablePlugins(container) {
133
173
  const res = new Map();
@@ -142,16 +182,16 @@ class Engine {
142
182
  return this.effectDrawers.get(type);
143
183
  }
144
184
  async getInteractors(container, force = false) {
145
- return await getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);
185
+ return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);
146
186
  }
147
187
  async getMovers(container, force = false) {
148
- return await getItemsFromInitializer(container, this.movers, this._initializers.movers, force);
188
+ return getItemsFromInitializer(container, this.movers, this._initializers.movers, force);
149
189
  }
150
190
  getPathGenerator(type) {
151
191
  return this.pathGenerators.get(type);
152
192
  }
153
193
  getPlugin(plugin) {
154
- return this.plugins.find((t) => t.id === plugin);
194
+ return this.plugins.find(t => t.id === plugin);
155
195
  }
156
196
  getPreset(preset) {
157
197
  return this.presets.get(preset);
@@ -166,7 +206,7 @@ class Engine {
166
206
  return this.shapeDrawers.keys();
167
207
  }
168
208
  async getUpdaters(container, force = false) {
169
- return await getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);
209
+ return getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);
170
210
  }
171
211
  init() {
172
212
  if (this._initialized) {
@@ -174,90 +214,58 @@ class Engine {
174
214
  }
175
215
  this._initialized = true;
176
216
  }
217
+ item(index) {
218
+ const { items } = this, item = items[index];
219
+ if (!item || item.destroyed) {
220
+ const deleteCount = 1;
221
+ items.splice(index, deleteCount);
222
+ return;
223
+ }
224
+ return item;
225
+ }
177
226
  async load(params) {
178
227
  const randomFactor = 10000, id = params.id ?? params.element?.id ?? `tsparticles${Math.floor((0, NumberUtils_js_1.getRandom)() * randomFactor)}`, { index, url } = params, options = url ? await getDataFromUrl({ fallback: params.options, url, index }) : params.options;
179
- let domContainer = params.element ?? document.getElementById(id);
180
- if (!domContainer) {
181
- domContainer = document.createElement("div");
182
- domContainer.id = id;
183
- document.body.append(domContainer);
184
- }
185
- const currentOptions = (0, Utils_js_1.itemFromSingleOrMultiple)(options, index), dom = this.dom(), oldIndex = dom.findIndex((v) => v.id.description === id), minIndex = 0;
228
+ const currentOptions = (0, Utils_js_1.itemFromSingleOrMultiple)(options, index), { items } = this, oldIndex = items.findIndex(v => v.id.description === id), minIndex = 0, newItem = new Container_js_1.Container(this, id, currentOptions);
186
229
  if (oldIndex >= minIndex) {
187
- const old = this.domItem(oldIndex);
230
+ const old = this.item(oldIndex), one = 1, none = 0, deleteCount = old ? one : none;
188
231
  if (old && !old.destroyed) {
189
- old.destroy();
190
- const deleteCount = 1;
191
- dom.splice(oldIndex, deleteCount);
192
- }
193
- }
194
- let canvasEl;
195
- if (domContainer.tagName.toLowerCase() === "canvas") {
196
- canvasEl = domContainer;
197
- canvasEl.dataset[Constants_js_1.generatedAttribute] = "false";
198
- }
199
- else {
200
- const existingCanvases = domContainer.getElementsByTagName("canvas");
201
- if (existingCanvases.length) {
202
- const firstIndex = 0;
203
- canvasEl = existingCanvases[firstIndex];
204
- canvasEl.dataset[Constants_js_1.generatedAttribute] = "false";
232
+ old.destroy(false);
205
233
  }
206
- else {
207
- canvasEl = document.createElement("canvas");
208
- canvasEl.dataset[Constants_js_1.generatedAttribute] = "true";
209
- domContainer.appendChild(canvasEl);
210
- }
211
- }
212
- if (!canvasEl.style.width) {
213
- canvasEl.style.width = "100%";
214
- }
215
- if (!canvasEl.style.height) {
216
- canvasEl.style.height = "100%";
217
- }
218
- const { Container } = await import("./Container.js"), newItem = new Container(this, id, currentOptions);
219
- if (oldIndex >= minIndex) {
220
- const deleteCount = 0;
221
- dom.splice(oldIndex, deleteCount, newItem);
234
+ items.splice(oldIndex, deleteCount, newItem);
222
235
  }
223
236
  else {
224
- dom.push(newItem);
237
+ items.push(newItem);
225
238
  }
239
+ const domContainer = getDomContainer(id, params.element), canvasEl = getCanvasFromContainer(domContainer);
226
240
  newItem.canvas.loadCanvas(canvasEl);
227
241
  await newItem.start();
228
242
  return newItem;
229
243
  }
230
244
  loadOptions(options, sourceOptions) {
231
- for (const plugin of this.plugins) {
232
- plugin.loadOptions(options, sourceOptions);
233
- }
245
+ this.plugins.forEach(plugin => plugin.loadOptions?.(options, sourceOptions));
234
246
  }
235
247
  loadParticlesOptions(container, options, ...sourceOptions) {
236
248
  const updaters = this.updaters.get(container);
237
249
  if (!updaters) {
238
250
  return;
239
251
  }
240
- for (const updater of updaters) {
241
- updater.loadOptions?.(options, ...sourceOptions);
242
- }
252
+ updaters.forEach(updater => updater.loadOptions?.(options, ...sourceOptions));
243
253
  }
244
254
  async refresh(refresh = true) {
245
255
  if (!refresh) {
246
256
  return;
247
257
  }
248
- await Promise.all(this.dom().map((t) => t.refresh()));
258
+ await Promise.all(this.items.map(t => t.refresh()));
249
259
  }
250
260
  removeEventListener(type, listener) {
251
261
  this._eventDispatcher.removeEventListener(type, listener);
252
262
  }
253
263
  setOnClickHandler(callback) {
254
- const dom = this.dom();
255
- if (!dom.length) {
264
+ const { items } = this;
265
+ if (!items.length) {
256
266
  throw new Error(`${Constants_js_1.errorPrefix} can only set click handlers after calling tsParticles.load()`);
257
267
  }
258
- for (const domItem of dom) {
259
- domItem.addClickHandler(callback);
260
- }
268
+ items.forEach(item => item.addClickHandler(callback));
261
269
  }
262
270
  }
263
271
  exports.Engine = Engine;
@@ -6,10 +6,15 @@ const NumberUtils_js_1 = require("../Utils/NumberUtils.js");
6
6
  const Utils_js_1 = require("../Utils/Utils.js");
7
7
  const Constants_js_1 = require("./Utils/Constants.js");
8
8
  const ColorUtils_js_1 = require("../Utils/ColorUtils.js");
9
+ const EventType_js_1 = require("../Enums/Types/EventType.js");
9
10
  const Interactivity_js_1 = require("../Options/Classes/Interactivity/Interactivity.js");
11
+ const MoveDirection_js_1 = require("../Enums/Directions/MoveDirection.js");
12
+ const OutMode_js_1 = require("../Enums/Modes/OutMode.js");
13
+ const ParticleOutType_js_1 = require("../Enums/Types/ParticleOutType.js");
14
+ const PixelMode_js_1 = require("../Enums/Modes/PixelMode.js");
10
15
  const CanvasUtils_js_1 = require("../Utils/CanvasUtils.js");
11
16
  const OptionsUtils_js_1 = require("../Utils/OptionsUtils.js");
12
- const defaultRetryCount = 0, double = 2, half = 0.5, squareExp = 2;
17
+ const defaultRetryCount = 0, double = 2, half = 0.5, squareExp = 2, randomString = "random";
13
18
  function loadEffectData(effect, effectOptions, id, reduceDuplicates) {
14
19
  const effectData = effectOptions.options[effect];
15
20
  if (!effectData) {
@@ -58,7 +63,7 @@ class Particle {
58
63
  }), pos = Vectors_js_1.Vector3d.create(exactPosition.x, exactPosition.y, zIndex), radius = this.getRadius(), outModes = this.options.move.outModes, fixHorizontal = (outMode) => {
59
64
  fixOutMode({
60
65
  outMode,
61
- checkModes: ["bounce"],
66
+ checkModes: [OutMode_js_1.OutMode.bounce],
62
67
  coord: pos.x,
63
68
  maxCoord: container.canvas.size.width,
64
69
  setCb: (value) => (pos.x += value),
@@ -67,7 +72,7 @@ class Particle {
67
72
  }, fixVertical = (outMode) => {
68
73
  fixOutMode({
69
74
  outMode,
70
- checkModes: ["bounce"],
75
+ checkModes: [OutMode_js_1.OutMode.bounce],
71
76
  coord: pos.y,
72
77
  maxCoord: container.canvas.size.height,
73
78
  setCb: (value) => (pos.y += value),
@@ -86,7 +91,7 @@ class Particle {
86
91
  };
87
92
  this._calculateVelocity = () => {
88
93
  const baseVelocity = (0, NumberUtils_js_1.getParticleBaseVelocity)(this.direction), res = baseVelocity.copy(), moveOptions = this.options.move;
89
- if (moveOptions.direction === "inside" || moveOptions.direction === "outside") {
94
+ if (moveOptions.direction === MoveDirection_js_1.MoveDirection.inside || moveOptions.direction === MoveDirection_js_1.MoveDirection.outside) {
90
95
  return res;
91
96
  }
92
97
  const rad = (0, NumberUtils_js_1.degToRad)((0, NumberUtils_js_1.getRangeValue)(moveOptions.angle.value)), radOffset = (0, NumberUtils_js_1.degToRad)((0, NumberUtils_js_1.getRangeValue)(moveOptions.angle.offset)), range = {
@@ -114,9 +119,9 @@ class Particle {
114
119
  if (retries >= minRetries && tryCount > retries) {
115
120
  throw new Error(`${Constants_js_1.errorPrefix} particle is overlapping and can't be placed`);
116
121
  }
117
- return !!this.container.particles.find((particle) => (0, NumberUtils_js_1.getDistance)(pos, particle.position) < radius + particle.getRadius());
122
+ return !!this.container.particles.find(particle => (0, NumberUtils_js_1.getDistance)(pos, particle.position) < radius + particle.getRadius());
118
123
  };
119
- this._getRollColor = (color) => {
124
+ this._getRollColor = color => {
120
125
  if (!color || !this.roll || (!this.backColor && !this.roll.alter)) {
121
126
  return color;
122
127
  }
@@ -132,7 +137,7 @@ class Particle {
132
137
  }
133
138
  return color;
134
139
  };
135
- this._initPosition = (position) => {
140
+ this._initPosition = position => {
136
141
  const container = this.container, zIndexValue = (0, NumberUtils_js_1.getRangeValue)(this.options.zIndex.value), minZ = 0;
137
142
  this.position = this._calcPosition(container, position, (0, NumberUtils_js_1.clamp)(zIndexValue, minZ, container.zLayers));
138
143
  this.initialPosition = this.position.copy();
@@ -140,15 +145,15 @@ class Particle {
140
145
  this.moveCenter = {
141
146
  ...(0, Utils_js_1.getPosition)(this.options.move.center, canvasSize),
142
147
  radius: this.options.move.center.radius ?? defaultRadius,
143
- mode: this.options.move.center.mode ?? "percent",
148
+ mode: this.options.move.center.mode ?? PixelMode_js_1.PixelMode.percent,
144
149
  };
145
150
  this.direction = (0, NumberUtils_js_1.getParticleDirectionAngle)(this.options.move.direction, this.position, this.moveCenter);
146
151
  switch (this.options.move.direction) {
147
- case "inside":
148
- this.outType = "inside";
152
+ case MoveDirection_js_1.MoveDirection.inside:
153
+ this.outType = ParticleOutType_js_1.ParticleOutType.inside;
149
154
  break;
150
- case "outside":
151
- this.outType = "outside";
155
+ case MoveDirection_js_1.MoveDirection.outside:
156
+ this.outType = ParticleOutType_js_1.ParticleOutType.outside;
152
157
  break;
153
158
  }
154
159
  this.offset = Vectors_js_1.Vector.origin;
@@ -171,7 +176,7 @@ class Particle {
171
176
  updater.particleDestroyed?.(this, override);
172
177
  }
173
178
  pathGenerator?.reset(this);
174
- this._engine.dispatchEvent("particleDestroyed", {
179
+ this._engine.dispatchEvent(EventType_js_1.EventType.particleDestroyed, {
175
180
  container: this.container,
176
181
  data: {
177
182
  particle: this,
@@ -216,14 +221,15 @@ class Particle {
216
221
  this.lastPathTime = 0;
217
222
  this.destroyed = false;
218
223
  this.unbreakable = false;
224
+ this.isRotating = false;
219
225
  this.rotation = 0;
220
226
  this.misplaced = false;
221
227
  this.retina = {
222
228
  maxDistance: {},
223
229
  };
224
- this.outType = "normal";
230
+ this.outType = ParticleOutType_js_1.ParticleOutType.normal;
225
231
  this.ignoresResizeRatio = true;
226
- const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, container, mainOptions.particles), effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type, { reduceDuplicates } = particlesOptions;
232
+ const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, container, mainOptions.particles), { reduceDuplicates } = particlesOptions, effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type;
227
233
  this.effect = (0, Utils_js_1.itemFromSingleOrMultiple)(effectType, this.id, reduceDuplicates);
228
234
  this.shape = (0, Utils_js_1.itemFromSingleOrMultiple)(shapeType, this.id, reduceDuplicates);
229
235
  const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;
@@ -243,6 +249,14 @@ class Particle {
243
249
  }
244
250
  }
245
251
  }
252
+ if (this.effect === randomString) {
253
+ const availableEffects = [...this.container.effectDrawers.keys()];
254
+ this.effect = availableEffects[Math.floor(Math.random() * availableEffects.length)];
255
+ }
256
+ if (this.shape === randomString) {
257
+ const availableShapes = [...this.container.shapeDrawers.keys()];
258
+ this.shape = availableShapes[Math.floor(Math.random() * availableShapes.length)];
259
+ }
246
260
  this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);
247
261
  this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);
248
262
  particlesOptions.load(overrideOptions);
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Particles = void 0;
4
4
  const Utils_js_1 = require("../Utils/Utils.js");
5
+ const EventType_js_1 = require("../Enums/Types/EventType.js");
5
6
  const InteractionManager_js_1 = require("./Utils/InteractionManager.js");
7
+ const LimitMode_js_1 = require("../Enums/Modes/LimitMode.js");
6
8
  const Particle_js_1 = require("./Particle.js");
7
9
  const Point_js_1 = require("./Utils/Point.js");
8
10
  const QuadTree_js_1 = require("./Utils/QuadTree.js");
@@ -16,9 +18,7 @@ const qTreeRectangle = (canvasSize) => {
16
18
  class Particles {
17
19
  constructor(engine, container) {
18
20
  this._addToPool = (...particles) => {
19
- for (const particle of particles) {
20
- this._pool.push(particle);
21
- }
21
+ this._pool.push(...particles);
22
22
  };
23
23
  this._applyDensity = (options, manualCount, group) => {
24
24
  const numberOptions = options.number;
@@ -31,7 +31,7 @@ class Particles {
31
31
  }
32
32
  return;
33
33
  }
34
- const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, minLimit = 0, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter((t) => t.group === group).length);
34
+ const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, minLimit = 0, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter(t => t.group === group).length);
35
35
  if (group === undefined) {
36
36
  this._limit = numberOptions.limit.value * densityFactor;
37
37
  }
@@ -45,7 +45,7 @@ class Particles {
45
45
  this.removeQuantity(particlesCount - particlesNumber, group);
46
46
  }
47
47
  };
48
- this._initDensityFactor = (densityOptions) => {
48
+ this._initDensityFactor = densityOptions => {
49
49
  const container = this._container, defaultFactor = 1;
50
50
  if (!container.canvas.element || !densityOptions.enable) {
51
51
  return defaultFactor;
@@ -70,7 +70,7 @@ class Particles {
70
70
  this._array.push(particle);
71
71
  this._zArray.push(particle);
72
72
  this._nextId++;
73
- this._engine.dispatchEvent("particleAdded", {
73
+ this._engine.dispatchEvent(EventType_js_1.EventType.particleAdded, {
74
74
  container: this._container,
75
75
  data: {
76
76
  particle,
@@ -91,7 +91,7 @@ class Particles {
91
91
  this._array.splice(index, deleteCount);
92
92
  this._zArray.splice(zIdx, deleteCount);
93
93
  particle.destroy(override);
94
- this._engine.dispatchEvent("particleRemoved", {
94
+ this._engine.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
95
95
  container: this._container,
96
96
  data: {
97
97
  particle,
@@ -122,23 +122,24 @@ class Particles {
122
122
  }
123
123
  addManualParticles() {
124
124
  const container = this._container, options = container.actualOptions;
125
- for (const particle of options.manualParticles) {
126
- this.addParticle(particle.position ? (0, Utils_js_1.getPosition)(particle.position, container.canvas.size) : undefined, particle.options);
127
- }
125
+ options.manualParticles.forEach(p => this.addParticle(p.position ? (0, Utils_js_1.getPosition)(p.position, container.canvas.size) : undefined, p.options));
128
126
  }
129
127
  addParticle(position, overrideOptions, group, initializer) {
130
- const limitOptions = this._container.actualOptions.particles.number.limit, limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit, currentCount = this.count, minLimit = 0;
128
+ const limitMode = this._container.actualOptions.particles.number.limit.mode, limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit, currentCount = this.count, minLimit = 0;
131
129
  if (limit > minLimit) {
132
- if (limitOptions.mode === "delete") {
133
- const countOffset = 1, minCount = 0, countToRemove = currentCount + countOffset - limit;
134
- if (countToRemove > minCount) {
135
- this.removeQuantity(countToRemove);
136
- }
137
- }
138
- else if (limitOptions.mode === "wait") {
139
- if (currentCount >= limit) {
140
- return;
130
+ switch (limitMode) {
131
+ case LimitMode_js_1.LimitMode.delete: {
132
+ const countOffset = 1, minCount = 0, countToRemove = currentCount + countOffset - limit;
133
+ if (countToRemove > minCount) {
134
+ this.removeQuantity(countToRemove);
135
+ }
136
+ break;
141
137
  }
138
+ case LimitMode_js_1.LimitMode.wait:
139
+ if (currentCount >= limit) {
140
+ return;
141
+ }
142
+ break;
142
143
  }
143
144
  }
144
145
  return this._pushParticle(position, overrideOptions, group, initializer);
@@ -184,9 +185,7 @@ class Particles {
184
185
  await this.initPlugins();
185
186
  let handled = false;
186
187
  for (const [, plugin] of container.plugins) {
187
- if (plugin.particlesInitialization !== undefined) {
188
- handled = plugin.particlesInitialization();
189
- }
188
+ handled = plugin.particlesInitialization?.() ?? handled;
190
189
  if (handled) {
191
190
  break;
192
191
  }
@@ -301,7 +300,7 @@ class Particles {
301
300
  this._array = this.filter(checkDelete);
302
301
  this._zArray = this._zArray.filter(checkDelete);
303
302
  for (const particle of particlesToDelete) {
304
- this._engine.dispatchEvent("particleRemoved", {
303
+ this._engine.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
305
304
  container: this._container,
306
305
  data: {
307
306
  particle,
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EventListeners = void 0;
4
4
  const Utils_js_1 = require("../../Utils/Utils.js");
5
5
  const Constants_js_1 = require("./Constants.js");
6
+ const InteractivityDetect_js_1 = require("../../Enums/InteractivityDetect.js");
6
7
  const TypeUtils_js_1 = require("../../Utils/TypeUtils.js");
7
8
  const double = 2;
8
9
  function manageListener(element, event, handler, add, options) {
@@ -24,7 +25,7 @@ function manageListener(element, event, handler, add, options) {
24
25
  class EventListeners {
25
26
  constructor(container) {
26
27
  this.container = container;
27
- this._doMouseTouchClick = (e) => {
28
+ this._doMouseTouchClick = e => {
28
29
  const container = this.container, options = container.actualOptions;
29
30
  if (this._canPush) {
30
31
  const mouseInteractivity = container.interactivity.mouse, mousePos = mouseInteractivity.position;
@@ -34,7 +35,7 @@ class EventListeners {
34
35
  mouseInteractivity.clickPosition = { ...mousePos };
35
36
  mouseInteractivity.clickTime = new Date().getTime();
36
37
  const onClick = options.interactivity.events.onClick;
37
- (0, Utils_js_1.executeOnSingleOrMultiple)(onClick.mode, (mode) => this.container.handleClickMode(mode));
38
+ (0, Utils_js_1.executeOnSingleOrMultiple)(onClick.mode, mode => this.container.handleClickMode(mode));
38
39
  }
39
40
  if (e.type === "touchend") {
40
41
  const touchDelay = 500;
@@ -42,8 +43,8 @@ class EventListeners {
42
43
  }
43
44
  };
44
45
  this._handleThemeChange = (e) => {
45
- const mediaEvent = e, container = this.container, options = container.options, defaultThemes = options.defaultThemes, themeName = mediaEvent.matches ? defaultThemes.dark : defaultThemes.light, theme = options.themes.find((theme) => theme.name === themeName);
46
- if (theme && theme.default.auto) {
46
+ const mediaEvent = e, container = this.container, options = container.options, defaultThemes = options.defaultThemes, themeName = mediaEvent.matches ? defaultThemes.dark : defaultThemes.light, theme = options.themes.find(theme => theme.name === themeName);
47
+ if (theme?.default.auto) {
47
48
  void container.loadTheme(themeName);
48
49
  }
49
50
  };
@@ -53,7 +54,7 @@ class EventListeners {
53
54
  if (!options.pauseOnBlur) {
54
55
  return;
55
56
  }
56
- if (document && document.hidden) {
57
+ if (document?.hidden) {
57
58
  container.pageHidden = true;
58
59
  container.pause();
59
60
  }
@@ -105,14 +106,14 @@ class EventListeners {
105
106
  manageListener(interactivityEl, mouseLeaveTmpEvent, handlers.mouseLeave, add);
106
107
  manageListener(interactivityEl, Constants_js_1.touchCancelEvent, handlers.touchCancel, add);
107
108
  };
108
- this._manageListeners = (add) => {
109
+ this._manageListeners = add => {
109
110
  const handlers = this._handlers, container = this.container, options = container.actualOptions, detectType = options.interactivity.detectsOn, canvasEl = container.canvas.element;
110
111
  let mouseLeaveTmpEvent = Constants_js_1.mouseLeaveEvent;
111
- if (detectType === "window") {
112
+ if (detectType === InteractivityDetect_js_1.InteractivityDetect.window) {
112
113
  container.interactivity.element = window;
113
114
  mouseLeaveTmpEvent = Constants_js_1.mouseOutEvent;
114
115
  }
115
- else if (detectType === "parent" && canvasEl) {
116
+ else if (detectType === InteractivityDetect_js_1.InteractivityDetect.parent && canvasEl) {
116
117
  container.interactivity.element = canvasEl.parentElement ?? canvasEl.parentNode;
117
118
  }
118
119
  else {
@@ -125,7 +126,7 @@ class EventListeners {
125
126
  manageListener(document, Constants_js_1.visibilityChangeEvent, handlers.visibilityChange, add, false);
126
127
  }
127
128
  };
128
- this._manageMediaMatch = (add) => {
129
+ this._manageMediaMatch = add => {
129
130
  const handlers = this._handlers, mediaMatch = (0, Utils_js_1.safeMatchMedia)("(prefers-color-scheme: dark)");
130
131
  if (!mediaMatch) {
131
132
  return;
@@ -144,7 +145,7 @@ class EventListeners {
144
145
  mediaMatch.removeListener(handlers.oldThemeChange);
145
146
  }
146
147
  };
147
- this._manageResize = (add) => {
148
+ this._manageResize = add => {
148
149
  const handlers = this._handlers, container = this.container, options = container.actualOptions;
149
150
  if (!options.interactivity.events.resize) {
150
151
  return;
@@ -163,7 +164,7 @@ class EventListeners {
163
164
  }
164
165
  else if (!this._resizeObserver && add && canvasEl) {
165
166
  this._resizeObserver = new ResizeObserver((entries) => {
166
- const entry = entries.find((e) => e.target === canvasEl);
167
+ const entry = entries.find(e => e.target === canvasEl);
167
168
  if (!entry) {
168
169
  return;
169
170
  }
@@ -181,7 +182,7 @@ class EventListeners {
181
182
  mouse.clicking = true;
182
183
  mouse.downPosition = mouse.position;
183
184
  };
184
- this._mouseTouchClick = (e) => {
185
+ this._mouseTouchClick = e => {
185
186
  const container = this.container, options = container.actualOptions, { mouse } = container.interactivity;
186
187
  mouse.inside = true;
187
188
  let handled = false;
@@ -216,7 +217,7 @@ class EventListeners {
216
217
  mouse.inside = false;
217
218
  mouse.clicking = false;
218
219
  };
219
- this._mouseTouchMove = (e) => {
220
+ this._mouseTouchMove = e => {
220
221
  const container = this.container, options = container.actualOptions, interactivity = container.interactivity, canvasEl = container.canvas.element;
221
222
  if (!interactivity?.element) {
222
223
  return;
@@ -235,7 +236,7 @@ class EventListeners {
235
236
  };
236
237
  }
237
238
  }
238
- else if (options.interactivity.detectsOn === "parent") {
239
+ else if (options.interactivity.detectsOn === InteractivityDetect_js_1.InteractivityDetect.parent) {
239
240
  const source = mouseEvent.target, target = mouseEvent.currentTarget;
240
241
  if (source && target && canvasEl) {
241
242
  const sourceRect = source.getBoundingClientRect(), targetRect = target.getBoundingClientRect(), canvasRect = canvasEl.getBoundingClientRect();
@@ -276,21 +277,21 @@ class EventListeners {
276
277
  interactivity.mouse.position = pos;
277
278
  interactivity.status = Constants_js_1.mouseMoveEvent;
278
279
  };
279
- this._touchEnd = (e) => {
280
+ this._touchEnd = e => {
280
281
  const evt = e, touches = Array.from(evt.changedTouches);
281
282
  for (const touch of touches) {
282
283
  this._touches.delete(touch.identifier);
283
284
  }
284
285
  this._mouseTouchFinish();
285
286
  };
286
- this._touchEndClick = (e) => {
287
+ this._touchEndClick = e => {
287
288
  const evt = e, touches = Array.from(evt.changedTouches);
288
289
  for (const touch of touches) {
289
290
  this._touches.delete(touch.identifier);
290
291
  }
291
292
  this._mouseTouchClick(e);
292
293
  };
293
- this._touchStart = (e) => {
294
+ this._touchStart = e => {
294
295
  const evt = e, touches = Array.from(evt.changedTouches);
295
296
  for (const touch of touches) {
296
297
  this._touches.set(touch.identifier, performance.now());
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ExternalInteractorBase = void 0;
4
+ const InteractorType_js_1 = require("../../Enums/Types/InteractorType.js");
4
5
  class ExternalInteractorBase {
5
6
  constructor(container) {
6
- this.type = "external";
7
+ this.type = InteractorType_js_1.InteractorType.external;
7
8
  this.container = container;
8
9
  }
9
10
  }