tsparticles 1.42.1 → 1.42.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 (77) hide show
  1. package/Core/Canvas.d.ts +1 -1
  2. package/Core/Canvas.js +16 -7
  3. package/Core/Particles.js +2 -3
  4. package/browser/Core/Canvas.d.ts +1 -1
  5. package/browser/Core/Canvas.js +16 -7
  6. package/browser/Core/Particles.js +2 -3
  7. package/esm/Core/Canvas.d.ts +1 -1
  8. package/esm/Core/Canvas.js +16 -7
  9. package/esm/Core/Particles.js +2 -3
  10. package/package.json +15 -3
  11. package/report.html +2 -2
  12. package/report.slim.html +2 -2
  13. package/tsparticles.engine.js +15 -10
  14. package/tsparticles.engine.min.js +2 -2
  15. package/tsparticles.interaction.external.attract.js +15 -10
  16. package/tsparticles.interaction.external.attract.min.js +1 -1
  17. package/tsparticles.interaction.external.bounce.js +15 -10
  18. package/tsparticles.interaction.external.bounce.min.js +1 -1
  19. package/tsparticles.interaction.external.bubble.js +15 -10
  20. package/tsparticles.interaction.external.bubble.min.js +1 -1
  21. package/tsparticles.interaction.external.connect.js +15 -10
  22. package/tsparticles.interaction.external.connect.min.js +1 -1
  23. package/tsparticles.interaction.external.grab.js +15 -10
  24. package/tsparticles.interaction.external.grab.min.js +1 -1
  25. package/tsparticles.interaction.external.repulse.js +15 -10
  26. package/tsparticles.interaction.external.repulse.min.js +1 -1
  27. package/tsparticles.interaction.external.trail.js +15 -10
  28. package/tsparticles.interaction.external.trail.min.js +1 -1
  29. package/tsparticles.interaction.particles.attract.js +15 -10
  30. package/tsparticles.interaction.particles.attract.min.js +1 -1
  31. package/tsparticles.interaction.particles.collisions.js +15 -10
  32. package/tsparticles.interaction.particles.collisions.min.js +1 -1
  33. package/tsparticles.interaction.particles.links.js +15 -10
  34. package/tsparticles.interaction.particles.links.min.js +1 -1
  35. package/tsparticles.js +15 -10
  36. package/tsparticles.min.js +2 -2
  37. package/tsparticles.pathseg.min.js +1 -1
  38. package/tsparticles.plugins.absorbers.js +15 -10
  39. package/tsparticles.plugins.absorbers.min.js +1 -1
  40. package/tsparticles.plugins.emitters.js +15 -10
  41. package/tsparticles.plugins.emitters.min.js +1 -1
  42. package/tsparticles.plugins.polygonMask.js +15 -10
  43. package/tsparticles.plugins.polygonMask.min.js +1 -1
  44. package/tsparticles.shape.circle.min.js +1 -1
  45. package/tsparticles.shape.image.js +15 -10
  46. package/tsparticles.shape.image.min.js +1 -1
  47. package/tsparticles.shape.line.min.js +1 -1
  48. package/tsparticles.shape.polygon.min.js +1 -1
  49. package/tsparticles.shape.square.min.js +1 -1
  50. package/tsparticles.shape.star.min.js +1 -1
  51. package/tsparticles.shape.text.js +15 -10
  52. package/tsparticles.shape.text.min.js +1 -1
  53. package/tsparticles.slim.js +15 -10
  54. package/tsparticles.slim.min.js +2 -2
  55. package/tsparticles.updater.angle.js +15 -10
  56. package/tsparticles.updater.angle.min.js +1 -1
  57. package/tsparticles.updater.color.js +15 -10
  58. package/tsparticles.updater.color.min.js +1 -1
  59. package/tsparticles.updater.life.js +15 -10
  60. package/tsparticles.updater.life.min.js +1 -1
  61. package/tsparticles.updater.opacity.js +15 -10
  62. package/tsparticles.updater.opacity.min.js +1 -1
  63. package/tsparticles.updater.outModes.js +15 -10
  64. package/tsparticles.updater.outModes.min.js +1 -1
  65. package/tsparticles.updater.roll.js +15 -10
  66. package/tsparticles.updater.roll.min.js +1 -1
  67. package/tsparticles.updater.size.js +15 -10
  68. package/tsparticles.updater.size.min.js +1 -1
  69. package/tsparticles.updater.strokeColor.js +15 -10
  70. package/tsparticles.updater.strokeColor.min.js +1 -1
  71. package/tsparticles.updater.tilt.js +15 -10
  72. package/tsparticles.updater.tilt.min.js +1 -1
  73. package/tsparticles.updater.wobble.js +15 -10
  74. package/tsparticles.updater.wobble.min.js +1 -1
  75. package/umd/Core/Canvas.d.ts +1 -1
  76. package/umd/Core/Canvas.js +16 -7
  77. package/umd/Core/Particles.js +2 -3
@@ -2093,9 +2093,9 @@
2093
2093
  paint() {
2094
2094
  const options = this.container.actualOptions;
2095
2095
  this.draw((ctx => {
2096
- if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
2096
+ if (options.backgroundMask.enable && options.backgroundMask.cover) {
2097
2097
  clear(ctx, this.size);
2098
- this.paintBase(getStyleFromRgb(this.coverColor, this.coverColor.a));
2098
+ this.paintBase(this.coverColorStyle);
2099
2099
  } else {
2100
2100
  this.paintBase();
2101
2101
  }
@@ -2138,11 +2138,16 @@
2138
2138
  const container = this.container;
2139
2139
  const pxRatio = container.retina.pixelRatio;
2140
2140
  const size = container.canvas.size;
2141
+ const newSize = {
2142
+ width: this.element.offsetWidth * pxRatio,
2143
+ height: this.element.offsetHeight * pxRatio
2144
+ };
2145
+ if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {
2146
+ return;
2147
+ }
2141
2148
  const oldSize = Object.assign({}, size);
2142
- size.width = this.element.offsetWidth * pxRatio;
2143
- size.height = this.element.offsetHeight * pxRatio;
2144
- this.element.width = size.width;
2145
- this.element.height = size.height;
2149
+ this.element.width = size.width = this.element.offsetWidth * pxRatio;
2150
+ this.element.height = size.height = this.element.offsetHeight * pxRatio;
2146
2151
  if (this.container.started) {
2147
2152
  this.resizeFactor = {
2148
2153
  width: size.width / oldSize.width,
@@ -2266,12 +2271,13 @@
2266
2271
  const color = cover.color;
2267
2272
  const coverRgb = colorToRgb(color);
2268
2273
  if (coverRgb) {
2269
- this.coverColor = {
2274
+ const coverColor = {
2270
2275
  r: coverRgb.r,
2271
2276
  g: coverRgb.g,
2272
2277
  b: coverRgb.b,
2273
2278
  a: cover.opacity
2274
2279
  };
2280
+ this.coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);
2275
2281
  }
2276
2282
  }
2277
2283
  initTrail() {
@@ -4458,10 +4464,9 @@
4458
4464
  delete container.canvas.resizeFactor;
4459
4465
  }
4460
4466
  async draw(delta) {
4461
- const container = this.container;
4462
- container.canvas.clear();
4463
- const canvasSize = this.container.canvas.size;
4467
+ const container = this.container, canvasSize = this.container.canvas.size;
4464
4468
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4469
+ container.canvas.clear();
4465
4470
  await this.update(delta);
4466
4471
  if (this.needsSort) {
4467
4472
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.42.1 by Matteo Bruni */
1
+ /*! tsParticles v1.42.4 by Matteo Bruni */
2
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}()}));
@@ -2125,9 +2125,9 @@
2125
2125
  paint() {
2126
2126
  const options = this.container.actualOptions;
2127
2127
  this.draw((ctx => {
2128
- if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
2128
+ if (options.backgroundMask.enable && options.backgroundMask.cover) {
2129
2129
  clear(ctx, this.size);
2130
- this.paintBase(getStyleFromRgb(this.coverColor, this.coverColor.a));
2130
+ this.paintBase(this.coverColorStyle);
2131
2131
  } else {
2132
2132
  this.paintBase();
2133
2133
  }
@@ -2170,11 +2170,16 @@
2170
2170
  const container = this.container;
2171
2171
  const pxRatio = container.retina.pixelRatio;
2172
2172
  const size = container.canvas.size;
2173
+ const newSize = {
2174
+ width: this.element.offsetWidth * pxRatio,
2175
+ height: this.element.offsetHeight * pxRatio
2176
+ };
2177
+ if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {
2178
+ return;
2179
+ }
2173
2180
  const oldSize = Object.assign({}, size);
2174
- size.width = this.element.offsetWidth * pxRatio;
2175
- size.height = this.element.offsetHeight * pxRatio;
2176
- this.element.width = size.width;
2177
- this.element.height = size.height;
2181
+ this.element.width = size.width = this.element.offsetWidth * pxRatio;
2182
+ this.element.height = size.height = this.element.offsetHeight * pxRatio;
2178
2183
  if (this.container.started) {
2179
2184
  this.resizeFactor = {
2180
2185
  width: size.width / oldSize.width,
@@ -2298,12 +2303,13 @@
2298
2303
  const color = cover.color;
2299
2304
  const coverRgb = colorToRgb(color);
2300
2305
  if (coverRgb) {
2301
- this.coverColor = {
2306
+ const coverColor = {
2302
2307
  r: coverRgb.r,
2303
2308
  g: coverRgb.g,
2304
2309
  b: coverRgb.b,
2305
2310
  a: cover.opacity
2306
2311
  };
2312
+ this.coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);
2307
2313
  }
2308
2314
  }
2309
2315
  initTrail() {
@@ -4490,10 +4496,9 @@
4490
4496
  delete container.canvas.resizeFactor;
4491
4497
  }
4492
4498
  async draw(delta) {
4493
- const container = this.container;
4494
- container.canvas.clear();
4495
- const canvasSize = this.container.canvas.size;
4499
+ const container = this.container, canvasSize = this.container.canvas.size;
4496
4500
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4501
+ container.canvas.clear();
4497
4502
  await this.update(delta);
4498
4503
  if (this.needsSort) {
4499
4504
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.42.1 by Matteo Bruni */
1
+ /*! tsParticles v1.42.4 by Matteo Bruni */
2
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}()}));
@@ -2034,9 +2034,9 @@
2034
2034
  paint() {
2035
2035
  const options = this.container.actualOptions;
2036
2036
  this.draw((ctx => {
2037
- if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
2037
+ if (options.backgroundMask.enable && options.backgroundMask.cover) {
2038
2038
  clear(ctx, this.size);
2039
- this.paintBase(getStyleFromRgb(this.coverColor, this.coverColor.a));
2039
+ this.paintBase(this.coverColorStyle);
2040
2040
  } else {
2041
2041
  this.paintBase();
2042
2042
  }
@@ -2079,11 +2079,16 @@
2079
2079
  const container = this.container;
2080
2080
  const pxRatio = container.retina.pixelRatio;
2081
2081
  const size = container.canvas.size;
2082
+ const newSize = {
2083
+ width: this.element.offsetWidth * pxRatio,
2084
+ height: this.element.offsetHeight * pxRatio
2085
+ };
2086
+ if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {
2087
+ return;
2088
+ }
2082
2089
  const oldSize = Object.assign({}, size);
2083
- size.width = this.element.offsetWidth * pxRatio;
2084
- size.height = this.element.offsetHeight * pxRatio;
2085
- this.element.width = size.width;
2086
- this.element.height = size.height;
2090
+ this.element.width = size.width = this.element.offsetWidth * pxRatio;
2091
+ this.element.height = size.height = this.element.offsetHeight * pxRatio;
2087
2092
  if (this.container.started) {
2088
2093
  this.resizeFactor = {
2089
2094
  width: size.width / oldSize.width,
@@ -2207,12 +2212,13 @@
2207
2212
  const color = cover.color;
2208
2213
  const coverRgb = colorToRgb(color);
2209
2214
  if (coverRgb) {
2210
- this.coverColor = {
2215
+ const coverColor = {
2211
2216
  r: coverRgb.r,
2212
2217
  g: coverRgb.g,
2213
2218
  b: coverRgb.b,
2214
2219
  a: cover.opacity
2215
2220
  };
2221
+ this.coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);
2216
2222
  }
2217
2223
  }
2218
2224
  initTrail() {
@@ -4399,10 +4405,9 @@
4399
4405
  delete container.canvas.resizeFactor;
4400
4406
  }
4401
4407
  async draw(delta) {
4402
- const container = this.container;
4403
- container.canvas.clear();
4404
- const canvasSize = this.container.canvas.size;
4408
+ const container = this.container, canvasSize = this.container.canvas.size;
4405
4409
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4410
+ container.canvas.clear();
4406
4411
  await this.update(delta);
4407
4412
  if (this.needsSort) {
4408
4413
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.42.1 by Matteo Bruni */
1
+ /*! tsParticles v1.42.4 by Matteo Bruni */
2
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}()}));
@@ -1994,9 +1994,9 @@
1994
1994
  paint() {
1995
1995
  const options = this.container.actualOptions;
1996
1996
  this.draw((ctx => {
1997
- if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
1997
+ if (options.backgroundMask.enable && options.backgroundMask.cover) {
1998
1998
  clear(ctx, this.size);
1999
- this.paintBase(getStyleFromRgb(this.coverColor, this.coverColor.a));
1999
+ this.paintBase(this.coverColorStyle);
2000
2000
  } else {
2001
2001
  this.paintBase();
2002
2002
  }
@@ -2039,11 +2039,16 @@
2039
2039
  const container = this.container;
2040
2040
  const pxRatio = container.retina.pixelRatio;
2041
2041
  const size = container.canvas.size;
2042
+ const newSize = {
2043
+ width: this.element.offsetWidth * pxRatio,
2044
+ height: this.element.offsetHeight * pxRatio
2045
+ };
2046
+ if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {
2047
+ return;
2048
+ }
2042
2049
  const oldSize = Object.assign({}, size);
2043
- size.width = this.element.offsetWidth * pxRatio;
2044
- size.height = this.element.offsetHeight * pxRatio;
2045
- this.element.width = size.width;
2046
- this.element.height = size.height;
2050
+ this.element.width = size.width = this.element.offsetWidth * pxRatio;
2051
+ this.element.height = size.height = this.element.offsetHeight * pxRatio;
2047
2052
  if (this.container.started) {
2048
2053
  this.resizeFactor = {
2049
2054
  width: size.width / oldSize.width,
@@ -2167,12 +2172,13 @@
2167
2172
  const color = cover.color;
2168
2173
  const coverRgb = colorToRgb(color);
2169
2174
  if (coverRgb) {
2170
- this.coverColor = {
2175
+ const coverColor = {
2171
2176
  r: coverRgb.r,
2172
2177
  g: coverRgb.g,
2173
2178
  b: coverRgb.b,
2174
2179
  a: cover.opacity
2175
2180
  };
2181
+ this.coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);
2176
2182
  }
2177
2183
  }
2178
2184
  initTrail() {
@@ -4359,10 +4365,9 @@
4359
4365
  delete container.canvas.resizeFactor;
4360
4366
  }
4361
4367
  async draw(delta) {
4362
- const container = this.container;
4363
- container.canvas.clear();
4364
- const canvasSize = this.container.canvas.size;
4368
+ const container = this.container, canvasSize = this.container.canvas.size;
4365
4369
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4370
+ container.canvas.clear();
4366
4371
  await this.update(delta);
4367
4372
  if (this.needsSort) {
4368
4373
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.42.1 by Matteo Bruni */
1
+ /*! tsParticles v1.42.4 by Matteo Bruni */
2
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}()}));
@@ -1994,9 +1994,9 @@
1994
1994
  paint() {
1995
1995
  const options = this.container.actualOptions;
1996
1996
  this.draw((ctx => {
1997
- if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
1997
+ if (options.backgroundMask.enable && options.backgroundMask.cover) {
1998
1998
  clear(ctx, this.size);
1999
- this.paintBase(getStyleFromRgb(this.coverColor, this.coverColor.a));
1999
+ this.paintBase(this.coverColorStyle);
2000
2000
  } else {
2001
2001
  this.paintBase();
2002
2002
  }
@@ -2039,11 +2039,16 @@
2039
2039
  const container = this.container;
2040
2040
  const pxRatio = container.retina.pixelRatio;
2041
2041
  const size = container.canvas.size;
2042
+ const newSize = {
2043
+ width: this.element.offsetWidth * pxRatio,
2044
+ height: this.element.offsetHeight * pxRatio
2045
+ };
2046
+ if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {
2047
+ return;
2048
+ }
2042
2049
  const oldSize = Object.assign({}, size);
2043
- size.width = this.element.offsetWidth * pxRatio;
2044
- size.height = this.element.offsetHeight * pxRatio;
2045
- this.element.width = size.width;
2046
- this.element.height = size.height;
2050
+ this.element.width = size.width = this.element.offsetWidth * pxRatio;
2051
+ this.element.height = size.height = this.element.offsetHeight * pxRatio;
2047
2052
  if (this.container.started) {
2048
2053
  this.resizeFactor = {
2049
2054
  width: size.width / oldSize.width,
@@ -2167,12 +2172,13 @@
2167
2172
  const color = cover.color;
2168
2173
  const coverRgb = colorToRgb(color);
2169
2174
  if (coverRgb) {
2170
- this.coverColor = {
2175
+ const coverColor = {
2171
2176
  r: coverRgb.r,
2172
2177
  g: coverRgb.g,
2173
2178
  b: coverRgb.b,
2174
2179
  a: cover.opacity
2175
2180
  };
2181
+ this.coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);
2176
2182
  }
2177
2183
  }
2178
2184
  initTrail() {
@@ -4359,10 +4365,9 @@
4359
4365
  delete container.canvas.resizeFactor;
4360
4366
  }
4361
4367
  async draw(delta) {
4362
- const container = this.container;
4363
- container.canvas.clear();
4364
- const canvasSize = this.container.canvas.size;
4368
+ const container = this.container, canvasSize = this.container.canvas.size;
4365
4369
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4370
+ container.canvas.clear();
4366
4371
  await this.update(delta);
4367
4372
  if (this.needsSort) {
4368
4373
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.42.1 by Matteo Bruni */
1
+ /*! tsParticles v1.42.4 by Matteo Bruni */
2
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}()}));
@@ -2125,9 +2125,9 @@
2125
2125
  paint() {
2126
2126
  const options = this.container.actualOptions;
2127
2127
  this.draw((ctx => {
2128
- if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
2128
+ if (options.backgroundMask.enable && options.backgroundMask.cover) {
2129
2129
  clear(ctx, this.size);
2130
- this.paintBase(getStyleFromRgb(this.coverColor, this.coverColor.a));
2130
+ this.paintBase(this.coverColorStyle);
2131
2131
  } else {
2132
2132
  this.paintBase();
2133
2133
  }
@@ -2170,11 +2170,16 @@
2170
2170
  const container = this.container;
2171
2171
  const pxRatio = container.retina.pixelRatio;
2172
2172
  const size = container.canvas.size;
2173
+ const newSize = {
2174
+ width: this.element.offsetWidth * pxRatio,
2175
+ height: this.element.offsetHeight * pxRatio
2176
+ };
2177
+ if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {
2178
+ return;
2179
+ }
2173
2180
  const oldSize = Object.assign({}, size);
2174
- size.width = this.element.offsetWidth * pxRatio;
2175
- size.height = this.element.offsetHeight * pxRatio;
2176
- this.element.width = size.width;
2177
- this.element.height = size.height;
2181
+ this.element.width = size.width = this.element.offsetWidth * pxRatio;
2182
+ this.element.height = size.height = this.element.offsetHeight * pxRatio;
2178
2183
  if (this.container.started) {
2179
2184
  this.resizeFactor = {
2180
2185
  width: size.width / oldSize.width,
@@ -2298,12 +2303,13 @@
2298
2303
  const color = cover.color;
2299
2304
  const coverRgb = colorToRgb(color);
2300
2305
  if (coverRgb) {
2301
- this.coverColor = {
2306
+ const coverColor = {
2302
2307
  r: coverRgb.r,
2303
2308
  g: coverRgb.g,
2304
2309
  b: coverRgb.b,
2305
2310
  a: cover.opacity
2306
2311
  };
2312
+ this.coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);
2307
2313
  }
2308
2314
  }
2309
2315
  initTrail() {
@@ -4490,10 +4496,9 @@
4490
4496
  delete container.canvas.resizeFactor;
4491
4497
  }
4492
4498
  async draw(delta) {
4493
- const container = this.container;
4494
- container.canvas.clear();
4495
- const canvasSize = this.container.canvas.size;
4499
+ const container = this.container, canvasSize = this.container.canvas.size;
4496
4500
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4501
+ container.canvas.clear();
4497
4502
  await this.update(delta);
4498
4503
  if (this.needsSort) {
4499
4504
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.42.1 by Matteo Bruni */
1
+ /*! tsParticles v1.42.4 by Matteo Bruni */
2
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}()}));
@@ -1994,9 +1994,9 @@
1994
1994
  paint() {
1995
1995
  const options = this.container.actualOptions;
1996
1996
  this.draw((ctx => {
1997
- if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
1997
+ if (options.backgroundMask.enable && options.backgroundMask.cover) {
1998
1998
  clear(ctx, this.size);
1999
- this.paintBase(getStyleFromRgb(this.coverColor, this.coverColor.a));
1999
+ this.paintBase(this.coverColorStyle);
2000
2000
  } else {
2001
2001
  this.paintBase();
2002
2002
  }
@@ -2039,11 +2039,16 @@
2039
2039
  const container = this.container;
2040
2040
  const pxRatio = container.retina.pixelRatio;
2041
2041
  const size = container.canvas.size;
2042
+ const newSize = {
2043
+ width: this.element.offsetWidth * pxRatio,
2044
+ height: this.element.offsetHeight * pxRatio
2045
+ };
2046
+ if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {
2047
+ return;
2048
+ }
2042
2049
  const oldSize = Object.assign({}, size);
2043
- size.width = this.element.offsetWidth * pxRatio;
2044
- size.height = this.element.offsetHeight * pxRatio;
2045
- this.element.width = size.width;
2046
- this.element.height = size.height;
2050
+ this.element.width = size.width = this.element.offsetWidth * pxRatio;
2051
+ this.element.height = size.height = this.element.offsetHeight * pxRatio;
2047
2052
  if (this.container.started) {
2048
2053
  this.resizeFactor = {
2049
2054
  width: size.width / oldSize.width,
@@ -2167,12 +2172,13 @@
2167
2172
  const color = cover.color;
2168
2173
  const coverRgb = colorToRgb(color);
2169
2174
  if (coverRgb) {
2170
- this.coverColor = {
2175
+ const coverColor = {
2171
2176
  r: coverRgb.r,
2172
2177
  g: coverRgb.g,
2173
2178
  b: coverRgb.b,
2174
2179
  a: cover.opacity
2175
2180
  };
2181
+ this.coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);
2176
2182
  }
2177
2183
  }
2178
2184
  initTrail() {
@@ -4359,10 +4365,9 @@
4359
4365
  delete container.canvas.resizeFactor;
4360
4366
  }
4361
4367
  async draw(delta) {
4362
- const container = this.container;
4363
- container.canvas.clear();
4364
- const canvasSize = this.container.canvas.size;
4368
+ const container = this.container, canvasSize = this.container.canvas.size;
4365
4369
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4370
+ container.canvas.clear();
4366
4371
  await this.update(delta);
4367
4372
  if (this.needsSort) {
4368
4373
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.42.1 by Matteo Bruni */
1
+ /*! tsParticles v1.42.4 by Matteo Bruni */
2
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}()}));
@@ -1994,9 +1994,9 @@
1994
1994
  paint() {
1995
1995
  const options = this.container.actualOptions;
1996
1996
  this.draw((ctx => {
1997
- if (options.backgroundMask.enable && options.backgroundMask.cover && this.coverColor) {
1997
+ if (options.backgroundMask.enable && options.backgroundMask.cover) {
1998
1998
  clear(ctx, this.size);
1999
- this.paintBase(getStyleFromRgb(this.coverColor, this.coverColor.a));
1999
+ this.paintBase(this.coverColorStyle);
2000
2000
  } else {
2001
2001
  this.paintBase();
2002
2002
  }
@@ -2039,11 +2039,16 @@
2039
2039
  const container = this.container;
2040
2040
  const pxRatio = container.retina.pixelRatio;
2041
2041
  const size = container.canvas.size;
2042
+ const newSize = {
2043
+ width: this.element.offsetWidth * pxRatio,
2044
+ height: this.element.offsetHeight * pxRatio
2045
+ };
2046
+ if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {
2047
+ return;
2048
+ }
2042
2049
  const oldSize = Object.assign({}, size);
2043
- size.width = this.element.offsetWidth * pxRatio;
2044
- size.height = this.element.offsetHeight * pxRatio;
2045
- this.element.width = size.width;
2046
- this.element.height = size.height;
2050
+ this.element.width = size.width = this.element.offsetWidth * pxRatio;
2051
+ this.element.height = size.height = this.element.offsetHeight * pxRatio;
2047
2052
  if (this.container.started) {
2048
2053
  this.resizeFactor = {
2049
2054
  width: size.width / oldSize.width,
@@ -2167,12 +2172,13 @@
2167
2172
  const color = cover.color;
2168
2173
  const coverRgb = colorToRgb(color);
2169
2174
  if (coverRgb) {
2170
- this.coverColor = {
2175
+ const coverColor = {
2171
2176
  r: coverRgb.r,
2172
2177
  g: coverRgb.g,
2173
2178
  b: coverRgb.b,
2174
2179
  a: cover.opacity
2175
2180
  };
2181
+ this.coverColorStyle = getStyleFromRgb(coverColor, coverColor.a);
2176
2182
  }
2177
2183
  }
2178
2184
  initTrail() {
@@ -4359,10 +4365,9 @@
4359
4365
  delete container.canvas.resizeFactor;
4360
4366
  }
4361
4367
  async draw(delta) {
4362
- const container = this.container;
4363
- container.canvas.clear();
4364
- const canvasSize = this.container.canvas.size;
4368
+ const container = this.container, canvasSize = this.container.canvas.size;
4365
4369
  this.quadTree = new QuadTree(new Rectangle(-canvasSize.width / 4, -canvasSize.height / 4, canvasSize.width * 3 / 2, canvasSize.height * 3 / 2), 4);
4370
+ container.canvas.clear();
4366
4371
  await this.update(delta);
4367
4372
  if (this.needsSort) {
4368
4373
  this.zArray.sort(((a, b) => b.position.z - a.position.z || a.id - b.id));
@@ -1,2 +1,2 @@
1
- /*! tsParticles v1.42.1 by Matteo Bruni */
1
+ /*! tsParticles v1.42.4 by Matteo Bruni */
2
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}()}));