@tsparticles/interaction-particles-links 3.4.0 → 3.6.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/Utils.js CHANGED
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setLinkFrequency = exports.getLinkKey = exports.drawLinkTriangle = exports.drawLinkLine = exports.drawTriangle = void 0;
3
+ exports.drawTriangle = drawTriangle;
4
+ exports.drawLinkLine = drawLinkLine;
5
+ exports.drawLinkTriangle = drawLinkTriangle;
6
+ exports.getLinkKey = getLinkKey;
7
+ exports.setLinkFrequency = setLinkFrequency;
4
8
  const engine_1 = require("@tsparticles/engine");
5
9
  function drawTriangle(context, p1, p2, p3) {
6
10
  context.beginPath();
@@ -9,7 +13,6 @@ function drawTriangle(context, p1, p2, p3) {
9
13
  context.lineTo(p3.x, p3.y);
10
14
  context.closePath();
11
15
  }
12
- exports.drawTriangle = drawTriangle;
13
16
  function drawLinkLine(params) {
14
17
  let drawn = false;
15
18
  const { begin, end, maxDistance, context, canvasSize, width, backgroundMask, colorLine, opacity, links } = params;
@@ -80,7 +83,6 @@ function drawLinkLine(params) {
80
83
  }
81
84
  context.stroke();
82
85
  }
83
- exports.drawLinkLine = drawLinkLine;
84
86
  function drawLinkTriangle(params) {
85
87
  const { context, pos1, pos2, pos3, backgroundMask, colorTriangle, opacityTriangle } = params;
86
88
  drawTriangle(context, pos1, pos2, pos3);
@@ -90,12 +92,10 @@ function drawLinkTriangle(params) {
90
92
  context.fillStyle = (0, engine_1.getStyleFromRgb)(colorTriangle, opacityTriangle);
91
93
  context.fill();
92
94
  }
93
- exports.drawLinkTriangle = drawLinkTriangle;
94
95
  function getLinkKey(ids) {
95
96
  ids.sort((a, b) => a - b);
96
97
  return ids.join("_");
97
98
  }
98
- exports.getLinkKey = getLinkKey;
99
99
  function setLinkFrequency(particles, dictionary) {
100
100
  const key = getLinkKey(particles.map(t => t.id));
101
101
  let res = dictionary.get(key);
@@ -105,4 +105,3 @@ function setLinkFrequency(particles, dictionary) {
105
105
  }
106
106
  return res;
107
107
  }
108
- exports.setLinkFrequency = setLinkFrequency;
package/cjs/index.js CHANGED
@@ -14,14 +14,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.loadParticlesLinksInteraction = void 0;
17
+ exports.loadParticlesLinksInteraction = loadParticlesLinksInteraction;
18
18
  const interaction_js_1 = require("./interaction.js");
19
19
  const plugin_js_1 = require("./plugin.js");
20
20
  async function loadParticlesLinksInteraction(engine, refresh = true) {
21
21
  await (0, interaction_js_1.loadLinksInteraction)(engine, refresh);
22
22
  await (0, plugin_js_1.loadLinksPlugin)(engine, refresh);
23
23
  }
24
- exports.loadParticlesLinksInteraction = loadParticlesLinksInteraction;
25
24
  __exportStar(require("./Options/Classes/Links.js"), exports);
26
25
  __exportStar(require("./Options/Classes/LinksShadow.js"), exports);
27
26
  __exportStar(require("./Options/Classes/LinksTriangle.js"), exports);
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadLinksInteraction = void 0;
3
+ exports.loadLinksInteraction = loadLinksInteraction;
4
4
  const Linker_js_1 = require("./Linker.js");
5
5
  async function loadLinksInteraction(engine, refresh = true) {
6
6
  await engine.addInteractor("particlesLinks", async (container) => {
7
7
  return Promise.resolve(new Linker_js_1.Linker(container));
8
8
  }, refresh);
9
9
  }
10
- exports.loadLinksInteraction = loadLinksInteraction;
package/cjs/plugin.js CHANGED
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadLinksPlugin = void 0;
3
+ exports.loadLinksPlugin = loadLinksPlugin;
4
4
  const LinksPlugin_js_1 = require("./LinksPlugin.js");
5
5
  async function loadLinksPlugin(engine, refresh = true) {
6
6
  const plugin = new LinksPlugin_js_1.LinksPlugin();
7
7
  await engine.addPlugin(plugin, refresh);
8
8
  }
9
- exports.loadLinksPlugin = loadLinksPlugin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/interaction-particles-links",
3
- "version": "3.4.0",
3
+ "version": "3.6.0-beta.0",
4
4
  "description": "tsParticles links particles interaction",
5
5
  "homepage": "https://particles.js.org",
6
6
  "repository": {
@@ -87,7 +87,7 @@
87
87
  "./package.json": "./package.json"
88
88
  },
89
89
  "dependencies": {
90
- "@tsparticles/engine": "^3.4.0"
90
+ "@tsparticles/engine": "^3.6.0-beta.0"
91
91
  },
92
92
  "publishConfig": {
93
93
  "access": "public"
package/report.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8"/>
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
6
- <title>@tsparticles/interaction-particles-links [13 May 2024 at 00:08]</title>
6
+ <title>@tsparticles/interaction-particles-links [7 Oct 2024 at 10:33]</title>
7
7
  <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
8
8
 
9
9
  <script>
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.4.0
7
+ * v3.6.0-beta.0
8
8
  */
9
9
  /*
10
10
  * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see tsparticles.interaction.particles.links.min.js.LICENSE.txt */
2
- !function(i,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],t);else{var n="object"==typeof exports?t(require("@tsparticles/engine")):t(i.window);for(var e in n)("object"==typeof exports?exports:i)[e]=n[e]}}(this,(i=>(()=>{var t={303:t=>{t.exports=i}},n={};function e(i){var s=n[i];if(void 0!==s)return s.exports;var o=n[i]={exports:{}};return t[i](o,o.exports,e),o.exports}e.d=(i,t)=>{for(var n in t)e.o(t,n)&&!e.o(i,n)&&Object.defineProperty(i,n,{enumerable:!0,get:t[n]})},e.o=(i,t)=>Object.prototype.hasOwnProperty.call(i,t),e.r=i=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var s={};return(()=>{e.r(s),e.d(s,{Links:()=>r,LinksShadow:()=>n,LinksTriangle:()=>o,loadParticlesLinksInteraction:()=>y});var i=e(303);class t extends i.Circle{constructor(i,t,n,e){super(i,t,n),this.canvasSize=e,this.canvasSize={...e}}contains(i){const{width:t,height:n}=this.canvasSize,{x:e,y:s}=i;return super.contains(i)||super.contains({x:e-t,y:s})||super.contains({x:e-t,y:s-n})||super.contains({x:e,y:s-n})}intersects(t){if(super.intersects(t))return!0;const n=t,e=t,s={x:t.position.x-this.canvasSize.width,y:t.position.y-this.canvasSize.height};if(void 0!==e.radius){const t=new i.Circle(s.x,s.y,2*e.radius);return super.intersects(t)}if(void 0!==n.size){const t=new i.Rectangle(s.x,s.y,2*n.size.width,2*n.size.height);return super.intersects(t)}return!1}}class n{constructor(){this.blur=5,this.color=new i.OptionsColor,this.color.value="#000",this.enable=!1}load(t){t&&(void 0!==t.blur&&(this.blur=t.blur),this.color=i.OptionsColor.create(this.color,t.color),void 0!==t.enable&&(this.enable=t.enable))}}class o{constructor(){this.enable=!1,this.frequency=1}load(t){t&&(void 0!==t.color&&(this.color=i.OptionsColor.create(this.color,t.color)),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.frequency&&(this.frequency=t.frequency),void 0!==t.opacity&&(this.opacity=t.opacity))}}class r{constructor(){this.blink=!1,this.color=new i.OptionsColor,this.color.value="#fff",this.consent=!1,this.distance=100,this.enable=!1,this.frequency=1,this.opacity=1,this.shadow=new n,this.triangles=new o,this.width=1,this.warp=!1}load(t){t&&(void 0!==t.id&&(this.id=t.id),void 0!==t.blink&&(this.blink=t.blink),this.color=i.OptionsColor.create(this.color,t.color),void 0!==t.consent&&(this.consent=t.consent),void 0!==t.distance&&(this.distance=t.distance),void 0!==t.enable&&(this.enable=t.enable),void 0!==t.frequency&&(this.frequency=t.frequency),void 0!==t.opacity&&(this.opacity=t.opacity),this.shadow.load(t.shadow),this.triangles.load(t.triangles),void 0!==t.width&&(this.width=t.width),void 0!==t.warp&&(this.warp=t.warp))}}const a=0,l=0;function c(t,n,e,s,o){const{dx:r,dy:a,distance:l}=(0,i.getDistances)(t,n);if(!o||l<=e)return l;const c={x:Math.abs(r),y:Math.abs(a)},d=Math.min(c.x,s.width-c.x),h=Math.min(c.y,s.height-c.y);return Math.sqrt(d**2+h**2)}class d extends i.ParticlesInteractorBase{constructor(t){super(t),this._setColor=t=>{if(!t.options.links)return;const n=this.linkContainer,e=t.options.links;let s=void 0===e.id?n.particles.linksColor:n.particles.linksColors.get(e.id);if(s)return;const o=e.color;s=(0,i.getLinkRandomColor)(o,e.blink,e.consent),void 0===e.id?n.particles.linksColor=s:n.particles.linksColors.set(e.id,s)},this.linkContainer=t}clear(){}init(){this.linkContainer.particles.linksColor=void 0,this.linkContainer.particles.linksColors=new Map}interact(n){if(!n.options.links)return;n.links=[];const e=n.getPosition(),s=this.container,o=s.canvas.size;if(e.x<a||e.y<l||e.x>o.width||e.y>o.height)return;const r=n.options.links,d=r.opacity,h=n.retina.linksDistance??0,p=r.warp;let u;u=p?new t(e.x,e.y,h,o):new i.Circle(e.x,e.y,h);const y=s.particles.quadTree.query(u);for(const i of y){const t=i.options.links;if(n===i||!t?.enable||r.id!==t.id||i.spawning||i.destroyed||!i.links||n.links.some((t=>t.destination===i))||i.links.some((i=>i.destination===n)))continue;const s=i.getPosition();if(s.x<a||s.y<l||s.x>o.width||s.y>o.height)continue;const u=c(e,s,h,o,p&&t.warp);if(u>h)continue;const y=(1-u/h)*d;this._setColor(n),n.links.push({destination:i,opacity:y})}}isEnabled(i){return!!i.options.links?.enable}loadParticlesOptions(i,...t){i.links||(i.links=new r);for(const n of t)i.links.load(n?.links)}reset(){}}function h(t,n){const e=((s=t.map((i=>i.id))).sort(((i,t)=>i-t)),s.join("_"));var s;let o=n.get(e);return void 0===o&&(o=(0,i.getRandom)(),n.set(e,o)),o}class p{constructor(t){this.container=t,this._drawLinkLine=(t,n)=>{const e=t.options.links;if(!e?.enable)return;const s=this.container,o=s.actualOptions,r=n.destination,a=t.getPosition(),l=r.getPosition();let c=n.opacity;s.canvas.draw((n=>{let d;const h=t.options.twinkle?.lines;if(h?.enable){const t=h.frequency,n=(0,i.rangeColorToRgb)(h.color);(0,i.getRandom)()<t&&n&&(d=n,c=(0,i.getRangeValue)(h.opacity))}if(!d){const n=void 0!==e.id?s.particles.linksColors.get(e.id):s.particles.linksColor;d=(0,i.getLinkColor)(t,r,n)}if(!d)return;const p=t.retina.linksWidth??0,u=t.retina.linksDistance??0,{backgroundMask:y}=o;!function(t){let n=!1;const{begin:e,end:s,maxDistance:o,context:r,canvasSize:a,width:l,backgroundMask:c,colorLine:d,opacity:h,links:p}=t;if((0,i.getDistance)(e,s)<=o)(0,i.drawLine)(r,e,s),n=!0;else if(p.warp){let t,l;const c={x:s.x-a.width,y:s.y},d=(0,i.getDistances)(e,c);if(d.distance<=o){const i=e.y-d.dy/d.dx*e.x;t={x:0,y:i},l={x:a.width,y:i}}else{const n={x:s.x,y:s.y-a.height},r=(0,i.getDistances)(e,n);if(r.distance<=o){const i=-(e.y-r.dy/r.dx*e.x)/(r.dy/r.dx);t={x:i,y:0},l={x:i,y:a.height}}else{const n={x:s.x-a.width,y:s.y-a.height},r=(0,i.getDistances)(e,n);if(r.distance<=o){const i=e.y-r.dy/r.dx*e.x;t={x:-i/(r.dy/r.dx),y:i},l={x:t.x+a.width,y:t.y+a.height}}}}t&&l&&((0,i.drawLine)(r,e,t),(0,i.drawLine)(r,s,l),n=!0)}if(!n)return;r.lineWidth=l,c.enable&&(r.globalCompositeOperation=c.composite),r.strokeStyle=(0,i.getStyleFromRgb)(d,h);const{shadow:u}=p;if(u.enable){const t=(0,i.rangeColorToRgb)(u.color);t&&(r.shadowBlur=u.blur,r.shadowColor=(0,i.getStyleFromRgb)(t))}r.stroke()}({context:n,width:p,begin:a,end:l,maxDistance:u,canvasSize:s.canvas.size,links:e,backgroundMask:y,colorLine:d,opacity:c})}))},this._drawLinkTriangle=(t,n,e)=>{const s=t.options.links;if(!s?.enable)return;const o=s.triangles;if(!o.enable)return;const r=this.container,a=r.actualOptions,l=n.destination,c=e.destination,d=o.opacity??.5*(n.opacity+e.opacity);d<=0||r.canvas.draw((n=>{const e=t.getPosition(),h=l.getPosition(),p=c.getPosition(),u=t.retina.linksDistance??0;if((0,i.getDistance)(e,h)>u||(0,i.getDistance)(p,h)>u||(0,i.getDistance)(p,e)>u)return;let y=(0,i.rangeColorToRgb)(o.color);if(!y){const n=void 0!==s.id?r.particles.linksColors.get(s.id):r.particles.linksColor;y=(0,i.getLinkColor)(t,l,n)}y&&function(t){const{context:n,pos1:e,pos2:s,pos3:o,backgroundMask:r,colorTriangle:a,opacityTriangle:l}=t;!function(i,t,n,e){i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(n.x,n.y),i.lineTo(e.x,e.y),i.closePath()}(n,e,s,o),r.enable&&(n.globalCompositeOperation=r.composite),n.fillStyle=(0,i.getStyleFromRgb)(a,l),n.fill()}({context:n,pos1:e,pos2:h,pos3:p,backgroundMask:a.backgroundMask,colorTriangle:y,opacityTriangle:d})}))},this._drawTriangles=(i,t,n,e)=>{const s=n.destination;if(!i.links?.triangles.enable||!s.options.links?.triangles.enable)return;const o=s.links?.filter((i=>{const t=this._getLinkFrequency(s,i.destination);return s.options.links&&t<=s.options.links.frequency&&e.findIndex((t=>t.destination===i.destination))>=0}));if(o?.length)for(const e of o){const o=e.destination;this._getTriangleFrequency(t,s,o)>i.links.triangles.frequency||this._drawLinkTriangle(t,n,e)}},this._getLinkFrequency=(i,t)=>h([i,t],this._freqs.links),this._getTriangleFrequency=(i,t,n)=>h([i,t,n],this._freqs.triangles),this._freqs={links:new Map,triangles:new Map}}drawParticle(i,t){const{links:n,options:e}=t;if(!n?.length)return;const s=n.filter((i=>e.links&&(e.links.frequency>=1||this._getLinkFrequency(t,i.destination)<=e.links.frequency)));for(const i of s)this._drawTriangles(e,t,i,s),i.opacity>0&&(t.retina.linksWidth??0)>0&&this._drawLinkLine(t,i)}async init(){this._freqs.links=new Map,this._freqs.triangles=new Map,await Promise.resolve()}particleCreated(i){if(i.links=[],!i.options.links)return;const t=this.container.retina.pixelRatio,{retina:n}=i,{distance:e,width:s}=i.options.links;n.linksDistance=e*t,n.linksWidth=s*t}particleDestroyed(i){i.links=[]}}class u{constructor(){this.id="links"}getPlugin(i){return Promise.resolve(new p(i))}loadOptions(){}needsPlugin(){return!0}}async function y(i,t=!0){await async function(i,t=!0){await i.addInteractor("particlesLinks",(async i=>Promise.resolve(new d(i))),t)}(i,t),await async function(i,t=!0){const n=new u;await i.addPlugin(n,t)}(i,t)}})(),s})()));
2
+ !function(i,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],t);else{var n="object"==typeof exports?t(require("@tsparticles/engine")):t(i.window);for(var e in n)("object"==typeof exports?exports:i)[e]=n[e]}}(this,(i=>(()=>{var t={303:t=>{t.exports=i}},n={};function e(i){var s=n[i];if(void 0!==s)return s.exports;var o=n[i]={exports:{}};return t[i](o,o.exports,e),o.exports}e.d=(i,t)=>{for(var n in t)e.o(t,n)&&!e.o(i,n)&&Object.defineProperty(i,n,{enumerable:!0,get:t[n]})},e.o=(i,t)=>Object.prototype.hasOwnProperty.call(i,t),e.r=i=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var s={};e.r(s),e.d(s,{Links:()=>c,LinksShadow:()=>a,LinksTriangle:()=>l,loadParticlesLinksInteraction:()=>k});var o=e(303);class r extends o.Circle{constructor(i,t,n,e){super(i,t,n),this.canvasSize=e,this.canvasSize={...e}}contains(i){const{width:t,height:n}=this.canvasSize,{x:e,y:s}=i;return super.contains(i)||super.contains({x:e-t,y:s})||super.contains({x:e-t,y:s-n})||super.contains({x:e,y:s-n})}intersects(i){if(super.intersects(i))return!0;const t=i,n=i,e={x:i.position.x-this.canvasSize.width,y:i.position.y-this.canvasSize.height};if(void 0!==n.radius){const i=new o.Circle(e.x,e.y,2*n.radius);return super.intersects(i)}if(void 0!==t.size){const i=new o.Rectangle(e.x,e.y,2*t.size.width,2*t.size.height);return super.intersects(i)}return!1}}class a{constructor(){this.blur=5,this.color=new o.OptionsColor,this.color.value="#000",this.enable=!1}load(i){i&&(void 0!==i.blur&&(this.blur=i.blur),this.color=o.OptionsColor.create(this.color,i.color),void 0!==i.enable&&(this.enable=i.enable))}}class l{constructor(){this.enable=!1,this.frequency=1}load(i){i&&(void 0!==i.color&&(this.color=o.OptionsColor.create(this.color,i.color)),void 0!==i.enable&&(this.enable=i.enable),void 0!==i.frequency&&(this.frequency=i.frequency),void 0!==i.opacity&&(this.opacity=i.opacity))}}class c{constructor(){this.blink=!1,this.color=new o.OptionsColor,this.color.value="#fff",this.consent=!1,this.distance=100,this.enable=!1,this.frequency=1,this.opacity=1,this.shadow=new a,this.triangles=new l,this.width=1,this.warp=!1}load(i){i&&(void 0!==i.id&&(this.id=i.id),void 0!==i.blink&&(this.blink=i.blink),this.color=o.OptionsColor.create(this.color,i.color),void 0!==i.consent&&(this.consent=i.consent),void 0!==i.distance&&(this.distance=i.distance),void 0!==i.enable&&(this.enable=i.enable),void 0!==i.frequency&&(this.frequency=i.frequency),void 0!==i.opacity&&(this.opacity=i.opacity),this.shadow.load(i.shadow),this.triangles.load(i.triangles),void 0!==i.width&&(this.width=i.width),void 0!==i.warp&&(this.warp=i.warp))}}const d=0,h=0;function p(i,t,n,e,s){const{dx:r,dy:a,distance:l}=(0,o.getDistances)(i,t);if(!s||l<=n)return l;const c={x:Math.abs(r),y:Math.abs(a)},d=Math.min(c.x,e.width-c.x),h=Math.min(c.y,e.height-c.y);return Math.sqrt(d**2+h**2)}class u extends o.ParticlesInteractorBase{constructor(i){super(i),this._setColor=i=>{if(!i.options.links)return;const t=this.linkContainer,n=i.options.links;let e=void 0===n.id?t.particles.linksColor:t.particles.linksColors.get(n.id);if(e)return;const s=n.color;e=(0,o.getLinkRandomColor)(s,n.blink,n.consent),void 0===n.id?t.particles.linksColor=e:t.particles.linksColors.set(n.id,e)},this.linkContainer=i}clear(){}init(){this.linkContainer.particles.linksColor=void 0,this.linkContainer.particles.linksColors=new Map}interact(i){if(!i.options.links)return;i.links=[];const t=i.getPosition(),n=this.container,e=n.canvas.size;if(t.x<d||t.y<h||t.x>e.width||t.y>e.height)return;const s=i.options.links,a=s.opacity,l=i.retina.linksDistance??0,c=s.warp;let u;u=c?new r(t.x,t.y,l,e):new o.Circle(t.x,t.y,l);const y=n.particles.quadTree.query(u);for(const n of y){const o=n.options.links;if(i===n||!o?.enable||s.id!==o.id||n.spawning||n.destroyed||!n.links||i.links.some((i=>i.destination===n))||n.links.some((t=>t.destination===i)))continue;const r=n.getPosition();if(r.x<d||r.y<h||r.x>e.width||r.y>e.height)continue;const u=p(t,r,l,e,c&&o.warp);if(u>l)continue;const y=(1-u/l)*a;this._setColor(i),i.links.push({destination:n,opacity:y})}}isEnabled(i){return!!i.options.links?.enable}loadParticlesOptions(i,...t){i.links||(i.links=new c);for(const n of t)i.links.load(n?.links)}reset(){}}function y(i,t){const n=((e=i.map((i=>i.id))).sort(((i,t)=>i-t)),e.join("_"));var e;let s=t.get(n);return void 0===s&&(s=(0,o.getRandom)(),t.set(n,s)),s}class g{constructor(i){this.container=i,this._drawLinkLine=(i,t)=>{const n=i.options.links;if(!n?.enable)return;const e=this.container,s=e.actualOptions,r=t.destination,a=i.getPosition(),l=r.getPosition();let c=t.opacity;e.canvas.draw((t=>{let d;const h=i.options.twinkle?.lines;if(h?.enable){const i=h.frequency,t=(0,o.rangeColorToRgb)(h.color);(0,o.getRandom)()<i&&t&&(d=t,c=(0,o.getRangeValue)(h.opacity))}if(!d){const t=void 0!==n.id?e.particles.linksColors.get(n.id):e.particles.linksColor;d=(0,o.getLinkColor)(i,r,t)}if(!d)return;const p=i.retina.linksWidth??0,u=i.retina.linksDistance??0,{backgroundMask:y}=s;!function(i){let t=!1;const{begin:n,end:e,maxDistance:s,context:r,canvasSize:a,width:l,backgroundMask:c,colorLine:d,opacity:h,links:p}=i;if((0,o.getDistance)(n,e)<=s)(0,o.drawLine)(r,n,e),t=!0;else if(p.warp){let i,l;const c={x:e.x-a.width,y:e.y},d=(0,o.getDistances)(n,c);if(d.distance<=s){const t=n.y-d.dy/d.dx*n.x;i={x:0,y:t},l={x:a.width,y:t}}else{const t={x:e.x,y:e.y-a.height},r=(0,o.getDistances)(n,t);if(r.distance<=s){const t=-(n.y-r.dy/r.dx*n.x)/(r.dy/r.dx);i={x:t,y:0},l={x:t,y:a.height}}else{const t={x:e.x-a.width,y:e.y-a.height},r=(0,o.getDistances)(n,t);if(r.distance<=s){const t=n.y-r.dy/r.dx*n.x;i={x:-t/(r.dy/r.dx),y:t},l={x:i.x+a.width,y:i.y+a.height}}}}i&&l&&((0,o.drawLine)(r,n,i),(0,o.drawLine)(r,e,l),t=!0)}if(!t)return;r.lineWidth=l,c.enable&&(r.globalCompositeOperation=c.composite),r.strokeStyle=(0,o.getStyleFromRgb)(d,h);const{shadow:u}=p;if(u.enable){const i=(0,o.rangeColorToRgb)(u.color);i&&(r.shadowBlur=u.blur,r.shadowColor=(0,o.getStyleFromRgb)(i))}r.stroke()}({context:t,width:p,begin:a,end:l,maxDistance:u,canvasSize:e.canvas.size,links:n,backgroundMask:y,colorLine:d,opacity:c})}))},this._drawLinkTriangle=(i,t,n)=>{const e=i.options.links;if(!e?.enable)return;const s=e.triangles;if(!s.enable)return;const r=this.container,a=r.actualOptions,l=t.destination,c=n.destination,d=s.opacity??.5*(t.opacity+n.opacity);d<=0||r.canvas.draw((t=>{const n=i.getPosition(),h=l.getPosition(),p=c.getPosition(),u=i.retina.linksDistance??0;if((0,o.getDistance)(n,h)>u||(0,o.getDistance)(p,h)>u||(0,o.getDistance)(p,n)>u)return;let y=(0,o.rangeColorToRgb)(s.color);if(!y){const t=void 0!==e.id?r.particles.linksColors.get(e.id):r.particles.linksColor;y=(0,o.getLinkColor)(i,l,t)}y&&function(i){const{context:t,pos1:n,pos2:e,pos3:s,backgroundMask:r,colorTriangle:a,opacityTriangle:l}=i;!function(i,t,n,e){i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(n.x,n.y),i.lineTo(e.x,e.y),i.closePath()}(t,n,e,s),r.enable&&(t.globalCompositeOperation=r.composite),t.fillStyle=(0,o.getStyleFromRgb)(a,l),t.fill()}({context:t,pos1:n,pos2:h,pos3:p,backgroundMask:a.backgroundMask,colorTriangle:y,opacityTriangle:d})}))},this._drawTriangles=(i,t,n,e)=>{const s=n.destination;if(!i.links?.triangles.enable||!s.options.links?.triangles.enable)return;const o=s.links?.filter((i=>{const t=this._getLinkFrequency(s,i.destination);return s.options.links&&t<=s.options.links.frequency&&e.findIndex((t=>t.destination===i.destination))>=0}));if(o?.length)for(const e of o){const o=e.destination;this._getTriangleFrequency(t,s,o)>i.links.triangles.frequency||this._drawLinkTriangle(t,n,e)}},this._getLinkFrequency=(i,t)=>y([i,t],this._freqs.links),this._getTriangleFrequency=(i,t,n)=>y([i,t,n],this._freqs.triangles),this._freqs={links:new Map,triangles:new Map}}drawParticle(i,t){const{links:n,options:e}=t;if(!n?.length)return;const s=n.filter((i=>e.links&&(e.links.frequency>=1||this._getLinkFrequency(t,i.destination)<=e.links.frequency)));for(const i of s)this._drawTriangles(e,t,i,s),i.opacity>0&&(t.retina.linksWidth??0)>0&&this._drawLinkLine(t,i)}async init(){this._freqs.links=new Map,this._freqs.triangles=new Map,await Promise.resolve()}particleCreated(i){if(i.links=[],!i.options.links)return;const t=this.container.retina.pixelRatio,{retina:n}=i,{distance:e,width:s}=i.options.links;n.linksDistance=e*t,n.linksWidth=s*t}particleDestroyed(i){i.links=[]}}class f{constructor(){this.id="links"}getPlugin(i){return Promise.resolve(new g(i))}loadOptions(){}needsPlugin(){return!0}}async function k(i,t=!0){await async function(i,t=!0){await i.addInteractor("particlesLinks",(async i=>Promise.resolve(new u(i))),t)}(i,t),await async function(i,t=!0){const n=new f;await i.addPlugin(n,t)}(i,t)}return s})()));
@@ -1 +1 @@
1
- /*! tsParticles Links Particles Interaction v3.4.0 by Matteo Bruni */
1
+ /*! tsParticles Links Particles Interaction v3.6.0-beta.0 by Matteo Bruni */
package/umd/Utils.js CHANGED
@@ -9,7 +9,11 @@
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.setLinkFrequency = exports.getLinkKey = exports.drawLinkTriangle = exports.drawLinkLine = exports.drawTriangle = void 0;
12
+ exports.drawTriangle = drawTriangle;
13
+ exports.drawLinkLine = drawLinkLine;
14
+ exports.drawLinkTriangle = drawLinkTriangle;
15
+ exports.getLinkKey = getLinkKey;
16
+ exports.setLinkFrequency = setLinkFrequency;
13
17
  const engine_1 = require("@tsparticles/engine");
14
18
  function drawTriangle(context, p1, p2, p3) {
15
19
  context.beginPath();
@@ -18,7 +22,6 @@
18
22
  context.lineTo(p3.x, p3.y);
19
23
  context.closePath();
20
24
  }
21
- exports.drawTriangle = drawTriangle;
22
25
  function drawLinkLine(params) {
23
26
  let drawn = false;
24
27
  const { begin, end, maxDistance, context, canvasSize, width, backgroundMask, colorLine, opacity, links } = params;
@@ -89,7 +92,6 @@
89
92
  }
90
93
  context.stroke();
91
94
  }
92
- exports.drawLinkLine = drawLinkLine;
93
95
  function drawLinkTriangle(params) {
94
96
  const { context, pos1, pos2, pos3, backgroundMask, colorTriangle, opacityTriangle } = params;
95
97
  drawTriangle(context, pos1, pos2, pos3);
@@ -99,12 +101,10 @@
99
101
  context.fillStyle = (0, engine_1.getStyleFromRgb)(colorTriangle, opacityTriangle);
100
102
  context.fill();
101
103
  }
102
- exports.drawLinkTriangle = drawLinkTriangle;
103
104
  function getLinkKey(ids) {
104
105
  ids.sort((a, b) => a - b);
105
106
  return ids.join("_");
106
107
  }
107
- exports.getLinkKey = getLinkKey;
108
108
  function setLinkFrequency(particles, dictionary) {
109
109
  const key = getLinkKey(particles.map(t => t.id));
110
110
  let res = dictionary.get(key);
@@ -114,5 +114,4 @@
114
114
  }
115
115
  return res;
116
116
  }
117
- exports.setLinkFrequency = setLinkFrequency;
118
117
  });
package/umd/index.js CHANGED
@@ -23,14 +23,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
23
23
  })(function (require, exports) {
24
24
  "use strict";
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.loadParticlesLinksInteraction = void 0;
26
+ exports.loadParticlesLinksInteraction = loadParticlesLinksInteraction;
27
27
  const interaction_js_1 = require("./interaction.js");
28
28
  const plugin_js_1 = require("./plugin.js");
29
29
  async function loadParticlesLinksInteraction(engine, refresh = true) {
30
30
  await (0, interaction_js_1.loadLinksInteraction)(engine, refresh);
31
31
  await (0, plugin_js_1.loadLinksPlugin)(engine, refresh);
32
32
  }
33
- exports.loadParticlesLinksInteraction = loadParticlesLinksInteraction;
34
33
  __exportStar(require("./Options/Classes/Links.js"), exports);
35
34
  __exportStar(require("./Options/Classes/LinksShadow.js"), exports);
36
35
  __exportStar(require("./Options/Classes/LinksTriangle.js"), exports);
@@ -9,12 +9,11 @@
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.loadLinksInteraction = void 0;
12
+ exports.loadLinksInteraction = loadLinksInteraction;
13
13
  const Linker_js_1 = require("./Linker.js");
14
14
  async function loadLinksInteraction(engine, refresh = true) {
15
15
  await engine.addInteractor("particlesLinks", async (container) => {
16
16
  return Promise.resolve(new Linker_js_1.Linker(container));
17
17
  }, refresh);
18
18
  }
19
- exports.loadLinksInteraction = loadLinksInteraction;
20
19
  });
package/umd/plugin.js CHANGED
@@ -9,11 +9,10 @@
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.loadLinksPlugin = void 0;
12
+ exports.loadLinksPlugin = loadLinksPlugin;
13
13
  const LinksPlugin_js_1 = require("./LinksPlugin.js");
14
14
  async function loadLinksPlugin(engine, refresh = true) {
15
15
  const plugin = new LinksPlugin_js_1.LinksPlugin();
16
16
  await engine.addPlugin(plugin, refresh);
17
17
  }
18
- exports.loadLinksPlugin = loadLinksPlugin;
19
18
  });