tsparticles 1.41.0 → 1.41.4

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 (205) 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/Particle.js +2 -2
  5. package/Core/Particles.d.ts +3 -3
  6. package/Core/Particles.js +7 -7
  7. package/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  8. package/Core/Utils/FrameManager.d.ts +1 -1
  9. package/Core/Utils/FrameManager.js +2 -2
  10. package/Core/Utils/InteractionManager.d.ts +2 -2
  11. package/Core/Utils/InteractionManager.js +4 -4
  12. package/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  13. package/Interactions/External/Attract/Attractor.d.ts +1 -1
  14. package/Interactions/External/Attract/Attractor.js +1 -1
  15. package/Interactions/External/Bounce/Bouncer.d.ts +1 -1
  16. package/Interactions/External/Bounce/Bouncer.js +1 -1
  17. package/Interactions/External/Bubble/Bubbler.d.ts +1 -1
  18. package/Interactions/External/Bubble/Bubbler.js +1 -1
  19. package/Interactions/External/Connect/Connector.d.ts +1 -1
  20. package/Interactions/External/Connect/Connector.js +1 -1
  21. package/Interactions/External/Grab/Grabber.d.ts +1 -1
  22. package/Interactions/External/Grab/Grabber.js +1 -1
  23. package/Interactions/External/Repulse/Repulser.d.ts +1 -1
  24. package/Interactions/External/Repulse/Repulser.js +1 -1
  25. package/Interactions/External/Trail/TrailMaker.d.ts +1 -1
  26. package/Interactions/External/Trail/TrailMaker.js +1 -1
  27. package/Interactions/Particles/Attract/Attractor.d.ts +1 -1
  28. package/Interactions/Particles/Attract/Attractor.js +1 -1
  29. package/Interactions/Particles/Collisions/Collider.d.ts +1 -1
  30. package/Interactions/Particles/Collisions/Collider.js +1 -1
  31. package/Interactions/Particles/Links/Linker.d.ts +1 -1
  32. package/Interactions/Particles/Links/Linker.js +1 -1
  33. package/Plugins/PolygonMask/PolygonMaskInstance.js +1 -1
  34. package/Updaters/Opacity/OpacityUpdater.js +7 -5
  35. package/Updaters/Size/SizeUpdater.js +6 -5
  36. package/browser/Core/Container.js +2 -2
  37. package/browser/Core/Interfaces/IExternalInteractor.d.ts +1 -1
  38. package/browser/Core/Interfaces/IParticlesInteractor.d.ts +1 -1
  39. package/browser/Core/Particle.js +2 -2
  40. package/browser/Core/Particles.d.ts +3 -3
  41. package/browser/Core/Particles.js +7 -7
  42. package/browser/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  43. package/browser/Core/Utils/FrameManager.d.ts +1 -1
  44. package/browser/Core/Utils/FrameManager.js +2 -2
  45. package/browser/Core/Utils/InteractionManager.d.ts +2 -2
  46. package/browser/Core/Utils/InteractionManager.js +4 -4
  47. package/browser/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  48. package/browser/Interactions/External/Attract/Attractor.d.ts +1 -1
  49. package/browser/Interactions/External/Attract/Attractor.js +1 -1
  50. package/browser/Interactions/External/Bounce/Bouncer.d.ts +1 -1
  51. package/browser/Interactions/External/Bounce/Bouncer.js +1 -1
  52. package/browser/Interactions/External/Bubble/Bubbler.d.ts +1 -1
  53. package/browser/Interactions/External/Bubble/Bubbler.js +1 -1
  54. package/browser/Interactions/External/Connect/Connector.d.ts +1 -1
  55. package/browser/Interactions/External/Connect/Connector.js +1 -1
  56. package/browser/Interactions/External/Grab/Grabber.d.ts +1 -1
  57. package/browser/Interactions/External/Grab/Grabber.js +1 -1
  58. package/browser/Interactions/External/Repulse/Repulser.d.ts +1 -1
  59. package/browser/Interactions/External/Repulse/Repulser.js +1 -1
  60. package/browser/Interactions/External/Trail/TrailMaker.d.ts +1 -1
  61. package/browser/Interactions/External/Trail/TrailMaker.js +1 -1
  62. package/browser/Interactions/Particles/Attract/Attractor.d.ts +1 -1
  63. package/browser/Interactions/Particles/Attract/Attractor.js +1 -1
  64. package/browser/Interactions/Particles/Collisions/Collider.d.ts +1 -1
  65. package/browser/Interactions/Particles/Collisions/Collider.js +1 -1
  66. package/browser/Interactions/Particles/Links/Linker.d.ts +1 -1
  67. package/browser/Interactions/Particles/Links/Linker.js +1 -1
  68. package/browser/Plugins/PolygonMask/PolygonMaskInstance.js +1 -1
  69. package/browser/Updaters/Opacity/OpacityUpdater.js +7 -5
  70. package/browser/Updaters/Size/SizeUpdater.js +6 -5
  71. package/esm/Core/Container.js +2 -2
  72. package/esm/Core/Interfaces/IExternalInteractor.d.ts +1 -1
  73. package/esm/Core/Interfaces/IParticlesInteractor.d.ts +1 -1
  74. package/esm/Core/Particle.js +2 -2
  75. package/esm/Core/Particles.d.ts +3 -3
  76. package/esm/Core/Particles.js +7 -7
  77. package/esm/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  78. package/esm/Core/Utils/FrameManager.d.ts +1 -1
  79. package/esm/Core/Utils/FrameManager.js +2 -2
  80. package/esm/Core/Utils/InteractionManager.d.ts +2 -2
  81. package/esm/Core/Utils/InteractionManager.js +4 -4
  82. package/esm/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  83. package/esm/Interactions/External/Attract/Attractor.d.ts +1 -1
  84. package/esm/Interactions/External/Attract/Attractor.js +1 -1
  85. package/esm/Interactions/External/Bounce/Bouncer.d.ts +1 -1
  86. package/esm/Interactions/External/Bounce/Bouncer.js +1 -1
  87. package/esm/Interactions/External/Bubble/Bubbler.d.ts +1 -1
  88. package/esm/Interactions/External/Bubble/Bubbler.js +1 -1
  89. package/esm/Interactions/External/Connect/Connector.d.ts +1 -1
  90. package/esm/Interactions/External/Connect/Connector.js +1 -1
  91. package/esm/Interactions/External/Grab/Grabber.d.ts +1 -1
  92. package/esm/Interactions/External/Grab/Grabber.js +1 -1
  93. package/esm/Interactions/External/Repulse/Repulser.d.ts +1 -1
  94. package/esm/Interactions/External/Repulse/Repulser.js +1 -1
  95. package/esm/Interactions/External/Trail/TrailMaker.d.ts +1 -1
  96. package/esm/Interactions/External/Trail/TrailMaker.js +1 -1
  97. package/esm/Interactions/Particles/Attract/Attractor.d.ts +1 -1
  98. package/esm/Interactions/Particles/Attract/Attractor.js +1 -1
  99. package/esm/Interactions/Particles/Collisions/Collider.d.ts +1 -1
  100. package/esm/Interactions/Particles/Collisions/Collider.js +1 -1
  101. package/esm/Interactions/Particles/Links/Linker.d.ts +1 -1
  102. package/esm/Interactions/Particles/Links/Linker.js +1 -1
  103. package/esm/Plugins/PolygonMask/PolygonMaskInstance.js +1 -1
  104. package/esm/Updaters/Opacity/OpacityUpdater.js +7 -5
  105. package/esm/Updaters/Size/SizeUpdater.js +6 -5
  106. package/package.json +1 -1
  107. package/report.html +6 -5
  108. package/report.slim.html +6 -5
  109. package/tsparticles.engine.js +17 -17
  110. package/tsparticles.engine.min.js +2 -2
  111. package/tsparticles.interaction.external.attract.js +16 -16
  112. package/tsparticles.interaction.external.attract.min.js +2 -2
  113. package/tsparticles.interaction.external.bounce.js +16 -16
  114. package/tsparticles.interaction.external.bounce.min.js +2 -2
  115. package/tsparticles.interaction.external.bubble.js +16 -16
  116. package/tsparticles.interaction.external.bubble.min.js +2 -2
  117. package/tsparticles.interaction.external.connect.js +16 -16
  118. package/tsparticles.interaction.external.connect.min.js +2 -2
  119. package/tsparticles.interaction.external.grab.js +16 -16
  120. package/tsparticles.interaction.external.grab.min.js +2 -2
  121. package/tsparticles.interaction.external.repulse.js +16 -16
  122. package/tsparticles.interaction.external.repulse.min.js +2 -2
  123. package/tsparticles.interaction.external.trail.js +16 -16
  124. package/tsparticles.interaction.external.trail.min.js +2 -2
  125. package/tsparticles.interaction.particles.attract.js +16 -16
  126. package/tsparticles.interaction.particles.attract.min.js +2 -2
  127. package/tsparticles.interaction.particles.collisions.js +16 -16
  128. package/tsparticles.interaction.particles.collisions.min.js +2 -2
  129. package/tsparticles.interaction.particles.links.js +16 -16
  130. package/tsparticles.interaction.particles.links.min.js +2 -2
  131. package/tsparticles.js +35 -35
  132. package/tsparticles.min.js +2 -2
  133. package/tsparticles.pathseg.min.js +1 -1
  134. package/tsparticles.plugins.absorbers.js +15 -15
  135. package/tsparticles.plugins.absorbers.min.js +1 -1
  136. package/tsparticles.plugins.emitters.js +15 -15
  137. package/tsparticles.plugins.emitters.min.js +1 -1
  138. package/tsparticles.plugins.polygonMask.js +17 -17
  139. package/tsparticles.plugins.polygonMask.min.js +2 -2
  140. package/tsparticles.shape.circle.min.js +1 -1
  141. package/tsparticles.shape.image.js +15 -15
  142. package/tsparticles.shape.image.min.js +1 -1
  143. package/tsparticles.shape.line.min.js +1 -1
  144. package/tsparticles.shape.polygon.min.js +1 -1
  145. package/tsparticles.shape.square.min.js +1 -1
  146. package/tsparticles.shape.star.min.js +1 -1
  147. package/tsparticles.shape.text.js +15 -15
  148. package/tsparticles.shape.text.min.js +1 -1
  149. package/tsparticles.slim.js +32 -32
  150. package/tsparticles.slim.min.js +2 -2
  151. package/tsparticles.updater.angle.js +15 -15
  152. package/tsparticles.updater.angle.min.js +1 -1
  153. package/tsparticles.updater.color.js +15 -15
  154. package/tsparticles.updater.color.min.js +1 -1
  155. package/tsparticles.updater.life.js +15 -15
  156. package/tsparticles.updater.life.min.js +1 -1
  157. package/tsparticles.updater.opacity.js +18 -18
  158. package/tsparticles.updater.opacity.min.js +2 -2
  159. package/tsparticles.updater.outModes.js +15 -15
  160. package/tsparticles.updater.outModes.min.js +1 -1
  161. package/tsparticles.updater.roll.js +15 -15
  162. package/tsparticles.updater.roll.min.js +1 -1
  163. package/tsparticles.updater.size.js +18 -18
  164. package/tsparticles.updater.size.min.js +2 -2
  165. package/tsparticles.updater.strokeColor.js +15 -15
  166. package/tsparticles.updater.strokeColor.min.js +1 -1
  167. package/tsparticles.updater.tilt.js +15 -15
  168. package/tsparticles.updater.tilt.min.js +1 -1
  169. package/tsparticles.updater.wobble.js +15 -15
  170. package/tsparticles.updater.wobble.min.js +1 -1
  171. package/umd/Core/Container.js +2 -2
  172. package/umd/Core/Interfaces/IExternalInteractor.d.ts +1 -1
  173. package/umd/Core/Interfaces/IParticlesInteractor.d.ts +1 -1
  174. package/umd/Core/Particle.js +2 -2
  175. package/umd/Core/Particles.d.ts +3 -3
  176. package/umd/Core/Particles.js +7 -7
  177. package/umd/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  178. package/umd/Core/Utils/FrameManager.d.ts +1 -1
  179. package/umd/Core/Utils/FrameManager.js +2 -2
  180. package/umd/Core/Utils/InteractionManager.d.ts +2 -2
  181. package/umd/Core/Utils/InteractionManager.js +4 -4
  182. package/umd/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  183. package/umd/Interactions/External/Attract/Attractor.d.ts +1 -1
  184. package/umd/Interactions/External/Attract/Attractor.js +1 -1
  185. package/umd/Interactions/External/Bounce/Bouncer.d.ts +1 -1
  186. package/umd/Interactions/External/Bounce/Bouncer.js +1 -1
  187. package/umd/Interactions/External/Bubble/Bubbler.d.ts +1 -1
  188. package/umd/Interactions/External/Bubble/Bubbler.js +1 -1
  189. package/umd/Interactions/External/Connect/Connector.d.ts +1 -1
  190. package/umd/Interactions/External/Connect/Connector.js +1 -1
  191. package/umd/Interactions/External/Grab/Grabber.d.ts +1 -1
  192. package/umd/Interactions/External/Grab/Grabber.js +1 -1
  193. package/umd/Interactions/External/Repulse/Repulser.d.ts +1 -1
  194. package/umd/Interactions/External/Repulse/Repulser.js +1 -1
  195. package/umd/Interactions/External/Trail/TrailMaker.d.ts +1 -1
  196. package/umd/Interactions/External/Trail/TrailMaker.js +1 -1
  197. package/umd/Interactions/Particles/Attract/Attractor.d.ts +1 -1
  198. package/umd/Interactions/Particles/Attract/Attractor.js +1 -1
  199. package/umd/Interactions/Particles/Collisions/Collider.d.ts +1 -1
  200. package/umd/Interactions/Particles/Collisions/Collider.js +1 -1
  201. package/umd/Interactions/Particles/Links/Linker.d.ts +1 -1
  202. package/umd/Interactions/Particles/Links/Linker.js +1 -1
  203. package/umd/Plugins/PolygonMask/PolygonMaskInstance.js +1 -1
  204. package/umd/Updaters/Opacity/OpacityUpdater.js +7 -5
  205. package/umd/Updaters/Size/SizeUpdater.js +6 -5
@@ -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
  }
@@ -3767,10 +3767,10 @@
3767
3767
  return this.getRadius() ** 2 * Math.PI / 2;
3768
3768
  }
3769
3769
  getFillColor() {
3770
- var _a, _b, _c;
3770
+ var _a, _b;
3771
3771
  const color = (_a = this.bubble.color) !== null && _a !== void 0 ? _a : getHslFromAnimation(this.color);
3772
3772
  if (color && this.roll && (this.backColor || this.roll.alter)) {
3773
- const rolled = Math.floor(((_c = (_b = this.roll) === null || _b === void 0 ? void 0 : _b.angle) !== null && _c !== void 0 ? _c : 0) / (Math.PI / 2)) % 2;
3773
+ const backFactor = this.options.roll.mode === "both" ? 2 : 1, backSum = this.options.roll.mode === "horizontal" ? Math.PI / 2 : 0, rolled = Math.floor((((_b = this.roll.angle) !== null && _b !== void 0 ? _b : 0) + backSum) / (Math.PI / backFactor)) % 2;
3774
3774
  if (rolled) {
3775
3775
  if (this.backColor) {
3776
3776
  return this.backColor;
@@ -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) {
@@ -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,n,o){return Math.floor((e*n+t*o)/(n+o))}function o(e){const t=a(e);let n=r(e);return t===n&&(n=0),Math.random()*(t-n)+n}function r(e){return"number"==typeof e?e:e.min}function a(e){return"number"==typeof e?e:e.max}function i(e,t){if(e===t||void 0===t&&"number"==typeof e)return e;const n=r(e),o=a(e);return void 0!==t?{min:Math.min(n,t),max:Math.max(o,t)}:i(n,o)}function s(e,t){return function(e,t){const n=e.x-t.x,o=e.y-t.y;return{dx:n,dy:o,distance:Math.sqrt(n*n+o*o)}}(e,t).distance}function l(e,t){return e===t||t instanceof Array&&t.indexOf(e)>-1}function u(e,t,n=!0){return e[void 0!==t&&n?t%e.length:function(e){return Math.floor(Math.random()*e.length)}(e)]}function c(e,t,n){let o=n;return o<0&&(o+=1),o>1&&(o-=1),o<1/6?e+6*(t-e)*o:o<.5?t:o<2/3?e+(t-e)*(2/3-o)*6:e}function d(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=v(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=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),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,n=e.replace(t,((e,t,n,o,r)=>t+t+n+n+o+o+(void 0!==r?r+r:""))),o=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i.exec(n);return o?{a:void 0!==o[4]?parseInt(o[4],16)/255:1,b:parseInt(o[3],16),g:parseInt(o[2],16),r:parseInt(o[1],16)}:void 0}}function f(e,t,n=!0){var o,r,a;if(void 0===e)return;const i="string"==typeof e?{value:e}:e;let s;if("string"==typeof i.value)s=i.value===m.randomColorValue?p():function(e){return d(e)}(i.value);else if(i.value instanceof Array){s=f({value:u(i.value,t,n)})}else{const e=i.value,t=null!==(o=e.rgb)&&void 0!==o?o:i.value;if(void 0!==t.r)s=t;else{const t=null!==(r=e.hsl)&&void 0!==r?r:i.value;if(void 0!==t.h&&void 0!==t.l)s=v(t);else{const t=null!==(a=e.hsv)&&void 0!==a?a:i.value;void 0!==t.h&&void 0!==t.v&&(s=g(t))}}}return s}function v(e){const t={b:0,g:0,r:0},n={h:e.h/360,l:e.l/100,s:e.s/100};if(0===n.s)t.b=n.l,t.g=n.l,t.r=n.l;else{const e=n.l<.5?n.l*(1+n.s):n.l+n.s-n.l*n.s,o=2*n.l-e;t.r=c(o,e,n.h+1/3),t.g=c(o,e,n.h),t.b=c(o,e,n.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 g(e){const t={b:0,g:0,r:0},n=e.h/60,o=e.s/100,r=e.v/100,a=r*o,i=a*(1-Math.abs(n%2-1));let s;if(n>=0&&n<=1?s={r:a,g:i,b:0}:n>1&&n<=2?s={r:i,g:a,b:0}:n>2&&n<=3?s={r:0,g:a,b:i}:n>3&&n<=4?s={r:0,g:i,b:a}:n>4&&n<=5?s={r:i,g:0,b:a}:n>5&&n<=6&&(s={r:a,g:0,b:i}),s){const e=r-a;t.r=Math.floor(255*(s.r+e)),t.g=Math.floor(255*(s.g+e)),t.b=Math.floor(255*(s.b+e))}return t}function p(e){const t=null!=e?e:0;return{b:Math.floor(o(i(t,256))),g:Math.floor(o(i(t,256))),r:Math.floor(o(i(t,256)))}}function b(e,t,o){var r,a;if(o===m.randomColorValue)return p();if("mid"!==o)return o;{const o=null!==(r=e.getFillColor())&&void 0!==r?r:e.getStrokeColor(),i=null!==(a=null==t?void 0:t.getFillColor())&&void 0!==a?a:null==t?void 0:t.getStrokeColor();if(o&&i&&t)return function(e,t,o,r){let a=e,i=t;return void 0===a.r&&(a=v(e)),void 0===i.r&&(i=v(t)),{b:n(a.b,i.b,o,r),g:n(a.g,i.g,o,r),r:n(a.r,i.r,o,r)}}(o,i,e.getRadius(),t.getRadius());{const e=null!=o?o:i;if(e)return v(e)}}}function h(e,t,n){const o="string"==typeof e?e:e.value;return o===m.randomColorValue?n?f({value:o}):t?m.randomColorValue:m.midColorValue:f({value:o})}e.r(t),e.d(t,{loadExternalGrabInteraction:function(){return M}});class m{}m.generatedAttribute="generated",m.randomColorValue="random",m.midColorValue="mid",m.touchEndEvent="touchend",m.mouseDownEvent="mousedown",m.mouseUpEvent="mouseup",m.mouseMoveEvent="mousemove",m.touchStartEvent="touchstart",m.touchMoveEvent="touchmove",m.mouseLeaveEvent="mouseleave",m.mouseOutEvent="mouseout",m.touchCancelEvent="touchcancel",m.resizeEvent="resize",m.visibilityChangeEvent="visibilitychange",m.noPolygonDataLoaded="No polygon data loaded.",m.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 y extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e)}isEnabled(){const e=this.container,t=e.interactivity.mouse,n=e.actualOptions.interactivity.events;return n.onHover.enable&&!!t.position&&l("grab",n.onHover.mode)}reset(){}interact(){var e;const t=this.container,n=t.actualOptions,o=n.interactivity;if(o.events.onHover.enable&&t.interactivity.status===m.mouseMoveEvent){const r=t.interactivity.mouse.position;if(!r)return;const a=t.retina.grabModeDistance,i=t.particles.quadTree.queryCircle(r,a);for(const l of i){const i=s(l.getPosition(),r);if(i<=a){const s=o.modes.grab.links,u=s.opacity,c=u-i*u/a;if(c<=0)continue;const d=null!==(e=s.color)&&void 0!==e?e:l.options.links.color;if(!t.particles.grabLineColor){const e=n.interactivity.modes.grab.links;t.particles.grabLineColor=h(d,e.blink,e.consent)}const f=b(l,void 0,t.particles.grabLineColor);if(!f)return;t.canvas.drawGrabLine(l,f,c,r)}}}}}async function M(e){await e.addInteractor("externalGrab",(e=>new y(e)))}return t}()}));
1
+ /*! tsParticles v1.41.4 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,n,o){return Math.floor((e*n+t*o)/(n+o))}function o(e){const t=a(e);let n=r(e);return t===n&&(n=0),Math.random()*(t-n)+n}function r(e){return"number"==typeof e?e:e.min}function a(e){return"number"==typeof e?e:e.max}function i(e,t){if(e===t||void 0===t&&"number"==typeof e)return e;const n=r(e),o=a(e);return void 0!==t?{min:Math.min(n,t),max:Math.max(o,t)}:i(n,o)}function s(e,t){return function(e,t){const n=e.x-t.x,o=e.y-t.y;return{dx:n,dy:o,distance:Math.sqrt(n*n+o*o)}}(e,t).distance}function l(e,t){return e===t||t instanceof Array&&t.indexOf(e)>-1}function u(e,t,n=!0){return e[void 0!==t&&n?t%e.length:function(e){return Math.floor(Math.random()*e.length)}(e)]}function c(e,t,n){let o=n;return o<0&&(o+=1),o>1&&(o-=1),o<1/6?e+6*(t-e)*o:o<.5?t:o<2/3?e+(t-e)*(2/3-o)*6:e}function d(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=v(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=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),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,n=e.replace(t,((e,t,n,o,r)=>t+t+n+n+o+o+(void 0!==r?r+r:""))),o=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i.exec(n);return o?{a:void 0!==o[4]?parseInt(o[4],16)/255:1,b:parseInt(o[3],16),g:parseInt(o[2],16),r:parseInt(o[1],16)}:void 0}}function f(e,t,n=!0){var o,r,a;if(void 0===e)return;const i="string"==typeof e?{value:e}:e;let s;if("string"==typeof i.value)s=i.value===m.randomColorValue?p():function(e){return d(e)}(i.value);else if(i.value instanceof Array){s=f({value:u(i.value,t,n)})}else{const e=i.value,t=null!==(o=e.rgb)&&void 0!==o?o:i.value;if(void 0!==t.r)s=t;else{const t=null!==(r=e.hsl)&&void 0!==r?r:i.value;if(void 0!==t.h&&void 0!==t.l)s=v(t);else{const t=null!==(a=e.hsv)&&void 0!==a?a:i.value;void 0!==t.h&&void 0!==t.v&&(s=g(t))}}}return s}function v(e){const t={b:0,g:0,r:0},n={h:e.h/360,l:e.l/100,s:e.s/100};if(0===n.s)t.b=n.l,t.g=n.l,t.r=n.l;else{const e=n.l<.5?n.l*(1+n.s):n.l+n.s-n.l*n.s,o=2*n.l-e;t.r=c(o,e,n.h+1/3),t.g=c(o,e,n.h),t.b=c(o,e,n.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 g(e){const t={b:0,g:0,r:0},n=e.h/60,o=e.s/100,r=e.v/100,a=r*o,i=a*(1-Math.abs(n%2-1));let s;if(n>=0&&n<=1?s={r:a,g:i,b:0}:n>1&&n<=2?s={r:i,g:a,b:0}:n>2&&n<=3?s={r:0,g:a,b:i}:n>3&&n<=4?s={r:0,g:i,b:a}:n>4&&n<=5?s={r:i,g:0,b:a}:n>5&&n<=6&&(s={r:a,g:0,b:i}),s){const e=r-a;t.r=Math.floor(255*(s.r+e)),t.g=Math.floor(255*(s.g+e)),t.b=Math.floor(255*(s.b+e))}return t}function p(e){const t=null!=e?e:0;return{b:Math.floor(o(i(t,256))),g:Math.floor(o(i(t,256))),r:Math.floor(o(i(t,256)))}}function b(e,t,o){var r,a;if(o===m.randomColorValue)return p();if("mid"!==o)return o;{const o=null!==(r=e.getFillColor())&&void 0!==r?r:e.getStrokeColor(),i=null!==(a=null==t?void 0:t.getFillColor())&&void 0!==a?a:null==t?void 0:t.getStrokeColor();if(o&&i&&t)return function(e,t,o,r){let a=e,i=t;return void 0===a.r&&(a=v(e)),void 0===i.r&&(i=v(t)),{b:n(a.b,i.b,o,r),g:n(a.g,i.g,o,r),r:n(a.r,i.r,o,r)}}(o,i,e.getRadius(),t.getRadius());{const e=null!=o?o:i;if(e)return v(e)}}}function h(e,t,n){const o="string"==typeof e?e:e.value;return o===m.randomColorValue?n?f({value:o}):t?m.randomColorValue:m.midColorValue:f({value:o})}e.r(t),e.d(t,{loadExternalGrabInteraction:function(){return M}});class m{}m.generatedAttribute="generated",m.randomColorValue="random",m.midColorValue="mid",m.touchEndEvent="touchend",m.mouseDownEvent="mousedown",m.mouseUpEvent="mouseup",m.mouseMoveEvent="mousemove",m.touchStartEvent="touchstart",m.touchMoveEvent="touchmove",m.mouseLeaveEvent="mouseleave",m.mouseOutEvent="mouseout",m.touchCancelEvent="touchcancel",m.resizeEvent="resize",m.visibilityChangeEvent="visibilitychange",m.noPolygonDataLoaded="No polygon data loaded.",m.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 y extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e)}isEnabled(){const e=this.container,t=e.interactivity.mouse,n=e.actualOptions.interactivity.events;return n.onHover.enable&&!!t.position&&l("grab",n.onHover.mode)}reset(){}async interact(){var e;const t=this.container,n=t.actualOptions,o=n.interactivity;if(o.events.onHover.enable&&t.interactivity.status===m.mouseMoveEvent){const r=t.interactivity.mouse.position;if(!r)return;const a=t.retina.grabModeDistance,i=t.particles.quadTree.queryCircle(r,a);for(const l of i){const i=s(l.getPosition(),r);if(i<=a){const s=o.modes.grab.links,u=s.opacity,c=u-i*u/a;if(c<=0)continue;const d=null!==(e=s.color)&&void 0!==e?e:l.options.links.color;if(!t.particles.grabLineColor){const e=n.interactivity.modes.grab.links;t.particles.grabLineColor=h(d,e.blink,e.consent)}const f=b(l,void 0,t.particles.grabLineColor);if(!f)return;t.canvas.drawGrabLine(l,f,c,r)}}}}}async function M(e){await e.addInteractor("externalGrab",(e=>new y(e)))}return t}()}));
@@ -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
  }
@@ -3898,10 +3898,10 @@
3898
3898
  return this.getRadius() ** 2 * Math.PI / 2;
3899
3899
  }
3900
3900
  getFillColor() {
3901
- var _a, _b, _c;
3901
+ var _a, _b;
3902
3902
  const color = (_a = this.bubble.color) !== null && _a !== void 0 ? _a : getHslFromAnimation(this.color);
3903
3903
  if (color && this.roll && (this.backColor || this.roll.alter)) {
3904
- const rolled = Math.floor(((_c = (_b = this.roll) === null || _b === void 0 ? void 0 : _b.angle) !== null && _c !== void 0 ? _c : 0) / (Math.PI / 2)) % 2;
3904
+ const backFactor = this.options.roll.mode === "both" ? 2 : 1, backSum = this.options.roll.mode === "horizontal" ? Math.PI / 2 : 0, rolled = Math.floor((((_b = this.roll.angle) !== null && _b !== void 0 ? _b : 0) + backSum) / (Math.PI / backFactor)) % 2;
3905
3905
  if (rolled) {
3906
3906
  if (this.backColor) {
3907
3907
  return this.backColor;
@@ -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() {
@@ -5038,7 +5038,7 @@
5038
5038
  return Utils_isInArray("repulse", hoverMode) || Utils_isInArray("repulse", clickMode) || divRepulse;
5039
5039
  }
5040
5040
  reset() {}
5041
- interact() {
5041
+ async interact() {
5042
5042
  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, divs = events.onDiv;
5043
5043
  if (mouseMoveStatus && hoverEnabled && Utils_isInArray("repulse", hoverMode)) {
5044
5044
  this.hoverRepulse();
@@ -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 s=t();for(var n in s)("object"==typeof exports?exports:e)[n]=s[n]}}(window,(function(){return function(){"use strict";var e={d:function(t,s){for(var n in s)e.o(s,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:s[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 s(e,t){const s=e.x-t.x,n=e.y-t.y;return{dx:s,dy:n,distance:Math.sqrt(s*s+n*n)}}function n(e,t){switch(t){case"ease-out-quad":return 1-(1-e)**2;case"ease-out-cubic":return 1-(1-e)**3;case"ease-out-quart":return 1-(1-e)**4;case"ease-out-quint":return 1-(1-e)**5;case"ease-out-expo":return 1===e?1:1-Math.pow(2,-10*e);case"ease-out-sine":return Math.sin(e*Math.PI/2);case"ease-out-back":{const t=1.70158;return 1+(t+1)*Math.pow(e-1,3)+t*Math.pow(e-1,2)}case"ease-out-circ":return Math.sqrt(1-Math.pow(e-1,2));default:return e}}function i(e,t){if(t instanceof Array){for(const s of t)if(e.matches(s))return!0;return!1}return e.matches(t)}function o(e,t){return e===t||t instanceof Array&&t.indexOf(e)>-1}function r(e,t){const s=e.selectors;if(s instanceof Array)for(const n of s)t(n,e);else t(s,e)}e.r(t),e.d(t,{loadExternalRepulseInteraction:function(){return p}});class a{constructor(e,t){this.position={x:e,y:t}}}class c extends a{constructor(e,t,s){super(e,t),this.radius=s}contains(e){return t=e,n=this.position,s(t,n).distance<=this.radius;var t,n}intersects(e){const t=e,s=e,n=this.position,i=e.position,o=Math.abs(i.x-n.x),r=Math.abs(i.y-n.y),a=this.radius;if(void 0!==s.radius){return a+s.radius>Math.sqrt(o*o+r+r)}if(void 0!==t.size){const e=t.size.width,s=t.size.height,n=Math.pow(o-e,2)+Math.pow(r-s,2);return!(o>a+e||r>a+s)&&(o<=e||r<=s||n<=a*a)}return!1}}class u{}u.generatedAttribute="generated",u.randomColorValue="random",u.midColorValue="mid",u.touchEndEvent="touchend",u.mouseDownEvent="mousedown",u.mouseUpEvent="mouseup",u.mouseMoveEvent="mousemove",u.touchStartEvent="touchstart",u.touchMoveEvent="touchmove",u.mouseLeaveEvent="mouseleave",u.mouseOutEvent="mouseout",u.touchCancelEvent="touchcancel",u.resizeEvent="resize",u.visibilityChangeEvent="visibilitychange",u.noPolygonDataLoaded="No polygon data loaded.",u.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;class l extends a{constructor(e,t,s,n){super(e,t),this.size={height:n,width:s}}contains(e){const t=this.size.width,s=this.size.height,n=this.position;return e.x>=n.x&&e.x<=n.x+t&&e.y>=n.y&&e.y<=n.y+s}intersects(e){const t=e,s=e,n=this.size.width,i=this.size.height,o=this.position,r=e.position;if(void 0!==s.radius)return s.intersects(this);if(void 0!==t.size){const e=t.size,s=e.width,a=e.height;return r.x<o.x+n&&r.x+s>o.x&&r.y<o.y+i&&r.y+a>o.y}return!1}}class h{constructor(e,t){let s,n;if(void 0===t){if("number"==typeof e)throw new Error("tsParticles - Vector not initialized correctly");const t=e;[s,n]=[t.x,t.y]}else[s,n]=[e,t];this.x=s,this.y=n}static clone(e){return h.create(e.x,e.y)}static create(e,t){return new h(e,t)}static get origin(){return h.create(0,0)}get angle(){return Math.atan2(this.y,this.x)}set angle(e){this.updateFromAngle(e,this.length)}get length(){return Math.sqrt(this.x**2+this.y**2)}set length(e){this.updateFromAngle(this.angle,e)}add(e){return h.create(this.x+e.x,this.y+e.y)}addTo(e){this.x+=e.x,this.y+=e.y}sub(e){return h.create(this.x-e.x,this.y-e.y)}subFrom(e){this.x-=e.x,this.y-=e.y}mult(e){return h.create(this.x*e,this.y*e)}multTo(e){this.x*=e,this.y*=e}div(e){return h.create(this.x/e,this.y/e)}divTo(e){this.x/=e,this.y/=e}distanceTo(e){return this.sub(e).length}getLengthSq(){return this.x**2+this.y**2}distanceToSq(e){return this.sub(e).getLengthSq()}manhattanDistanceTo(e){return Math.abs(e.x-this.x)+Math.abs(e.y-this.y)}copy(){return h.clone(this)}setTo(e){this.x=e.x,this.y=e.y}rotate(e){return h.create(this.x*Math.cos(e)-this.y*Math.sin(e),this.x*Math.sin(e)+this.y*Math.cos(e))}updateFromAngle(e,t){this.x=Math.cos(e)*t,this.y=Math.sin(e)*t}}new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;new WeakMap;class d extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e)}isEnabled(){const e=this.container,t=e.actualOptions,s=e.interactivity.mouse,n=t.interactivity.events,i=function(e,t){return t instanceof Array?!!t.find((t=>t.enable&&o(e,t.mode))):o(e,t.mode)}("repulse",n.onDiv);if(!(i||n.onHover.enable&&s.position||n.onClick.enable&&s.clickPosition))return!1;const r=n.onHover.mode,a=n.onClick.mode;return o("repulse",r)||o("repulse",a)||i}reset(){}interact(){const e=this.container,t=e.actualOptions,s=e.interactivity.status===u.mouseMoveEvent,n=t.interactivity.events,i=n.onHover.enable,a=n.onHover.mode,c=n.onClick.enable,l=n.onClick.mode,h=n.onDiv;s&&i&&o("repulse",a)?this.hoverRepulse():c&&o("repulse",l)?this.clickRepulse():function(e,t,s){if(t instanceof Array)for(const n of t){const t=n.mode;n.enable&&o(e,t)&&r(n,s)}else{const n=t.mode;t.enable&&o(e,n)&&r(t,s)}}("repulse",h,((e,t)=>this.singleSelectorRepulse(e,t)))}singleSelectorRepulse(e,t){const s=this.container,n=document.querySelectorAll(e);n.length&&n.forEach((e=>{const n=e,o=s.retina.pixelRatio,r={x:(n.offsetLeft+n.offsetWidth/2)*o,y:(n.offsetTop+n.offsetHeight/2)*o},a=n.offsetWidth/2*o,u="circle"===t.type?new c(r.x,r.y,a):new l(n.offsetLeft*o,n.offsetTop*o,n.offsetWidth*o,n.offsetHeight*o),h=function(e,t){if(t&&e)return e instanceof Array?e.find((e=>i(t,e.selectors))):i(t,e.selectors)?e:void 0}(s.actualOptions.interactivity.modes.repulse.divs,n);this.processRepulse(r,a,u,h)}))}hoverRepulse(){const e=this.container,t=e.interactivity.mouse.position;if(!t)return;const s=e.retina.repulseModeDistance;this.processRepulse(t,s,new c(t.x,t.y,s))}processRepulse(e,t,i,o){var r;const a=this.container,c=a.particles.quadTree.query(i),u=a.actualOptions.interactivity.modes.repulse;for(const i of c){const{dx:a,dy:c,distance:f}=s(i.position,e),y=(null!==(r=null==o?void 0:o.speed)&&void 0!==r?r:u.speed)*u.factor,v=(l=n(1-f/t,u.easing)*y,d=0,p=u.maxSpeed,Math.min(Math.max(l,d),p)),x=h.create(0===f?y:a/f*v,0===f?y:c/f*v);i.position.addTo(x)}var l,d,p}clickRepulse(){const e=this.container;if(e.repulse.finish||(e.repulse.count||(e.repulse.count=0),e.repulse.count++,e.repulse.count===e.particles.count&&(e.repulse.finish=!0)),e.repulse.clicking){const t=e.retina.repulseModeDistance,n=Math.pow(t/6,3),i=e.interactivity.mouse.clickPosition;if(void 0===i)return;const o=new c(i.x,i.y,n),r=e.particles.quadTree.query(o);for(const t of r){const{dx:o,dy:r,distance:a}=s(i,t.position),c=a**2,u=e.actualOptions.interactivity.modes.repulse.speed,l=-n*u/c;if(c<=n){e.repulse.particles.push(t);const s=h.create(o,r);s.length=l,t.velocity.setTo(s)}}}else if(!1===e.repulse.clicking){for(const t of e.repulse.particles)t.velocity.setTo(t.initialVelocity);e.repulse.particles=[]}}}async function p(e){await e.addInteractor("externalRepulse",(e=>new d(e)))}return t}()}));
1
+ /*! tsParticles v1.41.4 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 s=t();for(var n in s)("object"==typeof exports?exports:e)[n]=s[n]}}(window,(function(){return function(){"use strict";var e={d:function(t,s){for(var n in s)e.o(s,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:s[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 s(e,t){const s=e.x-t.x,n=e.y-t.y;return{dx:s,dy:n,distance:Math.sqrt(s*s+n*n)}}function n(e,t){switch(t){case"ease-out-quad":return 1-(1-e)**2;case"ease-out-cubic":return 1-(1-e)**3;case"ease-out-quart":return 1-(1-e)**4;case"ease-out-quint":return 1-(1-e)**5;case"ease-out-expo":return 1===e?1:1-Math.pow(2,-10*e);case"ease-out-sine":return Math.sin(e*Math.PI/2);case"ease-out-back":{const t=1.70158;return 1+(t+1)*Math.pow(e-1,3)+t*Math.pow(e-1,2)}case"ease-out-circ":return Math.sqrt(1-Math.pow(e-1,2));default:return e}}function i(e,t){if(t instanceof Array){for(const s of t)if(e.matches(s))return!0;return!1}return e.matches(t)}function o(e,t){return e===t||t instanceof Array&&t.indexOf(e)>-1}function r(e,t){const s=e.selectors;if(s instanceof Array)for(const n of s)t(n,e);else t(s,e)}e.r(t),e.d(t,{loadExternalRepulseInteraction:function(){return p}});class a{constructor(e,t){this.position={x:e,y:t}}}class c extends a{constructor(e,t,s){super(e,t),this.radius=s}contains(e){return t=e,n=this.position,s(t,n).distance<=this.radius;var t,n}intersects(e){const t=e,s=e,n=this.position,i=e.position,o=Math.abs(i.x-n.x),r=Math.abs(i.y-n.y),a=this.radius;if(void 0!==s.radius){return a+s.radius>Math.sqrt(o*o+r+r)}if(void 0!==t.size){const e=t.size.width,s=t.size.height,n=Math.pow(o-e,2)+Math.pow(r-s,2);return!(o>a+e||r>a+s)&&(o<=e||r<=s||n<=a*a)}return!1}}class u{}u.generatedAttribute="generated",u.randomColorValue="random",u.midColorValue="mid",u.touchEndEvent="touchend",u.mouseDownEvent="mousedown",u.mouseUpEvent="mouseup",u.mouseMoveEvent="mousemove",u.touchStartEvent="touchstart",u.touchMoveEvent="touchmove",u.mouseLeaveEvent="mouseleave",u.mouseOutEvent="mouseout",u.touchCancelEvent="touchcancel",u.resizeEvent="resize",u.visibilityChangeEvent="visibilitychange",u.noPolygonDataLoaded="No polygon data loaded.",u.noPolygonFound="No polygon found, you need to specify SVG url in config.";new WeakMap;new WeakMap;class l extends a{constructor(e,t,s,n){super(e,t),this.size={height:n,width:s}}contains(e){const t=this.size.width,s=this.size.height,n=this.position;return e.x>=n.x&&e.x<=n.x+t&&e.y>=n.y&&e.y<=n.y+s}intersects(e){const t=e,s=e,n=this.size.width,i=this.size.height,o=this.position,r=e.position;if(void 0!==s.radius)return s.intersects(this);if(void 0!==t.size){const e=t.size,s=e.width,a=e.height;return r.x<o.x+n&&r.x+s>o.x&&r.y<o.y+i&&r.y+a>o.y}return!1}}class h{constructor(e,t){let s,n;if(void 0===t){if("number"==typeof e)throw new Error("tsParticles - Vector not initialized correctly");const t=e;[s,n]=[t.x,t.y]}else[s,n]=[e,t];this.x=s,this.y=n}static clone(e){return h.create(e.x,e.y)}static create(e,t){return new h(e,t)}static get origin(){return h.create(0,0)}get angle(){return Math.atan2(this.y,this.x)}set angle(e){this.updateFromAngle(e,this.length)}get length(){return Math.sqrt(this.x**2+this.y**2)}set length(e){this.updateFromAngle(this.angle,e)}add(e){return h.create(this.x+e.x,this.y+e.y)}addTo(e){this.x+=e.x,this.y+=e.y}sub(e){return h.create(this.x-e.x,this.y-e.y)}subFrom(e){this.x-=e.x,this.y-=e.y}mult(e){return h.create(this.x*e,this.y*e)}multTo(e){this.x*=e,this.y*=e}div(e){return h.create(this.x/e,this.y/e)}divTo(e){this.x/=e,this.y/=e}distanceTo(e){return this.sub(e).length}getLengthSq(){return this.x**2+this.y**2}distanceToSq(e){return this.sub(e).getLengthSq()}manhattanDistanceTo(e){return Math.abs(e.x-this.x)+Math.abs(e.y-this.y)}copy(){return h.clone(this)}setTo(e){this.x=e.x,this.y=e.y}rotate(e){return h.create(this.x*Math.cos(e)-this.y*Math.sin(e),this.x*Math.sin(e)+this.y*Math.cos(e))}updateFromAngle(e,t){this.x=Math.cos(e)*t,this.y=Math.sin(e)*t}}new WeakMap,new WeakSet;new WeakMap;new WeakMap;new WeakMap;new WeakMap;class d extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e)}isEnabled(){const e=this.container,t=e.actualOptions,s=e.interactivity.mouse,n=t.interactivity.events,i=function(e,t){return t instanceof Array?!!t.find((t=>t.enable&&o(e,t.mode))):o(e,t.mode)}("repulse",n.onDiv);if(!(i||n.onHover.enable&&s.position||n.onClick.enable&&s.clickPosition))return!1;const r=n.onHover.mode,a=n.onClick.mode;return o("repulse",r)||o("repulse",a)||i}reset(){}async interact(){const e=this.container,t=e.actualOptions,s=e.interactivity.status===u.mouseMoveEvent,n=t.interactivity.events,i=n.onHover.enable,a=n.onHover.mode,c=n.onClick.enable,l=n.onClick.mode,h=n.onDiv;s&&i&&o("repulse",a)?this.hoverRepulse():c&&o("repulse",l)?this.clickRepulse():function(e,t,s){if(t instanceof Array)for(const n of t){const t=n.mode;n.enable&&o(e,t)&&r(n,s)}else{const n=t.mode;t.enable&&o(e,n)&&r(t,s)}}("repulse",h,((e,t)=>this.singleSelectorRepulse(e,t)))}singleSelectorRepulse(e,t){const s=this.container,n=document.querySelectorAll(e);n.length&&n.forEach((e=>{const n=e,o=s.retina.pixelRatio,r={x:(n.offsetLeft+n.offsetWidth/2)*o,y:(n.offsetTop+n.offsetHeight/2)*o},a=n.offsetWidth/2*o,u="circle"===t.type?new c(r.x,r.y,a):new l(n.offsetLeft*o,n.offsetTop*o,n.offsetWidth*o,n.offsetHeight*o),h=function(e,t){if(t&&e)return e instanceof Array?e.find((e=>i(t,e.selectors))):i(t,e.selectors)?e:void 0}(s.actualOptions.interactivity.modes.repulse.divs,n);this.processRepulse(r,a,u,h)}))}hoverRepulse(){const e=this.container,t=e.interactivity.mouse.position;if(!t)return;const s=e.retina.repulseModeDistance;this.processRepulse(t,s,new c(t.x,t.y,s))}processRepulse(e,t,i,o){var r;const a=this.container,c=a.particles.quadTree.query(i),u=a.actualOptions.interactivity.modes.repulse;for(const i of c){const{dx:a,dy:c,distance:f}=s(i.position,e),y=(null!==(r=null==o?void 0:o.speed)&&void 0!==r?r:u.speed)*u.factor,v=(l=n(1-f/t,u.easing)*y,d=0,p=u.maxSpeed,Math.min(Math.max(l,d),p)),x=h.create(0===f?y:a/f*v,0===f?y:c/f*v);i.position.addTo(x)}var l,d,p}clickRepulse(){const e=this.container;if(e.repulse.finish||(e.repulse.count||(e.repulse.count=0),e.repulse.count++,e.repulse.count===e.particles.count&&(e.repulse.finish=!0)),e.repulse.clicking){const t=e.retina.repulseModeDistance,n=Math.pow(t/6,3),i=e.interactivity.mouse.clickPosition;if(void 0===i)return;const o=new c(i.x,i.y,n),r=e.particles.quadTree.query(o);for(const t of r){const{dx:o,dy:r,distance:a}=s(i,t.position),c=a**2,u=e.actualOptions.interactivity.modes.repulse.speed,l=-n*u/c;if(c<=n){e.repulse.particles.push(t);const s=h.create(o,r);s.length=l,t.velocity.setTo(s)}}}else if(!1===e.repulse.clicking){for(const t of e.repulse.particles)t.velocity.setTo(t.initialVelocity);e.repulse.particles=[]}}}async function p(e){await e.addInteractor("externalRepulse",(e=>new d(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
  }
@@ -3767,10 +3767,10 @@
3767
3767
  return this.getRadius() ** 2 * Math.PI / 2;
3768
3768
  }
3769
3769
  getFillColor() {
3770
- var _a, _b, _c;
3770
+ var _a, _b;
3771
3771
  const color = (_a = this.bubble.color) !== null && _a !== void 0 ? _a : getHslFromAnimation(this.color);
3772
3772
  if (color && this.roll && (this.backColor || this.roll.alter)) {
3773
- const rolled = Math.floor(((_c = (_b = this.roll) === null || _b === void 0 ? void 0 : _b.angle) !== null && _c !== void 0 ? _c : 0) / (Math.PI / 2)) % 2;
3773
+ const backFactor = this.options.roll.mode === "both" ? 2 : 1, backSum = this.options.roll.mode === "horizontal" ? Math.PI / 2 : 0, rolled = Math.floor((((_b = this.roll.angle) !== null && _b !== void 0 ? _b : 0) + backSum) / (Math.PI / backFactor)) % 2;
3774
3774
  if (rolled) {
3775
3775
  if (this.backColor) {
3776
3776
  return this.backColor;
@@ -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() {
@@ -4899,7 +4899,7 @@
4899
4899
  super(container);
4900
4900
  this.delay = 0;
4901
4901
  }
4902
- interact(delta) {
4902
+ async interact(delta) {
4903
4903
  var _a, _b, _c, _d;
4904
4904
  if (!this.container.retina.reduceFactor) {
4905
4905
  return;
@@ -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 i in o)("object"==typeof exports?exports:e)[i]=o[i]}}(window,(function(){return function(){"use strict";var e={d:function(t,o){for(var i in o)e.o(o,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:o[i]})},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){return e===t||t instanceof Array&&t.indexOf(e)>-1}e.r(t),e.d(t,{loadExternalTrailInteraction:function(){return a}});class i{}i.generatedAttribute="generated",i.randomColorValue="random",i.midColorValue="mid",i.touchEndEvent="touchend",i.mouseDownEvent="mousedown",i.mouseUpEvent="mouseup",i.mouseMoveEvent="mousemove",i.touchStartEvent="touchstart",i.touchMoveEvent="touchmove",i.mouseLeaveEvent="mouseleave",i.mouseOutEvent="mouseout",i.touchCancelEvent="touchcancel",i.resizeEvent="resize",i.visibilityChangeEvent="visibilitychange",i.noPolygonDataLoaded="No polygon data loaded.",i.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 n extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e),this.delay=0}interact(e){var t,o,i,n;if(!this.container.retina.reduceFactor)return;const a=this.container,r=a.actualOptions.interactivity.modes.trail,s=1e3*r.delay/this.container.retina.reduceFactor;if(this.delay<s&&(this.delay+=e.value),this.delay<s)return;let u=!0;r.pauseOnStop&&(a.interactivity.mouse.position===this.lastPosition||(null===(t=a.interactivity.mouse.position)||void 0===t?void 0:t.x)===(null===(o=this.lastPosition)||void 0===o?void 0:o.x)&&(null===(i=a.interactivity.mouse.position)||void 0===i?void 0:i.y)===(null===(n=this.lastPosition)||void 0===n?void 0:n.y))&&(u=!1),a.interactivity.mouse.position?this.lastPosition={x:a.interactivity.mouse.position.x,y:a.interactivity.mouse.position.y}:delete this.lastPosition,u&&a.particles.push(r.quantity,a.interactivity.mouse,r.particles),this.delay-=s}isEnabled(){const e=this.container,t=e.actualOptions,i=e.interactivity.mouse,n=t.interactivity.events;return i.clicking&&i.inside&&!!i.position&&o("trail",n.onClick.mode)||i.inside&&!!i.position&&o("trail",n.onHover.mode)}reset(){}}async function a(e){await e.addInteractor("externalTrail",(e=>new n(e)))}return t}()}));
1
+ /*! tsParticles v1.41.4 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 i in o)("object"==typeof exports?exports:e)[i]=o[i]}}(window,(function(){return function(){"use strict";var e={d:function(t,o){for(var i in o)e.o(o,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:o[i]})},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){return e===t||t instanceof Array&&t.indexOf(e)>-1}e.r(t),e.d(t,{loadExternalTrailInteraction:function(){return a}});class i{}i.generatedAttribute="generated",i.randomColorValue="random",i.midColorValue="mid",i.touchEndEvent="touchend",i.mouseDownEvent="mousedown",i.mouseUpEvent="mouseup",i.mouseMoveEvent="mousemove",i.touchStartEvent="touchstart",i.touchMoveEvent="touchmove",i.mouseLeaveEvent="mouseleave",i.mouseOutEvent="mouseout",i.touchCancelEvent="touchcancel",i.resizeEvent="resize",i.visibilityChangeEvent="visibilitychange",i.noPolygonDataLoaded="No polygon data loaded.",i.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 n extends class{constructor(e){this.container=e,this.type=0}}{constructor(e){super(e),this.delay=0}async interact(e){var t,o,i,n;if(!this.container.retina.reduceFactor)return;const a=this.container,r=a.actualOptions.interactivity.modes.trail,s=1e3*r.delay/this.container.retina.reduceFactor;if(this.delay<s&&(this.delay+=e.value),this.delay<s)return;let u=!0;r.pauseOnStop&&(a.interactivity.mouse.position===this.lastPosition||(null===(t=a.interactivity.mouse.position)||void 0===t?void 0:t.x)===(null===(o=this.lastPosition)||void 0===o?void 0:o.x)&&(null===(i=a.interactivity.mouse.position)||void 0===i?void 0:i.y)===(null===(n=this.lastPosition)||void 0===n?void 0:n.y))&&(u=!1),a.interactivity.mouse.position?this.lastPosition={x:a.interactivity.mouse.position.x,y:a.interactivity.mouse.position.y}:delete this.lastPosition,u&&a.particles.push(r.quantity,a.interactivity.mouse,r.particles),this.delay-=s}isEnabled(){const e=this.container,t=e.actualOptions,i=e.interactivity.mouse,n=t.interactivity.events;return i.clicking&&i.inside&&!!i.position&&o("trail",n.onClick.mode)||i.inside&&!!i.position&&o("trail",n.onHover.mode)}reset(){}}async function a(e){await e.addInteractor("externalTrail",(e=>new n(e)))}return t}()}));
@@ -1591,20 +1591,20 @@
1591
1591
  }
1592
1592
  }
1593
1593
  }
1594
- externalInteract(delta) {
1594
+ async externalInteract(delta) {
1595
1595
  for (const interactor of this.externalInteractors) {
1596
1596
  if (interactor.isEnabled()) {
1597
- interactor.interact(delta);
1597
+ await interactor.interact(delta);
1598
1598
  }
1599
1599
  }
1600
1600
  }
1601
- particlesInteract(particle, delta) {
1601
+ async particlesInteract(particle, delta) {
1602
1602
  for (const interactor of this.externalInteractors) {
1603
1603
  interactor.reset(particle);
1604
1604
  }
1605
1605
  for (const interactor of this.particleInteractors) {
1606
1606
  if (interactor.isEnabled(particle)) {
1607
- interactor.interact(particle, delta);
1607
+ await interactor.interact(particle, delta);
1608
1608
  }
1609
1609
  }
1610
1610
  }
@@ -3767,10 +3767,10 @@
3767
3767
  return this.getRadius() ** 2 * Math.PI / 2;
3768
3768
  }
3769
3769
  getFillColor() {
3770
- var _a, _b, _c;
3770
+ var _a, _b;
3771
3771
  const color = (_a = this.bubble.color) !== null && _a !== void 0 ? _a : getHslFromAnimation(this.color);
3772
3772
  if (color && this.roll && (this.backColor || this.roll.alter)) {
3773
- const rolled = Math.floor(((_c = (_b = this.roll) === null || _b === void 0 ? void 0 : _b.angle) !== null && _c !== void 0 ? _c : 0) / (Math.PI / 2)) % 2;
3773
+ const backFactor = this.options.roll.mode === "both" ? 2 : 1, backSum = this.options.roll.mode === "horizontal" ? Math.PI / 2 : 0, rolled = Math.floor((((_b = this.roll.angle) !== null && _b !== void 0 ? _b : 0) + backSum) / (Math.PI / backFactor)) % 2;
3774
3774
  if (rolled) {
3775
3775
  if (this.backColor) {
3776
3776
  return this.backColor;
@@ -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() {
@@ -4898,7 +4898,7 @@
4898
4898
  constructor(container) {
4899
4899
  super(container);
4900
4900
  }
4901
- interact(p1) {
4901
+ async interact(p1) {
4902
4902
  var _a;
4903
4903
  const container = this.container, distance = (_a = p1.retina.attractDistance) !== null && _a !== void 0 ? _a : container.retina.attractDistance, pos1 = p1.getPosition(), query = container.particles.quadTree.queryCircle(pos1, distance);
4904
4904
  for (const p2 of query) {
@@ -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){const o=e.x-t.x,n=e.y-t.y;return{dx:o,dy:n,distance:Math.sqrt(o*o+n*n)}}e.r(t),e.d(t,{loadParticlesAttractInteraction:function(){return r}});class n{}n.generatedAttribute="generated",n.randomColorValue="random",n.midColorValue="mid",n.touchEndEvent="touchend",n.mouseDownEvent="mousedown",n.mouseUpEvent="mouseup",n.mouseMoveEvent="mousemove",n.touchStartEvent="touchstart",n.touchMoveEvent="touchmove",n.mouseLeaveEvent="mouseleave",n.mouseOutEvent="mouseout",n.touchCancelEvent="touchcancel",n.resizeEvent="resize",n.visibilityChangeEvent="visibilitychange",n.noPolygonDataLoaded="No polygon data loaded.",n.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=1}}{constructor(e){super(e)}interact(e){var t;const n=this.container,a=null!==(t=e.retina.attractDistance)&&void 0!==t?t:n.retina.attractDistance,r=e.getPosition(),i=n.particles.quadTree.queryCircle(r,a);for(const t of i){if(e===t||!t.options.move.attract.enable||t.destroyed||t.spawning)continue;const n=t.getPosition(),{dx:a,dy:i}=o(r,n),c=e.options.move.attract.rotate,s=a/(1e3*c.x),u=i/(1e3*c.y),l=t.size.value/e.size.value,d=1/l;e.velocity.x-=s*l,e.velocity.y-=u*l,t.velocity.x+=s*d,t.velocity.y+=u*d}}isEnabled(e){return e.options.move.attract.enable}reset(){}}async function r(e){await e.addInteractor("particlesAttract",(e=>new a(e)))}return t}()}));
1
+ /*! tsParticles v1.41.4 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){const o=e.x-t.x,n=e.y-t.y;return{dx:o,dy:n,distance:Math.sqrt(o*o+n*n)}}e.r(t),e.d(t,{loadParticlesAttractInteraction:function(){return r}});class n{}n.generatedAttribute="generated",n.randomColorValue="random",n.midColorValue="mid",n.touchEndEvent="touchend",n.mouseDownEvent="mousedown",n.mouseUpEvent="mouseup",n.mouseMoveEvent="mousemove",n.touchStartEvent="touchstart",n.touchMoveEvent="touchmove",n.mouseLeaveEvent="mouseleave",n.mouseOutEvent="mouseout",n.touchCancelEvent="touchcancel",n.resizeEvent="resize",n.visibilityChangeEvent="visibilitychange",n.noPolygonDataLoaded="No polygon data loaded.",n.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=1}}{constructor(e){super(e)}async interact(e){var t;const n=this.container,a=null!==(t=e.retina.attractDistance)&&void 0!==t?t:n.retina.attractDistance,r=e.getPosition(),i=n.particles.quadTree.queryCircle(r,a);for(const t of i){if(e===t||!t.options.move.attract.enable||t.destroyed||t.spawning)continue;const n=t.getPosition(),{dx:a,dy:i}=o(r,n),c=e.options.move.attract.rotate,s=a/(1e3*c.x),u=i/(1e3*c.y),l=t.size.value/e.size.value,d=1/l;e.velocity.x-=s*l,e.velocity.y-=u*l,t.velocity.x+=s*d,t.velocity.y+=u*d}}isEnabled(e){return e.options.move.attract.enable}reset(){}}async function r(e){await e.addInteractor("particlesAttract",(e=>new a(e)))}return t}()}));