tsparticles 1.39.3 → 1.40.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 (168) hide show
  1. package/Core/Container.d.ts +3 -1
  2. package/Core/Container.js +27 -12
  3. package/Core/Loader.d.ts +12 -9
  4. package/Core/Loader.js +35 -19
  5. package/Core/Particle.d.ts +3 -1
  6. package/Core/Particle.js +17 -2
  7. package/Core/Particles.d.ts +3 -1
  8. package/Core/Particles.js +20 -5
  9. package/Core/Utils/InteractionManager.d.ts +3 -1
  10. package/Core/Utils/InteractionManager.js +17 -3
  11. package/Core/Utils/Plugins.d.ts +29 -15
  12. package/Core/Utils/Plugins.js +58 -46
  13. package/Options/Classes/Options.d.ts +2 -1
  14. package/Options/Classes/Options.js +13 -6
  15. package/Plugins/Emitters/EmitterInstance.d.ts +6 -3
  16. package/Plugins/Emitters/EmitterInstance.js +46 -16
  17. package/Plugins/Emitters/Emitters.d.ts +3 -1
  18. package/Plugins/Emitters/Emitters.js +17 -2
  19. package/Plugins/Emitters/{EmittersMain.d.ts → EmittersEngine.d.ts} +3 -1
  20. package/Plugins/Emitters/{EmittersMain.js → EmittersEngine.js} +0 -0
  21. package/Plugins/Emitters/IEmitterShape.d.ts +2 -2
  22. package/Plugins/Emitters/Options/Classes/Emitter.d.ts +1 -0
  23. package/Plugins/Emitters/Options/Classes/Emitter.js +1 -0
  24. package/Plugins/Emitters/Options/Interfaces/IEmitter.d.ts +1 -0
  25. package/Plugins/Emitters/ShapeManager.d.ts +6 -3
  26. package/Plugins/Emitters/ShapeManager.js +16 -4
  27. package/Plugins/Emitters/Shapes/Circle/CircleShape.d.ts +2 -2
  28. package/Plugins/Emitters/Shapes/Circle/CircleShape.js +2 -2
  29. package/Plugins/Emitters/Shapes/Square/SquareShape.d.ts +2 -2
  30. package/Plugins/Emitters/Shapes/Square/SquareShape.js +4 -4
  31. package/Plugins/Emitters/index.d.ts +3 -3
  32. package/Plugins/Emitters/index.js +25 -6
  33. package/README.md +1 -1
  34. package/browser/Core/Container.d.ts +4 -1
  35. package/browser/Core/Container.js +29 -13
  36. package/browser/Core/Loader.d.ts +12 -9
  37. package/browser/Core/Loader.js +35 -19
  38. package/browser/Core/Particle.d.ts +3 -1
  39. package/browser/Core/Particle.js +18 -3
  40. package/browser/Core/Particles.d.ts +3 -1
  41. package/browser/Core/Particles.js +21 -6
  42. package/browser/Core/Utils/InteractionManager.d.ts +3 -1
  43. package/browser/Core/Utils/InteractionManager.js +17 -3
  44. package/browser/Core/Utils/Plugins.d.ts +29 -15
  45. package/browser/Core/Utils/Plugins.js +58 -46
  46. package/browser/Options/Classes/Options.d.ts +2 -1
  47. package/browser/Options/Classes/Options.js +13 -6
  48. package/browser/Plugins/Emitters/EmitterInstance.d.ts +6 -3
  49. package/browser/Plugins/Emitters/EmitterInstance.js +46 -16
  50. package/browser/Plugins/Emitters/Emitters.d.ts +3 -1
  51. package/browser/Plugins/Emitters/Emitters.js +17 -2
  52. package/{esm/Plugins/Emitters/EmittersMain.d.ts → browser/Plugins/Emitters/EmittersEngine.d.ts} +3 -1
  53. package/browser/Plugins/Emitters/{EmittersMain.js → EmittersEngine.js} +0 -0
  54. package/browser/Plugins/Emitters/IEmitterShape.d.ts +2 -2
  55. package/browser/Plugins/Emitters/Options/Classes/Emitter.d.ts +1 -0
  56. package/browser/Plugins/Emitters/Options/Classes/Emitter.js +1 -0
  57. package/browser/Plugins/Emitters/Options/Interfaces/IEmitter.d.ts +4 -0
  58. package/browser/Plugins/Emitters/ShapeManager.d.ts +6 -3
  59. package/browser/Plugins/Emitters/ShapeManager.js +16 -4
  60. package/browser/Plugins/Emitters/Shapes/Circle/CircleShape.d.ts +2 -2
  61. package/browser/Plugins/Emitters/Shapes/Circle/CircleShape.js +2 -2
  62. package/browser/Plugins/Emitters/Shapes/Square/SquareShape.d.ts +2 -2
  63. package/browser/Plugins/Emitters/Shapes/Square/SquareShape.js +4 -4
  64. package/browser/Plugins/Emitters/index.d.ts +3 -3
  65. package/browser/Plugins/Emitters/index.js +25 -6
  66. package/browser/engine.d.ts +5 -1
  67. package/browser/engine.js +22 -17
  68. package/engine.d.ts +3 -0
  69. package/engine.js +20 -16
  70. package/esm/Core/Container.d.ts +3 -1
  71. package/esm/Core/Container.js +28 -13
  72. package/esm/Core/Loader.d.ts +12 -9
  73. package/esm/Core/Loader.js +35 -19
  74. package/esm/Core/Particle.d.ts +3 -1
  75. package/esm/Core/Particle.js +18 -3
  76. package/esm/Core/Particles.d.ts +3 -1
  77. package/esm/Core/Particles.js +21 -6
  78. package/esm/Core/Utils/InteractionManager.d.ts +3 -1
  79. package/esm/Core/Utils/InteractionManager.js +17 -3
  80. package/esm/Core/Utils/Plugins.d.ts +29 -15
  81. package/esm/Core/Utils/Plugins.js +58 -46
  82. package/esm/Options/Classes/Options.d.ts +2 -1
  83. package/esm/Options/Classes/Options.js +13 -6
  84. package/esm/Plugins/Emitters/EmitterInstance.d.ts +6 -3
  85. package/esm/Plugins/Emitters/EmitterInstance.js +46 -16
  86. package/esm/Plugins/Emitters/Emitters.d.ts +3 -1
  87. package/esm/Plugins/Emitters/Emitters.js +17 -2
  88. package/{browser/Plugins/Emitters/EmittersMain.d.ts → esm/Plugins/Emitters/EmittersEngine.d.ts} +3 -1
  89. package/esm/Plugins/Emitters/{EmittersMain.js → EmittersEngine.js} +0 -0
  90. package/esm/Plugins/Emitters/IEmitterShape.d.ts +2 -2
  91. package/esm/Plugins/Emitters/Options/Classes/Emitter.d.ts +1 -0
  92. package/esm/Plugins/Emitters/Options/Classes/Emitter.js +1 -0
  93. package/esm/Plugins/Emitters/Options/Interfaces/IEmitter.d.ts +1 -0
  94. package/esm/Plugins/Emitters/ShapeManager.d.ts +6 -3
  95. package/esm/Plugins/Emitters/ShapeManager.js +16 -4
  96. package/esm/Plugins/Emitters/Shapes/Circle/CircleShape.d.ts +2 -2
  97. package/esm/Plugins/Emitters/Shapes/Circle/CircleShape.js +2 -2
  98. package/esm/Plugins/Emitters/Shapes/Square/SquareShape.d.ts +2 -2
  99. package/esm/Plugins/Emitters/Shapes/Square/SquareShape.js +4 -4
  100. package/esm/Plugins/Emitters/index.d.ts +3 -3
  101. package/esm/Plugins/Emitters/index.js +25 -6
  102. package/esm/engine.d.ts +3 -0
  103. package/esm/engine.js +20 -16
  104. package/package.json +1 -1
  105. package/report.html +2 -2
  106. package/report.slim.html +2 -2
  107. package/tsparticles.engine.js +221 -114
  108. package/tsparticles.engine.min.js +2 -2
  109. package/tsparticles.interaction.external.attract.js +199 -96
  110. package/tsparticles.interaction.external.attract.min.js +2 -2
  111. package/tsparticles.interaction.external.bounce.js +199 -96
  112. package/tsparticles.interaction.external.bounce.min.js +2 -2
  113. package/tsparticles.interaction.external.bubble.js +199 -96
  114. package/tsparticles.interaction.external.bubble.min.js +2 -2
  115. package/tsparticles.interaction.external.connect.js +199 -96
  116. package/tsparticles.interaction.external.connect.min.js +2 -2
  117. package/tsparticles.interaction.external.grab.js +199 -96
  118. package/tsparticles.interaction.external.grab.min.js +2 -2
  119. package/tsparticles.interaction.external.repulse.js +199 -96
  120. package/tsparticles.interaction.external.repulse.min.js +2 -2
  121. package/tsparticles.interaction.external.trail.js +199 -96
  122. package/tsparticles.interaction.external.trail.min.js +2 -2
  123. package/tsparticles.interaction.particles.attract.js +199 -96
  124. package/tsparticles.interaction.particles.attract.min.js +2 -2
  125. package/tsparticles.interaction.particles.collisions.js +199 -96
  126. package/tsparticles.interaction.particles.collisions.min.js +2 -2
  127. package/tsparticles.interaction.particles.links.js +199 -96
  128. package/tsparticles.interaction.particles.links.min.js +2 -2
  129. package/tsparticles.js +341 -152
  130. package/tsparticles.min.js +2 -2
  131. package/tsparticles.pathseg.min.js +1 -1
  132. package/tsparticles.plugins.absorbers.js +199 -96
  133. package/tsparticles.plugins.absorbers.min.js +2 -2
  134. package/tsparticles.plugins.emitters.js +324 -139
  135. package/tsparticles.plugins.emitters.min.js +2 -2
  136. package/tsparticles.plugins.polygonMask.js +199 -96
  137. package/tsparticles.plugins.polygonMask.min.js +2 -2
  138. package/tsparticles.shape.circle.min.js +1 -1
  139. package/tsparticles.shape.image.js +202 -99
  140. package/tsparticles.shape.image.min.js +2 -2
  141. package/tsparticles.shape.line.min.js +1 -1
  142. package/tsparticles.shape.polygon.min.js +1 -1
  143. package/tsparticles.shape.square.min.js +1 -1
  144. package/tsparticles.shape.star.min.js +1 -1
  145. package/tsparticles.shape.text.js +199 -96
  146. package/tsparticles.shape.text.min.js +2 -2
  147. package/tsparticles.slim.js +221 -114
  148. package/tsparticles.slim.min.js +2 -2
  149. package/tsparticles.updater.angle.js +199 -96
  150. package/tsparticles.updater.angle.min.js +2 -2
  151. package/tsparticles.updater.color.js +199 -96
  152. package/tsparticles.updater.color.min.js +2 -2
  153. package/tsparticles.updater.life.js +199 -96
  154. package/tsparticles.updater.life.min.js +2 -2
  155. package/tsparticles.updater.opacity.js +199 -96
  156. package/tsparticles.updater.opacity.min.js +2 -2
  157. package/tsparticles.updater.outModes.js +199 -96
  158. package/tsparticles.updater.outModes.min.js +2 -2
  159. package/tsparticles.updater.roll.js +199 -96
  160. package/tsparticles.updater.roll.min.js +2 -2
  161. package/tsparticles.updater.size.js +199 -96
  162. package/tsparticles.updater.size.min.js +2 -2
  163. package/tsparticles.updater.strokeColor.js +199 -96
  164. package/tsparticles.updater.strokeColor.min.js +2 -2
  165. package/tsparticles.updater.tilt.js +199 -96
  166. package/tsparticles.updater.tilt.min.js +2 -2
  167. package/tsparticles.updater.wobble.js +199 -96
  168. package/tsparticles.updater.wobble.min.js +2 -2
@@ -44,7 +44,7 @@
44
44
  }
45
45
  });
46
46
  class CircleShape {
47
- randomPosition(position, offset, fill) {
47
+ randomPosition(position, size, fill) {
48
48
  const generateTheta = (x, y) => {
49
49
  const u = Math.random() / 4;
50
50
  const theta = Math.atan(y / x * Math.tan(2 * Math.PI * u));
@@ -60,7 +60,7 @@
60
60
  }
61
61
  };
62
62
  const radius = (x, y, theta) => x * y / Math.sqrt((y * Math.cos(theta)) ** 2 + (x * Math.sin(theta)) ** 2);
63
- const [a, b] = [ offset.x / 2, offset.y / 2 ];
63
+ const [a, b] = [ size.width / 2, size.height / 2 ];
64
64
  const randomTheta = generateTheta(a, b), maxRadius = radius(a, b, randomTheta), randomRadius = fill ? maxRadius * Math.sqrt(Math.random()) : maxRadius;
65
65
  return {
66
66
  x: position.x + randomRadius * Math.cos(randomTheta),
@@ -531,15 +531,30 @@
531
531
  }
532
532
  }
533
533
  }
534
+ var __classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
535
+ if (kind === "m") throw new TypeError("Private method is not writable");
536
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
537
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
538
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
539
+ value;
540
+ };
541
+ var __classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
542
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
543
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
544
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
545
+ };
546
+ var _InteractionManager_engine;
534
547
  class InteractionManager_InteractionManager {
535
- constructor(container) {
548
+ constructor(engine, container) {
536
549
  this.container = container;
550
+ _InteractionManager_engine.set(this, void 0);
551
+ __classPrivateFieldSet(this, _InteractionManager_engine, engine, "f");
537
552
  this.externalInteractors = [];
538
553
  this.particleInteractors = [];
539
554
  this.init();
540
555
  }
541
556
  init() {
542
- const interactors = Plugins.getInteractors(this.container, true);
557
+ const interactors = __classPrivateFieldGet(this, _InteractionManager_engine, "f").plugins.getInteractors(this.container, true);
543
558
  this.externalInteractors = [];
544
559
  this.particleInteractors = [];
545
560
  for (const interactor of interactors) {
@@ -572,6 +587,7 @@
572
587
  }
573
588
  }
574
589
  }
590
+ _InteractionManager_engine = new WeakMap;
575
591
  function applyDistance(particle) {
576
592
  const initialPosition = particle.initialPosition;
577
593
  const {dx: dx, dy: dy} = getDistances(initialPosition, particle.position);
@@ -745,26 +761,38 @@
745
761
  return proximityFactor / slowFactor;
746
762
  }
747
763
  }
748
- const plugins = null && [];
749
- const interactorsInitializers = new Map;
750
- const updatersInitializers = new Map;
751
- const interactors = new Map;
752
- const updaters = new Map;
753
- const presets = new Map;
754
- const drawers = new Map;
755
- const pathGenerators = new Map;
756
- class Plugins_Plugins {
757
- static getPlugin(plugin) {
758
- return plugins.find((t => t.id === plugin));
764
+ var Plugins_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
765
+ if (kind === "m") throw new TypeError("Private method is not writable");
766
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
767
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
768
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
769
+ value;
770
+ };
771
+ var _Plugins_engine;
772
+ class Plugins {
773
+ constructor(engine) {
774
+ _Plugins_engine.set(this, void 0);
775
+ Plugins_classPrivateFieldSet(this, _Plugins_engine, engine, "f");
776
+ this.plugins = [];
777
+ this.interactorsInitializers = new Map;
778
+ this.updatersInitializers = new Map;
779
+ this.interactors = new Map;
780
+ this.updaters = new Map;
781
+ this.presets = new Map;
782
+ this.drawers = new Map;
783
+ this.pathGenerators = new Map;
784
+ }
785
+ getPlugin(plugin) {
786
+ return this.plugins.find((t => t.id === plugin));
759
787
  }
760
- static addPlugin(plugin) {
761
- if (!Plugins_Plugins.getPlugin(plugin.id)) {
762
- plugins.push(plugin);
788
+ addPlugin(plugin) {
789
+ if (!this.getPlugin(plugin.id)) {
790
+ this.plugins.push(plugin);
763
791
  }
764
792
  }
765
- static getAvailablePlugins(container) {
793
+ getAvailablePlugins(container) {
766
794
  const res = new Map;
767
- for (const plugin of plugins) {
795
+ for (const plugin of this.plugins) {
768
796
  if (!plugin.needsPlugin(container.actualOptions)) {
769
797
  continue;
770
798
  }
@@ -772,61 +800,62 @@
772
800
  }
773
801
  return res;
774
802
  }
775
- static loadOptions(options, sourceOptions) {
776
- for (const plugin of plugins) {
803
+ loadOptions(options, sourceOptions) {
804
+ for (const plugin of this.plugins) {
777
805
  plugin.loadOptions(options, sourceOptions);
778
806
  }
779
807
  }
780
- static getPreset(preset) {
781
- return presets.get(preset);
808
+ getPreset(preset) {
809
+ return this.presets.get(preset);
782
810
  }
783
- static addPreset(presetKey, options, override = false) {
784
- if (override || !Plugins_Plugins.getPreset(presetKey)) {
785
- presets.set(presetKey, options);
811
+ addPreset(presetKey, options, override = false) {
812
+ if (override || !this.getPreset(presetKey)) {
813
+ this.presets.set(presetKey, options);
786
814
  }
787
815
  }
788
- static addShapeDrawer(type, drawer) {
789
- if (!Plugins_Plugins.getShapeDrawer(type)) {
790
- drawers.set(type, drawer);
816
+ addShapeDrawer(type, drawer) {
817
+ if (!this.getShapeDrawer(type)) {
818
+ this.drawers.set(type, drawer);
791
819
  }
792
820
  }
793
- static getShapeDrawer(type) {
794
- return drawers.get(type);
821
+ getShapeDrawer(type) {
822
+ return this.drawers.get(type);
795
823
  }
796
- static getSupportedShapes() {
797
- return drawers.keys();
824
+ getSupportedShapes() {
825
+ return this.drawers.keys();
798
826
  }
799
- static getPathGenerator(type) {
800
- return pathGenerators.get(type);
827
+ getPathGenerator(type) {
828
+ return this.pathGenerators.get(type);
801
829
  }
802
- static addPathGenerator(type, pathGenerator) {
803
- if (!Plugins_Plugins.getPathGenerator(type)) {
804
- pathGenerators.set(type, pathGenerator);
830
+ addPathGenerator(type, pathGenerator) {
831
+ if (!this.getPathGenerator(type)) {
832
+ this.pathGenerators.set(type, pathGenerator);
805
833
  }
806
834
  }
807
- static getInteractors(container, force = false) {
808
- let res = interactors.get(container);
835
+ getInteractors(container, force = false) {
836
+ let res = this.interactors.get(container);
809
837
  if (!res || force) {
810
- res = [ ...interactorsInitializers.values() ].map((t => t(container)));
811
- interactors.set(container, res);
838
+ res = [ ...this.interactorsInitializers.values() ].map((t => t(container)));
839
+ this.interactors.set(container, res);
812
840
  }
813
841
  return res;
814
842
  }
815
- static addInteractor(name, initInteractor) {
816
- interactorsInitializers.set(name, initInteractor);
843
+ addInteractor(name, initInteractor) {
844
+ this.interactorsInitializers.set(name, initInteractor);
817
845
  }
818
- static getUpdaters(container, force = false) {
819
- let res = updaters.get(container);
846
+ getUpdaters(container, force = false) {
847
+ let res = this.updaters.get(container);
820
848
  if (!res || force) {
821
- res = [ ...updatersInitializers.values() ].map((t => t(container)));
822
- updaters.set(container, res);
849
+ res = [ ...this.updatersInitializers.values() ].map((t => t(container)));
850
+ this.updaters.set(container, res);
823
851
  }
824
852
  return res;
825
853
  }
826
- static addParticleUpdater(name, initUpdater) {
827
- updatersInitializers.set(name, initUpdater);
854
+ addParticleUpdater(name, initUpdater) {
855
+ this.updatersInitializers.set(name, initUpdater);
828
856
  }
829
857
  }
858
+ _Plugins_engine = new WeakMap;
830
859
  class QuadTree_QuadTree {
831
860
  constructor(rectangle, capacity) {
832
861
  this.rectangle = rectangle;
@@ -2275,15 +2304,24 @@
2275
2304
  }
2276
2305
  }
2277
2306
  }
2278
- var __classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
2307
+ var Options_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
2308
+ if (kind === "m") throw new TypeError("Private method is not writable");
2309
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
2310
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
2311
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
2312
+ value;
2313
+ };
2314
+ var Options_classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
2279
2315
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
2280
2316
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
2281
2317
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
2282
2318
  };
2283
- var _Options_instances, _Options_findDefaultTheme;
2319
+ var _Options_instances, _Options_engine, _Options_findDefaultTheme;
2284
2320
  class Options_Options {
2285
- constructor() {
2321
+ constructor(engine) {
2286
2322
  _Options_instances.add(this);
2323
+ _Options_engine.set(this, void 0);
2324
+ Options_classPrivateFieldSet(this, _Options_engine, engine, "f");
2287
2325
  this.autoPlay = true;
2288
2326
  this.background = new Background;
2289
2327
  this.backgroundMask = new BackgroundMask;
@@ -2376,7 +2414,7 @@
2376
2414
  this.motion.load(data.motion);
2377
2415
  this.particles.load(data.particles);
2378
2416
  this.style = deepExtend(this.style, data.style);
2379
- Plugins.loadOptions(this, data);
2417
+ Options_classPrivateFieldGet(this, _Options_engine, "f").plugins.loadOptions(this, data);
2380
2418
  if (data.responsive !== undefined) {
2381
2419
  for (const responsive of data.responsive) {
2382
2420
  const optResponsive = new Responsive;
@@ -2392,8 +2430,8 @@
2392
2430
  this.themes.push(optTheme);
2393
2431
  }
2394
2432
  }
2395
- this.defaultDarkTheme = (_d = __classPrivateFieldGet(this, _Options_instances, "m", _Options_findDefaultTheme).call(this, "dark")) === null || _d === void 0 ? void 0 : _d.name;
2396
- this.defaultLightTheme = (_e = __classPrivateFieldGet(this, _Options_instances, "m", _Options_findDefaultTheme).call(this, "light")) === null || _e === void 0 ? void 0 : _e.name;
2433
+ this.defaultDarkTheme = (_d = Options_classPrivateFieldGet(this, _Options_instances, "m", _Options_findDefaultTheme).call(this, "dark")) === null || _d === void 0 ? void 0 : _d.name;
2434
+ this.defaultLightTheme = (_e = Options_classPrivateFieldGet(this, _Options_instances, "m", _Options_findDefaultTheme).call(this, "light")) === null || _e === void 0 ? void 0 : _e.name;
2397
2435
  }
2398
2436
  setTheme(name) {
2399
2437
  if (name) {
@@ -2402,7 +2440,7 @@
2402
2440
  this.load(chosenTheme.options);
2403
2441
  }
2404
2442
  } else {
2405
- const mediaMatch = typeof matchMedia !== "undefined" && matchMedia("(prefers-color-scheme: dark)"), clientDarkMode = mediaMatch && mediaMatch.matches, defaultTheme = __classPrivateFieldGet(this, _Options_instances, "m", _Options_findDefaultTheme).call(this, clientDarkMode ? "dark" : "light");
2443
+ const mediaMatch = typeof matchMedia !== "undefined" && matchMedia("(prefers-color-scheme: dark)"), clientDarkMode = mediaMatch && mediaMatch.matches, defaultTheme = Options_classPrivateFieldGet(this, _Options_instances, "m", _Options_findDefaultTheme).call(this, clientDarkMode ? "dark" : "light");
2406
2444
  if (defaultTheme) {
2407
2445
  this.load(defaultTheme.options);
2408
2446
  }
@@ -2415,13 +2453,26 @@
2415
2453
  return responsiveOptions === null || responsiveOptions === void 0 ? void 0 : responsiveOptions.maxWidth;
2416
2454
  }
2417
2455
  importPreset(preset) {
2418
- this.load(Plugins.getPreset(preset));
2456
+ this.load(Options_classPrivateFieldGet(this, _Options_engine, "f").plugins.getPreset(preset));
2419
2457
  }
2420
2458
  }
2421
- _Options_instances = new WeakSet, _Options_findDefaultTheme = function _Options_findDefaultTheme(mode) {
2459
+ _Options_engine = new WeakMap, _Options_instances = new WeakSet, _Options_findDefaultTheme = function _Options_findDefaultTheme(mode) {
2422
2460
  var _a;
2423
2461
  return (_a = this.themes.find((theme => theme.default.value && theme.default.mode === mode))) !== null && _a !== void 0 ? _a : this.themes.find((theme => theme.default.value && theme.default.mode === "any"));
2424
2462
  };
2463
+ var Particle_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
2464
+ if (kind === "m") throw new TypeError("Private method is not writable");
2465
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
2466
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
2467
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
2468
+ value;
2469
+ };
2470
+ var Particle_classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
2471
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
2472
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
2473
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
2474
+ };
2475
+ var _Particle_engine;
2425
2476
  const fixOutMode = data => {
2426
2477
  if (isInArray(data.outMode, data.checkModes) || isInArray(data.outMode, data.checkModes)) {
2427
2478
  if (data.coord > data.maxCoord - data.radius * 2) {
@@ -2432,11 +2483,13 @@
2432
2483
  }
2433
2484
  };
2434
2485
  class Particle_Particle {
2435
- constructor(id, container, position, overrideOptions, group) {
2486
+ constructor(engine, id, container, position, overrideOptions, group) {
2436
2487
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
2437
2488
  this.id = id;
2438
2489
  this.container = container;
2439
2490
  this.group = group;
2491
+ _Particle_engine.set(this, void 0);
2492
+ Particle_classPrivateFieldSet(this, _Particle_engine, engine, "f");
2440
2493
  this.fill = true;
2441
2494
  this.close = true;
2442
2495
  this.lastPathTime = 0;
@@ -2530,7 +2583,7 @@
2530
2583
  this.sides = 24;
2531
2584
  let drawer = container.drawers.get(this.shape);
2532
2585
  if (!drawer) {
2533
- drawer = Plugins.getShapeDrawer(this.shape);
2586
+ drawer = Particle_classPrivateFieldGet(this, _Particle_engine, "f").plugins.getShapeDrawer(this.shape);
2534
2587
  if (drawer) {
2535
2588
  container.drawers.set(this.shape, drawer);
2536
2589
  }
@@ -2770,9 +2823,25 @@
2770
2823
  return life;
2771
2824
  }
2772
2825
  }
2826
+ _Particle_engine = new WeakMap;
2827
+ var Particles_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
2828
+ if (kind === "m") throw new TypeError("Private method is not writable");
2829
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
2830
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
2831
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
2832
+ value;
2833
+ };
2834
+ var Particles_classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
2835
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
2836
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
2837
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
2838
+ };
2839
+ var _Particles_engine;
2773
2840
  class Particles_Particles {
2774
- constructor(container) {
2841
+ constructor(engine, container) {
2775
2842
  this.container = container;
2843
+ _Particles_engine.set(this, void 0);
2844
+ Particles_classPrivateFieldSet(this, _Particles_engine, engine, "f");
2776
2845
  this.nextId = 0;
2777
2846
  this.array = [];
2778
2847
  this.zArray = [];
@@ -2784,11 +2853,11 @@
2784
2853
  links: new Map,
2785
2854
  triangles: new Map
2786
2855
  };
2787
- this.interactionManager = new InteractionManager(container);
2856
+ this.interactionManager = new InteractionManager(Particles_classPrivateFieldGet(this, _Particles_engine, "f"), container);
2788
2857
  const canvasSize = this.container.canvas.size;
2789
2858
  this.linksColors = new Map;
2790
2859
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
2791
- this.updaters = Plugins.getUpdaters(container, true);
2860
+ this.updaters = Particles_classPrivateFieldGet(this, _Particles_engine, "f").plugins.getUpdaters(container, true);
2792
2861
  }
2793
2862
  get count() {
2794
2863
  return this.array.length;
@@ -2802,7 +2871,7 @@
2802
2871
  this.freqs.links = new Map;
2803
2872
  this.freqs.triangles = new Map;
2804
2873
  let handled = false;
2805
- this.updaters = Plugins.getUpdaters(container, true);
2874
+ this.updaters = Particles_classPrivateFieldGet(this, _Particles_engine, "f").plugins.getUpdaters(container, true);
2806
2875
  this.interactionManager.init();
2807
2876
  for (const [, plugin] of container.plugins) {
2808
2877
  if (plugin.particlesInitialization !== undefined) {
@@ -3049,7 +3118,7 @@
3049
3118
  }
3050
3119
  pushParticle(position, overrideOptions, group, initializer) {
3051
3120
  try {
3052
- const particle = new Particle(this.nextId, this.container, position, overrideOptions, group);
3121
+ const particle = new Particle(Particles_classPrivateFieldGet(this, _Particles_engine, "f"), this.nextId, this.container, position, overrideOptions, group);
3053
3122
  let canAdd = true;
3054
3123
  if (initializer) {
3055
3124
  canAdd = initializer(particle);
@@ -3067,6 +3136,7 @@
3067
3136
  }
3068
3137
  }
3069
3138
  }
3139
+ _Particles_engine = new WeakMap;
3070
3140
  class Retina_Retina {
3071
3141
  constructor(container) {
3072
3142
  this.container = container;
@@ -3154,9 +3224,24 @@
3154
3224
  }
3155
3225
  }
3156
3226
  }
3227
+ var Container_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
3228
+ if (kind === "m") throw new TypeError("Private method is not writable");
3229
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
3230
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
3231
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
3232
+ value;
3233
+ };
3234
+ var Container_classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
3235
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3236
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
3237
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
3238
+ };
3239
+ var _Container_engine;
3157
3240
  class Container_Container {
3158
- constructor(id, sourceOptions, ...presets) {
3241
+ constructor(engine, id, sourceOptions, ...presets) {
3159
3242
  this.id = id;
3243
+ _Container_engine.set(this, void 0);
3244
+ Container_classPrivateFieldSet(this, _Container_engine, engine, "f");
3160
3245
  this.fpsLimit = 120;
3161
3246
  this.duration = 0;
3162
3247
  this.lifeTime = 0;
@@ -3171,7 +3256,7 @@
3171
3256
  this._initialSourceOptions = sourceOptions;
3172
3257
  this.retina = new Retina(this);
3173
3258
  this.canvas = new Canvas(this);
3174
- this.particles = new Particles(this);
3259
+ this.particles = new Particles(Container_classPrivateFieldGet(this, _Container_engine, "f"), this);
3175
3260
  this.drawer = new FrameManager(this);
3176
3261
  this.presets = presets;
3177
3262
  this.pathGenerator = {
@@ -3200,8 +3285,8 @@
3200
3285
  this.plugins = new Map;
3201
3286
  this.drawers = new Map;
3202
3287
  this.density = 1;
3203
- this._options = new Options;
3204
- this.actualOptions = new Options;
3288
+ this._options = new Options(Container_classPrivateFieldGet(this, _Container_engine, "f"));
3289
+ this.actualOptions = new Options(Container_classPrivateFieldGet(this, _Container_engine, "f"));
3205
3290
  this.eventListeners = new EventListeners(this);
3206
3291
  if (typeof IntersectionObserver !== "undefined" && IntersectionObserver) {
3207
3292
  this.intersectionObserver = new IntersectionObserver((entries => this.intersectionManager(entries)));
@@ -3316,7 +3401,7 @@
3316
3401
  return this.start();
3317
3402
  }
3318
3403
  reset() {
3319
- this._options = new Options;
3404
+ this._options = new Options(Container_classPrivateFieldGet(this, _Container_engine, "f"));
3320
3405
  return this.refresh();
3321
3406
  }
3322
3407
  stop() {
@@ -3457,20 +3542,20 @@
3457
3542
  return false;
3458
3543
  }
3459
3544
  async init() {
3460
- this._options = new Options;
3545
+ this._options = new Options(Container_classPrivateFieldGet(this, _Container_engine, "f"));
3461
3546
  for (const preset of this.presets) {
3462
- this._options.load(Plugins.getPreset(preset));
3547
+ this._options.load(Container_classPrivateFieldGet(this, _Container_engine, "f").plugins.getPreset(preset));
3463
3548
  }
3464
- const shapes = Plugins.getSupportedShapes();
3549
+ const shapes = Container_classPrivateFieldGet(this, _Container_engine, "f").plugins.getSupportedShapes();
3465
3550
  for (const type of shapes) {
3466
- const drawer = Plugins.getShapeDrawer(type);
3551
+ const drawer = Container_classPrivateFieldGet(this, _Container_engine, "f").plugins.getShapeDrawer(type);
3467
3552
  if (drawer) {
3468
3553
  this.drawers.set(type, drawer);
3469
3554
  }
3470
3555
  }
3471
3556
  this._options.load(this._initialSourceOptions);
3472
3557
  this._options.load(this._sourceOptions);
3473
- this.actualOptions = new Options;
3558
+ this.actualOptions = new Options(Container_classPrivateFieldGet(this, _Container_engine, "f"));
3474
3559
  this.actualOptions.load(this._options);
3475
3560
  this.retina.init();
3476
3561
  this.canvas.init();
@@ -3481,7 +3566,7 @@
3481
3566
  this.duration = getRangeValue(this.actualOptions.duration);
3482
3567
  this.lifeTime = 0;
3483
3568
  this.fpsLimit = this.actualOptions.fpsLimit > 0 ? this.actualOptions.fpsLimit : 120;
3484
- const availablePlugins = Plugins.getAvailablePlugins(this);
3569
+ const availablePlugins = Container_classPrivateFieldGet(this, _Container_engine, "f").plugins.getAvailablePlugins(this);
3485
3570
  for (const [id, plugin] of availablePlugins) {
3486
3571
  this.plugins.set(id, plugin);
3487
3572
  }
@@ -3499,7 +3584,7 @@
3499
3584
  }
3500
3585
  const pathOptions = this.actualOptions.particles.move.path;
3501
3586
  if (pathOptions.generator) {
3502
- const customGenerator = Plugins.getPathGenerator(pathOptions.generator);
3587
+ const customGenerator = Container_classPrivateFieldGet(this, _Container_engine, "f").plugins.getPathGenerator(pathOptions.generator);
3503
3588
  if (customGenerator) {
3504
3589
  if (customGenerator.init) {
3505
3590
  this.pathGenerator.init = customGenerator.init;
@@ -3536,24 +3621,41 @@
3536
3621
  }
3537
3622
  }
3538
3623
  }
3539
- const tsParticlesDom = null && [];
3624
+ _Container_engine = new WeakMap;
3625
+ var Loader_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
3626
+ if (kind === "m") throw new TypeError("Private method is not writable");
3627
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
3628
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
3629
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
3630
+ value;
3631
+ };
3632
+ var Loader_classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
3633
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3634
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
3635
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
3636
+ };
3637
+ var _Loader_engine;
3540
3638
  function fetchError(statusCode) {
3541
3639
  console.error(`Error tsParticles - fetch status: ${statusCode}`);
3542
3640
  console.error("Error tsParticles - File config not found");
3543
3641
  }
3544
3642
  class Loader {
3545
- static dom() {
3546
- return tsParticlesDom;
3643
+ constructor(engine) {
3644
+ _Loader_engine.set(this, void 0);
3645
+ Loader_classPrivateFieldSet(this, _Loader_engine, engine, "f");
3646
+ }
3647
+ dom() {
3648
+ return Loader_classPrivateFieldGet(this, _Loader_engine, "f").domArray;
3547
3649
  }
3548
- static domItem(index) {
3549
- const dom = Loader.dom();
3650
+ domItem(index) {
3651
+ const dom = this.dom();
3550
3652
  const item = dom[index];
3551
3653
  if (item && !item.destroyed) {
3552
3654
  return item;
3553
3655
  }
3554
3656
  dom.splice(index, 1);
3555
3657
  }
3556
- static async loadOptions(params) {
3658
+ async loadOptions(params) {
3557
3659
  var _a, _b, _c;
3558
3660
  const tagId = (_a = params.tagId) !== null && _a !== void 0 ? _a : `tsparticles${Math.floor(Math.random() * 1e4)}`;
3559
3661
  const {options: options, index: index} = params;
@@ -3564,10 +3666,10 @@
3564
3666
  (_c = document.querySelector("body")) === null || _c === void 0 ? void 0 : _c.append(domContainer);
3565
3667
  }
3566
3668
  const currentOptions = options instanceof Array ? itemFromArray(options, index) : options;
3567
- const dom = Loader.dom();
3669
+ const dom = this.dom();
3568
3670
  const oldIndex = dom.findIndex((v => v.id === tagId));
3569
3671
  if (oldIndex >= 0) {
3570
- const old = Loader.domItem(oldIndex);
3672
+ const old = this.domItem(oldIndex);
3571
3673
  if (old && !old.destroyed) {
3572
3674
  old.destroy();
3573
3675
  dom.splice(oldIndex, 1);
@@ -3590,7 +3692,7 @@
3590
3692
  domContainer.appendChild(canvasEl);
3591
3693
  }
3592
3694
  }
3593
- const newItem = new Container(tagId, currentOptions);
3695
+ const newItem = new Container(Loader_classPrivateFieldGet(this, _Loader_engine, "f"), tagId, currentOptions);
3594
3696
  if (oldIndex >= 0) {
3595
3697
  dom.splice(oldIndex, 0, newItem);
3596
3698
  } else {
@@ -3600,7 +3702,7 @@
3600
3702
  await newItem.start();
3601
3703
  return newItem;
3602
3704
  }
3603
- static async loadRemoteOptions(params) {
3705
+ async loadRemoteOptions(params) {
3604
3706
  const {url: jsonUrl, index: index} = params;
3605
3707
  const url = jsonUrl instanceof Array ? itemFromArray(jsonUrl, index) : jsonUrl;
3606
3708
  if (!url) {
@@ -3612,14 +3714,14 @@
3612
3714
  return;
3613
3715
  }
3614
3716
  const data = await response.json();
3615
- return await Loader.loadOptions({
3717
+ return this.loadOptions({
3616
3718
  tagId: params.tagId,
3617
3719
  element: params.element,
3618
3720
  index: index,
3619
3721
  options: data
3620
3722
  });
3621
3723
  }
3622
- static load(tagId, options, index) {
3724
+ load(tagId, options, index) {
3623
3725
  const params = {
3624
3726
  index: index
3625
3727
  };
@@ -3635,7 +3737,7 @@
3635
3737
  }
3636
3738
  return this.loadOptions(params);
3637
3739
  }
3638
- static async set(id, domContainer, options, index) {
3740
+ async set(id, domContainer, options, index) {
3639
3741
  const params = {
3640
3742
  index: index
3641
3743
  };
@@ -3656,7 +3758,7 @@
3656
3758
  }
3657
3759
  return this.loadOptions(params);
3658
3760
  }
3659
- static async loadJSON(tagId, jsonUrl, index) {
3761
+ async loadJSON(tagId, jsonUrl, index) {
3660
3762
  let url, id;
3661
3763
  if (typeof jsonUrl === "number" || jsonUrl === undefined) {
3662
3764
  url = tagId;
@@ -3664,13 +3766,13 @@
3664
3766
  id = tagId;
3665
3767
  url = jsonUrl;
3666
3768
  }
3667
- return await Loader.loadRemoteOptions({
3769
+ return this.loadRemoteOptions({
3668
3770
  tagId: id,
3669
3771
  url: url,
3670
3772
  index: index
3671
3773
  });
3672
3774
  }
3673
- static async setJSON(id, domContainer, jsonUrl, index) {
3775
+ async setJSON(id, domContainer, jsonUrl, index) {
3674
3776
  let url, newId, newIndex, element;
3675
3777
  if (id instanceof HTMLElement) {
3676
3778
  element = id;
@@ -3682,15 +3784,15 @@
3682
3784
  url = jsonUrl;
3683
3785
  newIndex = index;
3684
3786
  }
3685
- return await Loader.loadRemoteOptions({
3787
+ return this.loadRemoteOptions({
3686
3788
  tagId: newId,
3687
3789
  url: url,
3688
3790
  index: newIndex,
3689
3791
  element: element
3690
3792
  });
3691
3793
  }
3692
- static setOnClickHandler(callback) {
3693
- const dom = Loader.dom();
3794
+ setOnClickHandler(callback) {
3795
+ const dom = this.dom();
3694
3796
  if (dom.length === 0) {
3695
3797
  throw new Error("Can only set click handlers after calling tsParticles.load() or tsParticles.loadJSON()");
3696
3798
  }
@@ -3699,6 +3801,7 @@
3699
3801
  }
3700
3802
  }
3701
3803
  }
3804
+ _Loader_engine = new WeakMap;
3702
3805
  function NumberUtils_clamp(num, min, max) {
3703
3806
  return Math.min(Math.max(num, min), max);
3704
3807
  }
@@ -4934,6 +5037,7 @@
4934
5037
  if (data.direction !== undefined) {
4935
5038
  this.direction = data.direction;
4936
5039
  }
5040
+ this.domId = data.domId;
4937
5041
  if (data.fill !== undefined) {
4938
5042
  this.fill = data.fill;
4939
5043
  }
@@ -4963,21 +5067,7 @@
4963
5067
  }
4964
5068
  }
4965
5069
  }
4966
- const shapes = new Map;
4967
- class ShapeManager {
4968
- static addShape(name, drawer) {
4969
- if (!ShapeManager.getShape(name)) {
4970
- shapes.set(name, drawer);
4971
- }
4972
- }
4973
- static getShape(name) {
4974
- return shapes.get(name);
4975
- }
4976
- static getSupportedShapes() {
4977
- return shapes.keys();
4978
- }
4979
- }
4980
- var __classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
5070
+ var EmitterInstance_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
4981
5071
  if (kind === "m") throw new TypeError("Private method is not writable");
4982
5072
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4983
5073
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
@@ -4989,15 +5079,17 @@
4989
5079
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4990
5080
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
4991
5081
  };
4992
- var _EmitterInstance_firstSpawn, _EmitterInstance_startParticlesAdded;
5082
+ var _EmitterInstance_firstSpawn, _EmitterInstance_startParticlesAdded, _EmitterInstance_engine;
4993
5083
  class EmitterInstance {
4994
- constructor(emitters, container, options, position) {
5084
+ constructor(engine, emitters, container, options, position) {
4995
5085
  var _a, _b, _c, _d, _e, _f;
4996
5086
  var _g;
4997
5087
  this.emitters = emitters;
4998
5088
  this.container = container;
4999
5089
  _EmitterInstance_firstSpawn.set(this, void 0);
5000
5090
  _EmitterInstance_startParticlesAdded.set(this, void 0);
5091
+ _EmitterInstance_engine.set(this, void 0);
5092
+ EmitterInstance_classPrivateFieldSet(this, _EmitterInstance_engine, engine, "f");
5001
5093
  this.currentDuration = 0;
5002
5094
  this.currentEmitDelay = 0;
5003
5095
  this.currentSpawnDelay = 0;
@@ -5009,12 +5101,11 @@
5009
5101
  this.options.load(options);
5010
5102
  }
5011
5103
  this.spawnDelay = ((_a = this.options.life.delay) !== null && _a !== void 0 ? _a : 0) * 1e3 / this.container.retina.reduceFactor;
5012
- this.position = (_b = this.initialPosition) !== null && _b !== void 0 ? _b : this.calcPosition();
5013
5104
  this.name = this.options.name;
5014
- this.shape = ShapeManager.getShape(this.options.shape);
5105
+ this.shape = (_b = EmitterInstance_classPrivateFieldGet(this, _EmitterInstance_engine, "f").emitterShapeManager) === null || _b === void 0 ? void 0 : _b.getShape(this.options.shape);
5015
5106
  this.fill = this.options.fill;
5016
- __classPrivateFieldSet(this, _EmitterInstance_firstSpawn, !this.options.life.wait, "f");
5017
- __classPrivateFieldSet(this, _EmitterInstance_startParticlesAdded, false, "f");
5107
+ EmitterInstance_classPrivateFieldSet(this, _EmitterInstance_firstSpawn, !this.options.life.wait, "f");
5108
+ EmitterInstance_classPrivateFieldSet(this, _EmitterInstance_startParticlesAdded, false, "f");
5018
5109
  let particlesOptions = Utils_deepExtend({}, this.options.particles);
5019
5110
  particlesOptions !== null && particlesOptions !== void 0 ? particlesOptions : particlesOptions = {};
5020
5111
  (_c = particlesOptions.move) !== null && _c !== void 0 ? _c : particlesOptions.move = {};
@@ -5076,12 +5167,12 @@
5076
5167
  return;
5077
5168
  }
5078
5169
  if (EmitterInstance_classPrivateFieldGet(this, _EmitterInstance_firstSpawn, "f")) {
5079
- __classPrivateFieldSet(this, _EmitterInstance_firstSpawn, false, "f");
5170
+ EmitterInstance_classPrivateFieldSet(this, _EmitterInstance_firstSpawn, false, "f");
5080
5171
  this.currentSpawnDelay = (_a = this.spawnDelay) !== null && _a !== void 0 ? _a : 0;
5081
5172
  this.currentEmitDelay = (_b = this.emitDelay) !== null && _b !== void 0 ? _b : 0;
5082
5173
  }
5083
5174
  if (!EmitterInstance_classPrivateFieldGet(this, _EmitterInstance_startParticlesAdded, "f")) {
5084
- __classPrivateFieldSet(this, _EmitterInstance_startParticlesAdded, true, "f");
5175
+ EmitterInstance_classPrivateFieldSet(this, _EmitterInstance_startParticlesAdded, true, "f");
5085
5176
  this.emitParticles(this.options.startCount);
5086
5177
  }
5087
5178
  if (this.duration !== undefined) {
@@ -5120,6 +5211,36 @@
5120
5211
  }
5121
5212
  }
5122
5213
  }
5214
+ getPosition() {
5215
+ if (this.options.domId) {
5216
+ const container = this.container, element = document.getElementById(this.options.domId);
5217
+ if (element) {
5218
+ const elRect = element.getBoundingClientRect();
5219
+ return {
5220
+ x: (elRect.x + elRect.width / 2) * container.retina.pixelRatio,
5221
+ y: (elRect.y + elRect.height / 2) * container.retina.pixelRatio
5222
+ };
5223
+ }
5224
+ }
5225
+ return this.position;
5226
+ }
5227
+ getSize() {
5228
+ const container = this.container;
5229
+ if (this.options.domId) {
5230
+ const element = document.getElementById(this.options.domId);
5231
+ if (element) {
5232
+ const elRect = element.getBoundingClientRect();
5233
+ return {
5234
+ width: elRect.width * container.retina.pixelRatio,
5235
+ height: elRect.height * container.retina.pixelRatio
5236
+ };
5237
+ }
5238
+ }
5239
+ return {
5240
+ width: this.size.mode === "percent" ? container.canvas.size.width * this.size.width / 100 : this.size.width,
5241
+ height: this.size.mode === "percent" ? container.canvas.size.height * this.size.height / 100 : this.size.height
5242
+ };
5243
+ }
5123
5244
  prepareToDie() {
5124
5245
  var _a;
5125
5246
  if (this.paused) {
@@ -5152,11 +5273,8 @@
5152
5273
  emitParticles(quantity) {
5153
5274
  var _a, _b, _c;
5154
5275
  const container = this.container;
5155
- const position = this.position;
5156
- const offset = {
5157
- x: this.size.mode === "percent" ? container.canvas.size.width * this.size.width / 100 : this.size.width,
5158
- y: this.size.mode === "percent" ? container.canvas.size.height * this.size.height / 100 : this.size.height
5159
- };
5276
+ const position = this.getPosition();
5277
+ const size = this.getSize();
5160
5278
  for (let i = 0; i < quantity; i++) {
5161
5279
  const particlesOptions = Utils_deepExtend({}, this.particlesOptions);
5162
5280
  if (this.spawnColor) {
@@ -5174,7 +5292,10 @@
5174
5292
  particlesOptions.color.value = this.spawnColor;
5175
5293
  }
5176
5294
  }
5177
- const pPosition = (_c = (_b = this.shape) === null || _b === void 0 ? void 0 : _b.randomPosition(position, offset, this.fill)) !== null && _c !== void 0 ? _c : position;
5295
+ if (!position) {
5296
+ return;
5297
+ }
5298
+ const pPosition = (_c = (_b = this.shape) === null || _b === void 0 ? void 0 : _b.randomPosition(position, size, this.fill)) !== null && _c !== void 0 ? _c : position;
5178
5299
  container.particles.addParticle(pPosition, particlesOptions);
5179
5300
  }
5180
5301
  }
@@ -5191,10 +5312,26 @@
5191
5312
  return (initValue + colorSpeed * container.fpsLimit / emitFactor + colorOffset * 3.6) % maxValue;
5192
5313
  }
5193
5314
  }
5194
- _EmitterInstance_firstSpawn = new WeakMap, _EmitterInstance_startParticlesAdded = new WeakMap;
5315
+ _EmitterInstance_firstSpawn = new WeakMap, _EmitterInstance_startParticlesAdded = new WeakMap,
5316
+ _EmitterInstance_engine = new WeakMap;
5317
+ var Emitters_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
5318
+ if (kind === "m") throw new TypeError("Private method is not writable");
5319
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5320
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5321
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
5322
+ value;
5323
+ };
5324
+ var Emitters_classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
5325
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
5326
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5327
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5328
+ };
5329
+ var _Emitters_engine;
5195
5330
  class Emitters {
5196
- constructor(container) {
5331
+ constructor(engine, container) {
5197
5332
  this.container = container;
5333
+ _Emitters_engine.set(this, void 0);
5334
+ Emitters_classPrivateFieldSet(this, _Emitters_engine, engine, "f");
5198
5335
  this.array = [];
5199
5336
  this.emitters = [];
5200
5337
  this.interactivityEmitters = [];
@@ -5306,7 +5443,7 @@
5306
5443
  addEmitter(options, position) {
5307
5444
  const emitterOptions = new Emitter;
5308
5445
  emitterOptions.load(options);
5309
- const emitter = new EmitterInstance(this, this.container, emitterOptions, position);
5446
+ const emitter = new EmitterInstance(Emitters_classPrivateFieldGet(this, _Emitters_engine, "f"), this, this.container, emitterOptions, position);
5310
5447
  this.array.push(emitter);
5311
5448
  return emitter;
5312
5449
  }
@@ -5317,18 +5454,46 @@
5317
5454
  }
5318
5455
  }
5319
5456
  }
5457
+ _Emitters_engine = new WeakMap;
5458
+ var ShapeManager_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
5459
+ if (kind === "m") throw new TypeError("Private method is not writable");
5460
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5461
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5462
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
5463
+ value;
5464
+ };
5465
+ var _ShapeManager_engine;
5466
+ const shapes = new Map;
5467
+ class ShapeManager {
5468
+ constructor(engine) {
5469
+ _ShapeManager_engine.set(this, void 0);
5470
+ ShapeManager_classPrivateFieldSet(this, _ShapeManager_engine, engine, "f");
5471
+ }
5472
+ addShape(name, drawer) {
5473
+ if (!this.getShape(name)) {
5474
+ shapes.set(name, drawer);
5475
+ }
5476
+ }
5477
+ getShape(name) {
5478
+ return shapes.get(name);
5479
+ }
5480
+ getSupportedShapes() {
5481
+ return shapes.keys();
5482
+ }
5483
+ }
5484
+ _ShapeManager_engine = new WeakMap;
5320
5485
  function randomSquareCoordinate(position, offset) {
5321
5486
  return position + offset * (Math.random() - .5);
5322
5487
  }
5323
5488
  class SquareShape {
5324
- randomPosition(position, offset, fill) {
5489
+ randomPosition(position, size, fill) {
5325
5490
  if (fill) {
5326
5491
  return {
5327
- x: randomSquareCoordinate(position.x, offset.x),
5328
- y: randomSquareCoordinate(position.y, offset.y)
5492
+ x: randomSquareCoordinate(position.x, size.width),
5493
+ y: randomSquareCoordinate(position.y, size.height)
5329
5494
  };
5330
5495
  } else {
5331
- const halfW = offset.x / 2, halfH = offset.y / 2, side = Math.floor(Math.random() * 4), v = (Math.random() - .5) * 2;
5496
+ const halfW = size.width / 2, halfH = size.height / 2, side = Math.floor(Math.random() * 4), v = (Math.random() - .5) * 2;
5332
5497
  switch (side) {
5333
5498
  case 0:
5334
5499
  return {
@@ -5358,12 +5523,27 @@
5358
5523
  }
5359
5524
  }
5360
5525
  }
5526
+ var Plugins_Emitters_classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function(receiver, state, value, kind, f) {
5527
+ if (kind === "m") throw new TypeError("Private method is not writable");
5528
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5529
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5530
+ return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value),
5531
+ value;
5532
+ };
5533
+ var Plugins_Emitters_classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function(receiver, state, kind, f) {
5534
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
5535
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5536
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5537
+ };
5538
+ var _EmittersPlugin_engine;
5361
5539
  class EmittersPlugin {
5362
- constructor() {
5540
+ constructor(engine) {
5541
+ _EmittersPlugin_engine.set(this, void 0);
5542
+ Plugins_Emitters_classPrivateFieldSet(this, _EmittersPlugin_engine, engine, "f");
5363
5543
  this.id = "emitters";
5364
5544
  }
5365
5545
  getPlugin(container) {
5366
- return new Emitters(container);
5546
+ return new Emitters(Plugins_Emitters_classPrivateFieldGet(this, _EmittersPlugin_engine, "f"), container);
5367
5547
  }
5368
5548
  needsPlugin(options) {
5369
5549
  var _a, _b, _c;
@@ -5412,14 +5592,19 @@
5412
5592
  }
5413
5593
  }
5414
5594
  }
5595
+ _EmittersPlugin_engine = new WeakMap;
5415
5596
  async function loadEmittersPlugin(engine) {
5416
- const plugin = new EmittersPlugin;
5417
- await engine.addPlugin(plugin);
5597
+ if (!engine.emitterShapeManager) {
5598
+ engine.emitterShapeManager = new ShapeManager(engine);
5599
+ }
5418
5600
  if (!engine.addEmitterShape) {
5419
5601
  engine.addEmitterShape = (name, shape) => {
5420
- ShapeManager.addShape(name, shape);
5602
+ var _a;
5603
+ (_a = engine.emitterShapeManager) === null || _a === void 0 ? void 0 : _a.addShape(name, shape);
5421
5604
  };
5422
5605
  }
5606
+ const plugin = new EmittersPlugin(engine);
5607
+ await engine.addPlugin(plugin);
5423
5608
  engine.addEmitterShape("circle", new CircleShape);
5424
5609
  engine.addEmitterShape("square", new SquareShape);
5425
5610
  }