@tsparticles/engine 3.3.0 → 3.4.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/README.md +0 -4
- package/browser/Core/Canvas.js +27 -22
- package/browser/Core/Container.js +55 -42
- package/browser/Core/Engine.js +82 -74
- package/browser/Core/Particle.js +29 -15
- package/browser/Core/Particles.js +23 -24
- package/browser/Core/Utils/EventListeners.js +18 -17
- package/browser/Core/Utils/ExternalInteractorBase.js +2 -1
- package/browser/Core/Utils/InteractionManager.js +3 -2
- package/browser/Core/Utils/ParticlesInteractorBase.js +2 -1
- package/browser/Core/Utils/QuadTree.js +1 -1
- package/browser/Core/Utils/Ranges.js +5 -4
- package/browser/Enums/AnimationStatus.js +5 -1
- package/browser/Enums/Directions/MoveDirection.js +14 -1
- package/browser/Enums/Directions/OutModeDirection.js +7 -1
- package/browser/Enums/Directions/RotateDirection.js +6 -1
- package/browser/Enums/InteractivityDetect.js +6 -1
- package/browser/Enums/Modes/AnimationMode.js +7 -1
- package/browser/Enums/Modes/CollisionMode.js +6 -1
- package/browser/Enums/Modes/LimitMode.js +5 -1
- package/browser/Enums/Modes/OutMode.js +8 -1
- package/browser/Enums/Modes/PixelMode.js +5 -1
- package/browser/Enums/Modes/ResponsiveMode.js +5 -1
- package/browser/Enums/Modes/ThemeMode.js +6 -1
- package/browser/Enums/Types/AlterType.js +5 -1
- package/browser/Enums/Types/DestroyType.js +6 -1
- package/browser/Enums/Types/DivType.js +5 -1
- package/browser/Enums/Types/EasingType.js +30 -1
- package/browser/Enums/Types/EventType.js +15 -1
- package/browser/Enums/Types/GradientType.js +6 -1
- package/browser/Enums/Types/InteractorType.js +5 -1
- package/browser/Enums/Types/ParticleOutType.js +6 -1
- package/browser/Enums/Types/StartValueType.js +6 -1
- package/browser/Options/Classes/AnimationOptions.js +4 -2
- package/browser/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
- package/browser/Options/Classes/Interactivity/Events/Events.js +1 -1
- package/browser/Options/Classes/Interactivity/Interactivity.js +2 -1
- package/browser/Options/Classes/ManualParticle.js +2 -1
- package/browser/Options/Classes/Options.js +14 -12
- package/browser/Options/Classes/Particles/Collisions/Collisions.js +2 -1
- package/browser/Options/Classes/Particles/Move/Move.js +2 -1
- package/browser/Options/Classes/Particles/Move/MoveCenter.js +2 -1
- package/browser/Options/Classes/Particles/Move/OutModes.js +2 -1
- package/browser/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
- package/browser/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
- package/browser/Options/Classes/Particles/ParticlesOptions.js +1 -1
- package/browser/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
- package/browser/Options/Classes/Responsive.js +5 -4
- package/browser/Options/Classes/Theme/ThemeDefault.js +2 -1
- package/browser/Types/RangeType.js +5 -1
- package/browser/Utils/CanvasUtils.js +13 -7
- package/browser/Utils/ColorUtils.js +17 -9
- package/browser/Utils/EventDispatcher.js +1 -1
- package/browser/Utils/HslColorManager.js +11 -4
- package/browser/Utils/NumberUtils.js +11 -10
- package/browser/Utils/RgbColorManager.js +11 -4
- package/browser/Utils/Utils.js +37 -31
- package/cjs/Core/Canvas.js +27 -22
- package/cjs/Core/Container.js +55 -42
- package/cjs/Core/Engine.js +82 -74
- package/cjs/Core/Particle.js +29 -15
- package/cjs/Core/Particles.js +23 -24
- package/cjs/Core/Utils/EventListeners.js +18 -17
- package/cjs/Core/Utils/ExternalInteractorBase.js +2 -1
- package/cjs/Core/Utils/InteractionManager.js +3 -2
- package/cjs/Core/Utils/ParticlesInteractorBase.js +2 -1
- package/cjs/Core/Utils/QuadTree.js +1 -1
- package/cjs/Core/Utils/Ranges.js +5 -4
- package/cjs/Enums/AnimationStatus.js +6 -0
- package/cjs/Enums/Directions/MoveDirection.js +15 -0
- package/cjs/Enums/Directions/OutModeDirection.js +8 -0
- package/cjs/Enums/Directions/RotateDirection.js +7 -0
- package/cjs/Enums/InteractivityDetect.js +7 -0
- package/cjs/Enums/Modes/AnimationMode.js +8 -0
- package/cjs/Enums/Modes/CollisionMode.js +7 -0
- package/cjs/Enums/Modes/LimitMode.js +6 -0
- package/cjs/Enums/Modes/OutMode.js +9 -0
- package/cjs/Enums/Modes/PixelMode.js +6 -0
- package/cjs/Enums/Modes/ResponsiveMode.js +6 -0
- package/cjs/Enums/Modes/ThemeMode.js +7 -0
- package/cjs/Enums/Types/AlterType.js +6 -0
- package/cjs/Enums/Types/DestroyType.js +7 -0
- package/cjs/Enums/Types/DivType.js +6 -0
- package/cjs/Enums/Types/EasingType.js +31 -0
- package/cjs/Enums/Types/EventType.js +16 -0
- package/cjs/Enums/Types/GradientType.js +7 -0
- package/cjs/Enums/Types/InteractorType.js +6 -0
- package/cjs/Enums/Types/ParticleOutType.js +7 -0
- package/cjs/Enums/Types/StartValueType.js +7 -0
- package/cjs/Options/Classes/AnimationOptions.js +4 -2
- package/cjs/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
- package/cjs/Options/Classes/Interactivity/Events/Events.js +1 -1
- package/cjs/Options/Classes/Interactivity/Interactivity.js +2 -1
- package/cjs/Options/Classes/ManualParticle.js +2 -1
- package/cjs/Options/Classes/Options.js +14 -12
- package/cjs/Options/Classes/Particles/Collisions/Collisions.js +2 -1
- package/cjs/Options/Classes/Particles/Move/Move.js +2 -1
- package/cjs/Options/Classes/Particles/Move/MoveCenter.js +2 -1
- package/cjs/Options/Classes/Particles/Move/OutModes.js +2 -1
- package/cjs/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
- package/cjs/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
- package/cjs/Options/Classes/Particles/ParticlesOptions.js +1 -1
- package/cjs/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
- package/cjs/Options/Classes/Responsive.js +5 -4
- package/cjs/Options/Classes/Theme/ThemeDefault.js +2 -1
- package/cjs/Types/RangeType.js +6 -0
- package/cjs/Utils/CanvasUtils.js +13 -7
- package/cjs/Utils/ColorUtils.js +17 -9
- package/cjs/Utils/EventDispatcher.js +1 -1
- package/cjs/Utils/HslColorManager.js +11 -4
- package/cjs/Utils/NumberUtils.js +11 -10
- package/cjs/Utils/RgbColorManager.js +11 -4
- package/cjs/Utils/Utils.js +37 -31
- package/esm/Core/Canvas.js +27 -22
- package/esm/Core/Container.js +55 -42
- package/esm/Core/Engine.js +82 -74
- package/esm/Core/Particle.js +29 -15
- package/esm/Core/Particles.js +23 -24
- package/esm/Core/Utils/EventListeners.js +18 -17
- package/esm/Core/Utils/ExternalInteractorBase.js +2 -1
- package/esm/Core/Utils/InteractionManager.js +3 -2
- package/esm/Core/Utils/ParticlesInteractorBase.js +2 -1
- package/esm/Core/Utils/QuadTree.js +1 -1
- package/esm/Core/Utils/Ranges.js +5 -4
- package/esm/Enums/AnimationStatus.js +5 -1
- package/esm/Enums/Directions/MoveDirection.js +14 -1
- package/esm/Enums/Directions/OutModeDirection.js +7 -1
- package/esm/Enums/Directions/RotateDirection.js +6 -1
- package/esm/Enums/InteractivityDetect.js +6 -1
- package/esm/Enums/Modes/AnimationMode.js +7 -1
- package/esm/Enums/Modes/CollisionMode.js +6 -1
- package/esm/Enums/Modes/LimitMode.js +5 -1
- package/esm/Enums/Modes/OutMode.js +8 -1
- package/esm/Enums/Modes/PixelMode.js +5 -1
- package/esm/Enums/Modes/ResponsiveMode.js +5 -1
- package/esm/Enums/Modes/ThemeMode.js +6 -1
- package/esm/Enums/Types/AlterType.js +5 -1
- package/esm/Enums/Types/DestroyType.js +6 -1
- package/esm/Enums/Types/DivType.js +5 -1
- package/esm/Enums/Types/EasingType.js +30 -1
- package/esm/Enums/Types/EventType.js +15 -1
- package/esm/Enums/Types/GradientType.js +6 -1
- package/esm/Enums/Types/InteractorType.js +5 -1
- package/esm/Enums/Types/ParticleOutType.js +6 -1
- package/esm/Enums/Types/StartValueType.js +6 -1
- package/esm/Options/Classes/AnimationOptions.js +4 -2
- package/esm/Options/Classes/Interactivity/Events/DivEvent.js +2 -1
- package/esm/Options/Classes/Interactivity/Events/Events.js +1 -1
- package/esm/Options/Classes/Interactivity/Interactivity.js +2 -1
- package/esm/Options/Classes/ManualParticle.js +2 -1
- package/esm/Options/Classes/Options.js +14 -12
- package/esm/Options/Classes/Particles/Collisions/Collisions.js +2 -1
- package/esm/Options/Classes/Particles/Move/Move.js +2 -1
- package/esm/Options/Classes/Particles/Move/MoveCenter.js +2 -1
- package/esm/Options/Classes/Particles/Move/OutModes.js +2 -1
- package/esm/Options/Classes/Particles/Number/ParticlesNumberLimit.js +2 -1
- package/esm/Options/Classes/Particles/Opacity/OpacityAnimation.js +2 -1
- package/esm/Options/Classes/Particles/ParticlesOptions.js +1 -1
- package/esm/Options/Classes/Particles/Size/SizeAnimation.js +2 -1
- package/esm/Options/Classes/Responsive.js +5 -4
- package/esm/Options/Classes/Theme/ThemeDefault.js +2 -1
- package/esm/Types/RangeType.js +5 -1
- package/esm/Utils/CanvasUtils.js +13 -7
- package/esm/Utils/ColorUtils.js +17 -9
- package/esm/Utils/EventDispatcher.js +1 -1
- package/esm/Utils/HslColorManager.js +11 -4
- package/esm/Utils/NumberUtils.js +11 -10
- package/esm/Utils/RgbColorManager.js +11 -4
- package/esm/Utils/Utils.js +37 -31
- package/package.json +1 -1
- package/report.html +1 -1
- package/tsparticles.engine.js +327 -225
- package/tsparticles.engine.min.js +1 -1
- package/tsparticles.engine.min.js.LICENSE.txt +1 -1
- package/types/Core/Container.d.ts +4 -2
- package/types/Core/Engine.d.ts +6 -5
- package/types/Core/Interfaces/IPlugin.d.ts +3 -4
- package/types/Core/Interfaces/IShapeDrawer.d.ts +1 -0
- package/types/Core/Particle.d.ts +1 -0
- package/types/Enums/AnimationStatus.d.ts +1 -1
- package/types/Enums/Directions/MoveDirection.d.ts +1 -1
- package/types/Enums/Directions/OutModeDirection.d.ts +1 -1
- package/types/Enums/Directions/RotateDirection.d.ts +1 -1
- package/types/Enums/InteractivityDetect.d.ts +1 -1
- package/types/Enums/Modes/AnimationMode.d.ts +1 -1
- package/types/Enums/Modes/CollisionMode.d.ts +1 -1
- package/types/Enums/Modes/LimitMode.d.ts +1 -1
- package/types/Enums/Modes/OutMode.d.ts +1 -1
- package/types/Enums/Modes/PixelMode.d.ts +1 -1
- package/types/Enums/Modes/ResponsiveMode.d.ts +1 -1
- package/types/Enums/Modes/ThemeMode.d.ts +1 -1
- package/types/Enums/Types/AlterType.d.ts +1 -1
- package/types/Enums/Types/DestroyType.d.ts +1 -1
- package/types/Enums/Types/DivType.d.ts +1 -1
- package/types/Enums/Types/EasingType.d.ts +1 -1
- package/types/Enums/Types/EventType.d.ts +1 -1
- package/types/Enums/Types/GradientType.d.ts +1 -1
- package/types/Enums/Types/InteractorType.d.ts +1 -1
- package/types/Enums/Types/ParticleOutType.d.ts +1 -1
- package/types/Enums/Types/StartValueType.d.ts +1 -1
- package/types/Options/Classes/Options.d.ts +2 -1
- package/types/Options/Classes/Responsive.d.ts +2 -2
- package/types/Options/Classes/Theme/Theme.d.ts +2 -2
- package/types/Options/Interfaces/IResponsive.d.ts +2 -3
- package/types/Options/Interfaces/Theme/ITheme.d.ts +2 -3
- package/types/Types/RangeType.d.ts +1 -1
- package/umd/Core/Canvas.js +27 -22
- package/umd/Core/Container.js +56 -43
- package/umd/Core/Engine.js +83 -99
- package/umd/Core/Particle.js +30 -16
- package/umd/Core/Particles.js +24 -25
- package/umd/Core/Utils/EventListeners.js +19 -18
- package/umd/Core/Utils/ExternalInteractorBase.js +3 -2
- package/umd/Core/Utils/InteractionManager.js +4 -3
- package/umd/Core/Utils/ParticlesInteractorBase.js +3 -2
- package/umd/Core/Utils/QuadTree.js +1 -1
- package/umd/Core/Utils/Ranges.js +6 -5
- package/umd/Enums/AnimationStatus.js +6 -0
- package/umd/Enums/Directions/MoveDirection.js +15 -0
- package/umd/Enums/Directions/OutModeDirection.js +8 -0
- package/umd/Enums/Directions/RotateDirection.js +7 -0
- package/umd/Enums/InteractivityDetect.js +7 -0
- package/umd/Enums/Modes/AnimationMode.js +8 -0
- package/umd/Enums/Modes/CollisionMode.js +7 -0
- package/umd/Enums/Modes/LimitMode.js +6 -0
- package/umd/Enums/Modes/OutMode.js +9 -0
- package/umd/Enums/Modes/PixelMode.js +6 -0
- package/umd/Enums/Modes/ResponsiveMode.js +6 -0
- package/umd/Enums/Modes/ThemeMode.js +7 -0
- package/umd/Enums/Types/AlterType.js +6 -0
- package/umd/Enums/Types/DestroyType.js +7 -0
- package/umd/Enums/Types/DivType.js +6 -0
- package/umd/Enums/Types/EasingType.js +31 -0
- package/umd/Enums/Types/EventType.js +16 -0
- package/umd/Enums/Types/GradientType.js +7 -0
- package/umd/Enums/Types/InteractorType.js +6 -0
- package/umd/Enums/Types/ParticleOutType.js +7 -0
- package/umd/Enums/Types/StartValueType.js +7 -0
- package/umd/Options/Classes/AnimationOptions.js +5 -3
- package/umd/Options/Classes/Interactivity/Events/DivEvent.js +3 -2
- package/umd/Options/Classes/Interactivity/Events/Events.js +1 -1
- package/umd/Options/Classes/Interactivity/Interactivity.js +3 -2
- package/umd/Options/Classes/ManualParticle.js +3 -2
- package/umd/Options/Classes/Options.js +15 -13
- package/umd/Options/Classes/Particles/Collisions/Collisions.js +3 -2
- package/umd/Options/Classes/Particles/Move/Move.js +3 -2
- package/umd/Options/Classes/Particles/Move/MoveCenter.js +3 -2
- package/umd/Options/Classes/Particles/Move/OutModes.js +3 -2
- package/umd/Options/Classes/Particles/Number/ParticlesNumberLimit.js +3 -2
- package/umd/Options/Classes/Particles/Opacity/OpacityAnimation.js +3 -2
- package/umd/Options/Classes/Particles/ParticlesOptions.js +1 -1
- package/umd/Options/Classes/Particles/Size/SizeAnimation.js +3 -2
- package/umd/Options/Classes/Responsive.js +6 -5
- package/umd/Options/Classes/Theme/ThemeDefault.js +3 -2
- package/umd/Types/RangeType.js +6 -0
- package/umd/Utils/CanvasUtils.js +14 -8
- package/umd/Utils/ColorUtils.js +18 -10
- package/umd/Utils/EventDispatcher.js +1 -1
- package/umd/Utils/HslColorManager.js +11 -4
- package/umd/Utils/NumberUtils.js +12 -11
- package/umd/Utils/RgbColorManager.js +11 -4
- package/umd/Utils/Utils.js +38 -32
- package/174.min.js +0 -2
- package/174.min.js.LICENSE.txt +0 -1
- package/dist_browser_Core_Container_js.js +0 -102
package/cjs/Core/Engine.js
CHANGED
|
@@ -3,12 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Engine = void 0;
|
|
4
4
|
const Constants_js_1 = require("./Utils/Constants.js");
|
|
5
5
|
const Utils_js_1 = require("../Utils/Utils.js");
|
|
6
|
+
const Container_js_1 = require("./Container.js");
|
|
6
7
|
const EventDispatcher_js_1 = require("../Utils/EventDispatcher.js");
|
|
8
|
+
const EventType_js_1 = require("../Enums/Types/EventType.js");
|
|
7
9
|
const NumberUtils_js_1 = require("../Utils/NumberUtils.js");
|
|
8
10
|
async function getItemsFromInitializer(container, map, initializers, force = false) {
|
|
9
11
|
let res = map.get(container);
|
|
10
12
|
if (!res || force) {
|
|
11
|
-
res = await Promise.all([...initializers.values()].map(
|
|
13
|
+
res = await Promise.all([...initializers.values()].map(t => t(container)));
|
|
12
14
|
map.set(container, res);
|
|
13
15
|
}
|
|
14
16
|
return res;
|
|
@@ -25,6 +27,46 @@ async function getDataFromUrl(data) {
|
|
|
25
27
|
(0, Utils_js_1.getLogger)().error(`${Constants_js_1.errorPrefix} ${response.status} while retrieving config file`);
|
|
26
28
|
return data.fallback;
|
|
27
29
|
}
|
|
30
|
+
const generatedTrue = "true", generatedFalse = "false", canvasTag = "canvas", getCanvasFromContainer = (domContainer) => {
|
|
31
|
+
let canvasEl;
|
|
32
|
+
if (domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag) {
|
|
33
|
+
canvasEl = domContainer;
|
|
34
|
+
if (!canvasEl.dataset[Constants_js_1.generatedAttribute]) {
|
|
35
|
+
canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedFalse;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const existingCanvases = domContainer.getElementsByTagName(canvasTag);
|
|
40
|
+
if (existingCanvases.length) {
|
|
41
|
+
const firstIndex = 0;
|
|
42
|
+
canvasEl = existingCanvases[firstIndex];
|
|
43
|
+
canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedFalse;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
canvasEl = document.createElement(canvasTag);
|
|
47
|
+
canvasEl.dataset[Constants_js_1.generatedAttribute] = generatedTrue;
|
|
48
|
+
domContainer.appendChild(canvasEl);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const fullPercent = "100%";
|
|
52
|
+
if (!canvasEl.style.width) {
|
|
53
|
+
canvasEl.style.width = fullPercent;
|
|
54
|
+
}
|
|
55
|
+
if (!canvasEl.style.height) {
|
|
56
|
+
canvasEl.style.height = fullPercent;
|
|
57
|
+
}
|
|
58
|
+
return canvasEl;
|
|
59
|
+
}, getDomContainer = (id, source) => {
|
|
60
|
+
let domContainer = source ?? document.getElementById(id);
|
|
61
|
+
if (domContainer) {
|
|
62
|
+
return domContainer;
|
|
63
|
+
}
|
|
64
|
+
domContainer = document.createElement("div");
|
|
65
|
+
domContainer.id = id;
|
|
66
|
+
domContainer.dataset[Constants_js_1.generatedAttribute] = generatedTrue;
|
|
67
|
+
document.body.append(domContainer);
|
|
68
|
+
return domContainer;
|
|
69
|
+
};
|
|
28
70
|
class Engine {
|
|
29
71
|
constructor() {
|
|
30
72
|
this._configs = new Map();
|
|
@@ -52,16 +94,19 @@ class Engine {
|
|
|
52
94
|
}
|
|
53
95
|
return res;
|
|
54
96
|
}
|
|
97
|
+
get items() {
|
|
98
|
+
return this._domArray;
|
|
99
|
+
}
|
|
55
100
|
get version() {
|
|
56
|
-
return "3.
|
|
101
|
+
return "3.4.0";
|
|
57
102
|
}
|
|
58
103
|
addConfig(config) {
|
|
59
104
|
const key = config.key ?? config.name ?? "default";
|
|
60
105
|
this._configs.set(key, config);
|
|
61
|
-
this._eventDispatcher.dispatchEvent(
|
|
106
|
+
this._eventDispatcher.dispatchEvent(EventType_js_1.EventType.configAdded, { data: { name: key, config } });
|
|
62
107
|
}
|
|
63
108
|
async addEffect(effect, drawer, refresh = true) {
|
|
64
|
-
(0, Utils_js_1.executeOnSingleOrMultiple)(effect,
|
|
109
|
+
(0, Utils_js_1.executeOnSingleOrMultiple)(effect, type => {
|
|
65
110
|
if (!this.getEffectDrawer(type)) {
|
|
66
111
|
this.effectDrawers.set(type, drawer);
|
|
67
112
|
}
|
|
@@ -101,12 +146,13 @@ class Engine {
|
|
|
101
146
|
}
|
|
102
147
|
await this.refresh(refresh);
|
|
103
148
|
}
|
|
104
|
-
async addShape(
|
|
105
|
-
(
|
|
106
|
-
if (
|
|
107
|
-
|
|
149
|
+
async addShape(drawer, refresh = true) {
|
|
150
|
+
for (const validType of drawer.validTypes) {
|
|
151
|
+
if (this.getShapeDrawer(validType)) {
|
|
152
|
+
continue;
|
|
108
153
|
}
|
|
109
|
-
|
|
154
|
+
this.shapeDrawers.set(validType, drawer);
|
|
155
|
+
}
|
|
110
156
|
await this.refresh(refresh);
|
|
111
157
|
}
|
|
112
158
|
clearPlugins(container) {
|
|
@@ -118,16 +164,10 @@ class Engine {
|
|
|
118
164
|
this._eventDispatcher.dispatchEvent(type, args);
|
|
119
165
|
}
|
|
120
166
|
dom() {
|
|
121
|
-
return this.
|
|
167
|
+
return this.items;
|
|
122
168
|
}
|
|
123
169
|
domItem(index) {
|
|
124
|
-
|
|
125
|
-
if (!item || item.destroyed) {
|
|
126
|
-
const deleteCount = 1;
|
|
127
|
-
dom.splice(index, deleteCount);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
return item;
|
|
170
|
+
return this.item(index);
|
|
131
171
|
}
|
|
132
172
|
async getAvailablePlugins(container) {
|
|
133
173
|
const res = new Map();
|
|
@@ -142,16 +182,16 @@ class Engine {
|
|
|
142
182
|
return this.effectDrawers.get(type);
|
|
143
183
|
}
|
|
144
184
|
async getInteractors(container, force = false) {
|
|
145
|
-
return
|
|
185
|
+
return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);
|
|
146
186
|
}
|
|
147
187
|
async getMovers(container, force = false) {
|
|
148
|
-
return
|
|
188
|
+
return getItemsFromInitializer(container, this.movers, this._initializers.movers, force);
|
|
149
189
|
}
|
|
150
190
|
getPathGenerator(type) {
|
|
151
191
|
return this.pathGenerators.get(type);
|
|
152
192
|
}
|
|
153
193
|
getPlugin(plugin) {
|
|
154
|
-
return this.plugins.find(
|
|
194
|
+
return this.plugins.find(t => t.id === plugin);
|
|
155
195
|
}
|
|
156
196
|
getPreset(preset) {
|
|
157
197
|
return this.presets.get(preset);
|
|
@@ -166,7 +206,7 @@ class Engine {
|
|
|
166
206
|
return this.shapeDrawers.keys();
|
|
167
207
|
}
|
|
168
208
|
async getUpdaters(container, force = false) {
|
|
169
|
-
return
|
|
209
|
+
return getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);
|
|
170
210
|
}
|
|
171
211
|
init() {
|
|
172
212
|
if (this._initialized) {
|
|
@@ -174,90 +214,58 @@ class Engine {
|
|
|
174
214
|
}
|
|
175
215
|
this._initialized = true;
|
|
176
216
|
}
|
|
217
|
+
item(index) {
|
|
218
|
+
const { items } = this, item = items[index];
|
|
219
|
+
if (!item || item.destroyed) {
|
|
220
|
+
const deleteCount = 1;
|
|
221
|
+
items.splice(index, deleteCount);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
return item;
|
|
225
|
+
}
|
|
177
226
|
async load(params) {
|
|
178
227
|
const randomFactor = 10000, id = params.id ?? params.element?.id ?? `tsparticles${Math.floor((0, NumberUtils_js_1.getRandom)() * randomFactor)}`, { index, url } = params, options = url ? await getDataFromUrl({ fallback: params.options, url, index }) : params.options;
|
|
179
|
-
|
|
180
|
-
if (!domContainer) {
|
|
181
|
-
domContainer = document.createElement("div");
|
|
182
|
-
domContainer.id = id;
|
|
183
|
-
document.body.append(domContainer);
|
|
184
|
-
}
|
|
185
|
-
const currentOptions = (0, Utils_js_1.itemFromSingleOrMultiple)(options, index), dom = this.dom(), oldIndex = dom.findIndex((v) => v.id.description === id), minIndex = 0;
|
|
228
|
+
const currentOptions = (0, Utils_js_1.itemFromSingleOrMultiple)(options, index), { items } = this, oldIndex = items.findIndex(v => v.id.description === id), minIndex = 0, newItem = new Container_js_1.Container(this, id, currentOptions);
|
|
186
229
|
if (oldIndex >= minIndex) {
|
|
187
|
-
const old = this.
|
|
230
|
+
const old = this.item(oldIndex), one = 1, none = 0, deleteCount = old ? one : none;
|
|
188
231
|
if (old && !old.destroyed) {
|
|
189
|
-
old.destroy();
|
|
190
|
-
const deleteCount = 1;
|
|
191
|
-
dom.splice(oldIndex, deleteCount);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
let canvasEl;
|
|
195
|
-
if (domContainer.tagName.toLowerCase() === "canvas") {
|
|
196
|
-
canvasEl = domContainer;
|
|
197
|
-
canvasEl.dataset[Constants_js_1.generatedAttribute] = "false";
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
const existingCanvases = domContainer.getElementsByTagName("canvas");
|
|
201
|
-
if (existingCanvases.length) {
|
|
202
|
-
const firstIndex = 0;
|
|
203
|
-
canvasEl = existingCanvases[firstIndex];
|
|
204
|
-
canvasEl.dataset[Constants_js_1.generatedAttribute] = "false";
|
|
232
|
+
old.destroy(false);
|
|
205
233
|
}
|
|
206
|
-
|
|
207
|
-
canvasEl = document.createElement("canvas");
|
|
208
|
-
canvasEl.dataset[Constants_js_1.generatedAttribute] = "true";
|
|
209
|
-
domContainer.appendChild(canvasEl);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
if (!canvasEl.style.width) {
|
|
213
|
-
canvasEl.style.width = "100%";
|
|
214
|
-
}
|
|
215
|
-
if (!canvasEl.style.height) {
|
|
216
|
-
canvasEl.style.height = "100%";
|
|
217
|
-
}
|
|
218
|
-
const { Container } = await import("./Container.js"), newItem = new Container(this, id, currentOptions);
|
|
219
|
-
if (oldIndex >= minIndex) {
|
|
220
|
-
const deleteCount = 0;
|
|
221
|
-
dom.splice(oldIndex, deleteCount, newItem);
|
|
234
|
+
items.splice(oldIndex, deleteCount, newItem);
|
|
222
235
|
}
|
|
223
236
|
else {
|
|
224
|
-
|
|
237
|
+
items.push(newItem);
|
|
225
238
|
}
|
|
239
|
+
const domContainer = getDomContainer(id, params.element), canvasEl = getCanvasFromContainer(domContainer);
|
|
226
240
|
newItem.canvas.loadCanvas(canvasEl);
|
|
227
241
|
await newItem.start();
|
|
228
242
|
return newItem;
|
|
229
243
|
}
|
|
230
244
|
loadOptions(options, sourceOptions) {
|
|
231
|
-
|
|
232
|
-
plugin.loadOptions(options, sourceOptions);
|
|
233
|
-
}
|
|
245
|
+
this.plugins.forEach(plugin => plugin.loadOptions?.(options, sourceOptions));
|
|
234
246
|
}
|
|
235
247
|
loadParticlesOptions(container, options, ...sourceOptions) {
|
|
236
248
|
const updaters = this.updaters.get(container);
|
|
237
249
|
if (!updaters) {
|
|
238
250
|
return;
|
|
239
251
|
}
|
|
240
|
-
|
|
241
|
-
updater.loadOptions?.(options, ...sourceOptions);
|
|
242
|
-
}
|
|
252
|
+
updaters.forEach(updater => updater.loadOptions?.(options, ...sourceOptions));
|
|
243
253
|
}
|
|
244
254
|
async refresh(refresh = true) {
|
|
245
255
|
if (!refresh) {
|
|
246
256
|
return;
|
|
247
257
|
}
|
|
248
|
-
await Promise.all(this.
|
|
258
|
+
await Promise.all(this.items.map(t => t.refresh()));
|
|
249
259
|
}
|
|
250
260
|
removeEventListener(type, listener) {
|
|
251
261
|
this._eventDispatcher.removeEventListener(type, listener);
|
|
252
262
|
}
|
|
253
263
|
setOnClickHandler(callback) {
|
|
254
|
-
const
|
|
255
|
-
if (!
|
|
264
|
+
const { items } = this;
|
|
265
|
+
if (!items.length) {
|
|
256
266
|
throw new Error(`${Constants_js_1.errorPrefix} can only set click handlers after calling tsParticles.load()`);
|
|
257
267
|
}
|
|
258
|
-
|
|
259
|
-
domItem.addClickHandler(callback);
|
|
260
|
-
}
|
|
268
|
+
items.forEach(item => item.addClickHandler(callback));
|
|
261
269
|
}
|
|
262
270
|
}
|
|
263
271
|
exports.Engine = Engine;
|
package/cjs/Core/Particle.js
CHANGED
|
@@ -6,10 +6,15 @@ const NumberUtils_js_1 = require("../Utils/NumberUtils.js");
|
|
|
6
6
|
const Utils_js_1 = require("../Utils/Utils.js");
|
|
7
7
|
const Constants_js_1 = require("./Utils/Constants.js");
|
|
8
8
|
const ColorUtils_js_1 = require("../Utils/ColorUtils.js");
|
|
9
|
+
const EventType_js_1 = require("../Enums/Types/EventType.js");
|
|
9
10
|
const Interactivity_js_1 = require("../Options/Classes/Interactivity/Interactivity.js");
|
|
11
|
+
const MoveDirection_js_1 = require("../Enums/Directions/MoveDirection.js");
|
|
12
|
+
const OutMode_js_1 = require("../Enums/Modes/OutMode.js");
|
|
13
|
+
const ParticleOutType_js_1 = require("../Enums/Types/ParticleOutType.js");
|
|
14
|
+
const PixelMode_js_1 = require("../Enums/Modes/PixelMode.js");
|
|
10
15
|
const CanvasUtils_js_1 = require("../Utils/CanvasUtils.js");
|
|
11
16
|
const OptionsUtils_js_1 = require("../Utils/OptionsUtils.js");
|
|
12
|
-
const defaultRetryCount = 0, double = 2, half = 0.5, squareExp = 2;
|
|
17
|
+
const defaultRetryCount = 0, double = 2, half = 0.5, squareExp = 2, randomString = "random";
|
|
13
18
|
function loadEffectData(effect, effectOptions, id, reduceDuplicates) {
|
|
14
19
|
const effectData = effectOptions.options[effect];
|
|
15
20
|
if (!effectData) {
|
|
@@ -58,7 +63,7 @@ class Particle {
|
|
|
58
63
|
}), pos = Vectors_js_1.Vector3d.create(exactPosition.x, exactPosition.y, zIndex), radius = this.getRadius(), outModes = this.options.move.outModes, fixHorizontal = (outMode) => {
|
|
59
64
|
fixOutMode({
|
|
60
65
|
outMode,
|
|
61
|
-
checkModes: [
|
|
66
|
+
checkModes: [OutMode_js_1.OutMode.bounce],
|
|
62
67
|
coord: pos.x,
|
|
63
68
|
maxCoord: container.canvas.size.width,
|
|
64
69
|
setCb: (value) => (pos.x += value),
|
|
@@ -67,7 +72,7 @@ class Particle {
|
|
|
67
72
|
}, fixVertical = (outMode) => {
|
|
68
73
|
fixOutMode({
|
|
69
74
|
outMode,
|
|
70
|
-
checkModes: [
|
|
75
|
+
checkModes: [OutMode_js_1.OutMode.bounce],
|
|
71
76
|
coord: pos.y,
|
|
72
77
|
maxCoord: container.canvas.size.height,
|
|
73
78
|
setCb: (value) => (pos.y += value),
|
|
@@ -86,7 +91,7 @@ class Particle {
|
|
|
86
91
|
};
|
|
87
92
|
this._calculateVelocity = () => {
|
|
88
93
|
const baseVelocity = (0, NumberUtils_js_1.getParticleBaseVelocity)(this.direction), res = baseVelocity.copy(), moveOptions = this.options.move;
|
|
89
|
-
if (moveOptions.direction ===
|
|
94
|
+
if (moveOptions.direction === MoveDirection_js_1.MoveDirection.inside || moveOptions.direction === MoveDirection_js_1.MoveDirection.outside) {
|
|
90
95
|
return res;
|
|
91
96
|
}
|
|
92
97
|
const rad = (0, NumberUtils_js_1.degToRad)((0, NumberUtils_js_1.getRangeValue)(moveOptions.angle.value)), radOffset = (0, NumberUtils_js_1.degToRad)((0, NumberUtils_js_1.getRangeValue)(moveOptions.angle.offset)), range = {
|
|
@@ -114,9 +119,9 @@ class Particle {
|
|
|
114
119
|
if (retries >= minRetries && tryCount > retries) {
|
|
115
120
|
throw new Error(`${Constants_js_1.errorPrefix} particle is overlapping and can't be placed`);
|
|
116
121
|
}
|
|
117
|
-
return !!this.container.particles.find(
|
|
122
|
+
return !!this.container.particles.find(particle => (0, NumberUtils_js_1.getDistance)(pos, particle.position) < radius + particle.getRadius());
|
|
118
123
|
};
|
|
119
|
-
this._getRollColor =
|
|
124
|
+
this._getRollColor = color => {
|
|
120
125
|
if (!color || !this.roll || (!this.backColor && !this.roll.alter)) {
|
|
121
126
|
return color;
|
|
122
127
|
}
|
|
@@ -132,7 +137,7 @@ class Particle {
|
|
|
132
137
|
}
|
|
133
138
|
return color;
|
|
134
139
|
};
|
|
135
|
-
this._initPosition =
|
|
140
|
+
this._initPosition = position => {
|
|
136
141
|
const container = this.container, zIndexValue = (0, NumberUtils_js_1.getRangeValue)(this.options.zIndex.value), minZ = 0;
|
|
137
142
|
this.position = this._calcPosition(container, position, (0, NumberUtils_js_1.clamp)(zIndexValue, minZ, container.zLayers));
|
|
138
143
|
this.initialPosition = this.position.copy();
|
|
@@ -140,15 +145,15 @@ class Particle {
|
|
|
140
145
|
this.moveCenter = {
|
|
141
146
|
...(0, Utils_js_1.getPosition)(this.options.move.center, canvasSize),
|
|
142
147
|
radius: this.options.move.center.radius ?? defaultRadius,
|
|
143
|
-
mode: this.options.move.center.mode ??
|
|
148
|
+
mode: this.options.move.center.mode ?? PixelMode_js_1.PixelMode.percent,
|
|
144
149
|
};
|
|
145
150
|
this.direction = (0, NumberUtils_js_1.getParticleDirectionAngle)(this.options.move.direction, this.position, this.moveCenter);
|
|
146
151
|
switch (this.options.move.direction) {
|
|
147
|
-
case
|
|
148
|
-
this.outType =
|
|
152
|
+
case MoveDirection_js_1.MoveDirection.inside:
|
|
153
|
+
this.outType = ParticleOutType_js_1.ParticleOutType.inside;
|
|
149
154
|
break;
|
|
150
|
-
case
|
|
151
|
-
this.outType =
|
|
155
|
+
case MoveDirection_js_1.MoveDirection.outside:
|
|
156
|
+
this.outType = ParticleOutType_js_1.ParticleOutType.outside;
|
|
152
157
|
break;
|
|
153
158
|
}
|
|
154
159
|
this.offset = Vectors_js_1.Vector.origin;
|
|
@@ -171,7 +176,7 @@ class Particle {
|
|
|
171
176
|
updater.particleDestroyed?.(this, override);
|
|
172
177
|
}
|
|
173
178
|
pathGenerator?.reset(this);
|
|
174
|
-
this._engine.dispatchEvent(
|
|
179
|
+
this._engine.dispatchEvent(EventType_js_1.EventType.particleDestroyed, {
|
|
175
180
|
container: this.container,
|
|
176
181
|
data: {
|
|
177
182
|
particle: this,
|
|
@@ -216,14 +221,15 @@ class Particle {
|
|
|
216
221
|
this.lastPathTime = 0;
|
|
217
222
|
this.destroyed = false;
|
|
218
223
|
this.unbreakable = false;
|
|
224
|
+
this.isRotating = false;
|
|
219
225
|
this.rotation = 0;
|
|
220
226
|
this.misplaced = false;
|
|
221
227
|
this.retina = {
|
|
222
228
|
maxDistance: {},
|
|
223
229
|
};
|
|
224
|
-
this.outType =
|
|
230
|
+
this.outType = ParticleOutType_js_1.ParticleOutType.normal;
|
|
225
231
|
this.ignoresResizeRatio = true;
|
|
226
|
-
const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, container, mainOptions.particles), effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type
|
|
232
|
+
const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0, OptionsUtils_js_1.loadParticlesOptions)(this._engine, container, mainOptions.particles), { reduceDuplicates } = particlesOptions, effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type;
|
|
227
233
|
this.effect = (0, Utils_js_1.itemFromSingleOrMultiple)(effectType, this.id, reduceDuplicates);
|
|
228
234
|
this.shape = (0, Utils_js_1.itemFromSingleOrMultiple)(shapeType, this.id, reduceDuplicates);
|
|
229
235
|
const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;
|
|
@@ -243,6 +249,14 @@ class Particle {
|
|
|
243
249
|
}
|
|
244
250
|
}
|
|
245
251
|
}
|
|
252
|
+
if (this.effect === randomString) {
|
|
253
|
+
const availableEffects = [...this.container.effectDrawers.keys()];
|
|
254
|
+
this.effect = availableEffects[Math.floor(Math.random() * availableEffects.length)];
|
|
255
|
+
}
|
|
256
|
+
if (this.shape === randomString) {
|
|
257
|
+
const availableShapes = [...this.container.shapeDrawers.keys()];
|
|
258
|
+
this.shape = availableShapes[Math.floor(Math.random() * availableShapes.length)];
|
|
259
|
+
}
|
|
246
260
|
this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);
|
|
247
261
|
this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);
|
|
248
262
|
particlesOptions.load(overrideOptions);
|
package/cjs/Core/Particles.js
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Particles = void 0;
|
|
4
4
|
const Utils_js_1 = require("../Utils/Utils.js");
|
|
5
|
+
const EventType_js_1 = require("../Enums/Types/EventType.js");
|
|
5
6
|
const InteractionManager_js_1 = require("./Utils/InteractionManager.js");
|
|
7
|
+
const LimitMode_js_1 = require("../Enums/Modes/LimitMode.js");
|
|
6
8
|
const Particle_js_1 = require("./Particle.js");
|
|
7
9
|
const Point_js_1 = require("./Utils/Point.js");
|
|
8
10
|
const QuadTree_js_1 = require("./Utils/QuadTree.js");
|
|
@@ -16,9 +18,7 @@ const qTreeRectangle = (canvasSize) => {
|
|
|
16
18
|
class Particles {
|
|
17
19
|
constructor(engine, container) {
|
|
18
20
|
this._addToPool = (...particles) => {
|
|
19
|
-
|
|
20
|
-
this._pool.push(particle);
|
|
21
|
-
}
|
|
21
|
+
this._pool.push(...particles);
|
|
22
22
|
};
|
|
23
23
|
this._applyDensity = (options, manualCount, group) => {
|
|
24
24
|
const numberOptions = options.number;
|
|
@@ -31,7 +31,7 @@ class Particles {
|
|
|
31
31
|
}
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, minLimit = 0, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter(
|
|
34
|
+
const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, minLimit = 0, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount, particlesCount = Math.min(this.count, this.filter(t => t.group === group).length);
|
|
35
35
|
if (group === undefined) {
|
|
36
36
|
this._limit = numberOptions.limit.value * densityFactor;
|
|
37
37
|
}
|
|
@@ -45,7 +45,7 @@ class Particles {
|
|
|
45
45
|
this.removeQuantity(particlesCount - particlesNumber, group);
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
this._initDensityFactor =
|
|
48
|
+
this._initDensityFactor = densityOptions => {
|
|
49
49
|
const container = this._container, defaultFactor = 1;
|
|
50
50
|
if (!container.canvas.element || !densityOptions.enable) {
|
|
51
51
|
return defaultFactor;
|
|
@@ -70,7 +70,7 @@ class Particles {
|
|
|
70
70
|
this._array.push(particle);
|
|
71
71
|
this._zArray.push(particle);
|
|
72
72
|
this._nextId++;
|
|
73
|
-
this._engine.dispatchEvent(
|
|
73
|
+
this._engine.dispatchEvent(EventType_js_1.EventType.particleAdded, {
|
|
74
74
|
container: this._container,
|
|
75
75
|
data: {
|
|
76
76
|
particle,
|
|
@@ -91,7 +91,7 @@ class Particles {
|
|
|
91
91
|
this._array.splice(index, deleteCount);
|
|
92
92
|
this._zArray.splice(zIdx, deleteCount);
|
|
93
93
|
particle.destroy(override);
|
|
94
|
-
this._engine.dispatchEvent(
|
|
94
|
+
this._engine.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
|
|
95
95
|
container: this._container,
|
|
96
96
|
data: {
|
|
97
97
|
particle,
|
|
@@ -122,23 +122,24 @@ class Particles {
|
|
|
122
122
|
}
|
|
123
123
|
addManualParticles() {
|
|
124
124
|
const container = this._container, options = container.actualOptions;
|
|
125
|
-
|
|
126
|
-
this.addParticle(particle.position ? (0, Utils_js_1.getPosition)(particle.position, container.canvas.size) : undefined, particle.options);
|
|
127
|
-
}
|
|
125
|
+
options.manualParticles.forEach(p => this.addParticle(p.position ? (0, Utils_js_1.getPosition)(p.position, container.canvas.size) : undefined, p.options));
|
|
128
126
|
}
|
|
129
127
|
addParticle(position, overrideOptions, group, initializer) {
|
|
130
|
-
const
|
|
128
|
+
const limitMode = this._container.actualOptions.particles.number.limit.mode, limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit, currentCount = this.count, minLimit = 0;
|
|
131
129
|
if (limit > minLimit) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if (currentCount >= limit) {
|
|
140
|
-
return;
|
|
130
|
+
switch (limitMode) {
|
|
131
|
+
case LimitMode_js_1.LimitMode.delete: {
|
|
132
|
+
const countOffset = 1, minCount = 0, countToRemove = currentCount + countOffset - limit;
|
|
133
|
+
if (countToRemove > minCount) {
|
|
134
|
+
this.removeQuantity(countToRemove);
|
|
135
|
+
}
|
|
136
|
+
break;
|
|
141
137
|
}
|
|
138
|
+
case LimitMode_js_1.LimitMode.wait:
|
|
139
|
+
if (currentCount >= limit) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
break;
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
return this._pushParticle(position, overrideOptions, group, initializer);
|
|
@@ -184,9 +185,7 @@ class Particles {
|
|
|
184
185
|
await this.initPlugins();
|
|
185
186
|
let handled = false;
|
|
186
187
|
for (const [, plugin] of container.plugins) {
|
|
187
|
-
|
|
188
|
-
handled = plugin.particlesInitialization();
|
|
189
|
-
}
|
|
188
|
+
handled = plugin.particlesInitialization?.() ?? handled;
|
|
190
189
|
if (handled) {
|
|
191
190
|
break;
|
|
192
191
|
}
|
|
@@ -301,7 +300,7 @@ class Particles {
|
|
|
301
300
|
this._array = this.filter(checkDelete);
|
|
302
301
|
this._zArray = this._zArray.filter(checkDelete);
|
|
303
302
|
for (const particle of particlesToDelete) {
|
|
304
|
-
this._engine.dispatchEvent(
|
|
303
|
+
this._engine.dispatchEvent(EventType_js_1.EventType.particleRemoved, {
|
|
305
304
|
container: this._container,
|
|
306
305
|
data: {
|
|
307
306
|
particle,
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.EventListeners = void 0;
|
|
4
4
|
const Utils_js_1 = require("../../Utils/Utils.js");
|
|
5
5
|
const Constants_js_1 = require("./Constants.js");
|
|
6
|
+
const InteractivityDetect_js_1 = require("../../Enums/InteractivityDetect.js");
|
|
6
7
|
const TypeUtils_js_1 = require("../../Utils/TypeUtils.js");
|
|
7
8
|
const double = 2;
|
|
8
9
|
function manageListener(element, event, handler, add, options) {
|
|
@@ -24,7 +25,7 @@ function manageListener(element, event, handler, add, options) {
|
|
|
24
25
|
class EventListeners {
|
|
25
26
|
constructor(container) {
|
|
26
27
|
this.container = container;
|
|
27
|
-
this._doMouseTouchClick =
|
|
28
|
+
this._doMouseTouchClick = e => {
|
|
28
29
|
const container = this.container, options = container.actualOptions;
|
|
29
30
|
if (this._canPush) {
|
|
30
31
|
const mouseInteractivity = container.interactivity.mouse, mousePos = mouseInteractivity.position;
|
|
@@ -34,7 +35,7 @@ class EventListeners {
|
|
|
34
35
|
mouseInteractivity.clickPosition = { ...mousePos };
|
|
35
36
|
mouseInteractivity.clickTime = new Date().getTime();
|
|
36
37
|
const onClick = options.interactivity.events.onClick;
|
|
37
|
-
(0, Utils_js_1.executeOnSingleOrMultiple)(onClick.mode,
|
|
38
|
+
(0, Utils_js_1.executeOnSingleOrMultiple)(onClick.mode, mode => this.container.handleClickMode(mode));
|
|
38
39
|
}
|
|
39
40
|
if (e.type === "touchend") {
|
|
40
41
|
const touchDelay = 500;
|
|
@@ -42,8 +43,8 @@ class EventListeners {
|
|
|
42
43
|
}
|
|
43
44
|
};
|
|
44
45
|
this._handleThemeChange = (e) => {
|
|
45
|
-
const mediaEvent = e, container = this.container, options = container.options, defaultThemes = options.defaultThemes, themeName = mediaEvent.matches ? defaultThemes.dark : defaultThemes.light, theme = options.themes.find(
|
|
46
|
-
if (theme
|
|
46
|
+
const mediaEvent = e, container = this.container, options = container.options, defaultThemes = options.defaultThemes, themeName = mediaEvent.matches ? defaultThemes.dark : defaultThemes.light, theme = options.themes.find(theme => theme.name === themeName);
|
|
47
|
+
if (theme?.default.auto) {
|
|
47
48
|
void container.loadTheme(themeName);
|
|
48
49
|
}
|
|
49
50
|
};
|
|
@@ -53,7 +54,7 @@ class EventListeners {
|
|
|
53
54
|
if (!options.pauseOnBlur) {
|
|
54
55
|
return;
|
|
55
56
|
}
|
|
56
|
-
if (document
|
|
57
|
+
if (document?.hidden) {
|
|
57
58
|
container.pageHidden = true;
|
|
58
59
|
container.pause();
|
|
59
60
|
}
|
|
@@ -105,14 +106,14 @@ class EventListeners {
|
|
|
105
106
|
manageListener(interactivityEl, mouseLeaveTmpEvent, handlers.mouseLeave, add);
|
|
106
107
|
manageListener(interactivityEl, Constants_js_1.touchCancelEvent, handlers.touchCancel, add);
|
|
107
108
|
};
|
|
108
|
-
this._manageListeners =
|
|
109
|
+
this._manageListeners = add => {
|
|
109
110
|
const handlers = this._handlers, container = this.container, options = container.actualOptions, detectType = options.interactivity.detectsOn, canvasEl = container.canvas.element;
|
|
110
111
|
let mouseLeaveTmpEvent = Constants_js_1.mouseLeaveEvent;
|
|
111
|
-
if (detectType ===
|
|
112
|
+
if (detectType === InteractivityDetect_js_1.InteractivityDetect.window) {
|
|
112
113
|
container.interactivity.element = window;
|
|
113
114
|
mouseLeaveTmpEvent = Constants_js_1.mouseOutEvent;
|
|
114
115
|
}
|
|
115
|
-
else if (detectType ===
|
|
116
|
+
else if (detectType === InteractivityDetect_js_1.InteractivityDetect.parent && canvasEl) {
|
|
116
117
|
container.interactivity.element = canvasEl.parentElement ?? canvasEl.parentNode;
|
|
117
118
|
}
|
|
118
119
|
else {
|
|
@@ -125,7 +126,7 @@ class EventListeners {
|
|
|
125
126
|
manageListener(document, Constants_js_1.visibilityChangeEvent, handlers.visibilityChange, add, false);
|
|
126
127
|
}
|
|
127
128
|
};
|
|
128
|
-
this._manageMediaMatch =
|
|
129
|
+
this._manageMediaMatch = add => {
|
|
129
130
|
const handlers = this._handlers, mediaMatch = (0, Utils_js_1.safeMatchMedia)("(prefers-color-scheme: dark)");
|
|
130
131
|
if (!mediaMatch) {
|
|
131
132
|
return;
|
|
@@ -144,7 +145,7 @@ class EventListeners {
|
|
|
144
145
|
mediaMatch.removeListener(handlers.oldThemeChange);
|
|
145
146
|
}
|
|
146
147
|
};
|
|
147
|
-
this._manageResize =
|
|
148
|
+
this._manageResize = add => {
|
|
148
149
|
const handlers = this._handlers, container = this.container, options = container.actualOptions;
|
|
149
150
|
if (!options.interactivity.events.resize) {
|
|
150
151
|
return;
|
|
@@ -163,7 +164,7 @@ class EventListeners {
|
|
|
163
164
|
}
|
|
164
165
|
else if (!this._resizeObserver && add && canvasEl) {
|
|
165
166
|
this._resizeObserver = new ResizeObserver((entries) => {
|
|
166
|
-
const entry = entries.find(
|
|
167
|
+
const entry = entries.find(e => e.target === canvasEl);
|
|
167
168
|
if (!entry) {
|
|
168
169
|
return;
|
|
169
170
|
}
|
|
@@ -181,7 +182,7 @@ class EventListeners {
|
|
|
181
182
|
mouse.clicking = true;
|
|
182
183
|
mouse.downPosition = mouse.position;
|
|
183
184
|
};
|
|
184
|
-
this._mouseTouchClick =
|
|
185
|
+
this._mouseTouchClick = e => {
|
|
185
186
|
const container = this.container, options = container.actualOptions, { mouse } = container.interactivity;
|
|
186
187
|
mouse.inside = true;
|
|
187
188
|
let handled = false;
|
|
@@ -216,7 +217,7 @@ class EventListeners {
|
|
|
216
217
|
mouse.inside = false;
|
|
217
218
|
mouse.clicking = false;
|
|
218
219
|
};
|
|
219
|
-
this._mouseTouchMove =
|
|
220
|
+
this._mouseTouchMove = e => {
|
|
220
221
|
const container = this.container, options = container.actualOptions, interactivity = container.interactivity, canvasEl = container.canvas.element;
|
|
221
222
|
if (!interactivity?.element) {
|
|
222
223
|
return;
|
|
@@ -235,7 +236,7 @@ class EventListeners {
|
|
|
235
236
|
};
|
|
236
237
|
}
|
|
237
238
|
}
|
|
238
|
-
else if (options.interactivity.detectsOn ===
|
|
239
|
+
else if (options.interactivity.detectsOn === InteractivityDetect_js_1.InteractivityDetect.parent) {
|
|
239
240
|
const source = mouseEvent.target, target = mouseEvent.currentTarget;
|
|
240
241
|
if (source && target && canvasEl) {
|
|
241
242
|
const sourceRect = source.getBoundingClientRect(), targetRect = target.getBoundingClientRect(), canvasRect = canvasEl.getBoundingClientRect();
|
|
@@ -276,21 +277,21 @@ class EventListeners {
|
|
|
276
277
|
interactivity.mouse.position = pos;
|
|
277
278
|
interactivity.status = Constants_js_1.mouseMoveEvent;
|
|
278
279
|
};
|
|
279
|
-
this._touchEnd =
|
|
280
|
+
this._touchEnd = e => {
|
|
280
281
|
const evt = e, touches = Array.from(evt.changedTouches);
|
|
281
282
|
for (const touch of touches) {
|
|
282
283
|
this._touches.delete(touch.identifier);
|
|
283
284
|
}
|
|
284
285
|
this._mouseTouchFinish();
|
|
285
286
|
};
|
|
286
|
-
this._touchEndClick =
|
|
287
|
+
this._touchEndClick = e => {
|
|
287
288
|
const evt = e, touches = Array.from(evt.changedTouches);
|
|
288
289
|
for (const touch of touches) {
|
|
289
290
|
this._touches.delete(touch.identifier);
|
|
290
291
|
}
|
|
291
292
|
this._mouseTouchClick(e);
|
|
292
293
|
};
|
|
293
|
-
this._touchStart =
|
|
294
|
+
this._touchStart = e => {
|
|
294
295
|
const evt = e, touches = Array.from(evt.changedTouches);
|
|
295
296
|
for (const touch of touches) {
|
|
296
297
|
this._touches.set(touch.identifier, performance.now());
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ExternalInteractorBase = void 0;
|
|
4
|
+
const InteractorType_js_1 = require("../../Enums/Types/InteractorType.js");
|
|
4
5
|
class ExternalInteractorBase {
|
|
5
6
|
constructor(container) {
|
|
6
|
-
this.type =
|
|
7
|
+
this.type = InteractorType_js_1.InteractorType.external;
|
|
7
8
|
this.container = container;
|
|
8
9
|
}
|
|
9
10
|
}
|