tsparticles 1.41.0 → 1.41.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/Core/Container.js +2 -2
  2. package/Core/Interfaces/IExternalInteractor.d.ts +1 -1
  3. package/Core/Interfaces/IParticlesInteractor.d.ts +1 -1
  4. package/Core/Particles.d.ts +3 -3
  5. package/Core/Particles.js +7 -7
  6. package/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  7. package/Core/Utils/FrameManager.d.ts +1 -1
  8. package/Core/Utils/FrameManager.js +2 -2
  9. package/Core/Utils/InteractionManager.d.ts +2 -2
  10. package/Core/Utils/InteractionManager.js +4 -4
  11. package/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  12. package/Interactions/External/Attract/Attractor.d.ts +1 -1
  13. package/Interactions/External/Attract/Attractor.js +1 -1
  14. package/Interactions/External/Bounce/Bouncer.d.ts +1 -1
  15. package/Interactions/External/Bounce/Bouncer.js +1 -1
  16. package/Interactions/External/Bubble/Bubbler.d.ts +1 -1
  17. package/Interactions/External/Bubble/Bubbler.js +1 -1
  18. package/Interactions/External/Connect/Connector.d.ts +1 -1
  19. package/Interactions/External/Connect/Connector.js +1 -1
  20. package/Interactions/External/Grab/Grabber.d.ts +1 -1
  21. package/Interactions/External/Grab/Grabber.js +1 -1
  22. package/Interactions/External/Repulse/Repulser.d.ts +1 -1
  23. package/Interactions/External/Repulse/Repulser.js +1 -1
  24. package/Interactions/External/Trail/TrailMaker.d.ts +1 -1
  25. package/Interactions/External/Trail/TrailMaker.js +1 -1
  26. package/Interactions/Particles/Attract/Attractor.d.ts +1 -1
  27. package/Interactions/Particles/Attract/Attractor.js +1 -1
  28. package/Interactions/Particles/Collisions/Collider.d.ts +1 -1
  29. package/Interactions/Particles/Collisions/Collider.js +1 -1
  30. package/Interactions/Particles/Links/Linker.d.ts +1 -1
  31. package/Interactions/Particles/Links/Linker.js +1 -1
  32. package/Plugins/PolygonMask/PolygonMaskInstance.js +1 -1
  33. package/browser/Core/Container.js +2 -2
  34. package/browser/Core/Interfaces/IExternalInteractor.d.ts +1 -1
  35. package/browser/Core/Interfaces/IParticlesInteractor.d.ts +1 -1
  36. package/browser/Core/Particles.d.ts +3 -3
  37. package/browser/Core/Particles.js +7 -7
  38. package/browser/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  39. package/browser/Core/Utils/FrameManager.d.ts +1 -1
  40. package/browser/Core/Utils/FrameManager.js +2 -2
  41. package/browser/Core/Utils/InteractionManager.d.ts +2 -2
  42. package/browser/Core/Utils/InteractionManager.js +4 -4
  43. package/browser/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  44. package/browser/Interactions/External/Attract/Attractor.d.ts +1 -1
  45. package/browser/Interactions/External/Attract/Attractor.js +1 -1
  46. package/browser/Interactions/External/Bounce/Bouncer.d.ts +1 -1
  47. package/browser/Interactions/External/Bounce/Bouncer.js +1 -1
  48. package/browser/Interactions/External/Bubble/Bubbler.d.ts +1 -1
  49. package/browser/Interactions/External/Bubble/Bubbler.js +1 -1
  50. package/browser/Interactions/External/Connect/Connector.d.ts +1 -1
  51. package/browser/Interactions/External/Connect/Connector.js +1 -1
  52. package/browser/Interactions/External/Grab/Grabber.d.ts +1 -1
  53. package/browser/Interactions/External/Grab/Grabber.js +1 -1
  54. package/browser/Interactions/External/Repulse/Repulser.d.ts +1 -1
  55. package/browser/Interactions/External/Repulse/Repulser.js +1 -1
  56. package/browser/Interactions/External/Trail/TrailMaker.d.ts +1 -1
  57. package/browser/Interactions/External/Trail/TrailMaker.js +1 -1
  58. package/browser/Interactions/Particles/Attract/Attractor.d.ts +1 -1
  59. package/browser/Interactions/Particles/Attract/Attractor.js +1 -1
  60. package/browser/Interactions/Particles/Collisions/Collider.d.ts +1 -1
  61. package/browser/Interactions/Particles/Collisions/Collider.js +1 -1
  62. package/browser/Interactions/Particles/Links/Linker.d.ts +1 -1
  63. package/browser/Interactions/Particles/Links/Linker.js +1 -1
  64. package/browser/Plugins/PolygonMask/PolygonMaskInstance.js +1 -1
  65. package/esm/Core/Container.js +2 -2
  66. package/esm/Core/Interfaces/IExternalInteractor.d.ts +1 -1
  67. package/esm/Core/Interfaces/IParticlesInteractor.d.ts +1 -1
  68. package/esm/Core/Particles.d.ts +3 -3
  69. package/esm/Core/Particles.js +7 -7
  70. package/esm/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  71. package/esm/Core/Utils/FrameManager.d.ts +1 -1
  72. package/esm/Core/Utils/FrameManager.js +2 -2
  73. package/esm/Core/Utils/InteractionManager.d.ts +2 -2
  74. package/esm/Core/Utils/InteractionManager.js +4 -4
  75. package/esm/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  76. package/esm/Interactions/External/Attract/Attractor.d.ts +1 -1
  77. package/esm/Interactions/External/Attract/Attractor.js +1 -1
  78. package/esm/Interactions/External/Bounce/Bouncer.d.ts +1 -1
  79. package/esm/Interactions/External/Bounce/Bouncer.js +1 -1
  80. package/esm/Interactions/External/Bubble/Bubbler.d.ts +1 -1
  81. package/esm/Interactions/External/Bubble/Bubbler.js +1 -1
  82. package/esm/Interactions/External/Connect/Connector.d.ts +1 -1
  83. package/esm/Interactions/External/Connect/Connector.js +1 -1
  84. package/esm/Interactions/External/Grab/Grabber.d.ts +1 -1
  85. package/esm/Interactions/External/Grab/Grabber.js +1 -1
  86. package/esm/Interactions/External/Repulse/Repulser.d.ts +1 -1
  87. package/esm/Interactions/External/Repulse/Repulser.js +1 -1
  88. package/esm/Interactions/External/Trail/TrailMaker.d.ts +1 -1
  89. package/esm/Interactions/External/Trail/TrailMaker.js +1 -1
  90. package/esm/Interactions/Particles/Attract/Attractor.d.ts +1 -1
  91. package/esm/Interactions/Particles/Attract/Attractor.js +1 -1
  92. package/esm/Interactions/Particles/Collisions/Collider.d.ts +1 -1
  93. package/esm/Interactions/Particles/Collisions/Collider.js +1 -1
  94. package/esm/Interactions/Particles/Links/Linker.d.ts +1 -1
  95. package/esm/Interactions/Particles/Links/Linker.js +1 -1
  96. package/esm/Plugins/PolygonMask/PolygonMaskInstance.js +1 -1
  97. package/package.json +1 -1
  98. package/report.html +6 -5
  99. package/report.slim.html +6 -5
  100. package/tsparticles.engine.js +15 -15
  101. package/tsparticles.engine.min.js +2 -2
  102. package/tsparticles.interaction.external.attract.js +14 -14
  103. package/tsparticles.interaction.external.attract.min.js +2 -2
  104. package/tsparticles.interaction.external.bounce.js +14 -14
  105. package/tsparticles.interaction.external.bounce.min.js +2 -2
  106. package/tsparticles.interaction.external.bubble.js +14 -14
  107. package/tsparticles.interaction.external.bubble.min.js +2 -2
  108. package/tsparticles.interaction.external.connect.js +14 -14
  109. package/tsparticles.interaction.external.connect.min.js +2 -2
  110. package/tsparticles.interaction.external.grab.js +14 -14
  111. package/tsparticles.interaction.external.grab.min.js +2 -2
  112. package/tsparticles.interaction.external.repulse.js +14 -14
  113. package/tsparticles.interaction.external.repulse.min.js +2 -2
  114. package/tsparticles.interaction.external.trail.js +14 -14
  115. package/tsparticles.interaction.external.trail.min.js +2 -2
  116. package/tsparticles.interaction.particles.attract.js +14 -14
  117. package/tsparticles.interaction.particles.attract.min.js +2 -2
  118. package/tsparticles.interaction.particles.collisions.js +14 -14
  119. package/tsparticles.interaction.particles.collisions.min.js +2 -2
  120. package/tsparticles.interaction.particles.links.js +14 -14
  121. package/tsparticles.interaction.particles.links.min.js +2 -2
  122. package/tsparticles.js +27 -27
  123. package/tsparticles.min.js +2 -2
  124. package/tsparticles.pathseg.min.js +1 -1
  125. package/tsparticles.plugins.absorbers.js +13 -13
  126. package/tsparticles.plugins.absorbers.min.js +1 -1
  127. package/tsparticles.plugins.emitters.js +13 -13
  128. package/tsparticles.plugins.emitters.min.js +1 -1
  129. package/tsparticles.plugins.polygonMask.js +15 -15
  130. package/tsparticles.plugins.polygonMask.min.js +2 -2
  131. package/tsparticles.shape.circle.min.js +1 -1
  132. package/tsparticles.shape.image.js +13 -13
  133. package/tsparticles.shape.image.min.js +1 -1
  134. package/tsparticles.shape.line.min.js +1 -1
  135. package/tsparticles.shape.polygon.min.js +1 -1
  136. package/tsparticles.shape.square.min.js +1 -1
  137. package/tsparticles.shape.star.min.js +1 -1
  138. package/tsparticles.shape.text.js +13 -13
  139. package/tsparticles.shape.text.min.js +1 -1
  140. package/tsparticles.slim.js +24 -24
  141. package/tsparticles.slim.min.js +2 -2
  142. package/tsparticles.updater.angle.js +13 -13
  143. package/tsparticles.updater.angle.min.js +1 -1
  144. package/tsparticles.updater.color.js +13 -13
  145. package/tsparticles.updater.color.min.js +1 -1
  146. package/tsparticles.updater.life.js +13 -13
  147. package/tsparticles.updater.life.min.js +1 -1
  148. package/tsparticles.updater.opacity.js +13 -13
  149. package/tsparticles.updater.opacity.min.js +1 -1
  150. package/tsparticles.updater.outModes.js +13 -13
  151. package/tsparticles.updater.outModes.min.js +1 -1
  152. package/tsparticles.updater.roll.js +13 -13
  153. package/tsparticles.updater.roll.min.js +1 -1
  154. package/tsparticles.updater.size.js +13 -13
  155. package/tsparticles.updater.size.min.js +1 -1
  156. package/tsparticles.updater.strokeColor.js +13 -13
  157. package/tsparticles.updater.strokeColor.min.js +1 -1
  158. package/tsparticles.updater.tilt.js +13 -13
  159. package/tsparticles.updater.tilt.min.js +1 -1
  160. package/tsparticles.updater.wobble.js +13 -13
  161. package/tsparticles.updater.wobble.min.js +1 -1
  162. package/umd/Core/Container.js +2 -2
  163. package/umd/Core/Interfaces/IExternalInteractor.d.ts +1 -1
  164. package/umd/Core/Interfaces/IParticlesInteractor.d.ts +1 -1
  165. package/umd/Core/Particles.d.ts +3 -3
  166. package/umd/Core/Particles.js +7 -7
  167. package/umd/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  168. package/umd/Core/Utils/FrameManager.d.ts +1 -1
  169. package/umd/Core/Utils/FrameManager.js +2 -2
  170. package/umd/Core/Utils/InteractionManager.d.ts +2 -2
  171. package/umd/Core/Utils/InteractionManager.js +4 -4
  172. package/umd/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  173. package/umd/Interactions/External/Attract/Attractor.d.ts +1 -1
  174. package/umd/Interactions/External/Attract/Attractor.js +1 -1
  175. package/umd/Interactions/External/Bounce/Bouncer.d.ts +1 -1
  176. package/umd/Interactions/External/Bounce/Bouncer.js +1 -1
  177. package/umd/Interactions/External/Bubble/Bubbler.d.ts +1 -1
  178. package/umd/Interactions/External/Bubble/Bubbler.js +1 -1
  179. package/umd/Interactions/External/Connect/Connector.d.ts +1 -1
  180. package/umd/Interactions/External/Connect/Connector.js +1 -1
  181. package/umd/Interactions/External/Grab/Grabber.d.ts +1 -1
  182. package/umd/Interactions/External/Grab/Grabber.js +1 -1
  183. package/umd/Interactions/External/Repulse/Repulser.d.ts +1 -1
  184. package/umd/Interactions/External/Repulse/Repulser.js +1 -1
  185. package/umd/Interactions/External/Trail/TrailMaker.d.ts +1 -1
  186. package/umd/Interactions/External/Trail/TrailMaker.js +1 -1
  187. package/umd/Interactions/Particles/Attract/Attractor.d.ts +1 -1
  188. package/umd/Interactions/Particles/Attract/Attractor.js +1 -1
  189. package/umd/Interactions/Particles/Collisions/Collider.d.ts +1 -1
  190. package/umd/Interactions/Particles/Collisions/Collider.js +1 -1
  191. package/umd/Interactions/Particles/Links/Linker.d.ts +1 -1
  192. package/umd/Interactions/Particles/Links/Linker.js +1 -1
  193. package/umd/Plugins/PolygonMask/PolygonMaskInstance.js +1 -1
@@ -1605,20 +1605,20 @@
1605
1605
  }
1606
1606
  }
1607
1607
  }
1608
- externalInteract(delta) {
1608
+ async externalInteract(delta) {
1609
1609
  for (const interactor of this.externalInteractors) {
1610
1610
  if (interactor.isEnabled()) {
1611
- interactor.interact(delta);
1611
+ await interactor.interact(delta);
1612
1612
  }
1613
1613
  }
1614
1614
  }
1615
- particlesInteract(particle, delta) {
1615
+ async particlesInteract(particle, delta) {
1616
1616
  for (const interactor of this.externalInteractors) {
1617
1617
  interactor.reset(particle);
1618
1618
  }
1619
1619
  for (const interactor of this.particleInteractors) {
1620
1620
  if (interactor.isEnabled(particle)) {
1621
- interactor.interact(particle, delta);
1621
+ await interactor.interact(particle, delta);
1622
1622
  }
1623
1623
  }
1624
1624
  }
@@ -4101,10 +4101,10 @@
4101
4101
  }
4102
4102
  container.pathGenerator.init(container);
4103
4103
  }
4104
- redraw() {
4104
+ async redraw() {
4105
4105
  this.clear();
4106
4106
  this.init();
4107
- this.draw({
4107
+ await this.draw({
4108
4108
  value: 0,
4109
4109
  factor: 0
4110
4110
  });
@@ -4129,7 +4129,7 @@
4129
4129
  remove(particle, group, override) {
4130
4130
  this.removeAt(this.array.indexOf(particle), undefined, group, override);
4131
4131
  }
4132
- update(delta) {
4132
+ async update(delta) {
4133
4133
  const container = this.container;
4134
4134
  const particlesToDelete = [];
4135
4135
  container.pathGenerator.update();
@@ -4163,23 +4163,23 @@
4163
4163
  for (const particle of particlesToDelete) {
4164
4164
  this.remove(particle);
4165
4165
  }
4166
- this.interactionManager.externalInteract(delta);
4166
+ await this.interactionManager.externalInteract(delta);
4167
4167
  for (const particle of container.particles.array) {
4168
4168
  for (const updater of this.updaters) {
4169
4169
  updater.update(particle, delta);
4170
4170
  }
4171
4171
  if (!particle.destroyed && !particle.spawning) {
4172
- this.interactionManager.particlesInteract(particle, delta);
4172
+ await this.interactionManager.particlesInteract(particle, delta);
4173
4173
  }
4174
4174
  }
4175
4175
  delete container.canvas.resizeFactor;
4176
4176
  }
4177
- draw(delta) {
4177
+ async draw(delta) {
4178
4178
  const container = this.container;
4179
4179
  container.canvas.clear();
4180
4180
  const canvasSize = this.container.canvas.size;
4181
4181
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4182
- this.update(delta);
4182
+ await this.update(delta);
4183
4183
  if (this.needsSort) {
4184
4184
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
4185
4185
  this.lastZIndex = this.zArray[this.zArray.length - 1].position.z;
@@ -4540,12 +4540,12 @@
4540
4540
  }
4541
4541
  draw(force) {
4542
4542
  let refreshTime = force;
4543
- this.drawAnimationFrame = animate()((timestamp => {
4543
+ this.drawAnimationFrame = animate()((async timestamp => {
4544
4544
  if (refreshTime) {
4545
4545
  this.lastFrameTime = undefined;
4546
4546
  refreshTime = false;
4547
4547
  }
4548
- this.drawer.nextFrame(timestamp);
4548
+ await this.drawer.nextFrame(timestamp);
4549
4549
  }));
4550
4550
  }
4551
4551
  getAnimationStatus() {
@@ -5006,7 +5006,7 @@
5006
5006
  return Utils_isInArray("attract", hoverMode) || Utils_isInArray("attract", clickMode);
5007
5007
  }
5008
5008
  reset() {}
5009
- interact() {
5009
+ async interact() {
5010
5010
  const container = this.container, options = container.actualOptions, mouseMoveStatus = container.interactivity.status === Constants_Constants.mouseMoveEvent, events = options.interactivity.events, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, clickEnabled = events.onClick.enable, clickMode = events.onClick.mode;
5011
5011
  if (mouseMoveStatus && hoverEnabled && Utils_isInArray("attract", hoverMode)) {
5012
5012
  this.hoverAttract();
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.41.0 by Matteo Bruni */
2
- !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n=e();for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}(window,(function(){return function(){"use strict";var t={d:function(e,n){for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r:function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function n(t,e){const n=t.x-e.x,o=t.y-e.y;return{dx:n,dy:o,distance:Math.sqrt(n*n+o*o)}}function o(t,e){switch(e){case"ease-out-quad":return 1-(1-t)**2;case"ease-out-cubic":return 1-(1-t)**3;case"ease-out-quart":return 1-(1-t)**4;case"ease-out-quint":return 1-(1-t)**5;case"ease-out-expo":return 1===t?1:1-Math.pow(2,-10*t);case"ease-out-sine":return Math.sin(t*Math.PI/2);case"ease-out-back":{const e=1.70158;return 1+(e+1)*Math.pow(t-1,3)+e*Math.pow(t-1,2)}case"ease-out-circ":return Math.sqrt(1-Math.pow(t-1,2));default:return t}}function a(t,e){return t===e||e instanceof Array&&e.indexOf(t)>-1}t.r(e),t.d(e,{loadExternalAttractInteraction:function(){return u}});class i extends class{constructor(t,e){this.position={x:t,y:e}}}{constructor(t,e,n){super(t,e),this.radius=n}contains(t){return e=t,o=this.position,n(e,o).distance<=this.radius;var e,o}intersects(t){const e=t,n=t,o=this.position,a=t.position,i=Math.abs(a.x-o.x),r=Math.abs(a.y-o.y),s=this.radius;if(void 0!==n.radius){return s+n.radius>Math.sqrt(i*i+r+r)}if(void 0!==e.size){const t=e.size.width,n=e.size.height,o=Math.pow(i-t,2)+Math.pow(r-n,2);return!(i>s+t||r>s+n)&&(i<=t||r<=n||o<=s*s)}return!1}}class r{}r.generatedAttribute="generated",r.randomColorValue="random",r.midColorValue="mid",r.touchEndEvent="touchend",r.mouseDownEvent="mousedown",r.mouseUpEvent="mouseup",r.mouseMoveEvent="mousemove",r.touchStartEvent="touchstart",r.touchMoveEvent="touchmove",r.mouseLeaveEvent="mouseleave",r.mouseOutEvent="mouseout",r.touchCancelEvent="touchcancel",r.resizeEvent="resize",r.visibilityChangeEvent="visibilitychange",r.noPolygonDataLoaded="No polygon data loaded.",r.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;class s{constructor(t,e){let n,o;if(void 0===e){if("number"==typeof t)throw new Error("tsParticles - Vector not initialized correctly");const e=t;[n,o]=[e.x,e.y]}else[n,o]=[t,e];this.x=n,this.y=o}static clone(t){return s.create(t.x,t.y)}static create(t,e){return new s(t,e)}static get origin(){return s.create(0,0)}get angle(){return Math.atan2(this.y,this.x)}set angle(t){this.updateFromAngle(t,this.length)}get length(){return Math.sqrt(this.x**2+this.y**2)}set length(t){this.updateFromAngle(this.angle,t)}add(t){return s.create(this.x+t.x,this.y+t.y)}addTo(t){this.x+=t.x,this.y+=t.y}sub(t){return s.create(this.x-t.x,this.y-t.y)}subFrom(t){this.x-=t.x,this.y-=t.y}mult(t){return s.create(this.x*t,this.y*t)}multTo(t){this.x*=t,this.y*=t}div(t){return s.create(this.x/t,this.y/t)}divTo(t){this.x/=t,this.y/=t}distanceTo(t){return this.sub(t).length}getLengthSq(){return this.x**2+this.y**2}distanceToSq(t){return this.sub(t).getLengthSq()}manhattanDistanceTo(t){return Math.abs(t.x-this.x)+Math.abs(t.y-this.y)}copy(){return s.clone(this)}setTo(t){this.x=t.x,this.y=t.y}rotate(t){return s.create(this.x*Math.cos(t)-this.y*Math.sin(t),this.x*Math.sin(t)+this.y*Math.cos(t))}updateFromAngle(t,e){this.x=Math.cos(t)*e,this.y=Math.sin(t)*e}}new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;new WeakMap;class c extends class{constructor(t){this.container=t,this.type=0}}{constructor(t){super(t)}isEnabled(){const t=this.container,e=t.actualOptions,n=t.interactivity.mouse,o=e.interactivity.events;if(!(n.position&&o.onHover.enable||n.clickPosition&&o.onClick.enable))return!1;const i=o.onHover.mode,r=o.onClick.mode;return a("attract",i)||a("attract",r)}reset(){}interact(){const t=this.container,e=t.actualOptions,n=t.interactivity.status===r.mouseMoveEvent,o=e.interactivity.events,i=o.onHover.enable,s=o.onHover.mode,c=o.onClick.enable,u=o.onClick.mode;n&&i&&a("attract",s)?this.hoverAttract():c&&a("attract",u)&&this.clickAttract()}hoverAttract(){const t=this.container,e=t.interactivity.mouse.position;if(!e)return;const n=t.retina.attractModeDistance;this.processAttract(e,n,new i(e.x,e.y,n))}processAttract(t,e,a){const i=this.container,r=i.actualOptions.interactivity.modes.attract,c=i.particles.quadTree.query(a);for(const a of c){const{dx:i,dy:c,distance:l}=n(a.position,t),y=r.speed*r.factor,p=(u=o(1-l/e,r.easing)*y,h=0,d=r.maxSpeed,Math.min(Math.max(u,h),d)),v=s.create(0===l?y:i/l*p,0===l?y:c/l*p);a.position.subFrom(v)}var u,h,d}clickAttract(){const t=this.container;if(t.attract.finish||(t.attract.count||(t.attract.count=0),t.attract.count++,t.attract.count===t.particles.count&&(t.attract.finish=!0)),t.attract.clicking){const e=t.interactivity.mouse.clickPosition;if(!e)return;const n=t.retina.attractModeDistance;this.processAttract(e,n,new i(e.x,e.y,n))}else!1===t.attract.clicking&&(t.attract.particles=[])}}async function u(t){await t.addInteractor("externalAttract",(t=>new c(t)))}return e}()}));
1
+ /*! tsParticles v1.41.1 by Matteo Bruni */
2
+ !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n=e();for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}(window,(function(){return function(){"use strict";var t={d:function(e,n){for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r:function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function n(t,e){const n=t.x-e.x,o=t.y-e.y;return{dx:n,dy:o,distance:Math.sqrt(n*n+o*o)}}function o(t,e){switch(e){case"ease-out-quad":return 1-(1-t)**2;case"ease-out-cubic":return 1-(1-t)**3;case"ease-out-quart":return 1-(1-t)**4;case"ease-out-quint":return 1-(1-t)**5;case"ease-out-expo":return 1===t?1:1-Math.pow(2,-10*t);case"ease-out-sine":return Math.sin(t*Math.PI/2);case"ease-out-back":{const e=1.70158;return 1+(e+1)*Math.pow(t-1,3)+e*Math.pow(t-1,2)}case"ease-out-circ":return Math.sqrt(1-Math.pow(t-1,2));default:return t}}function a(t,e){return t===e||e instanceof Array&&e.indexOf(t)>-1}t.r(e),t.d(e,{loadExternalAttractInteraction:function(){return u}});class i extends class{constructor(t,e){this.position={x:t,y:e}}}{constructor(t,e,n){super(t,e),this.radius=n}contains(t){return e=t,o=this.position,n(e,o).distance<=this.radius;var e,o}intersects(t){const e=t,n=t,o=this.position,a=t.position,i=Math.abs(a.x-o.x),r=Math.abs(a.y-o.y),s=this.radius;if(void 0!==n.radius){return s+n.radius>Math.sqrt(i*i+r+r)}if(void 0!==e.size){const t=e.size.width,n=e.size.height,o=Math.pow(i-t,2)+Math.pow(r-n,2);return!(i>s+t||r>s+n)&&(i<=t||r<=n||o<=s*s)}return!1}}class r{}r.generatedAttribute="generated",r.randomColorValue="random",r.midColorValue="mid",r.touchEndEvent="touchend",r.mouseDownEvent="mousedown",r.mouseUpEvent="mouseup",r.mouseMoveEvent="mousemove",r.touchStartEvent="touchstart",r.touchMoveEvent="touchmove",r.mouseLeaveEvent="mouseleave",r.mouseOutEvent="mouseout",r.touchCancelEvent="touchcancel",r.resizeEvent="resize",r.visibilityChangeEvent="visibilitychange",r.noPolygonDataLoaded="No polygon data loaded.",r.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;class s{constructor(t,e){let n,o;if(void 0===e){if("number"==typeof t)throw new Error("tsParticles - Vector not initialized correctly");const e=t;[n,o]=[e.x,e.y]}else[n,o]=[t,e];this.x=n,this.y=o}static clone(t){return s.create(t.x,t.y)}static create(t,e){return new s(t,e)}static get origin(){return s.create(0,0)}get angle(){return Math.atan2(this.y,this.x)}set angle(t){this.updateFromAngle(t,this.length)}get length(){return Math.sqrt(this.x**2+this.y**2)}set length(t){this.updateFromAngle(this.angle,t)}add(t){return s.create(this.x+t.x,this.y+t.y)}addTo(t){this.x+=t.x,this.y+=t.y}sub(t){return s.create(this.x-t.x,this.y-t.y)}subFrom(t){this.x-=t.x,this.y-=t.y}mult(t){return s.create(this.x*t,this.y*t)}multTo(t){this.x*=t,this.y*=t}div(t){return s.create(this.x/t,this.y/t)}divTo(t){this.x/=t,this.y/=t}distanceTo(t){return this.sub(t).length}getLengthSq(){return this.x**2+this.y**2}distanceToSq(t){return this.sub(t).getLengthSq()}manhattanDistanceTo(t){return Math.abs(t.x-this.x)+Math.abs(t.y-this.y)}copy(){return s.clone(this)}setTo(t){this.x=t.x,this.y=t.y}rotate(t){return s.create(this.x*Math.cos(t)-this.y*Math.sin(t),this.x*Math.sin(t)+this.y*Math.cos(t))}updateFromAngle(t,e){this.x=Math.cos(t)*e,this.y=Math.sin(t)*e}}new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;new WeakMap;class c extends class{constructor(t){this.container=t,this.type=0}}{constructor(t){super(t)}isEnabled(){const t=this.container,e=t.actualOptions,n=t.interactivity.mouse,o=e.interactivity.events;if(!(n.position&&o.onHover.enable||n.clickPosition&&o.onClick.enable))return!1;const i=o.onHover.mode,r=o.onClick.mode;return a("attract",i)||a("attract",r)}reset(){}async interact(){const t=this.container,e=t.actualOptions,n=t.interactivity.status===r.mouseMoveEvent,o=e.interactivity.events,i=o.onHover.enable,s=o.onHover.mode,c=o.onClick.enable,u=o.onClick.mode;n&&i&&a("attract",s)?this.hoverAttract():c&&a("attract",u)&&this.clickAttract()}hoverAttract(){const t=this.container,e=t.interactivity.mouse.position;if(!e)return;const n=t.retina.attractModeDistance;this.processAttract(e,n,new i(e.x,e.y,n))}processAttract(t,e,a){const i=this.container,r=i.actualOptions.interactivity.modes.attract,c=i.particles.quadTree.query(a);for(const a of c){const{dx:i,dy:c,distance:l}=n(a.position,t),y=r.speed*r.factor,p=(u=o(1-l/e,r.easing)*y,h=0,d=r.maxSpeed,Math.min(Math.max(u,h),d)),v=s.create(0===l?y:i/l*p,0===l?y:c/l*p);a.position.subFrom(v)}var u,h,d}clickAttract(){const t=this.container;if(t.attract.finish||(t.attract.count||(t.attract.count=0),t.attract.count++,t.attract.count===t.particles.count&&(t.attract.finish=!0)),t.attract.clicking){const e=t.interactivity.mouse.clickPosition;if(!e)return;const n=t.retina.attractModeDistance;this.processAttract(e,n,new i(e.x,e.y,n))}else!1===t.attract.clicking&&(t.attract.particles=[])}}async function u(t){await t.addInteractor("externalAttract",(t=>new c(t)))}return e}()}));
@@ -1605,20 +1605,20 @@
1605
1605
  }
1606
1606
  }
1607
1607
  }
1608
- externalInteract(delta) {
1608
+ async externalInteract(delta) {
1609
1609
  for (const interactor of this.externalInteractors) {
1610
1610
  if (interactor.isEnabled()) {
1611
- interactor.interact(delta);
1611
+ await interactor.interact(delta);
1612
1612
  }
1613
1613
  }
1614
1614
  }
1615
- particlesInteract(particle, delta) {
1615
+ async particlesInteract(particle, delta) {
1616
1616
  for (const interactor of this.externalInteractors) {
1617
1617
  interactor.reset(particle);
1618
1618
  }
1619
1619
  for (const interactor of this.particleInteractors) {
1620
1620
  if (interactor.isEnabled(particle)) {
1621
- interactor.interact(particle, delta);
1621
+ await interactor.interact(particle, delta);
1622
1622
  }
1623
1623
  }
1624
1624
  }
@@ -4133,10 +4133,10 @@
4133
4133
  }
4134
4134
  container.pathGenerator.init(container);
4135
4135
  }
4136
- redraw() {
4136
+ async redraw() {
4137
4137
  this.clear();
4138
4138
  this.init();
4139
- this.draw({
4139
+ await this.draw({
4140
4140
  value: 0,
4141
4141
  factor: 0
4142
4142
  });
@@ -4161,7 +4161,7 @@
4161
4161
  remove(particle, group, override) {
4162
4162
  this.removeAt(this.array.indexOf(particle), undefined, group, override);
4163
4163
  }
4164
- update(delta) {
4164
+ async update(delta) {
4165
4165
  const container = this.container;
4166
4166
  const particlesToDelete = [];
4167
4167
  container.pathGenerator.update();
@@ -4195,23 +4195,23 @@
4195
4195
  for (const particle of particlesToDelete) {
4196
4196
  this.remove(particle);
4197
4197
  }
4198
- this.interactionManager.externalInteract(delta);
4198
+ await this.interactionManager.externalInteract(delta);
4199
4199
  for (const particle of container.particles.array) {
4200
4200
  for (const updater of this.updaters) {
4201
4201
  updater.update(particle, delta);
4202
4202
  }
4203
4203
  if (!particle.destroyed && !particle.spawning) {
4204
- this.interactionManager.particlesInteract(particle, delta);
4204
+ await this.interactionManager.particlesInteract(particle, delta);
4205
4205
  }
4206
4206
  }
4207
4207
  delete container.canvas.resizeFactor;
4208
4208
  }
4209
- draw(delta) {
4209
+ async draw(delta) {
4210
4210
  const container = this.container;
4211
4211
  container.canvas.clear();
4212
4212
  const canvasSize = this.container.canvas.size;
4213
4213
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4214
- this.update(delta);
4214
+ await this.update(delta);
4215
4215
  if (this.needsSort) {
4216
4216
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
4217
4217
  this.lastZIndex = this.zArray[this.zArray.length - 1].position.z;
@@ -4572,12 +4572,12 @@
4572
4572
  }
4573
4573
  draw(force) {
4574
4574
  let refreshTime = force;
4575
- this.drawAnimationFrame = animate()((timestamp => {
4575
+ this.drawAnimationFrame = animate()((async timestamp => {
4576
4576
  if (refreshTime) {
4577
4577
  this.lastFrameTime = undefined;
4578
4578
  refreshTime = false;
4579
4579
  }
4580
- this.drawer.nextFrame(timestamp);
4580
+ await this.drawer.nextFrame(timestamp);
4581
4581
  }));
4582
4582
  }
4583
4583
  getAnimationStatus() {
@@ -5033,7 +5033,7 @@
5033
5033
  const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = options.interactivity.events, divs = events.onDiv;
5034
5034
  return mouse.position && events.onHover.enable && Utils_isInArray("bounce", events.onHover.mode) || isDivModeEnabled("bounce", divs);
5035
5035
  }
5036
- interact() {
5036
+ async interact() {
5037
5037
  const container = this.container, options = container.actualOptions, events = options.interactivity.events, mouseMoveStatus = container.interactivity.status === Constants_Constants.mouseMoveEvent, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, divs = events.onDiv;
5038
5038
  if (mouseMoveStatus && hoverEnabled && Utils_isInArray("bounce", hoverMode)) {
5039
5039
  this.processMouseBounce();
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.41.0 by Matteo Bruni */
2
- !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o=e();for(var n in o)("object"==typeof exports?exports:t)[n]=o[n]}}(window,(function(){return function(){"use strict";var t={d:function(e,o){for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r:function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function o(t){return"number"==typeof t?t:function(t){const e=i(t);let o=n(t);return e===o&&(o=0),Math.random()*(e-o)+o}(t)}function n(t){return"number"==typeof t?t:t.min}function i(t){return"number"==typeof t?t:t.max}function s(t,e){if(t===e||void 0===e&&"number"==typeof t)return t;const o=n(t),r=i(t);return void 0!==e?{min:Math.min(o,e),max:Math.max(r,e)}:s(o,r)}function r(t){const e=t.random,{enable:n,minimumValue:i}="boolean"==typeof e?{enable:e,minimumValue:0}:e;return o(n?s(t.value,i):t.value)}function a(t,e){const o=t.x-e.x,n=t.y-e.y;return{dx:o,dy:n,distance:Math.sqrt(o*o+n*n)}}function c(t,e,o,n){return b.create(t.x*(o-n)/(o+n)+2*e.x*n/(o+n),t.y)}function u(t,e,o,n,i,s){const r={bounced:!1};return e.min>=n.min&&e.min<=n.max&&e.max>=n.min&&e.max<=n.max&&(t.max>=o.min&&t.max<=(o.max+o.min)/2&&i>0||t.min<=o.max&&t.min>(o.max+o.min)/2&&i<0)&&(r.velocity=i*-s,r.bounced=!0),r}function h(t,e){return t===e||e instanceof Array&&e.indexOf(t)>-1}function y(t,e){return{bottom:t.y+e,left:t.x-e,right:t.x+e,top:t.y-e}}function l(t,e){const o=t.selectors;if(o instanceof Array)for(const n of o)e(n,t);else e(o,t)}function f(t,e){const{x:o,y:n}=t.velocity.sub(e.velocity),[i,s]=[t.position,e.position],{dx:r,dy:u}=a(s,i);if(o*r+n*u>=0){const o=-Math.atan2(u,r),n=t.mass,i=e.mass,s=t.velocity.rotate(o),a=e.velocity.rotate(o),h=c(s,a,n,i),y=c(a,s,n,i),l=h.rotate(-o),f=y.rotate(-o);t.velocity.x=l.x*t.factor.x,t.velocity.y=l.y*t.factor.y,e.velocity.x=f.x*e.factor.x,e.velocity.y=f.y*e.factor.y}}function d(t,e){const o=y(t.getPosition(),t.getRadius()),n=u({min:o.left,max:o.right},{min:o.top,max:o.bottom},{min:e.left,max:e.right},{min:e.top,max:e.bottom},t.velocity.x,r(t.options.bounce.horizontal));n.bounced&&(void 0!==n.velocity&&(t.velocity.x=n.velocity),void 0!==n.position&&(t.position.x=n.position));const i=u({min:o.top,max:o.bottom},{min:o.left,max:o.right},{min:e.top,max:e.bottom},{min:e.left,max:e.right},t.velocity.y,r(t.options.bounce.vertical));i.bounced&&(void 0!==i.velocity&&(t.velocity.y=i.velocity),void 0!==i.position&&(t.position.y=i.position))}t.r(e),t.d(e,{loadExternalBounceInteraction:function(){return M}});class m{constructor(t,e){this.position={x:t,y:e}}}class x extends m{constructor(t,e,o){super(t,e),this.radius=o}contains(t){return e=t,o=this.position,a(e,o).distance<=this.radius;var e,o}intersects(t){const e=t,o=t,n=this.position,i=t.position,s=Math.abs(i.x-n.x),r=Math.abs(i.y-n.y),a=this.radius;if(void 0!==o.radius){return a+o.radius>Math.sqrt(s*s+r+r)}if(void 0!==e.size){const t=e.size.width,o=e.size.height,n=Math.pow(s-t,2)+Math.pow(r-o,2);return!(s>a+t||r>a+o)&&(s<=t||r<=o||n<=a*a)}return!1}}class p{}p.generatedAttribute="generated",p.randomColorValue="random",p.midColorValue="mid",p.touchEndEvent="touchend",p.mouseDownEvent="mousedown",p.mouseUpEvent="mouseup",p.mouseMoveEvent="mousemove",p.touchStartEvent="touchstart",p.touchMoveEvent="touchmove",p.mouseLeaveEvent="mouseleave",p.mouseOutEvent="mouseout",p.touchCancelEvent="touchcancel",p.resizeEvent="resize",p.visibilityChangeEvent="visibilitychange",p.noPolygonDataLoaded="No polygon data loaded.",p.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;class v extends m{constructor(t,e,o,n){super(t,e),this.size={height:n,width:o}}contains(t){const e=this.size.width,o=this.size.height,n=this.position;return t.x>=n.x&&t.x<=n.x+e&&t.y>=n.y&&t.y<=n.y+o}intersects(t){const e=t,o=t,n=this.size.width,i=this.size.height,s=this.position,r=t.position;if(void 0!==o.radius)return o.intersects(this);if(void 0!==e.size){const t=e.size,o=t.width,a=t.height;return r.x<s.x+n&&r.x+o>s.x&&r.y<s.y+i&&r.y+a>s.y}return!1}}class b{constructor(t,e){let o,n;if(void 0===e){if("number"==typeof t)throw new Error("tsParticles - Vector not initialized correctly");const e=t;[o,n]=[e.x,e.y]}else[o,n]=[t,e];this.x=o,this.y=n}static clone(t){return b.create(t.x,t.y)}static create(t,e){return new b(t,e)}static get origin(){return b.create(0,0)}get angle(){return Math.atan2(this.y,this.x)}set angle(t){this.updateFromAngle(t,this.length)}get length(){return Math.sqrt(this.x**2+this.y**2)}set length(t){this.updateFromAngle(this.angle,t)}add(t){return b.create(this.x+t.x,this.y+t.y)}addTo(t){this.x+=t.x,this.y+=t.y}sub(t){return b.create(this.x-t.x,this.y-t.y)}subFrom(t){this.x-=t.x,this.y-=t.y}mult(t){return b.create(this.x*t,this.y*t)}multTo(t){this.x*=t,this.y*=t}div(t){return b.create(this.x/t,this.y/t)}divTo(t){this.x/=t,this.y/=t}distanceTo(t){return this.sub(t).length}getLengthSq(){return this.x**2+this.y**2}distanceToSq(t){return this.sub(t).getLengthSq()}manhattanDistanceTo(t){return Math.abs(t.x-this.x)+Math.abs(t.y-this.y)}copy(){return b.clone(this)}setTo(t){this.x=t.x,this.y=t.y}rotate(t){return b.create(this.x*Math.cos(t)-this.y*Math.sin(t),this.x*Math.sin(t)+this.y*Math.cos(t))}updateFromAngle(t,e){this.x=Math.cos(t)*e,this.y=Math.sin(t)*e}}new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;new WeakMap;class g extends class{constructor(t){this.container=t,this.type=0}}{constructor(t){super(t)}isEnabled(){const t=this.container,e=t.actualOptions,o=t.interactivity.mouse,n=e.interactivity.events,i=n.onDiv;return o.position&&n.onHover.enable&&h("bounce",n.onHover.mode)||function(t,e){return e instanceof Array?!!e.find((e=>e.enable&&h(t,e.mode))):h(t,e.mode)}("bounce",i)}interact(){const t=this.container,e=t.actualOptions.interactivity.events,o=t.interactivity.status===p.mouseMoveEvent,n=e.onHover.enable,i=e.onHover.mode,s=e.onDiv;o&&n&&h("bounce",i)?this.processMouseBounce():function(t,e,o){if(e instanceof Array)for(const n of e){const e=n.mode;n.enable&&h(t,e)&&l(n,o)}else{const n=e.mode;e.enable&&h(t,n)&&l(e,o)}}("bounce",s,((t,e)=>this.singleSelectorBounce(t,e)))}reset(){}processMouseBounce(){const t=this.container,e=10*t.retina.pixelRatio,o=t.interactivity.mouse.position,n=t.retina.bounceModeDistance;o&&this.processBounce(o,n,new x(o.x,o.y,n+e))}singleSelectorBounce(t,e){const o=this.container,n=document.querySelectorAll(t);n.length&&n.forEach((t=>{const n=t,i=o.retina.pixelRatio,s={x:(n.offsetLeft+n.offsetWidth/2)*i,y:(n.offsetTop+n.offsetHeight/2)*i},r=n.offsetWidth/2*i,a=10*i,c="circle"===e.type?new x(s.x,s.y,r+a):new v(n.offsetLeft*i-a,n.offsetTop*i-a,n.offsetWidth*i+2*a,n.offsetHeight*i+2*a);this.processBounce(s,r,c)}))}processBounce(t,e,o){const n=this.container.particles.quadTree.query(o);for(const s of n)o instanceof x?f({position:(i=s).getPosition(),radius:i.getRadius(),mass:i.getMass(),velocity:i.velocity,factor:b.create(r(i.options.bounce.horizontal),r(i.options.bounce.vertical))},{position:t,radius:e,mass:e**2*Math.PI/2,velocity:b.origin,factor:b.origin}):o instanceof v&&d(s,y(t,e));var i}}async function M(t){await t.addInteractor("externalBounce",(t=>new g(t)))}return e}()}));
1
+ /*! tsParticles v1.41.1 by Matteo Bruni */
2
+ !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var o=e();for(var n in o)("object"==typeof exports?exports:t)[n]=o[n]}}(window,(function(){return function(){"use strict";var t={d:function(e,o){for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r:function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function o(t){return"number"==typeof t?t:function(t){const e=i(t);let o=n(t);return e===o&&(o=0),Math.random()*(e-o)+o}(t)}function n(t){return"number"==typeof t?t:t.min}function i(t){return"number"==typeof t?t:t.max}function s(t,e){if(t===e||void 0===e&&"number"==typeof t)return t;const o=n(t),r=i(t);return void 0!==e?{min:Math.min(o,e),max:Math.max(r,e)}:s(o,r)}function r(t){const e=t.random,{enable:n,minimumValue:i}="boolean"==typeof e?{enable:e,minimumValue:0}:e;return o(n?s(t.value,i):t.value)}function a(t,e){const o=t.x-e.x,n=t.y-e.y;return{dx:o,dy:n,distance:Math.sqrt(o*o+n*n)}}function c(t,e,o,n){return b.create(t.x*(o-n)/(o+n)+2*e.x*n/(o+n),t.y)}function u(t,e,o,n,i,s){const r={bounced:!1};return e.min>=n.min&&e.min<=n.max&&e.max>=n.min&&e.max<=n.max&&(t.max>=o.min&&t.max<=(o.max+o.min)/2&&i>0||t.min<=o.max&&t.min>(o.max+o.min)/2&&i<0)&&(r.velocity=i*-s,r.bounced=!0),r}function h(t,e){return t===e||e instanceof Array&&e.indexOf(t)>-1}function y(t,e){return{bottom:t.y+e,left:t.x-e,right:t.x+e,top:t.y-e}}function l(t,e){const o=t.selectors;if(o instanceof Array)for(const n of o)e(n,t);else e(o,t)}function f(t,e){const{x:o,y:n}=t.velocity.sub(e.velocity),[i,s]=[t.position,e.position],{dx:r,dy:u}=a(s,i);if(o*r+n*u>=0){const o=-Math.atan2(u,r),n=t.mass,i=e.mass,s=t.velocity.rotate(o),a=e.velocity.rotate(o),h=c(s,a,n,i),y=c(a,s,n,i),l=h.rotate(-o),f=y.rotate(-o);t.velocity.x=l.x*t.factor.x,t.velocity.y=l.y*t.factor.y,e.velocity.x=f.x*e.factor.x,e.velocity.y=f.y*e.factor.y}}function d(t,e){const o=y(t.getPosition(),t.getRadius()),n=u({min:o.left,max:o.right},{min:o.top,max:o.bottom},{min:e.left,max:e.right},{min:e.top,max:e.bottom},t.velocity.x,r(t.options.bounce.horizontal));n.bounced&&(void 0!==n.velocity&&(t.velocity.x=n.velocity),void 0!==n.position&&(t.position.x=n.position));const i=u({min:o.top,max:o.bottom},{min:o.left,max:o.right},{min:e.top,max:e.bottom},{min:e.left,max:e.right},t.velocity.y,r(t.options.bounce.vertical));i.bounced&&(void 0!==i.velocity&&(t.velocity.y=i.velocity),void 0!==i.position&&(t.position.y=i.position))}t.r(e),t.d(e,{loadExternalBounceInteraction:function(){return M}});class m{constructor(t,e){this.position={x:t,y:e}}}class x extends m{constructor(t,e,o){super(t,e),this.radius=o}contains(t){return e=t,o=this.position,a(e,o).distance<=this.radius;var e,o}intersects(t){const e=t,o=t,n=this.position,i=t.position,s=Math.abs(i.x-n.x),r=Math.abs(i.y-n.y),a=this.radius;if(void 0!==o.radius){return a+o.radius>Math.sqrt(s*s+r+r)}if(void 0!==e.size){const t=e.size.width,o=e.size.height,n=Math.pow(s-t,2)+Math.pow(r-o,2);return!(s>a+t||r>a+o)&&(s<=t||r<=o||n<=a*a)}return!1}}class p{}p.generatedAttribute="generated",p.randomColorValue="random",p.midColorValue="mid",p.touchEndEvent="touchend",p.mouseDownEvent="mousedown",p.mouseUpEvent="mouseup",p.mouseMoveEvent="mousemove",p.touchStartEvent="touchstart",p.touchMoveEvent="touchmove",p.mouseLeaveEvent="mouseleave",p.mouseOutEvent="mouseout",p.touchCancelEvent="touchcancel",p.resizeEvent="resize",p.visibilityChangeEvent="visibilitychange",p.noPolygonDataLoaded="No polygon data loaded.",p.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;class v extends m{constructor(t,e,o,n){super(t,e),this.size={height:n,width:o}}contains(t){const e=this.size.width,o=this.size.height,n=this.position;return t.x>=n.x&&t.x<=n.x+e&&t.y>=n.y&&t.y<=n.y+o}intersects(t){const e=t,o=t,n=this.size.width,i=this.size.height,s=this.position,r=t.position;if(void 0!==o.radius)return o.intersects(this);if(void 0!==e.size){const t=e.size,o=t.width,a=t.height;return r.x<s.x+n&&r.x+o>s.x&&r.y<s.y+i&&r.y+a>s.y}return!1}}class b{constructor(t,e){let o,n;if(void 0===e){if("number"==typeof t)throw new Error("tsParticles - Vector not initialized correctly");const e=t;[o,n]=[e.x,e.y]}else[o,n]=[t,e];this.x=o,this.y=n}static clone(t){return b.create(t.x,t.y)}static create(t,e){return new b(t,e)}static get origin(){return b.create(0,0)}get angle(){return Math.atan2(this.y,this.x)}set angle(t){this.updateFromAngle(t,this.length)}get length(){return Math.sqrt(this.x**2+this.y**2)}set length(t){this.updateFromAngle(this.angle,t)}add(t){return b.create(this.x+t.x,this.y+t.y)}addTo(t){this.x+=t.x,this.y+=t.y}sub(t){return b.create(this.x-t.x,this.y-t.y)}subFrom(t){this.x-=t.x,this.y-=t.y}mult(t){return b.create(this.x*t,this.y*t)}multTo(t){this.x*=t,this.y*=t}div(t){return b.create(this.x/t,this.y/t)}divTo(t){this.x/=t,this.y/=t}distanceTo(t){return this.sub(t).length}getLengthSq(){return this.x**2+this.y**2}distanceToSq(t){return this.sub(t).getLengthSq()}manhattanDistanceTo(t){return Math.abs(t.x-this.x)+Math.abs(t.y-this.y)}copy(){return b.clone(this)}setTo(t){this.x=t.x,this.y=t.y}rotate(t){return b.create(this.x*Math.cos(t)-this.y*Math.sin(t),this.x*Math.sin(t)+this.y*Math.cos(t))}updateFromAngle(t,e){this.x=Math.cos(t)*e,this.y=Math.sin(t)*e}}new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;new WeakMap;class g extends class{constructor(t){this.container=t,this.type=0}}{constructor(t){super(t)}isEnabled(){const t=this.container,e=t.actualOptions,o=t.interactivity.mouse,n=e.interactivity.events,i=n.onDiv;return o.position&&n.onHover.enable&&h("bounce",n.onHover.mode)||function(t,e){return e instanceof Array?!!e.find((e=>e.enable&&h(t,e.mode))):h(t,e.mode)}("bounce",i)}async interact(){const t=this.container,e=t.actualOptions.interactivity.events,o=t.interactivity.status===p.mouseMoveEvent,n=e.onHover.enable,i=e.onHover.mode,s=e.onDiv;o&&n&&h("bounce",i)?this.processMouseBounce():function(t,e,o){if(e instanceof Array)for(const n of e){const e=n.mode;n.enable&&h(t,e)&&l(n,o)}else{const n=e.mode;e.enable&&h(t,n)&&l(e,o)}}("bounce",s,((t,e)=>this.singleSelectorBounce(t,e)))}reset(){}processMouseBounce(){const t=this.container,e=10*t.retina.pixelRatio,o=t.interactivity.mouse.position,n=t.retina.bounceModeDistance;o&&this.processBounce(o,n,new x(o.x,o.y,n+e))}singleSelectorBounce(t,e){const o=this.container,n=document.querySelectorAll(t);n.length&&n.forEach((t=>{const n=t,i=o.retina.pixelRatio,s={x:(n.offsetLeft+n.offsetWidth/2)*i,y:(n.offsetTop+n.offsetHeight/2)*i},r=n.offsetWidth/2*i,a=10*i,c="circle"===e.type?new x(s.x,s.y,r+a):new v(n.offsetLeft*i-a,n.offsetTop*i-a,n.offsetWidth*i+2*a,n.offsetHeight*i+2*a);this.processBounce(s,r,c)}))}processBounce(t,e,o){const n=this.container.particles.quadTree.query(o);for(const s of n)o instanceof x?f({position:(i=s).getPosition(),radius:i.getRadius(),mass:i.getMass(),velocity:i.velocity,factor:b.create(r(i.options.bounce.horizontal),r(i.options.bounce.vertical))},{position:t,radius:e,mass:e**2*Math.PI/2,velocity:b.origin,factor:b.origin}):o instanceof v&&d(s,y(t,e));var i}}async function M(t){await t.addInteractor("externalBounce",(t=>new g(t)))}return e}()}));
@@ -1605,20 +1605,20 @@
1605
1605
  }
1606
1606
  }
1607
1607
  }
1608
- externalInteract(delta) {
1608
+ async externalInteract(delta) {
1609
1609
  for (const interactor of this.externalInteractors) {
1610
1610
  if (interactor.isEnabled()) {
1611
- interactor.interact(delta);
1611
+ await interactor.interact(delta);
1612
1612
  }
1613
1613
  }
1614
1614
  }
1615
- particlesInteract(particle, delta) {
1615
+ async particlesInteract(particle, delta) {
1616
1616
  for (const interactor of this.externalInteractors) {
1617
1617
  interactor.reset(particle);
1618
1618
  }
1619
1619
  for (const interactor of this.particleInteractors) {
1620
1620
  if (interactor.isEnabled(particle)) {
1621
- interactor.interact(particle, delta);
1621
+ await interactor.interact(particle, delta);
1622
1622
  }
1623
1623
  }
1624
1624
  }
@@ -4042,10 +4042,10 @@
4042
4042
  }
4043
4043
  container.pathGenerator.init(container);
4044
4044
  }
4045
- redraw() {
4045
+ async redraw() {
4046
4046
  this.clear();
4047
4047
  this.init();
4048
- this.draw({
4048
+ await this.draw({
4049
4049
  value: 0,
4050
4050
  factor: 0
4051
4051
  });
@@ -4070,7 +4070,7 @@
4070
4070
  remove(particle, group, override) {
4071
4071
  this.removeAt(this.array.indexOf(particle), undefined, group, override);
4072
4072
  }
4073
- update(delta) {
4073
+ async update(delta) {
4074
4074
  const container = this.container;
4075
4075
  const particlesToDelete = [];
4076
4076
  container.pathGenerator.update();
@@ -4104,23 +4104,23 @@
4104
4104
  for (const particle of particlesToDelete) {
4105
4105
  this.remove(particle);
4106
4106
  }
4107
- this.interactionManager.externalInteract(delta);
4107
+ await this.interactionManager.externalInteract(delta);
4108
4108
  for (const particle of container.particles.array) {
4109
4109
  for (const updater of this.updaters) {
4110
4110
  updater.update(particle, delta);
4111
4111
  }
4112
4112
  if (!particle.destroyed && !particle.spawning) {
4113
- this.interactionManager.particlesInteract(particle, delta);
4113
+ await this.interactionManager.particlesInteract(particle, delta);
4114
4114
  }
4115
4115
  }
4116
4116
  delete container.canvas.resizeFactor;
4117
4117
  }
4118
- draw(delta) {
4118
+ async draw(delta) {
4119
4119
  const container = this.container;
4120
4120
  container.canvas.clear();
4121
4121
  const canvasSize = this.container.canvas.size;
4122
4122
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4123
- this.update(delta);
4123
+ await this.update(delta);
4124
4124
  if (this.needsSort) {
4125
4125
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
4126
4126
  this.lastZIndex = this.zArray[this.zArray.length - 1].position.z;
@@ -4481,12 +4481,12 @@
4481
4481
  }
4482
4482
  draw(force) {
4483
4483
  let refreshTime = force;
4484
- this.drawAnimationFrame = animate()((timestamp => {
4484
+ this.drawAnimationFrame = animate()((async timestamp => {
4485
4485
  if (refreshTime) {
4486
4486
  this.lastFrameTime = undefined;
4487
4487
  refreshTime = false;
4488
4488
  }
4489
- this.drawer.nextFrame(timestamp);
4489
+ await this.drawer.nextFrame(timestamp);
4490
4490
  }));
4491
4491
  }
4492
4492
  getAnimationStatus() {
@@ -4965,7 +4965,7 @@
4965
4965
  delete particle.bubble.radius;
4966
4966
  delete particle.bubble.color;
4967
4967
  }
4968
- interact() {
4968
+ async interact() {
4969
4969
  const options = this.container.actualOptions, events = options.interactivity.events, onHover = events.onHover, onClick = events.onClick, hoverEnabled = onHover.enable, hoverMode = onHover.mode, clickEnabled = onClick.enable, clickMode = onClick.mode, divs = events.onDiv;
4970
4970
  if (hoverEnabled && Utils_isInArray("bubble", hoverMode)) {
4971
4971
  this.hoverBubble();
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.41.0 by Matteo Bruni */
2
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var o=t();for(var n in o)("object"==typeof exports?exports:e)[n]=o[n]}}(window,(function(){return function(){"use strict";var e={d:function(t,o){for(var n in o)e.o(o,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:o[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function o(e,t,o){return Math.min(Math.max(e,t),o)}function n(e,t,o,n){return Math.floor((e*o+t*n)/(o+n))}function i(e){const t=s(e);let o=r(e);return t===o&&(o=0),Math.random()*(t-o)+o}function r(e){return"number"==typeof e?e:e.min}function s(e){return"number"==typeof e?e:e.max}function a(e,t){if(e===t||void 0===t&&"number"==typeof e)return e;const o=r(e),n=s(e);return void 0!==t?{min:Math.min(o,t),max:Math.max(n,t)}:a(o,n)}function l(e,t){return function(e,t){const o=e.x-t.x,n=e.y-t.y;return{dx:o,dy:n,distance:Math.sqrt(o*o+n*n)}}(e,t).distance}function u(e,t){if(t instanceof Array){for(const o of t)if(e.matches(o))return!0;return!1}return e.matches(t)}function b(e,t){return e===t||t instanceof Array&&t.indexOf(e)>-1}function c(e,t,o=!0){return e[void 0!==t&&o?t%e.length:function(e){return Math.floor(Math.random()*e.length)}(e)]}function d(e,t){const o=e.selectors;if(o instanceof Array)for(const n of o)t(n,e);else t(o,e)}function f(e,t){if(t&&e)return e instanceof Array?e.find((e=>u(t,e.selectors))):u(t,e.selectors)?e:void 0}function v(e,t,o){let n=o;return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function h(e){if(e.startsWith("rgb")){const t=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.]+)\s*)?\)/i.exec(e);return t?{a:t.length>4?parseFloat(t[5]):1,b:parseInt(t[3],10),g:parseInt(t[2],10),r:parseInt(t[1],10)}:void 0}if(e.startsWith("hsl")){const t=/hsla?\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i.exec(e);return t?function(e){const t=g(e);return{a:e.a,b:t.b,g:t.g,r:t.r}}({a:t.length>4?parseFloat(t[5]):1,h:parseInt(t[1],10),l:parseInt(t[3],10),s:parseInt(t[2],10)}):void 0}if(e.startsWith("hsv")){const t=/hsva?\(\s*(\d+)°\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i.exec(e);return t?function(e){const t=m(e);return{a:e.a,b:t.b,g:t.g,r:t.r}}({a:t.length>4?parseFloat(t[5]):1,h:parseInt(t[1],10),s:parseInt(t[2],10),v:parseInt(t[3],10)}):void 0}{const t=/^#?([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i,o=e.replace(t,((e,t,o,n,i)=>t+t+o+o+n+n+(void 0!==i?i+i:""))),n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i.exec(o);return n?{a:void 0!==n[4]?parseInt(n[4],16)/255:1,b:parseInt(n[3],16),g:parseInt(n[2],16),r:parseInt(n[1],16)}:void 0}}function p(e,t,o=!0){var n,i,r;if(void 0===e)return;const s="string"==typeof e?{value:e}:e;let a;if("string"==typeof s.value)a=s.value===O.randomColorValue?M():function(e){return h(e)}(s.value);else if(s.value instanceof Array){a=p({value:c(s.value,t,o)})}else{const e=s.value,t=null!==(n=e.rgb)&&void 0!==n?n:s.value;if(void 0!==t.r)a=t;else{const t=null!==(i=e.hsl)&&void 0!==i?i:s.value;if(void 0!==t.h&&void 0!==t.l)a=g(t);else{const t=null!==(r=e.hsv)&&void 0!==r?r:s.value;void 0!==t.h&&void 0!==t.v&&(a=m(t))}}}return a}function y(e){const t=e.r/255,o=e.g/255,n=e.b/255,i=Math.max(t,o,n),r=Math.min(t,o,n),s={h:0,l:(i+r)/2,s:0};return i!=r&&(s.s=s.l<.5?(i-r)/(i+r):(i-r)/(2-i-r),s.h=t===i?(o-n)/(i-r):s.h=o===i?2+(n-t)/(i-r):4+(t-o)/(i-r)),s.l*=100,s.s*=100,s.h*=60,s.h<0&&(s.h+=360),s}function g(e){const t={b:0,g:0,r:0},o={h:e.h/360,l:e.l/100,s:e.s/100};if(0===o.s)t.b=o.l,t.g=o.l,t.r=o.l;else{const e=o.l<.5?o.l*(1+o.s):o.l+o.s-o.l*o.s,n=2*o.l-e;t.r=v(n,e,o.h+1/3),t.g=v(n,e,o.h),t.b=v(n,e,o.h-1/3)}return t.r=Math.floor(255*t.r),t.g=Math.floor(255*t.g),t.b=Math.floor(255*t.b),t}function m(e){const t={b:0,g:0,r:0},o=e.h/60,n=e.s/100,i=e.v/100,r=i*n,s=r*(1-Math.abs(o%2-1));let a;if(o>=0&&o<=1?a={r:r,g:s,b:0}:o>1&&o<=2?a={r:s,g:r,b:0}:o>2&&o<=3?a={r:0,g:r,b:s}:o>3&&o<=4?a={r:0,g:s,b:r}:o>4&&o<=5?a={r:s,g:0,b:r}:o>5&&o<=6&&(a={r:r,g:0,b:s}),a){const e=i-r;t.r=Math.floor(255*(a.r+e)),t.g=Math.floor(255*(a.g+e)),t.b=Math.floor(255*(a.b+e))}return t}function M(e){const t=null!=e?e:0;return{b:Math.floor(i(a(t,256))),g:Math.floor(i(a(t,256))),r:Math.floor(i(a(t,256)))}}function x(e,t,o,i){let r=e,s=t;return void 0===r.r&&(r=g(e)),void 0===s.r&&(s=g(t)),{b:n(r.b,s.b,o,i),g:n(r.g,s.g,o,i),r:n(r.r,s.r,o,i)}}e.r(t),e.d(t,{loadExternalBubbleInteraction:function(){return B}});class z{constructor(e,t){this.position={x:e,y:t}}}class w extends z{constructor(e,t,o){super(e,t),this.radius=o}contains(e){return l(e,this.position)<=this.radius}intersects(e){const t=e,o=e,n=this.position,i=e.position,r=Math.abs(i.x-n.x),s=Math.abs(i.y-n.y),a=this.radius;if(void 0!==o.radius){return a+o.radius>Math.sqrt(r*r+s+s)}if(void 0!==t.size){const e=t.size.width,o=t.size.height,n=Math.pow(r-e,2)+Math.pow(s-o,2);return!(r>a+e||s>a+o)&&(r<=e||s<=o||n<=a*a)}return!1}}class O{}O.generatedAttribute="generated",O.randomColorValue="random",O.midColorValue="mid",O.touchEndEvent="touchend",O.mouseDownEvent="mousedown",O.mouseUpEvent="mouseup",O.mouseMoveEvent="mousemove",O.touchStartEvent="touchstart",O.touchMoveEvent="touchmove",O.mouseLeaveEvent="mouseleave",O.mouseOutEvent="mouseout",O.touchCancelEvent="touchcancel",O.resizeEvent="resize",O.visibilityChangeEvent="visibilitychange",O.noPolygonDataLoaded="No polygon data loaded.",O.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;class E extends z{constructor(e,t,o,n){super(e,t),this.size={height:n,width:o}}contains(e){const t=this.size.width,o=this.size.height,n=this.position;return e.x>=n.x&&e.x<=n.x+t&&e.y>=n.y&&e.y<=n.y+o}intersects(e){const t=e,o=e,n=this.size.width,i=this.size.height,r=this.position,s=e.position;if(void 0!==o.radius)return o.intersects(this);if(void 0!==t.size){const e=t.size,o=e.width,a=e.height;return s.x<r.x+n&&s.x+o>r.x&&s.y<r.y+i&&s.y+a>r.y}return!1}}new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;function C(e,t,n,i){if(t>=n){return o(e+(t-n)*i,e,t)}if(t<n){return o(e-(n-t)*i,t,e)}}new WeakMap;class k extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e)}isEnabled(){const e=this.container,t=e.actualOptions,o=e.interactivity.mouse,n=t.interactivity.events,i=function(e,t){return t instanceof Array?!!t.find((t=>t.enable&&b(e,t.mode))):b(e,t.mode)}("bubble",n.onDiv);if(!(i||n.onHover.enable&&o.position||n.onClick.enable&&o.clickPosition))return!1;const r=n.onHover.mode,s=n.onClick.mode;return b("bubble",r)||b("bubble",s)||i}reset(e,t){e.bubble.inRange&&!t||(delete e.bubble.div,delete e.bubble.opacity,delete e.bubble.radius,delete e.bubble.color)}interact(){const e=this.container.actualOptions.interactivity.events,t=e.onHover,o=e.onClick,n=t.enable,i=t.mode,r=o.enable,s=o.mode,a=e.onDiv;n&&b("bubble",i)?this.hoverBubble():r&&b("bubble",s)?this.clickBubble():function(e,t,o){if(t instanceof Array)for(const n of t){const t=n.mode;n.enable&&b(e,t)&&d(n,o)}else{const n=t.mode;t.enable&&b(e,n)&&d(t,o)}}("bubble",a,((e,t)=>this.singleSelectorHover(e,t)))}singleSelectorHover(e,t){const o=this.container,n=document.querySelectorAll(e);n.length&&n.forEach((e=>{const n=e,i=o.retina.pixelRatio,r={x:(n.offsetLeft+n.offsetWidth/2)*i,y:(n.offsetTop+n.offsetHeight/2)*i},s=n.offsetWidth/2*i,a="circle"===t.type?new w(r.x,r.y,s):new E(n.offsetLeft*i,n.offsetTop*i,n.offsetWidth*i,n.offsetHeight*i),l=o.particles.quadTree.query(a);for(const e of l){if(!a.contains(e.getPosition()))continue;e.bubble.inRange=!0;const t=f(o.actualOptions.interactivity.modes.bubble.divs,n);e.bubble.div&&e.bubble.div===n||(this.reset(e,!0),e.bubble.div=n),this.hoverBubbleSize(e,1,t),this.hoverBubbleOpacity(e,1,t),this.hoverBubbleColor(e,1,t)}}))}process(e,t,o,n){const i=this.container,r=n.bubbleObj.optValue;if(void 0===r)return;const s=i.actualOptions.interactivity.modes.bubble.duration,a=i.retina.bubbleModeDistance,l=n.particlesObj.optValue,u=n.bubbleObj.value,b=n.particlesObj.value||0,c=n.type;if(r!==l)if(i.bubble.durationEnd)u&&("size"===c&&delete e.bubble.radius,"opacity"===c&&delete e.bubble.opacity);else if(t<=a){if((null!=u?u:b)!==r){const t=b-o*(b-r)/s;"size"===c&&(e.bubble.radius=t),"opacity"===c&&(e.bubble.opacity=t)}}else"size"===c&&delete e.bubble.radius,"opacity"===c&&delete e.bubble.opacity}clickBubble(){var e,t;const o=this.container,n=o.actualOptions,i=o.interactivity.mouse.clickPosition;if(!i)return;const r=o.retina.bubbleModeDistance,a=o.particles.quadTree.queryCircle(i,r);for(const r of a){if(!o.bubble.clicking)continue;r.bubble.inRange=!o.bubble.durationEnd;const a=l(r.getPosition(),i),u=((new Date).getTime()-(o.interactivity.mouse.clickTime||0))/1e3;u>n.interactivity.modes.bubble.duration&&(o.bubble.durationEnd=!0),u>2*n.interactivity.modes.bubble.duration&&(o.bubble.clicking=!1,o.bubble.durationEnd=!1);const b={bubbleObj:{optValue:o.retina.bubbleModeSize,value:r.bubble.radius},particlesObj:{optValue:s(r.options.size.value)*o.retina.pixelRatio,value:r.size.value},type:"size"};this.process(r,a,u,b);const c={bubbleObj:{optValue:n.interactivity.modes.bubble.opacity,value:r.bubble.opacity},particlesObj:{optValue:s(r.options.opacity.value),value:null!==(t=null===(e=r.opacity)||void 0===e?void 0:e.value)&&void 0!==t?t:1},type:"opacity"};this.process(r,a,u,c),o.bubble.durationEnd?delete r.bubble.color:a<=o.retina.bubbleModeDistance?this.hoverBubbleColor(r,a):delete r.bubble.color}}hoverBubble(){const e=this.container,t=e.interactivity.mouse.position;if(void 0===t)return;const o=e.retina.bubbleModeDistance,n=e.particles.quadTree.queryCircle(t,o);for(const i of n){i.bubble.inRange=!0;const n=l(i.getPosition(),t),r=1-n/o;n<=o?r>=0&&e.interactivity.status===O.mouseMoveEvent&&(this.hoverBubbleSize(i,r),this.hoverBubbleOpacity(i,r),this.hoverBubbleColor(i,r)):this.reset(i),e.interactivity.status===O.mouseLeaveEvent&&this.reset(i)}}hoverBubbleSize(e,t,o){const n=this.container,i=(null==o?void 0:o.size)?o.size*n.retina.pixelRatio:n.retina.bubbleModeSize;if(void 0===i)return;const r=s(e.options.size.value)*n.retina.pixelRatio,a=C(e.size.value,i,r,t);void 0!==a&&(e.bubble.radius=a)}hoverBubbleOpacity(e,t,o){var n,i,r;const a=this.container.actualOptions,l=null!==(n=null==o?void 0:o.opacity)&&void 0!==n?n:a.interactivity.modes.bubble.opacity;if(!l)return;const u=e.options.opacity.value,b=C(null!==(r=null===(i=e.opacity)||void 0===i?void 0:i.value)&&void 0!==r?r:1,l,s(u),t);void 0!==b&&(e.bubble.opacity=b)}hoverBubbleColor(e,t,o){const n=this.container.actualOptions,i=null!=o?o:n.interactivity.modes.bubble;if(!e.bubble.finalColor){const t=i.color;if(!t)return;const o=t instanceof Array?c(t):t;e.bubble.finalColor=function(e,t,o=!0){const n=p(e,t,o);return void 0!==n?y(n):void 0}(o)}if(e.bubble.finalColor)if(i.mix){e.bubble.color=void 0;const o=e.getFillColor();e.bubble.color=o?y(x(o,e.bubble.finalColor,1-t,t)):e.bubble.finalColor}else e.bubble.color=e.bubble.finalColor}}async function B(e){await e.addInteractor("externalBubble",(e=>new k(e)))}return t}()}));
1
+ /*! tsParticles v1.41.1 by Matteo Bruni */
2
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var o=t();for(var n in o)("object"==typeof exports?exports:e)[n]=o[n]}}(window,(function(){return function(){"use strict";var e={d:function(t,o){for(var n in o)e.o(o,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:o[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function o(e,t,o){return Math.min(Math.max(e,t),o)}function n(e,t,o,n){return Math.floor((e*o+t*n)/(o+n))}function i(e){const t=s(e);let o=r(e);return t===o&&(o=0),Math.random()*(t-o)+o}function r(e){return"number"==typeof e?e:e.min}function s(e){return"number"==typeof e?e:e.max}function a(e,t){if(e===t||void 0===t&&"number"==typeof e)return e;const o=r(e),n=s(e);return void 0!==t?{min:Math.min(o,t),max:Math.max(n,t)}:a(o,n)}function l(e,t){return function(e,t){const o=e.x-t.x,n=e.y-t.y;return{dx:o,dy:n,distance:Math.sqrt(o*o+n*n)}}(e,t).distance}function u(e,t){if(t instanceof Array){for(const o of t)if(e.matches(o))return!0;return!1}return e.matches(t)}function b(e,t){return e===t||t instanceof Array&&t.indexOf(e)>-1}function c(e,t,o=!0){return e[void 0!==t&&o?t%e.length:function(e){return Math.floor(Math.random()*e.length)}(e)]}function d(e,t){const o=e.selectors;if(o instanceof Array)for(const n of o)t(n,e);else t(o,e)}function f(e,t){if(t&&e)return e instanceof Array?e.find((e=>u(t,e.selectors))):u(t,e.selectors)?e:void 0}function v(e,t,o){let n=o;return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function h(e){if(e.startsWith("rgb")){const t=/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.]+)\s*)?\)/i.exec(e);return t?{a:t.length>4?parseFloat(t[5]):1,b:parseInt(t[3],10),g:parseInt(t[2],10),r:parseInt(t[1],10)}:void 0}if(e.startsWith("hsl")){const t=/hsla?\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i.exec(e);return t?function(e){const t=g(e);return{a:e.a,b:t.b,g:t.g,r:t.r}}({a:t.length>4?parseFloat(t[5]):1,h:parseInt(t[1],10),l:parseInt(t[3],10),s:parseInt(t[2],10)}):void 0}if(e.startsWith("hsv")){const t=/hsva?\(\s*(\d+)°\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.]+)\s*)?\)/i.exec(e);return t?function(e){const t=m(e);return{a:e.a,b:t.b,g:t.g,r:t.r}}({a:t.length>4?parseFloat(t[5]):1,h:parseInt(t[1],10),s:parseInt(t[2],10),v:parseInt(t[3],10)}):void 0}{const t=/^#?([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i,o=e.replace(t,((e,t,o,n,i)=>t+t+o+o+n+n+(void 0!==i?i+i:""))),n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i.exec(o);return n?{a:void 0!==n[4]?parseInt(n[4],16)/255:1,b:parseInt(n[3],16),g:parseInt(n[2],16),r:parseInt(n[1],16)}:void 0}}function p(e,t,o=!0){var n,i,r;if(void 0===e)return;const s="string"==typeof e?{value:e}:e;let a;if("string"==typeof s.value)a=s.value===O.randomColorValue?M():function(e){return h(e)}(s.value);else if(s.value instanceof Array){a=p({value:c(s.value,t,o)})}else{const e=s.value,t=null!==(n=e.rgb)&&void 0!==n?n:s.value;if(void 0!==t.r)a=t;else{const t=null!==(i=e.hsl)&&void 0!==i?i:s.value;if(void 0!==t.h&&void 0!==t.l)a=g(t);else{const t=null!==(r=e.hsv)&&void 0!==r?r:s.value;void 0!==t.h&&void 0!==t.v&&(a=m(t))}}}return a}function y(e){const t=e.r/255,o=e.g/255,n=e.b/255,i=Math.max(t,o,n),r=Math.min(t,o,n),s={h:0,l:(i+r)/2,s:0};return i!=r&&(s.s=s.l<.5?(i-r)/(i+r):(i-r)/(2-i-r),s.h=t===i?(o-n)/(i-r):s.h=o===i?2+(n-t)/(i-r):4+(t-o)/(i-r)),s.l*=100,s.s*=100,s.h*=60,s.h<0&&(s.h+=360),s}function g(e){const t={b:0,g:0,r:0},o={h:e.h/360,l:e.l/100,s:e.s/100};if(0===o.s)t.b=o.l,t.g=o.l,t.r=o.l;else{const e=o.l<.5?o.l*(1+o.s):o.l+o.s-o.l*o.s,n=2*o.l-e;t.r=v(n,e,o.h+1/3),t.g=v(n,e,o.h),t.b=v(n,e,o.h-1/3)}return t.r=Math.floor(255*t.r),t.g=Math.floor(255*t.g),t.b=Math.floor(255*t.b),t}function m(e){const t={b:0,g:0,r:0},o=e.h/60,n=e.s/100,i=e.v/100,r=i*n,s=r*(1-Math.abs(o%2-1));let a;if(o>=0&&o<=1?a={r:r,g:s,b:0}:o>1&&o<=2?a={r:s,g:r,b:0}:o>2&&o<=3?a={r:0,g:r,b:s}:o>3&&o<=4?a={r:0,g:s,b:r}:o>4&&o<=5?a={r:s,g:0,b:r}:o>5&&o<=6&&(a={r:r,g:0,b:s}),a){const e=i-r;t.r=Math.floor(255*(a.r+e)),t.g=Math.floor(255*(a.g+e)),t.b=Math.floor(255*(a.b+e))}return t}function M(e){const t=null!=e?e:0;return{b:Math.floor(i(a(t,256))),g:Math.floor(i(a(t,256))),r:Math.floor(i(a(t,256)))}}function x(e,t,o,i){let r=e,s=t;return void 0===r.r&&(r=g(e)),void 0===s.r&&(s=g(t)),{b:n(r.b,s.b,o,i),g:n(r.g,s.g,o,i),r:n(r.r,s.r,o,i)}}e.r(t),e.d(t,{loadExternalBubbleInteraction:function(){return B}});class z{constructor(e,t){this.position={x:e,y:t}}}class w extends z{constructor(e,t,o){super(e,t),this.radius=o}contains(e){return l(e,this.position)<=this.radius}intersects(e){const t=e,o=e,n=this.position,i=e.position,r=Math.abs(i.x-n.x),s=Math.abs(i.y-n.y),a=this.radius;if(void 0!==o.radius){return a+o.radius>Math.sqrt(r*r+s+s)}if(void 0!==t.size){const e=t.size.width,o=t.size.height,n=Math.pow(r-e,2)+Math.pow(s-o,2);return!(r>a+e||s>a+o)&&(r<=e||s<=o||n<=a*a)}return!1}}class O{}O.generatedAttribute="generated",O.randomColorValue="random",O.midColorValue="mid",O.touchEndEvent="touchend",O.mouseDownEvent="mousedown",O.mouseUpEvent="mouseup",O.mouseMoveEvent="mousemove",O.touchStartEvent="touchstart",O.touchMoveEvent="touchmove",O.mouseLeaveEvent="mouseleave",O.mouseOutEvent="mouseout",O.touchCancelEvent="touchcancel",O.resizeEvent="resize",O.visibilityChangeEvent="visibilitychange",O.noPolygonDataLoaded="No polygon data loaded.",O.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;class E extends z{constructor(e,t,o,n){super(e,t),this.size={height:n,width:o}}contains(e){const t=this.size.width,o=this.size.height,n=this.position;return e.x>=n.x&&e.x<=n.x+t&&e.y>=n.y&&e.y<=n.y+o}intersects(e){const t=e,o=e,n=this.size.width,i=this.size.height,r=this.position,s=e.position;if(void 0!==o.radius)return o.intersects(this);if(void 0!==t.size){const e=t.size,o=e.width,a=e.height;return s.x<r.x+n&&s.x+o>r.x&&s.y<r.y+i&&s.y+a>r.y}return!1}}new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;function C(e,t,n,i){if(t>=n){return o(e+(t-n)*i,e,t)}if(t<n){return o(e-(n-t)*i,t,e)}}new WeakMap;class k extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e)}isEnabled(){const e=this.container,t=e.actualOptions,o=e.interactivity.mouse,n=t.interactivity.events,i=function(e,t){return t instanceof Array?!!t.find((t=>t.enable&&b(e,t.mode))):b(e,t.mode)}("bubble",n.onDiv);if(!(i||n.onHover.enable&&o.position||n.onClick.enable&&o.clickPosition))return!1;const r=n.onHover.mode,s=n.onClick.mode;return b("bubble",r)||b("bubble",s)||i}reset(e,t){e.bubble.inRange&&!t||(delete e.bubble.div,delete e.bubble.opacity,delete e.bubble.radius,delete e.bubble.color)}async interact(){const e=this.container.actualOptions.interactivity.events,t=e.onHover,o=e.onClick,n=t.enable,i=t.mode,r=o.enable,s=o.mode,a=e.onDiv;n&&b("bubble",i)?this.hoverBubble():r&&b("bubble",s)?this.clickBubble():function(e,t,o){if(t instanceof Array)for(const n of t){const t=n.mode;n.enable&&b(e,t)&&d(n,o)}else{const n=t.mode;t.enable&&b(e,n)&&d(t,o)}}("bubble",a,((e,t)=>this.singleSelectorHover(e,t)))}singleSelectorHover(e,t){const o=this.container,n=document.querySelectorAll(e);n.length&&n.forEach((e=>{const n=e,i=o.retina.pixelRatio,r={x:(n.offsetLeft+n.offsetWidth/2)*i,y:(n.offsetTop+n.offsetHeight/2)*i},s=n.offsetWidth/2*i,a="circle"===t.type?new w(r.x,r.y,s):new E(n.offsetLeft*i,n.offsetTop*i,n.offsetWidth*i,n.offsetHeight*i),l=o.particles.quadTree.query(a);for(const e of l){if(!a.contains(e.getPosition()))continue;e.bubble.inRange=!0;const t=f(o.actualOptions.interactivity.modes.bubble.divs,n);e.bubble.div&&e.bubble.div===n||(this.reset(e,!0),e.bubble.div=n),this.hoverBubbleSize(e,1,t),this.hoverBubbleOpacity(e,1,t),this.hoverBubbleColor(e,1,t)}}))}process(e,t,o,n){const i=this.container,r=n.bubbleObj.optValue;if(void 0===r)return;const s=i.actualOptions.interactivity.modes.bubble.duration,a=i.retina.bubbleModeDistance,l=n.particlesObj.optValue,u=n.bubbleObj.value,b=n.particlesObj.value||0,c=n.type;if(r!==l)if(i.bubble.durationEnd)u&&("size"===c&&delete e.bubble.radius,"opacity"===c&&delete e.bubble.opacity);else if(t<=a){if((null!=u?u:b)!==r){const t=b-o*(b-r)/s;"size"===c&&(e.bubble.radius=t),"opacity"===c&&(e.bubble.opacity=t)}}else"size"===c&&delete e.bubble.radius,"opacity"===c&&delete e.bubble.opacity}clickBubble(){var e,t;const o=this.container,n=o.actualOptions,i=o.interactivity.mouse.clickPosition;if(!i)return;const r=o.retina.bubbleModeDistance,a=o.particles.quadTree.queryCircle(i,r);for(const r of a){if(!o.bubble.clicking)continue;r.bubble.inRange=!o.bubble.durationEnd;const a=l(r.getPosition(),i),u=((new Date).getTime()-(o.interactivity.mouse.clickTime||0))/1e3;u>n.interactivity.modes.bubble.duration&&(o.bubble.durationEnd=!0),u>2*n.interactivity.modes.bubble.duration&&(o.bubble.clicking=!1,o.bubble.durationEnd=!1);const b={bubbleObj:{optValue:o.retina.bubbleModeSize,value:r.bubble.radius},particlesObj:{optValue:s(r.options.size.value)*o.retina.pixelRatio,value:r.size.value},type:"size"};this.process(r,a,u,b);const c={bubbleObj:{optValue:n.interactivity.modes.bubble.opacity,value:r.bubble.opacity},particlesObj:{optValue:s(r.options.opacity.value),value:null!==(t=null===(e=r.opacity)||void 0===e?void 0:e.value)&&void 0!==t?t:1},type:"opacity"};this.process(r,a,u,c),o.bubble.durationEnd?delete r.bubble.color:a<=o.retina.bubbleModeDistance?this.hoverBubbleColor(r,a):delete r.bubble.color}}hoverBubble(){const e=this.container,t=e.interactivity.mouse.position;if(void 0===t)return;const o=e.retina.bubbleModeDistance,n=e.particles.quadTree.queryCircle(t,o);for(const i of n){i.bubble.inRange=!0;const n=l(i.getPosition(),t),r=1-n/o;n<=o?r>=0&&e.interactivity.status===O.mouseMoveEvent&&(this.hoverBubbleSize(i,r),this.hoverBubbleOpacity(i,r),this.hoverBubbleColor(i,r)):this.reset(i),e.interactivity.status===O.mouseLeaveEvent&&this.reset(i)}}hoverBubbleSize(e,t,o){const n=this.container,i=(null==o?void 0:o.size)?o.size*n.retina.pixelRatio:n.retina.bubbleModeSize;if(void 0===i)return;const r=s(e.options.size.value)*n.retina.pixelRatio,a=C(e.size.value,i,r,t);void 0!==a&&(e.bubble.radius=a)}hoverBubbleOpacity(e,t,o){var n,i,r;const a=this.container.actualOptions,l=null!==(n=null==o?void 0:o.opacity)&&void 0!==n?n:a.interactivity.modes.bubble.opacity;if(!l)return;const u=e.options.opacity.value,b=C(null!==(r=null===(i=e.opacity)||void 0===i?void 0:i.value)&&void 0!==r?r:1,l,s(u),t);void 0!==b&&(e.bubble.opacity=b)}hoverBubbleColor(e,t,o){const n=this.container.actualOptions,i=null!=o?o:n.interactivity.modes.bubble;if(!e.bubble.finalColor){const t=i.color;if(!t)return;const o=t instanceof Array?c(t):t;e.bubble.finalColor=function(e,t,o=!0){const n=p(e,t,o);return void 0!==n?y(n):void 0}(o)}if(e.bubble.finalColor)if(i.mix){e.bubble.color=void 0;const o=e.getFillColor();e.bubble.color=o?y(x(o,e.bubble.finalColor,1-t,t)):e.bubble.finalColor}else e.bubble.color=e.bubble.finalColor}}async function B(e){await e.addInteractor("externalBubble",(e=>new k(e)))}return t}()}));
@@ -1597,20 +1597,20 @@
1597
1597
  }
1598
1598
  }
1599
1599
  }
1600
- externalInteract(delta) {
1600
+ async externalInteract(delta) {
1601
1601
  for (const interactor of this.externalInteractors) {
1602
1602
  if (interactor.isEnabled()) {
1603
- interactor.interact(delta);
1603
+ await interactor.interact(delta);
1604
1604
  }
1605
1605
  }
1606
1606
  }
1607
- particlesInteract(particle, delta) {
1607
+ async particlesInteract(particle, delta) {
1608
1608
  for (const interactor of this.externalInteractors) {
1609
1609
  interactor.reset(particle);
1610
1610
  }
1611
1611
  for (const interactor of this.particleInteractors) {
1612
1612
  if (interactor.isEnabled(particle)) {
1613
- interactor.interact(particle, delta);
1613
+ await interactor.interact(particle, delta);
1614
1614
  }
1615
1615
  }
1616
1616
  }
@@ -4002,10 +4002,10 @@
4002
4002
  }
4003
4003
  container.pathGenerator.init(container);
4004
4004
  }
4005
- redraw() {
4005
+ async redraw() {
4006
4006
  this.clear();
4007
4007
  this.init();
4008
- this.draw({
4008
+ await this.draw({
4009
4009
  value: 0,
4010
4010
  factor: 0
4011
4011
  });
@@ -4030,7 +4030,7 @@
4030
4030
  remove(particle, group, override) {
4031
4031
  this.removeAt(this.array.indexOf(particle), undefined, group, override);
4032
4032
  }
4033
- update(delta) {
4033
+ async update(delta) {
4034
4034
  const container = this.container;
4035
4035
  const particlesToDelete = [];
4036
4036
  container.pathGenerator.update();
@@ -4064,23 +4064,23 @@
4064
4064
  for (const particle of particlesToDelete) {
4065
4065
  this.remove(particle);
4066
4066
  }
4067
- this.interactionManager.externalInteract(delta);
4067
+ await this.interactionManager.externalInteract(delta);
4068
4068
  for (const particle of container.particles.array) {
4069
4069
  for (const updater of this.updaters) {
4070
4070
  updater.update(particle, delta);
4071
4071
  }
4072
4072
  if (!particle.destroyed && !particle.spawning) {
4073
- this.interactionManager.particlesInteract(particle, delta);
4073
+ await this.interactionManager.particlesInteract(particle, delta);
4074
4074
  }
4075
4075
  }
4076
4076
  delete container.canvas.resizeFactor;
4077
4077
  }
4078
- draw(delta) {
4078
+ async draw(delta) {
4079
4079
  const container = this.container;
4080
4080
  container.canvas.clear();
4081
4081
  const canvasSize = this.container.canvas.size;
4082
4082
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4083
- this.update(delta);
4083
+ await this.update(delta);
4084
4084
  if (this.needsSort) {
4085
4085
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
4086
4086
  this.lastZIndex = this.zArray[this.zArray.length - 1].position.z;
@@ -4441,12 +4441,12 @@
4441
4441
  }
4442
4442
  draw(force) {
4443
4443
  let refreshTime = force;
4444
- this.drawAnimationFrame = animate()((timestamp => {
4444
+ this.drawAnimationFrame = animate()((async timestamp => {
4445
4445
  if (refreshTime) {
4446
4446
  this.lastFrameTime = undefined;
4447
4447
  refreshTime = false;
4448
4448
  }
4449
- this.drawer.nextFrame(timestamp);
4449
+ await this.drawer.nextFrame(timestamp);
4450
4450
  }));
4451
4451
  }
4452
4452
  getAnimationStatus() {
@@ -4906,7 +4906,7 @@
4906
4906
  return Utils_isInArray("connect", events.onHover.mode);
4907
4907
  }
4908
4908
  reset() {}
4909
- interact() {
4909
+ async interact() {
4910
4910
  const container = this.container, options = container.actualOptions;
4911
4911
  if (options.interactivity.events.onHover.enable && container.interactivity.status === "mousemove") {
4912
4912
  const mousePos = container.interactivity.mouse.position;
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.41.0 by Matteo Bruni */
2
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var o in n)("object"==typeof exports?exports:e)[o]=n[o]}}(window,(function(){return function(){"use strict";var e={d:function(t,n){for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e,t){return e===t||t instanceof Array&&t.indexOf(e)>-1}e.r(t),e.d(t,{loadExternalConnectInteraction:function(){return i}});class o{}o.generatedAttribute="generated",o.randomColorValue="random",o.midColorValue="mid",o.touchEndEvent="touchend",o.mouseDownEvent="mousedown",o.mouseUpEvent="mouseup",o.mouseMoveEvent="mousemove",o.touchStartEvent="touchstart",o.touchMoveEvent="touchmove",o.mouseLeaveEvent="mouseleave",o.mouseOutEvent="mouseout",o.touchCancelEvent="touchcancel",o.resizeEvent="resize",o.visibilityChangeEvent="visibilitychange",o.noPolygonDataLoaded="No polygon data loaded.",o.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;new WeakMap;class a extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e)}isEnabled(){const e=this.container,t=e.interactivity.mouse,o=e.actualOptions.interactivity.events;return!(!o.onHover.enable||!t.position)&&n("connect",o.onHover.mode)}reset(){}interact(){const e=this.container;if(e.actualOptions.interactivity.events.onHover.enable&&"mousemove"===e.interactivity.status){const t=e.interactivity.mouse.position;if(!t)return;const n=Math.abs(e.retina.connectModeRadius),o=e.particles.quadTree.queryCircle(t,n);let a=0;for(const t of o){const n=t.getPosition();for(const i of o.slice(a+1)){const o=i.getPosition(),a=Math.abs(e.retina.connectModeDistance),r=Math.abs(n.x-o.x),c=Math.abs(n.y-o.y);r<a&&c<a&&e.canvas.drawConnectLine(t,i)}++a}}}}async function i(e){await e.addInteractor("externalConnect",(e=>new a(e)))}return t}()}));
1
+ /*! tsParticles v1.41.1 by Matteo Bruni */
2
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var o in n)("object"==typeof exports?exports:e)[o]=n[o]}}(window,(function(){return function(){"use strict";var e={d:function(t,n){for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e,t){return e===t||t instanceof Array&&t.indexOf(e)>-1}e.r(t),e.d(t,{loadExternalConnectInteraction:function(){return i}});class o{}o.generatedAttribute="generated",o.randomColorValue="random",o.midColorValue="mid",o.touchEndEvent="touchend",o.mouseDownEvent="mousedown",o.mouseUpEvent="mouseup",o.mouseMoveEvent="mousemove",o.touchStartEvent="touchstart",o.touchMoveEvent="touchmove",o.mouseLeaveEvent="mouseleave",o.mouseOutEvent="mouseout",o.touchCancelEvent="touchcancel",o.resizeEvent="resize",o.visibilityChangeEvent="visibilitychange",o.noPolygonDataLoaded="No polygon data loaded.",o.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;new WeakMap;class a extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e)}isEnabled(){const e=this.container,t=e.interactivity.mouse,o=e.actualOptions.interactivity.events;return!(!o.onHover.enable||!t.position)&&n("connect",o.onHover.mode)}reset(){}async interact(){const e=this.container;if(e.actualOptions.interactivity.events.onHover.enable&&"mousemove"===e.interactivity.status){const t=e.interactivity.mouse.position;if(!t)return;const n=Math.abs(e.retina.connectModeRadius),o=e.particles.quadTree.queryCircle(t,n);let a=0;for(const t of o){const n=t.getPosition();for(const i of o.slice(a+1)){const o=i.getPosition(),a=Math.abs(e.retina.connectModeDistance),r=Math.abs(n.x-o.x),c=Math.abs(n.y-o.y);r<a&&c<a&&e.canvas.drawConnectLine(t,i)}++a}}}}async function i(e){await e.addInteractor("externalConnect",(e=>new a(e)))}return t}()}));
@@ -1597,20 +1597,20 @@
1597
1597
  }
1598
1598
  }
1599
1599
  }
1600
- externalInteract(delta) {
1600
+ async externalInteract(delta) {
1601
1601
  for (const interactor of this.externalInteractors) {
1602
1602
  if (interactor.isEnabled()) {
1603
- interactor.interact(delta);
1603
+ await interactor.interact(delta);
1604
1604
  }
1605
1605
  }
1606
1606
  }
1607
- particlesInteract(particle, delta) {
1607
+ async particlesInteract(particle, delta) {
1608
1608
  for (const interactor of this.externalInteractors) {
1609
1609
  interactor.reset(particle);
1610
1610
  }
1611
1611
  for (const interactor of this.particleInteractors) {
1612
1612
  if (interactor.isEnabled(particle)) {
1613
- interactor.interact(particle, delta);
1613
+ await interactor.interact(particle, delta);
1614
1614
  }
1615
1615
  }
1616
1616
  }
@@ -4002,10 +4002,10 @@
4002
4002
  }
4003
4003
  container.pathGenerator.init(container);
4004
4004
  }
4005
- redraw() {
4005
+ async redraw() {
4006
4006
  this.clear();
4007
4007
  this.init();
4008
- this.draw({
4008
+ await this.draw({
4009
4009
  value: 0,
4010
4010
  factor: 0
4011
4011
  });
@@ -4030,7 +4030,7 @@
4030
4030
  remove(particle, group, override) {
4031
4031
  this.removeAt(this.array.indexOf(particle), undefined, group, override);
4032
4032
  }
4033
- update(delta) {
4033
+ async update(delta) {
4034
4034
  const container = this.container;
4035
4035
  const particlesToDelete = [];
4036
4036
  container.pathGenerator.update();
@@ -4064,23 +4064,23 @@
4064
4064
  for (const particle of particlesToDelete) {
4065
4065
  this.remove(particle);
4066
4066
  }
4067
- this.interactionManager.externalInteract(delta);
4067
+ await this.interactionManager.externalInteract(delta);
4068
4068
  for (const particle of container.particles.array) {
4069
4069
  for (const updater of this.updaters) {
4070
4070
  updater.update(particle, delta);
4071
4071
  }
4072
4072
  if (!particle.destroyed && !particle.spawning) {
4073
- this.interactionManager.particlesInteract(particle, delta);
4073
+ await this.interactionManager.particlesInteract(particle, delta);
4074
4074
  }
4075
4075
  }
4076
4076
  delete container.canvas.resizeFactor;
4077
4077
  }
4078
- draw(delta) {
4078
+ async draw(delta) {
4079
4079
  const container = this.container;
4080
4080
  container.canvas.clear();
4081
4081
  const canvasSize = this.container.canvas.size;
4082
4082
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4083
- this.update(delta);
4083
+ await this.update(delta);
4084
4084
  if (this.needsSort) {
4085
4085
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
4086
4086
  this.lastZIndex = this.zArray[this.zArray.length - 1].position.z;
@@ -4441,12 +4441,12 @@
4441
4441
  }
4442
4442
  draw(force) {
4443
4443
  let refreshTime = force;
4444
- this.drawAnimationFrame = animate()((timestamp => {
4444
+ this.drawAnimationFrame = animate()((async timestamp => {
4445
4445
  if (refreshTime) {
4446
4446
  this.lastFrameTime = undefined;
4447
4447
  refreshTime = false;
4448
4448
  }
4449
- this.drawer.nextFrame(timestamp);
4449
+ await this.drawer.nextFrame(timestamp);
4450
4450
  }));
4451
4451
  }
4452
4452
  getAnimationStatus() {
@@ -4903,7 +4903,7 @@
4903
4903
  return events.onHover.enable && !!mouse.position && Utils_isInArray("grab", events.onHover.mode);
4904
4904
  }
4905
4905
  reset() {}
4906
- interact() {
4906
+ async interact() {
4907
4907
  var _a;
4908
4908
  const container = this.container, options = container.actualOptions, interactivity = options.interactivity;
4909
4909
  if (interactivity.events.onHover.enable && container.interactivity.status === Constants_Constants.mouseMoveEvent) {