@tsparticles/interaction-external-bounce 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- package/33.min.js +2 -0
- package/33.min.js.LICENSE.txt +1 -0
- package/409.min.js +2 -0
- package/409.min.js.LICENSE.txt +1 -0
- package/browser/Bouncer.js +6 -44
- package/browser/Utils.js +44 -0
- package/browser/index.js +4 -2
- package/cjs/Bouncer.js +28 -43
- package/cjs/Utils.js +49 -0
- package/cjs/index.js +16 -2
- package/dist_browser_Bouncer_js.js +30 -0
- package/dist_browser_Utils_js.js +30 -0
- package/esm/Bouncer.js +6 -44
- package/esm/Utils.js +44 -0
- package/esm/index.js +4 -2
- package/package.json +2 -2
- package/report.html +3 -3
- package/tsparticles.interaction.external.bounce.js +251 -143
- package/tsparticles.interaction.external.bounce.min.js +1 -1
- package/tsparticles.interaction.external.bounce.min.js.LICENSE.txt +1 -1
- package/types/Bouncer.d.ts +0 -3
- package/types/Utils.d.ts +4 -0
- package/umd/Bouncer.js +29 -43
- package/umd/Utils.js +59 -0
- package/umd/index.js +18 -3
package/33.min.js
ADDED
@@ -0,0 +1,2 @@
|
|
1
|
+
/*! For license information please see 33.min.js.LICENSE.txt */
|
2
|
+
(this.webpackChunk_tsparticles_interaction_external_bounce=this.webpackChunk_tsparticles_interaction_external_bounce||[]).push([[33],{33:(e,n,t)=>{t.d(n,{Bouncer:()=>s});var i=t(533),o=t(523);const a="bounce";class s extends i.ExternalInteractorBase{constructor(e){super(e)}clear(){}init(){const e=this.container,n=e.actualOptions.interactivity.modes.bounce;n&&(e.retina.bounceModeDistance=n.distance*e.retina.pixelRatio)}async interact(){const e=this.container,n=e.actualOptions.interactivity.events,o=e.interactivity.status===i.mouseMoveEvent,s=n.onHover.enable,c=n.onHover.mode,r=n.onDiv;if(o&&s&&(0,i.isInArray)(a,c)){const{mouseBounce:e}=await t.e(409).then(t.bind(t,409));e(this.container,(e=>this.isEnabled(e)))}else{const{divBounce:e}=await t.e(409).then(t.bind(t,409));e(this.container,r,a,(e=>this.isEnabled(e)))}}isEnabled(e){const n=this.container,t=n.actualOptions,o=n.interactivity.mouse,s=(e?.interactivity??t.interactivity).events,c=s.onDiv;return!!o.position&&s.onHover.enable&&(0,i.isInArray)(a,s.onHover.mode)||(0,i.isDivModeEnabled)(a,c)}loadModeOptions(e,...n){e.bounce||(e.bounce=new o.s);for(const t of n)e.bounce.load(t?.bounce)}reset(){}}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
/*! tsParticles Bounce External Interaction v3.2.0 by Matteo Bruni */
|
package/409.min.js
ADDED
@@ -0,0 +1,2 @@
|
|
1
|
+
/*! For license information please see 409.min.js.LICENSE.txt */
|
2
|
+
(this.webpackChunk_tsparticles_interaction_external_bounce=this.webpackChunk_tsparticles_interaction_external_bounce||[]).push([[409],{409:(e,t,o)=>{o.d(t,{divBounce:()=>l,mouseBounce:()=>h});var c=o(533);const n=2,i=.5,s=Math.PI*i,r=2,a=10,f=0;function u(e,t,o,i,r){const a=e.particles.quadTree.query(i,r);for(const e of a)i instanceof c.Circle?(0,c.circleBounce)((0,c.circleBounceDataFromParticle)(e),{position:t,radius:o,mass:o**n*s,velocity:c.Vector.origin,factor:c.Vector.origin}):i instanceof c.Rectangle&&(0,c.rectBounce)(e,(0,c.calculateBounds)(t,o))}function l(e,t,o,n){(0,c.divModeExecute)(o,t,((t,o)=>function(e,t,o,n){const s=document.querySelectorAll(t);s.length&&s.forEach((t=>{const s=t,f=e.retina.pixelRatio,u={x:(s.offsetLeft+s.offsetWidth*i)*f,y:(s.offsetTop+s.offsetHeight*i)*f},l=s.offsetWidth*i*f,h=a*f,p="circle"===o.type?new c.Circle(u.x,u.y,l+h):new c.Rectangle(s.offsetLeft*f-h,s.offsetTop*f-h,s.offsetWidth*f+h*r,s.offsetHeight*f+h*r);n(u,l,p)}))}(e,t,o,((t,o,c)=>u(e,t,o,c,n)))))}function h(e,t){const o=e.retina.pixelRatio,n=a*o,i=e.interactivity.mouse.position,s=e.retina.bounceModeDistance;!s||s<f||!i||u(e,i,s,new c.Circle(i.x,i.y,s+n),t)}}}]);
|
@@ -0,0 +1 @@
|
|
1
|
+
/*! tsParticles Bounce External Interaction v3.2.0 by Matteo Bruni */
|
package/browser/Bouncer.js
CHANGED
@@ -1,48 +1,9 @@
|
|
1
|
-
import {
|
1
|
+
import { ExternalInteractorBase, isDivModeEnabled, isInArray, mouseMoveEvent, } from "@tsparticles/engine";
|
2
2
|
import { Bounce } from "./Options/Classes/Bounce.js";
|
3
|
-
const bounceMode = "bounce"
|
3
|
+
const bounceMode = "bounce";
|
4
4
|
export class Bouncer extends ExternalInteractorBase {
|
5
5
|
constructor(container) {
|
6
6
|
super(container);
|
7
|
-
this._processBounce = (position, radius, area) => {
|
8
|
-
const query = this.container.particles.quadTree.query(area, (p) => this.isEnabled(p));
|
9
|
-
for (const particle of query) {
|
10
|
-
if (area instanceof Circle) {
|
11
|
-
circleBounce(circleBounceDataFromParticle(particle), {
|
12
|
-
position,
|
13
|
-
radius,
|
14
|
-
mass: radius ** squareExp * halfPI,
|
15
|
-
velocity: Vector.origin,
|
16
|
-
factor: Vector.origin,
|
17
|
-
});
|
18
|
-
}
|
19
|
-
else if (area instanceof Rectangle) {
|
20
|
-
rectBounce(particle, calculateBounds(position, radius));
|
21
|
-
}
|
22
|
-
}
|
23
|
-
};
|
24
|
-
this._processMouseBounce = () => {
|
25
|
-
const container = this.container, pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;
|
26
|
-
if (!radius || radius < minRadius || !mousePos) {
|
27
|
-
return;
|
28
|
-
}
|
29
|
-
this._processBounce(mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance));
|
30
|
-
};
|
31
|
-
this._singleSelectorBounce = (selector, div) => {
|
32
|
-
const container = this.container, query = document.querySelectorAll(selector);
|
33
|
-
if (!query.length) {
|
34
|
-
return;
|
35
|
-
}
|
36
|
-
query.forEach((item) => {
|
37
|
-
const elem = item, pxRatio = container.retina.pixelRatio, pos = {
|
38
|
-
x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,
|
39
|
-
y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,
|
40
|
-
}, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === "circle"
|
41
|
-
? new Circle(pos.x, pos.y, radius + tolerance)
|
42
|
-
: new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);
|
43
|
-
this._processBounce(pos, radius, area);
|
44
|
-
});
|
45
|
-
};
|
46
7
|
}
|
47
8
|
clear() {
|
48
9
|
}
|
@@ -56,12 +17,13 @@ export class Bouncer extends ExternalInteractorBase {
|
|
56
17
|
async interact() {
|
57
18
|
const container = this.container, options = container.actualOptions, events = options.interactivity.events, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, divs = events.onDiv;
|
58
19
|
if (mouseMoveStatus && hoverEnabled && isInArray(bounceMode, hoverMode)) {
|
59
|
-
|
20
|
+
const { mouseBounce } = await import("./Utils.js");
|
21
|
+
mouseBounce(this.container, (p) => this.isEnabled(p));
|
60
22
|
}
|
61
23
|
else {
|
62
|
-
|
24
|
+
const { divBounce } = await import("./Utils.js");
|
25
|
+
divBounce(this.container, divs, bounceMode, (p) => this.isEnabled(p));
|
63
26
|
}
|
64
|
-
await Promise.resolve();
|
65
27
|
}
|
66
28
|
isEnabled(particle) {
|
67
29
|
const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv;
|
package/browser/Utils.js
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
import { Circle, Rectangle, Vector, calculateBounds, circleBounce, circleBounceDataFromParticle, divModeExecute, rectBounce, } from "@tsparticles/engine";
|
2
|
+
const squareExp = 2, half = 0.5, halfPI = Math.PI * half, double = 2, toleranceFactor = 10, minRadius = 0;
|
3
|
+
function processBounce(container, position, radius, area, enabledCb) {
|
4
|
+
const query = container.particles.quadTree.query(area, enabledCb);
|
5
|
+
for (const particle of query) {
|
6
|
+
if (area instanceof Circle) {
|
7
|
+
circleBounce(circleBounceDataFromParticle(particle), {
|
8
|
+
position,
|
9
|
+
radius,
|
10
|
+
mass: radius ** squareExp * halfPI,
|
11
|
+
velocity: Vector.origin,
|
12
|
+
factor: Vector.origin,
|
13
|
+
});
|
14
|
+
}
|
15
|
+
else if (area instanceof Rectangle) {
|
16
|
+
rectBounce(particle, calculateBounds(position, radius));
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
function singleSelectorBounce(container, selector, div, bounceCb) {
|
21
|
+
const query = document.querySelectorAll(selector);
|
22
|
+
if (!query.length) {
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
query.forEach((item) => {
|
26
|
+
const elem = item, pxRatio = container.retina.pixelRatio, pos = {
|
27
|
+
x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,
|
28
|
+
y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,
|
29
|
+
}, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === "circle"
|
30
|
+
? new Circle(pos.x, pos.y, radius + tolerance)
|
31
|
+
: new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);
|
32
|
+
bounceCb(pos, radius, area);
|
33
|
+
});
|
34
|
+
}
|
35
|
+
export function divBounce(container, divs, bounceMode, enabledCb) {
|
36
|
+
divModeExecute(bounceMode, divs, (selector, div) => singleSelectorBounce(container, selector, div, (pos, radius, area) => processBounce(container, pos, radius, area, enabledCb)));
|
37
|
+
}
|
38
|
+
export function mouseBounce(container, enabledCb) {
|
39
|
+
const pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;
|
40
|
+
if (!radius || radius < minRadius || !mousePos) {
|
41
|
+
return;
|
42
|
+
}
|
43
|
+
processBounce(container, mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance), enabledCb);
|
44
|
+
}
|
package/browser/index.js
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
import { Bouncer } from "./Bouncer.js";
|
2
1
|
export async function loadExternalBounceInteraction(engine, refresh = true) {
|
3
|
-
await engine.addInteractor("externalBounce", (container) =>
|
2
|
+
await engine.addInteractor("externalBounce", async (container) => {
|
3
|
+
const { Bouncer } = await import("./Bouncer.js");
|
4
|
+
return new Bouncer(container);
|
5
|
+
}, refresh);
|
4
6
|
}
|
5
7
|
export * from "./Options/Classes/Bounce.js";
|
6
8
|
export * from "./Options/Interfaces/IBounce.js";
|
package/cjs/Bouncer.js
CHANGED
@@ -1,51 +1,35 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
26
|
exports.Bouncer = void 0;
|
4
27
|
const engine_1 = require("@tsparticles/engine");
|
5
28
|
const Bounce_js_1 = require("./Options/Classes/Bounce.js");
|
6
|
-
const bounceMode = "bounce"
|
29
|
+
const bounceMode = "bounce";
|
7
30
|
class Bouncer extends engine_1.ExternalInteractorBase {
|
8
31
|
constructor(container) {
|
9
32
|
super(container);
|
10
|
-
this._processBounce = (position, radius, area) => {
|
11
|
-
const query = this.container.particles.quadTree.query(area, (p) => this.isEnabled(p));
|
12
|
-
for (const particle of query) {
|
13
|
-
if (area instanceof engine_1.Circle) {
|
14
|
-
(0, engine_1.circleBounce)((0, engine_1.circleBounceDataFromParticle)(particle), {
|
15
|
-
position,
|
16
|
-
radius,
|
17
|
-
mass: radius ** squareExp * halfPI,
|
18
|
-
velocity: engine_1.Vector.origin,
|
19
|
-
factor: engine_1.Vector.origin,
|
20
|
-
});
|
21
|
-
}
|
22
|
-
else if (area instanceof engine_1.Rectangle) {
|
23
|
-
(0, engine_1.rectBounce)(particle, (0, engine_1.calculateBounds)(position, radius));
|
24
|
-
}
|
25
|
-
}
|
26
|
-
};
|
27
|
-
this._processMouseBounce = () => {
|
28
|
-
const container = this.container, pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;
|
29
|
-
if (!radius || radius < minRadius || !mousePos) {
|
30
|
-
return;
|
31
|
-
}
|
32
|
-
this._processBounce(mousePos, radius, new engine_1.Circle(mousePos.x, mousePos.y, radius + tolerance));
|
33
|
-
};
|
34
|
-
this._singleSelectorBounce = (selector, div) => {
|
35
|
-
const container = this.container, query = document.querySelectorAll(selector);
|
36
|
-
if (!query.length) {
|
37
|
-
return;
|
38
|
-
}
|
39
|
-
query.forEach((item) => {
|
40
|
-
const elem = item, pxRatio = container.retina.pixelRatio, pos = {
|
41
|
-
x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,
|
42
|
-
y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,
|
43
|
-
}, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === "circle"
|
44
|
-
? new engine_1.Circle(pos.x, pos.y, radius + tolerance)
|
45
|
-
: new engine_1.Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);
|
46
|
-
this._processBounce(pos, radius, area);
|
47
|
-
});
|
48
|
-
};
|
49
33
|
}
|
50
34
|
clear() {
|
51
35
|
}
|
@@ -59,12 +43,13 @@ class Bouncer extends engine_1.ExternalInteractorBase {
|
|
59
43
|
async interact() {
|
60
44
|
const container = this.container, options = container.actualOptions, events = options.interactivity.events, mouseMoveStatus = container.interactivity.status === engine_1.mouseMoveEvent, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, divs = events.onDiv;
|
61
45
|
if (mouseMoveStatus && hoverEnabled && (0, engine_1.isInArray)(bounceMode, hoverMode)) {
|
62
|
-
|
46
|
+
const { mouseBounce } = await Promise.resolve().then(() => __importStar(require("./Utils.js")));
|
47
|
+
mouseBounce(this.container, (p) => this.isEnabled(p));
|
63
48
|
}
|
64
49
|
else {
|
65
|
-
|
50
|
+
const { divBounce } = await Promise.resolve().then(() => __importStar(require("./Utils.js")));
|
51
|
+
divBounce(this.container, divs, bounceMode, (p) => this.isEnabled(p));
|
66
52
|
}
|
67
|
-
await Promise.resolve();
|
68
53
|
}
|
69
54
|
isEnabled(particle) {
|
70
55
|
const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv;
|
package/cjs/Utils.js
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.mouseBounce = exports.divBounce = void 0;
|
4
|
+
const engine_1 = require("@tsparticles/engine");
|
5
|
+
const squareExp = 2, half = 0.5, halfPI = Math.PI * half, double = 2, toleranceFactor = 10, minRadius = 0;
|
6
|
+
function processBounce(container, position, radius, area, enabledCb) {
|
7
|
+
const query = container.particles.quadTree.query(area, enabledCb);
|
8
|
+
for (const particle of query) {
|
9
|
+
if (area instanceof engine_1.Circle) {
|
10
|
+
(0, engine_1.circleBounce)((0, engine_1.circleBounceDataFromParticle)(particle), {
|
11
|
+
position,
|
12
|
+
radius,
|
13
|
+
mass: radius ** squareExp * halfPI,
|
14
|
+
velocity: engine_1.Vector.origin,
|
15
|
+
factor: engine_1.Vector.origin,
|
16
|
+
});
|
17
|
+
}
|
18
|
+
else if (area instanceof engine_1.Rectangle) {
|
19
|
+
(0, engine_1.rectBounce)(particle, (0, engine_1.calculateBounds)(position, radius));
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
function singleSelectorBounce(container, selector, div, bounceCb) {
|
24
|
+
const query = document.querySelectorAll(selector);
|
25
|
+
if (!query.length) {
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
query.forEach((item) => {
|
29
|
+
const elem = item, pxRatio = container.retina.pixelRatio, pos = {
|
30
|
+
x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,
|
31
|
+
y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,
|
32
|
+
}, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === "circle"
|
33
|
+
? new engine_1.Circle(pos.x, pos.y, radius + tolerance)
|
34
|
+
: new engine_1.Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);
|
35
|
+
bounceCb(pos, radius, area);
|
36
|
+
});
|
37
|
+
}
|
38
|
+
function divBounce(container, divs, bounceMode, enabledCb) {
|
39
|
+
(0, engine_1.divModeExecute)(bounceMode, divs, (selector, div) => singleSelectorBounce(container, selector, div, (pos, radius, area) => processBounce(container, pos, radius, area, enabledCb)));
|
40
|
+
}
|
41
|
+
exports.divBounce = divBounce;
|
42
|
+
function mouseBounce(container, enabledCb) {
|
43
|
+
const pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;
|
44
|
+
if (!radius || radius < minRadius || !mousePos) {
|
45
|
+
return;
|
46
|
+
}
|
47
|
+
processBounce(container, mousePos, radius, new engine_1.Circle(mousePos.x, mousePos.y, radius + tolerance), enabledCb);
|
48
|
+
}
|
49
|
+
exports.mouseBounce = mouseBounce;
|
package/cjs/index.js
CHANGED
@@ -10,14 +10,28 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
11
11
|
o[k2] = m[k];
|
12
12
|
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
13
25
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
26
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
27
|
};
|
16
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
29
|
exports.loadExternalBounceInteraction = void 0;
|
18
|
-
const Bouncer_js_1 = require("./Bouncer.js");
|
19
30
|
async function loadExternalBounceInteraction(engine, refresh = true) {
|
20
|
-
await engine.addInteractor("externalBounce", (container) =>
|
31
|
+
await engine.addInteractor("externalBounce", async (container) => {
|
32
|
+
const { Bouncer } = await Promise.resolve().then(() => __importStar(require("./Bouncer.js")));
|
33
|
+
return new Bouncer(container);
|
34
|
+
}, refresh);
|
21
35
|
}
|
22
36
|
exports.loadExternalBounceInteraction = loadExternalBounceInteraction;
|
23
37
|
__exportStar(require("./Options/Classes/Bounce.js"), exports);
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/*!
|
2
|
+
* Author : Matteo Bruni
|
3
|
+
* MIT license: https://opensource.org/licenses/MIT
|
4
|
+
* Demo / Generator : https://particles.js.org/
|
5
|
+
* GitHub : https://www.github.com/matteobruni/tsparticles
|
6
|
+
* How to use? : Check the GitHub README
|
7
|
+
* v3.2.0
|
8
|
+
*/
|
9
|
+
"use strict";
|
10
|
+
/*
|
11
|
+
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
12
|
+
* This devtool is neither made for production nor for readable output files.
|
13
|
+
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
14
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
15
|
+
* or disable the default devtool with "devtool: false".
|
16
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
17
|
+
*/
|
18
|
+
(this["webpackChunk_tsparticles_interaction_external_bounce"] = this["webpackChunk_tsparticles_interaction_external_bounce"] || []).push([["dist_browser_Bouncer_js"],{
|
19
|
+
|
20
|
+
/***/ "./dist/browser/Bouncer.js":
|
21
|
+
/*!*********************************!*\
|
22
|
+
!*** ./dist/browser/Bouncer.js ***!
|
23
|
+
\*********************************/
|
24
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
25
|
+
|
26
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Bouncer: () => (/* binding */ Bouncer)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Options_Classes_Bounce_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Options/Classes/Bounce.js */ \"./dist/browser/Options/Classes/Bounce.js\");\n\n\nconst bounceMode = \"bounce\";\nclass Bouncer extends _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {}\n init() {\n const container = this.container,\n bounce = container.actualOptions.interactivity.modes.bounce;\n if (!bounce) {\n return;\n }\n container.retina.bounceModeDistance = bounce.distance * container.retina.pixelRatio;\n }\n async interact() {\n const container = this.container,\n options = container.actualOptions,\n events = options.interactivity.events,\n mouseMoveStatus = container.interactivity.status === _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.mouseMoveEvent,\n hoverEnabled = events.onHover.enable,\n hoverMode = events.onHover.mode,\n divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(bounceMode, hoverMode)) {\n const {\n mouseBounce\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"./dist/browser/Utils.js\"));\n mouseBounce(this.container, p => this.isEnabled(p));\n } else {\n const {\n divBounce\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"./dist/browser/Utils.js\"));\n divBounce(this.container, divs, bounceMode, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container,\n options = container.actualOptions,\n mouse = container.interactivity.mouse,\n events = (particle?.interactivity ?? options.interactivity).events,\n divs = events.onDiv;\n return !!mouse.position && events.onHover.enable && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(bounceMode, events.onHover.mode) || (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isDivModeEnabled)(bounceMode, divs);\n }\n loadModeOptions(options, ...sources) {\n if (!options.bounce) {\n options.bounce = new _Options_Classes_Bounce_js__WEBPACK_IMPORTED_MODULE_1__.Bounce();\n }\n for (const source of sources) {\n options.bounce.load(source?.bounce);\n }\n }\n reset() {}\n}\n\n//# sourceURL=webpack://@tsparticles/interaction-external-bounce/./dist/browser/Bouncer.js?");
|
27
|
+
|
28
|
+
/***/ })
|
29
|
+
|
30
|
+
}]);
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/*!
|
2
|
+
* Author : Matteo Bruni
|
3
|
+
* MIT license: https://opensource.org/licenses/MIT
|
4
|
+
* Demo / Generator : https://particles.js.org/
|
5
|
+
* GitHub : https://www.github.com/matteobruni/tsparticles
|
6
|
+
* How to use? : Check the GitHub README
|
7
|
+
* v3.2.0
|
8
|
+
*/
|
9
|
+
"use strict";
|
10
|
+
/*
|
11
|
+
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
12
|
+
* This devtool is neither made for production nor for readable output files.
|
13
|
+
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
14
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
15
|
+
* or disable the default devtool with "devtool: false".
|
16
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
17
|
+
*/
|
18
|
+
(this["webpackChunk_tsparticles_interaction_external_bounce"] = this["webpackChunk_tsparticles_interaction_external_bounce"] || []).push([["dist_browser_Utils_js"],{
|
19
|
+
|
20
|
+
/***/ "./dist/browser/Utils.js":
|
21
|
+
/*!*******************************!*\
|
22
|
+
!*** ./dist/browser/Utils.js ***!
|
23
|
+
\*******************************/
|
24
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
25
|
+
|
26
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ divBounce: () => (/* binding */ divBounce),\n/* harmony export */ mouseBounce: () => (/* binding */ mouseBounce)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__);\n\nconst squareExp = 2,\n half = 0.5,\n halfPI = Math.PI * half,\n double = 2,\n toleranceFactor = 10,\n minRadius = 0;\nfunction processBounce(container, position, radius, area, enabledCb) {\n const query = container.particles.quadTree.query(area, enabledCb);\n for (const particle of query) {\n if (area instanceof _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.circleBounce)((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.circleBounceDataFromParticle)(particle), {\n position,\n radius,\n mass: radius ** squareExp * halfPI,\n velocity: _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Vector.origin,\n factor: _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Vector.origin\n });\n } else if (area instanceof _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Rectangle) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.rectBounce)(particle, (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.calculateBounds)(position, radius));\n }\n }\n}\nfunction singleSelectorBounce(container, selector, div, bounceCb) {\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach(item => {\n const elem = item,\n pxRatio = container.retina.pixelRatio,\n pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio\n },\n radius = elem.offsetWidth * half * pxRatio,\n tolerance = toleranceFactor * pxRatio,\n area = div.type === \"circle\" ? new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(pos.x, pos.y, radius + tolerance) : new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);\n bounceCb(pos, radius, area);\n });\n}\nfunction divBounce(container, divs, bounceMode, enabledCb) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.divModeExecute)(bounceMode, divs, (selector, div) => singleSelectorBounce(container, selector, div, (pos, radius, area) => processBounce(container, pos, radius, area, enabledCb)));\n}\nfunction mouseBounce(container, enabledCb) {\n const pxRatio = container.retina.pixelRatio,\n tolerance = toleranceFactor * pxRatio,\n mousePos = container.interactivity.mouse.position,\n radius = container.retina.bounceModeDistance;\n if (!radius || radius < minRadius || !mousePos) {\n return;\n }\n processBounce(container, mousePos, radius, new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(mousePos.x, mousePos.y, radius + tolerance), enabledCb);\n}\n\n//# sourceURL=webpack://@tsparticles/interaction-external-bounce/./dist/browser/Utils.js?");
|
27
|
+
|
28
|
+
/***/ })
|
29
|
+
|
30
|
+
}]);
|
package/esm/Bouncer.js
CHANGED
@@ -1,48 +1,9 @@
|
|
1
|
-
import {
|
1
|
+
import { ExternalInteractorBase, isDivModeEnabled, isInArray, mouseMoveEvent, } from "@tsparticles/engine";
|
2
2
|
import { Bounce } from "./Options/Classes/Bounce.js";
|
3
|
-
const bounceMode = "bounce"
|
3
|
+
const bounceMode = "bounce";
|
4
4
|
export class Bouncer extends ExternalInteractorBase {
|
5
5
|
constructor(container) {
|
6
6
|
super(container);
|
7
|
-
this._processBounce = (position, radius, area) => {
|
8
|
-
const query = this.container.particles.quadTree.query(area, (p) => this.isEnabled(p));
|
9
|
-
for (const particle of query) {
|
10
|
-
if (area instanceof Circle) {
|
11
|
-
circleBounce(circleBounceDataFromParticle(particle), {
|
12
|
-
position,
|
13
|
-
radius,
|
14
|
-
mass: radius ** squareExp * halfPI,
|
15
|
-
velocity: Vector.origin,
|
16
|
-
factor: Vector.origin,
|
17
|
-
});
|
18
|
-
}
|
19
|
-
else if (area instanceof Rectangle) {
|
20
|
-
rectBounce(particle, calculateBounds(position, radius));
|
21
|
-
}
|
22
|
-
}
|
23
|
-
};
|
24
|
-
this._processMouseBounce = () => {
|
25
|
-
const container = this.container, pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;
|
26
|
-
if (!radius || radius < minRadius || !mousePos) {
|
27
|
-
return;
|
28
|
-
}
|
29
|
-
this._processBounce(mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance));
|
30
|
-
};
|
31
|
-
this._singleSelectorBounce = (selector, div) => {
|
32
|
-
const container = this.container, query = document.querySelectorAll(selector);
|
33
|
-
if (!query.length) {
|
34
|
-
return;
|
35
|
-
}
|
36
|
-
query.forEach((item) => {
|
37
|
-
const elem = item, pxRatio = container.retina.pixelRatio, pos = {
|
38
|
-
x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,
|
39
|
-
y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,
|
40
|
-
}, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === "circle"
|
41
|
-
? new Circle(pos.x, pos.y, radius + tolerance)
|
42
|
-
: new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);
|
43
|
-
this._processBounce(pos, radius, area);
|
44
|
-
});
|
45
|
-
};
|
46
7
|
}
|
47
8
|
clear() {
|
48
9
|
}
|
@@ -56,12 +17,13 @@ export class Bouncer extends ExternalInteractorBase {
|
|
56
17
|
async interact() {
|
57
18
|
const container = this.container, options = container.actualOptions, events = options.interactivity.events, mouseMoveStatus = container.interactivity.status === mouseMoveEvent, hoverEnabled = events.onHover.enable, hoverMode = events.onHover.mode, divs = events.onDiv;
|
58
19
|
if (mouseMoveStatus && hoverEnabled && isInArray(bounceMode, hoverMode)) {
|
59
|
-
|
20
|
+
const { mouseBounce } = await import("./Utils.js");
|
21
|
+
mouseBounce(this.container, (p) => this.isEnabled(p));
|
60
22
|
}
|
61
23
|
else {
|
62
|
-
|
24
|
+
const { divBounce } = await import("./Utils.js");
|
25
|
+
divBounce(this.container, divs, bounceMode, (p) => this.isEnabled(p));
|
63
26
|
}
|
64
|
-
await Promise.resolve();
|
65
27
|
}
|
66
28
|
isEnabled(particle) {
|
67
29
|
const container = this.container, options = container.actualOptions, mouse = container.interactivity.mouse, events = (particle?.interactivity ?? options.interactivity).events, divs = events.onDiv;
|
package/esm/Utils.js
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
import { Circle, Rectangle, Vector, calculateBounds, circleBounce, circleBounceDataFromParticle, divModeExecute, rectBounce, } from "@tsparticles/engine";
|
2
|
+
const squareExp = 2, half = 0.5, halfPI = Math.PI * half, double = 2, toleranceFactor = 10, minRadius = 0;
|
3
|
+
function processBounce(container, position, radius, area, enabledCb) {
|
4
|
+
const query = container.particles.quadTree.query(area, enabledCb);
|
5
|
+
for (const particle of query) {
|
6
|
+
if (area instanceof Circle) {
|
7
|
+
circleBounce(circleBounceDataFromParticle(particle), {
|
8
|
+
position,
|
9
|
+
radius,
|
10
|
+
mass: radius ** squareExp * halfPI,
|
11
|
+
velocity: Vector.origin,
|
12
|
+
factor: Vector.origin,
|
13
|
+
});
|
14
|
+
}
|
15
|
+
else if (area instanceof Rectangle) {
|
16
|
+
rectBounce(particle, calculateBounds(position, radius));
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
function singleSelectorBounce(container, selector, div, bounceCb) {
|
21
|
+
const query = document.querySelectorAll(selector);
|
22
|
+
if (!query.length) {
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
query.forEach((item) => {
|
26
|
+
const elem = item, pxRatio = container.retina.pixelRatio, pos = {
|
27
|
+
x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,
|
28
|
+
y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio,
|
29
|
+
}, radius = elem.offsetWidth * half * pxRatio, tolerance = toleranceFactor * pxRatio, area = div.type === "circle"
|
30
|
+
? new Circle(pos.x, pos.y, radius + tolerance)
|
31
|
+
: new Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);
|
32
|
+
bounceCb(pos, radius, area);
|
33
|
+
});
|
34
|
+
}
|
35
|
+
export function divBounce(container, divs, bounceMode, enabledCb) {
|
36
|
+
divModeExecute(bounceMode, divs, (selector, div) => singleSelectorBounce(container, selector, div, (pos, radius, area) => processBounce(container, pos, radius, area, enabledCb)));
|
37
|
+
}
|
38
|
+
export function mouseBounce(container, enabledCb) {
|
39
|
+
const pxRatio = container.retina.pixelRatio, tolerance = toleranceFactor * pxRatio, mousePos = container.interactivity.mouse.position, radius = container.retina.bounceModeDistance;
|
40
|
+
if (!radius || radius < minRadius || !mousePos) {
|
41
|
+
return;
|
42
|
+
}
|
43
|
+
processBounce(container, mousePos, radius, new Circle(mousePos.x, mousePos.y, radius + tolerance), enabledCb);
|
44
|
+
}
|
package/esm/index.js
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
import { Bouncer } from "./Bouncer.js";
|
2
1
|
export async function loadExternalBounceInteraction(engine, refresh = true) {
|
3
|
-
await engine.addInteractor("externalBounce", (container) =>
|
2
|
+
await engine.addInteractor("externalBounce", async (container) => {
|
3
|
+
const { Bouncer } = await import("./Bouncer.js");
|
4
|
+
return new Bouncer(container);
|
5
|
+
}, refresh);
|
4
6
|
}
|
5
7
|
export * from "./Options/Classes/Bounce.js";
|
6
8
|
export * from "./Options/Interfaces/IBounce.js";
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@tsparticles/interaction-external-bounce",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.2.0",
|
4
4
|
"description": "tsParticles bounce external 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.
|
90
|
+
"@tsparticles/engine": "^3.2.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-external-bounce [
|
6
|
+
<title>@tsparticles/interaction-external-bounce [31 Jan 2024 at 02:03]</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>
|
@@ -31,8 +31,8 @@
|
|
31
31
|
<body>
|
32
32
|
<div id="app"></div>
|
33
33
|
<script>
|
34
|
-
window.chartData = [
|
35
|
-
window.entrypoints = ["tsparticles.interaction.external.bounce
|
34
|
+
window.chartData = [];
|
35
|
+
window.entrypoints = ["tsparticles.interaction.external.bounce.min"];
|
36
36
|
window.defaultSizes = "parsed";
|
37
37
|
</script>
|
38
38
|
</body>
|