@tsparticles/engine 4.0.0-alpha.3 → 4.0.0-alpha.5
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/794.min.js +2 -0
- package/794.min.js.LICENSE.txt +1 -0
- package/README.md +2 -5
- package/browser/Core/Canvas.js +3 -3
- package/browser/Core/Container.js +35 -155
- package/browser/Core/Engine.js +32 -78
- package/browser/Core/Particle.js +5 -10
- package/browser/Core/Particles.js +36 -25
- package/browser/Core/Utils/Constants.js +2 -2
- package/browser/Core/Utils/EventListeners.js +5 -250
- package/browser/Options/Classes/Options.js +7 -75
- package/browser/Options/Classes/Particles/ParticlesOptions.js +5 -11
- package/{esm/Options/Classes/Interactivity/Events → browser/Options/Classes}/ResizeEvent.js +1 -1
- package/browser/Utils/ColorUtils.js +7 -5
- package/browser/Utils/Utils.js +33 -36
- package/browser/exports.js +1 -21
- package/cjs/Core/Canvas.js +3 -3
- package/cjs/Core/Container.js +35 -155
- package/cjs/Core/Engine.js +32 -78
- package/cjs/Core/Particle.js +5 -10
- package/cjs/Core/Particles.js +36 -25
- package/cjs/Core/Utils/Constants.js +2 -2
- package/cjs/Core/Utils/EventListeners.js +5 -250
- package/cjs/Options/Classes/Options.js +7 -75
- package/cjs/Options/Classes/Particles/ParticlesOptions.js +5 -11
- package/cjs/Options/Classes/{Interactivity/Events/ResizeEvent.js → ResizeEvent.js} +1 -1
- package/cjs/Utils/ColorUtils.js +7 -5
- package/cjs/Utils/Utils.js +33 -36
- package/cjs/exports.js +1 -21
- package/dist_browser_Core_Container_js.js +6 -16
- package/esm/Core/Canvas.js +3 -3
- package/esm/Core/Container.js +35 -155
- package/esm/Core/Engine.js +32 -78
- package/esm/Core/Particle.js +5 -10
- package/esm/Core/Particles.js +36 -25
- package/esm/Core/Utils/Constants.js +2 -2
- package/esm/Core/Utils/EventListeners.js +5 -250
- package/esm/Options/Classes/Options.js +7 -75
- package/esm/Options/Classes/Particles/ParticlesOptions.js +5 -11
- package/{browser/Options/Classes/Interactivity/Events → esm/Options/Classes}/ResizeEvent.js +1 -1
- package/esm/Utils/ColorUtils.js +7 -5
- package/esm/Utils/Utils.js +33 -36
- package/esm/exports.js +1 -21
- package/package.json +1 -1
- package/report.html +1 -1
- package/tsparticles.engine.js +14 -206
- package/tsparticles.engine.min.js +1 -1
- package/tsparticles.engine.min.js.LICENSE.txt +1 -1
- package/types/Core/Container.d.ts +3 -15
- package/types/Core/Engine.d.ts +8 -19
- package/types/Core/Interfaces/IContainerPlugin.d.ts +8 -1
- package/types/Core/Interfaces/IPlugin.d.ts +5 -1
- package/types/Core/Particle.d.ts +0 -2
- package/types/Core/Particles.d.ts +1 -5
- package/types/Core/Utils/Constants.d.ts +2 -2
- package/types/Core/Utils/EventListeners.d.ts +0 -14
- package/types/Options/Classes/Options.d.ts +2 -11
- package/types/Options/Classes/Particles/ParticlesOptions.d.ts +0 -2
- package/types/Options/Classes/ResizeEvent.d.ts +9 -0
- package/types/Options/Interfaces/IOptions.d.ts +2 -8
- package/types/Options/Interfaces/Particles/IParticlesOptions.d.ts +0 -3
- package/types/Types/EngineInitializers.d.ts +10 -0
- package/types/Utils/Utils.d.ts +4 -6
- package/types/export-types.d.ts +3 -19
- package/types/exports.d.ts +1 -21
- package/umd/Core/Canvas.js +3 -3
- package/umd/Core/Container.js +35 -155
- package/umd/Core/Engine.js +33 -79
- package/umd/Core/Particle.js +6 -11
- package/umd/Core/Particles.js +37 -26
- package/umd/Core/Utils/Constants.js +3 -3
- package/umd/Core/Utils/EventListeners.js +7 -252
- package/umd/Options/Classes/Options.js +7 -75
- package/umd/Options/Classes/Particles/ParticlesOptions.js +5 -11
- package/umd/Options/Classes/{Interactivity/Events/ResizeEvent.js → ResizeEvent.js} +2 -2
- package/umd/Utils/ColorUtils.js +7 -5
- package/umd/Utils/Utils.js +34 -39
- package/umd/exports.js +2 -22
- package/638.min.js +0 -2
- package/638.min.js.LICENSE.txt +0 -1
- package/browser/Core/Interfaces/IMouseData.js +0 -1
- package/browser/Core/Interfaces/IParticlesInteractor.js +0 -1
- package/browser/Core/Utils/ExternalInteractorBase.js +0 -7
- package/browser/Core/Utils/InteractionManager.js +0 -60
- package/browser/Core/Utils/ParticlesInteractorBase.js +0 -7
- package/browser/Enums/InteractivityDetect.js +0 -6
- package/browser/Enums/Modes/ResponsiveMode.js +0 -5
- package/browser/Enums/Modes/ThemeMode.js +0 -6
- package/browser/Enums/Types/DivType.js +0 -5
- package/browser/Enums/Types/InteractorType.js +0 -5
- package/browser/Options/Classes/Interactivity/Events/ClickEvent.js +0 -18
- package/browser/Options/Classes/Interactivity/Events/DivEvent.js +0 -27
- package/browser/Options/Classes/Interactivity/Events/Events.js +0 -30
- package/browser/Options/Classes/Interactivity/Events/HoverEvent.js +0 -21
- package/browser/Options/Classes/Interactivity/Events/Parallax.js +0 -22
- package/browser/Options/Classes/Interactivity/Interactivity.js +0 -22
- package/browser/Options/Classes/Interactivity/Modes/Modes.js +0 -25
- package/browser/Options/Classes/ManualParticle.js +0 -21
- package/browser/Options/Classes/Responsive.js +0 -29
- package/browser/Options/Classes/Theme/Theme.js +0 -21
- package/browser/Options/Classes/Theme/ThemeDefault.js +0 -23
- package/browser/Options/Interfaces/IManualParticle.js +0 -1
- package/browser/Options/Interfaces/IResponsive.js +0 -1
- package/browser/Options/Interfaces/Interactivity/Events/IClickEvent.js +0 -1
- package/browser/Options/Interfaces/Interactivity/Events/IDivEvent.js +0 -1
- package/browser/Options/Interfaces/Interactivity/Events/IEvents.js +0 -1
- package/browser/Options/Interfaces/Interactivity/Events/IHoverEvent.js +0 -1
- package/browser/Options/Interfaces/Interactivity/Events/IParallax.js +0 -1
- package/browser/Options/Interfaces/Interactivity/IInteractivity.js +0 -1
- package/browser/Options/Interfaces/Interactivity/Modes/IModeDiv.js +0 -1
- package/browser/Options/Interfaces/Interactivity/Modes/IModes.js +0 -1
- package/browser/Options/Interfaces/Theme/ITheme.js +0 -1
- package/browser/Options/Interfaces/Theme/IThemeDefault.js +0 -1
- package/cjs/Core/Interfaces/IContainerInteractivity.js +0 -1
- package/cjs/Core/Interfaces/IExternalInteractor.js +0 -1
- package/cjs/Core/Interfaces/IInteractor.js +0 -1
- package/cjs/Core/Interfaces/IMouseData.js +0 -1
- package/cjs/Core/Interfaces/IParticlesInteractor.js +0 -1
- package/cjs/Core/Utils/ExternalInteractorBase.js +0 -7
- package/cjs/Core/Utils/InteractionManager.js +0 -60
- package/cjs/Core/Utils/ParticlesInteractorBase.js +0 -7
- package/cjs/Enums/InteractivityDetect.js +0 -6
- package/cjs/Enums/Modes/ResponsiveMode.js +0 -5
- package/cjs/Enums/Modes/ThemeMode.js +0 -6
- package/cjs/Enums/Types/DivType.js +0 -5
- package/cjs/Enums/Types/InteractorType.js +0 -5
- package/cjs/Options/Classes/Interactivity/Events/ClickEvent.js +0 -18
- package/cjs/Options/Classes/Interactivity/Events/DivEvent.js +0 -27
- package/cjs/Options/Classes/Interactivity/Events/Events.js +0 -30
- package/cjs/Options/Classes/Interactivity/Events/HoverEvent.js +0 -21
- package/cjs/Options/Classes/Interactivity/Events/Parallax.js +0 -22
- package/cjs/Options/Classes/Interactivity/Interactivity.js +0 -22
- package/cjs/Options/Classes/Interactivity/Modes/Modes.js +0 -25
- package/cjs/Options/Classes/ManualParticle.js +0 -21
- package/cjs/Options/Classes/Responsive.js +0 -29
- package/cjs/Options/Classes/Theme/Theme.js +0 -21
- package/cjs/Options/Classes/Theme/ThemeDefault.js +0 -23
- package/cjs/Options/Interfaces/IManualParticle.js +0 -1
- package/cjs/Options/Interfaces/IResponsive.js +0 -1
- package/cjs/Options/Interfaces/Interactivity/Events/IClickEvent.js +0 -1
- package/cjs/Options/Interfaces/Interactivity/Events/IDivEvent.js +0 -1
- package/cjs/Options/Interfaces/Interactivity/Events/IEvents.js +0 -1
- package/cjs/Options/Interfaces/Interactivity/Events/IHoverEvent.js +0 -1
- package/cjs/Options/Interfaces/Interactivity/Events/IParallax.js +0 -1
- package/cjs/Options/Interfaces/Interactivity/IInteractivity.js +0 -1
- package/cjs/Options/Interfaces/Interactivity/Modes/IModeDiv.js +0 -1
- package/cjs/Options/Interfaces/Interactivity/Modes/IModes.js +0 -1
- package/cjs/Options/Interfaces/Theme/ITheme.js +0 -1
- package/cjs/Options/Interfaces/Theme/IThemeDefault.js +0 -1
- package/esm/Core/Interfaces/IContainerInteractivity.js +0 -1
- package/esm/Core/Interfaces/IExternalInteractor.js +0 -1
- package/esm/Core/Interfaces/IInteractor.js +0 -1
- package/esm/Core/Interfaces/IMouseData.js +0 -1
- package/esm/Core/Interfaces/IParticlesInteractor.js +0 -1
- package/esm/Core/Utils/ExternalInteractorBase.js +0 -7
- package/esm/Core/Utils/InteractionManager.js +0 -60
- package/esm/Core/Utils/ParticlesInteractorBase.js +0 -7
- package/esm/Enums/InteractivityDetect.js +0 -6
- package/esm/Enums/Modes/ResponsiveMode.js +0 -5
- package/esm/Enums/Modes/ThemeMode.js +0 -6
- package/esm/Enums/Types/DivType.js +0 -5
- package/esm/Enums/Types/InteractorType.js +0 -5
- package/esm/Options/Classes/Interactivity/Events/ClickEvent.js +0 -18
- package/esm/Options/Classes/Interactivity/Events/DivEvent.js +0 -27
- package/esm/Options/Classes/Interactivity/Events/Events.js +0 -30
- package/esm/Options/Classes/Interactivity/Events/HoverEvent.js +0 -21
- package/esm/Options/Classes/Interactivity/Events/Parallax.js +0 -22
- package/esm/Options/Classes/Interactivity/Interactivity.js +0 -22
- package/esm/Options/Classes/Interactivity/Modes/Modes.js +0 -25
- package/esm/Options/Classes/ManualParticle.js +0 -21
- package/esm/Options/Classes/Responsive.js +0 -29
- package/esm/Options/Classes/Theme/Theme.js +0 -21
- package/esm/Options/Classes/Theme/ThemeDefault.js +0 -23
- package/esm/Options/Interfaces/IManualParticle.js +0 -1
- package/esm/Options/Interfaces/IResponsive.js +0 -1
- package/esm/Options/Interfaces/Interactivity/Events/IClickEvent.js +0 -1
- package/esm/Options/Interfaces/Interactivity/Events/IDivEvent.js +0 -1
- package/esm/Options/Interfaces/Interactivity/Events/IEvents.js +0 -1
- package/esm/Options/Interfaces/Interactivity/Events/IHoverEvent.js +0 -1
- package/esm/Options/Interfaces/Interactivity/Events/IParallax.js +0 -1
- package/esm/Options/Interfaces/Interactivity/IInteractivity.js +0 -1
- package/esm/Options/Interfaces/Interactivity/Modes/IModeDiv.js +0 -1
- package/esm/Options/Interfaces/Interactivity/Modes/IModes.js +0 -1
- package/esm/Options/Interfaces/Theme/ITheme.js +0 -1
- package/esm/Options/Interfaces/Theme/IThemeDefault.js +0 -1
- package/types/Core/Interfaces/IContainerInteractivity.d.ts +0 -6
- package/types/Core/Interfaces/IExternalInteractor.d.ts +0 -12
- package/types/Core/Interfaces/IInteractor.d.ts +0 -16
- package/types/Core/Interfaces/IMouseData.d.ts +0 -9
- package/types/Core/Interfaces/IParticlesInteractor.d.ts +0 -7
- package/types/Core/Utils/ExternalInteractorBase.d.ts +0 -15
- package/types/Core/Utils/InteractionManager.d.ts +0 -17
- package/types/Core/Utils/ParticlesInteractorBase.d.ts +0 -15
- package/types/Enums/InteractivityDetect.d.ts +0 -5
- package/types/Enums/Modes/ResponsiveMode.d.ts +0 -4
- package/types/Enums/Modes/ThemeMode.d.ts +0 -5
- package/types/Enums/Types/DivType.d.ts +0 -4
- package/types/Enums/Types/InteractorType.d.ts +0 -4
- package/types/Options/Classes/Interactivity/Events/ClickEvent.d.ts +0 -10
- package/types/Options/Classes/Interactivity/Events/DivEvent.d.ts +0 -13
- package/types/Options/Classes/Interactivity/Events/Events.d.ts +0 -16
- package/types/Options/Classes/Interactivity/Events/HoverEvent.d.ts +0 -12
- package/types/Options/Classes/Interactivity/Events/Parallax.d.ts +0 -10
- package/types/Options/Classes/Interactivity/Events/ResizeEvent.d.ts +0 -9
- package/types/Options/Classes/Interactivity/Interactivity.d.ts +0 -16
- package/types/Options/Classes/Interactivity/Modes/Modes.d.ts +0 -12
- package/types/Options/Classes/ManualParticle.d.ts +0 -10
- package/types/Options/Classes/Responsive.d.ts +0 -12
- package/types/Options/Classes/Theme/Theme.d.ts +0 -12
- package/types/Options/Classes/Theme/ThemeDefault.d.ts +0 -11
- package/types/Options/Interfaces/IManualParticle.d.ts +0 -7
- package/types/Options/Interfaces/IResponsive.d.ts +0 -7
- package/types/Options/Interfaces/Interactivity/Events/IClickEvent.d.ts +0 -5
- package/types/Options/Interfaces/Interactivity/Events/IDivEvent.d.ts +0 -8
- package/types/Options/Interfaces/Interactivity/Events/IEvents.d.ts +0 -11
- package/types/Options/Interfaces/Interactivity/Events/IHoverEvent.d.ts +0 -7
- package/types/Options/Interfaces/Interactivity/Events/IParallax.d.ts +0 -5
- package/types/Options/Interfaces/Interactivity/IInteractivity.d.ts +0 -9
- package/types/Options/Interfaces/Interactivity/Modes/IModeDiv.d.ts +0 -4
- package/types/Options/Interfaces/Interactivity/Modes/IModes.d.ts +0 -1
- package/types/Options/Interfaces/Theme/ITheme.d.ts +0 -7
- package/types/Options/Interfaces/Theme/IThemeDefault.d.ts +0 -6
- package/umd/Core/Interfaces/IExternalInteractor.js +0 -12
- package/umd/Core/Interfaces/IInteractor.js +0 -12
- package/umd/Core/Interfaces/IMouseData.js +0 -12
- package/umd/Core/Interfaces/IParticlesInteractor.js +0 -12
- package/umd/Core/Utils/ExternalInteractorBase.js +0 -21
- package/umd/Core/Utils/InteractionManager.js +0 -74
- package/umd/Core/Utils/ParticlesInteractorBase.js +0 -21
- package/umd/Enums/InteractivityDetect.js +0 -19
- package/umd/Enums/Modes/ResponsiveMode.js +0 -18
- package/umd/Enums/Modes/ThemeMode.js +0 -19
- package/umd/Enums/Types/DivType.js +0 -18
- package/umd/Enums/Types/InteractorType.js +0 -18
- package/umd/Options/Classes/Interactivity/Events/ClickEvent.js +0 -32
- package/umd/Options/Classes/Interactivity/Events/DivEvent.js +0 -41
- package/umd/Options/Classes/Interactivity/Events/Events.js +0 -44
- package/umd/Options/Classes/Interactivity/Events/HoverEvent.js +0 -35
- package/umd/Options/Classes/Interactivity/Events/Parallax.js +0 -36
- package/umd/Options/Classes/Interactivity/Interactivity.js +0 -36
- package/umd/Options/Classes/Interactivity/Modes/Modes.js +0 -39
- package/umd/Options/Classes/ManualParticle.js +0 -35
- package/umd/Options/Classes/Responsive.js +0 -43
- package/umd/Options/Classes/Theme/Theme.js +0 -35
- package/umd/Options/Classes/Theme/ThemeDefault.js +0 -37
- package/umd/Options/Interfaces/IManualParticle.js +0 -12
- package/umd/Options/Interfaces/IResponsive.js +0 -12
- package/umd/Options/Interfaces/Interactivity/Events/IClickEvent.js +0 -12
- package/umd/Options/Interfaces/Interactivity/Events/IDivEvent.js +0 -12
- package/umd/Options/Interfaces/Interactivity/Events/IEvents.js +0 -12
- package/umd/Options/Interfaces/Interactivity/Events/IHoverEvent.js +0 -12
- package/umd/Options/Interfaces/Interactivity/Events/IParallax.js +0 -12
- package/umd/Options/Interfaces/Interactivity/IInteractivity.js +0 -12
- package/umd/Options/Interfaces/Interactivity/Modes/IModeDiv.js +0 -12
- package/umd/Options/Interfaces/Interactivity/Modes/IModes.js +0 -12
- package/umd/Options/Interfaces/Theme/ITheme.js +0 -12
- package/umd/Options/Interfaces/Theme/IThemeDefault.js +0 -12
- /package/browser/Options/Interfaces/{Interactivity/Events/IResizeEvent.js → IResizeEvent.js} +0 -0
- /package/browser/{Core/Interfaces/IContainerInteractivity.js → Types/EngineInitializers.js} +0 -0
- /package/cjs/Options/Interfaces/{Interactivity/Events/IResizeEvent.js → IResizeEvent.js} +0 -0
- /package/{browser/Core/Interfaces/IExternalInteractor.js → cjs/Types/EngineInitializers.js} +0 -0
- /package/esm/Options/Interfaces/{Interactivity/Events/IResizeEvent.js → IResizeEvent.js} +0 -0
- /package/{browser/Core/Interfaces/IInteractor.js → esm/Types/EngineInitializers.js} +0 -0
- /package/types/Options/Interfaces/{Interactivity/Events/IResizeEvent.d.ts → IResizeEvent.d.ts} +0 -0
- /package/umd/Options/Interfaces/{Interactivity/Events/IResizeEvent.js → IResizeEvent.js} +0 -0
- /package/umd/{Core/Interfaces/IContainerInteractivity.js → Types/EngineInitializers.js} +0 -0
package/cjs/Core/Engine.js
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
import { canvasFirstIndex, canvasTag, generatedAttribute, generatedFalse, generatedTrue, loadMinIndex, loadRandomFactor, none, one, removeDeleteCount, } from "./Utils/Constants.js";
|
|
2
|
-
import { itemFromSingleOrMultiple, safeDocument } from "../Utils/Utils.js";
|
|
2
|
+
import { getItemsFromInitializer, itemFromSingleOrMultiple, safeDocument } from "../Utils/Utils.js";
|
|
3
3
|
import { EventDispatcher } from "../Utils/EventDispatcher.js";
|
|
4
4
|
import { EventType } from "../Enums/Types/EventType.js";
|
|
5
5
|
import { getLogger } from "../Utils/LogUtils.js";
|
|
6
6
|
import { getRandom } from "../Utils/MathUtils.js";
|
|
7
7
|
const fullPercent = "100%";
|
|
8
|
-
async function getItemsFromInitializer(container, map, initializers, force = false) {
|
|
9
|
-
let res = map.get(container);
|
|
10
|
-
if (!res || force) {
|
|
11
|
-
res = await Promise.all([...initializers.values()].map(t => t(container)));
|
|
12
|
-
map.set(container, res);
|
|
13
|
-
}
|
|
14
|
-
return res;
|
|
15
|
-
}
|
|
16
8
|
async function getDataFromUrl(data) {
|
|
17
9
|
const url = itemFromSingleOrMultiple(data.url, data.index);
|
|
18
10
|
if (!url) {
|
|
@@ -49,7 +41,7 @@ const getCanvasFromContainer = (domContainer) => {
|
|
|
49
41
|
return canvasEl;
|
|
50
42
|
}, getDomContainer = (id, source) => {
|
|
51
43
|
const documentSafe = safeDocument();
|
|
52
|
-
let domContainer = source ??
|
|
44
|
+
let domContainer = source ?? documentSafe.getElementById(id);
|
|
53
45
|
if (domContainer) {
|
|
54
46
|
return domContainer;
|
|
55
47
|
}
|
|
@@ -65,16 +57,17 @@ export class Engine {
|
|
|
65
57
|
this._domArray = [];
|
|
66
58
|
this._eventDispatcher = new EventDispatcher();
|
|
67
59
|
this._initialized = false;
|
|
60
|
+
this._isRunningLoaders = false;
|
|
68
61
|
this._loadPromises = new Set();
|
|
62
|
+
this._allLoadersSet = new Set();
|
|
63
|
+
this._executedSet = new Set();
|
|
69
64
|
this.plugins = [];
|
|
70
65
|
this.colorManagers = new Map();
|
|
71
66
|
this.easingFunctions = new Map();
|
|
72
67
|
this._initializers = {
|
|
73
|
-
interactors: new Map(),
|
|
74
68
|
movers: new Map(),
|
|
75
69
|
updaters: new Map(),
|
|
76
70
|
};
|
|
77
|
-
this.interactors = new Map();
|
|
78
71
|
this.movers = new Map();
|
|
79
72
|
this.updaters = new Map();
|
|
80
73
|
this.presets = new Map();
|
|
@@ -93,7 +86,7 @@ export class Engine {
|
|
|
93
86
|
return this._domArray;
|
|
94
87
|
}
|
|
95
88
|
get version() {
|
|
96
|
-
return "4.0.0-alpha.
|
|
89
|
+
return "4.0.0-alpha.5";
|
|
97
90
|
}
|
|
98
91
|
addColorManager(manager) {
|
|
99
92
|
this.colorManagers.set(manager.key, manager);
|
|
@@ -118,9 +111,6 @@ export class Engine {
|
|
|
118
111
|
addEventListener(type, listener) {
|
|
119
112
|
this._eventDispatcher.addEventListener(type, listener);
|
|
120
113
|
}
|
|
121
|
-
addInteractor(name, interactorInitializer) {
|
|
122
|
-
this._initializers.interactors.set(name, interactorInitializer);
|
|
123
|
-
}
|
|
124
114
|
addMover(name, moverInitializer) {
|
|
125
115
|
this._initializers.movers.set(name, moverInitializer);
|
|
126
116
|
}
|
|
@@ -162,35 +152,16 @@ export class Engine {
|
|
|
162
152
|
clearPlugins(container) {
|
|
163
153
|
this.updaters.delete(container);
|
|
164
154
|
this.movers.delete(container);
|
|
165
|
-
this.interactors.delete(container);
|
|
166
155
|
}
|
|
167
156
|
dispatchEvent(type, args) {
|
|
168
157
|
this._eventDispatcher.dispatchEvent(type, args);
|
|
169
158
|
}
|
|
170
|
-
dom() {
|
|
171
|
-
return this.items;
|
|
172
|
-
}
|
|
173
|
-
domItem(index) {
|
|
174
|
-
return this.item(index);
|
|
175
|
-
}
|
|
176
|
-
async getAvailablePlugins(container) {
|
|
177
|
-
const res = new Map();
|
|
178
|
-
for (const plugin of this.plugins) {
|
|
179
|
-
if (plugin.needsPlugin(container.actualOptions)) {
|
|
180
|
-
res.set(plugin.id, await plugin.getPlugin(container));
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return res;
|
|
184
|
-
}
|
|
185
159
|
getEasing(name) {
|
|
186
160
|
return this.easingFunctions.get(name) ?? ((value) => value);
|
|
187
161
|
}
|
|
188
162
|
getEffectDrawer(type) {
|
|
189
163
|
return this.effectDrawers.get(type);
|
|
190
164
|
}
|
|
191
|
-
async getInteractors(container, force = false) {
|
|
192
|
-
return getItemsFromInitializer(container, this.interactors, this._initializers.interactors, force);
|
|
193
|
-
}
|
|
194
165
|
async getMovers(container, force = false) {
|
|
195
166
|
return getItemsFromInitializer(container, this.movers, this._initializers.movers, force);
|
|
196
167
|
}
|
|
@@ -216,36 +187,21 @@ export class Engine {
|
|
|
216
187
|
return getItemsFromInitializer(container, this.updaters, this._initializers.updaters, force);
|
|
217
188
|
}
|
|
218
189
|
async init() {
|
|
219
|
-
if (this._initialized)
|
|
190
|
+
if (this._initialized || this._isRunningLoaders)
|
|
220
191
|
return;
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
228
|
-
if (executed.has(loader)) {
|
|
229
|
-
continue;
|
|
192
|
+
this._isRunningLoaders = true;
|
|
193
|
+
this._executedSet = new Set();
|
|
194
|
+
this._allLoadersSet = new Set(this._loadPromises);
|
|
195
|
+
try {
|
|
196
|
+
for (const loader of this._allLoadersSet) {
|
|
197
|
+
await this._runLoader(loader, this._executedSet, this._allLoadersSet);
|
|
230
198
|
}
|
|
231
|
-
executed.add(loader);
|
|
232
|
-
const inner = [], origRegister = this.register.bind(this);
|
|
233
|
-
this.register = (...loaders) => {
|
|
234
|
-
inner.push(...loaders);
|
|
235
|
-
for (const loader of loaders) {
|
|
236
|
-
allLoaders.add(loader);
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
await loader(this);
|
|
240
|
-
this.register = origRegister;
|
|
241
|
-
stack.unshift(...inner);
|
|
242
|
-
this._loadPromises.delete(loader);
|
|
243
199
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
this.
|
|
200
|
+
finally {
|
|
201
|
+
this._loadPromises.clear();
|
|
202
|
+
this._isRunningLoaders = false;
|
|
203
|
+
this._initialized = true;
|
|
247
204
|
}
|
|
248
|
-
this._initialized = true;
|
|
249
205
|
}
|
|
250
206
|
item(index) {
|
|
251
207
|
const { items } = this, item = items[index];
|
|
@@ -275,11 +231,6 @@ export class Engine {
|
|
|
275
231
|
await newItem.start();
|
|
276
232
|
return newItem;
|
|
277
233
|
}
|
|
278
|
-
loadOptions(options, sourceOptions) {
|
|
279
|
-
this.plugins.forEach(plugin => {
|
|
280
|
-
plugin.loadOptions(options, sourceOptions);
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
234
|
loadParticlesOptions(container, options, ...sourceOptions) {
|
|
284
235
|
const updaters = this.updaters.get(container);
|
|
285
236
|
if (!updaters) {
|
|
@@ -293,24 +244,27 @@ export class Engine {
|
|
|
293
244
|
}
|
|
294
245
|
await Promise.all(this.items.map(t => t.refresh()));
|
|
295
246
|
}
|
|
296
|
-
register(...
|
|
247
|
+
async register(...loaders) {
|
|
297
248
|
if (this._initialized) {
|
|
298
|
-
throw new Error(
|
|
249
|
+
throw new Error("Register plugins can only be done before calling tsParticles.load()");
|
|
299
250
|
}
|
|
300
|
-
for (const
|
|
301
|
-
this.
|
|
251
|
+
for (const loader of loaders) {
|
|
252
|
+
if (this._isRunningLoaders) {
|
|
253
|
+
await this._runLoader(loader, this._executedSet, this._allLoadersSet);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
this._loadPromises.add(loader);
|
|
257
|
+
}
|
|
302
258
|
}
|
|
303
259
|
}
|
|
304
260
|
removeEventListener(type, listener) {
|
|
305
261
|
this._eventDispatcher.removeEventListener(type, listener);
|
|
306
262
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
item.addClickHandler(callback);
|
|
314
|
-
});
|
|
263
|
+
async _runLoader(loader, executed, allLoaders) {
|
|
264
|
+
if (executed.has(loader))
|
|
265
|
+
return;
|
|
266
|
+
executed.add(loader);
|
|
267
|
+
allLoaders.add(loader);
|
|
268
|
+
await loader(this);
|
|
315
269
|
}
|
|
316
270
|
}
|
package/cjs/Core/Particle.js
CHANGED
|
@@ -3,7 +3,6 @@ import { calcExactPositionOrRandomFromSize, clamp, degToRad, getParticleBaseVelo
|
|
|
3
3
|
import { decayOffset, defaultAngle, defaultOpacity, defaultRetryCount, defaultTransform, double, half, identity, millisecondsToSeconds, minZ, none, randomColorValue, rollFactor, squareExp, tryCountIncrement, zIndexFactorOffset, } from "./Utils/Constants.js";
|
|
4
4
|
import { deepExtend, getPosition, initParticleNumericAnimationValue, isInArray, itemFromSingleOrMultiple, } from "../Utils/Utils.js";
|
|
5
5
|
import { EventType } from "../Enums/Types/EventType.js";
|
|
6
|
-
import { Interactivity } from "../Options/Classes/Interactivity/Interactivity.js";
|
|
7
6
|
import { MoveDirection } from "../Enums/Directions/MoveDirection.js";
|
|
8
7
|
import { OutMode } from "../Enums/Modes/OutMode.js";
|
|
9
8
|
import { ParticleOutType } from "../Enums/Types/ParticleOutType.js";
|
|
@@ -53,7 +52,7 @@ export class Particle {
|
|
|
53
52
|
};
|
|
54
53
|
this._calcPosition = (position, zIndex) => {
|
|
55
54
|
let tryCount = defaultRetryCount, posVec = position ? Vector3d.create(position.x, position.y, zIndex) : undefined;
|
|
56
|
-
const container = this.container, plugins = Array.from(container.plugins
|
|
55
|
+
const container = this.container, plugins = Array.from(container.plugins), outModes = this.options.move.outModes, radius = this.getRadius(), canvasSize = container.canvas.size, abortController = new AbortController(), { signal } = abortController;
|
|
57
56
|
while (!signal.aborted) {
|
|
58
57
|
for (const plugin of plugins) {
|
|
59
58
|
const pluginPos = plugin.particlePosition?.(posVec, this);
|
|
@@ -173,7 +172,7 @@ export class Particle {
|
|
|
173
172
|
this.slow.inRange = false;
|
|
174
173
|
const container = this.container, pathGenerator = this.pathGenerator, shapeDrawer = this.shape ? container.shapeDrawers.get(this.shape) : undefined;
|
|
175
174
|
shapeDrawer?.particleDestroy?.(this);
|
|
176
|
-
for (const plugin of container.plugins
|
|
175
|
+
for (const plugin of container.plugins) {
|
|
177
176
|
plugin.particleDestroyed?.(this, override);
|
|
178
177
|
}
|
|
179
178
|
for (const updater of container.particles.updaters) {
|
|
@@ -189,7 +188,7 @@ export class Particle {
|
|
|
189
188
|
}
|
|
190
189
|
draw(delta) {
|
|
191
190
|
const container = this.container, canvas = container.canvas;
|
|
192
|
-
for (const plugin of container.plugins
|
|
191
|
+
for (const plugin of container.plugins) {
|
|
193
192
|
canvas.drawParticlePlugin(plugin, this, delta);
|
|
194
193
|
}
|
|
195
194
|
canvas.drawParticle(this, delta);
|
|
@@ -240,7 +239,7 @@ export class Particle {
|
|
|
240
239
|
return this._cachedTransform;
|
|
241
240
|
}
|
|
242
241
|
init(id, position, overrideOptions, group) {
|
|
243
|
-
const container = this.container
|
|
242
|
+
const container = this.container;
|
|
244
243
|
this.id = id;
|
|
245
244
|
this.group = group;
|
|
246
245
|
this.effectClose = true;
|
|
@@ -300,10 +299,6 @@ export class Particle {
|
|
|
300
299
|
if (shapeData) {
|
|
301
300
|
particlesOptions.load(shapeData.particles);
|
|
302
301
|
}
|
|
303
|
-
const interactivity = new Interactivity(engine, container);
|
|
304
|
-
interactivity.load(container.actualOptions.interactivity);
|
|
305
|
-
interactivity.load(particlesOptions.interactivity);
|
|
306
|
-
this.interactivity = interactivity;
|
|
307
302
|
this.effectFill = effectData?.fill ?? particlesOptions.effect.fill;
|
|
308
303
|
this.effectClose = effectData?.close ?? particlesOptions.effect.close;
|
|
309
304
|
this.shapeFill = shapeData?.fill ?? particlesOptions.shape.fill;
|
|
@@ -372,7 +367,7 @@ export class Particle {
|
|
|
372
367
|
}
|
|
373
368
|
effectDrawer?.particleInit?.(container, this);
|
|
374
369
|
shapeDrawer?.particleInit?.(container, this);
|
|
375
|
-
for (const plugin of container.plugins
|
|
370
|
+
for (const plugin of container.plugins) {
|
|
376
371
|
plugin.particleCreated?.(this);
|
|
377
372
|
}
|
|
378
373
|
}
|
package/cjs/Core/Particles.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { countOffset, defaultDensityFactor, defaultRemoveQuantity, deleteCount, lengthOffset, minCount, minIndex, minLimit, posOffset, qTreeCapacity, sizeFactor, squareExp, } from "./Utils/Constants.js";
|
|
2
2
|
import { EventType } from "../Enums/Types/EventType.js";
|
|
3
|
-
import { InteractionManager } from "./Utils/InteractionManager.js";
|
|
4
3
|
import { LimitMode } from "../Enums/Modes/LimitMode.js";
|
|
5
4
|
import { Particle } from "./Particle.js";
|
|
6
5
|
import { Point } from "./Utils/Point.js";
|
|
7
6
|
import { QuadTree } from "./Utils/QuadTree.js";
|
|
8
7
|
import { Rectangle } from "./Utils/Ranges.js";
|
|
9
8
|
import { getLogger } from "../Utils/LogUtils.js";
|
|
10
|
-
import { getPosition } from "../Utils/Utils.js";
|
|
11
9
|
import { loadParticlesOptions } from "../Utils/OptionsUtils.js";
|
|
12
10
|
const qTreeRectangle = (canvasSize) => {
|
|
13
11
|
const { height, width } = canvasSize;
|
|
@@ -18,7 +16,7 @@ export class Particles {
|
|
|
18
16
|
this._addToPool = (...particles) => {
|
|
19
17
|
this._pool.push(...particles);
|
|
20
18
|
};
|
|
21
|
-
this._applyDensity = (options,
|
|
19
|
+
this._applyDensity = (options, pluginsCount, group, groupOptions) => {
|
|
22
20
|
const numberOptions = options.number;
|
|
23
21
|
if (!numberOptions.density.enable) {
|
|
24
22
|
if (group === undefined) {
|
|
@@ -29,7 +27,7 @@ export class Particles {
|
|
|
29
27
|
}
|
|
30
28
|
return;
|
|
31
29
|
}
|
|
32
|
-
const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor +
|
|
30
|
+
const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + pluginsCount, particlesCount = Math.min(this.count, this.filter(t => t.group === group).length);
|
|
33
31
|
if (group === undefined) {
|
|
34
32
|
this._limit = numberOptions.limit.value * densityFactor;
|
|
35
33
|
}
|
|
@@ -109,7 +107,6 @@ export class Particles {
|
|
|
109
107
|
this._groupLimits = new Map();
|
|
110
108
|
this._needsSort = false;
|
|
111
109
|
this._lastZIndex = 0;
|
|
112
|
-
this._interactionManager = new InteractionManager(engine, container);
|
|
113
110
|
this._pluginsInitialized = false;
|
|
114
111
|
const canvasSize = container.canvas.size;
|
|
115
112
|
this.quadTree = new QuadTree(qTreeRectangle(canvasSize), qTreeCapacity);
|
|
@@ -119,10 +116,6 @@ export class Particles {
|
|
|
119
116
|
get count() {
|
|
120
117
|
return this._array.length;
|
|
121
118
|
}
|
|
122
|
-
addManualParticles() {
|
|
123
|
-
const container = this._container, options = container.actualOptions;
|
|
124
|
-
options.manualParticles.forEach(p => this.addParticle(p.position ? getPosition(p.position, container.canvas.size) : undefined, p.options));
|
|
125
|
-
}
|
|
126
119
|
addParticle(position, overrideOptions, group, initializer) {
|
|
127
120
|
const limitMode = this._container.actualOptions.particles.number.limit.mode, limit = group === undefined ? this._limit : (this._groupLimits.get(group) ?? this._limit), currentCount = this.count;
|
|
128
121
|
if (limit > minLimit) {
|
|
@@ -168,22 +161,23 @@ export class Particles {
|
|
|
168
161
|
get(index) {
|
|
169
162
|
return this._array[index];
|
|
170
163
|
}
|
|
171
|
-
handleClickMode(mode) {
|
|
172
|
-
this._interactionManager.handleClickMode(mode);
|
|
173
|
-
}
|
|
174
164
|
async init() {
|
|
175
165
|
const container = this._container, options = container.actualOptions;
|
|
176
166
|
this._lastZIndex = 0;
|
|
177
167
|
this._needsSort = false;
|
|
168
|
+
for (const plugin of container.plugins) {
|
|
169
|
+
if (plugin.redrawInit) {
|
|
170
|
+
await plugin.redrawInit();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
178
173
|
await this.initPlugins();
|
|
179
174
|
let handled = false;
|
|
180
|
-
for (const plugin of container.plugins
|
|
175
|
+
for (const plugin of container.plugins) {
|
|
181
176
|
handled = plugin.particlesInitialization?.() ?? handled;
|
|
182
177
|
if (handled) {
|
|
183
178
|
break;
|
|
184
179
|
}
|
|
185
180
|
}
|
|
186
|
-
this.addManualParticles();
|
|
187
181
|
if (!handled) {
|
|
188
182
|
const particlesOptions = options.particles, groups = particlesOptions.groups;
|
|
189
183
|
for (const group in groups) {
|
|
@@ -207,14 +201,13 @@ export class Particles {
|
|
|
207
201
|
const container = this._container;
|
|
208
202
|
this.movers = await this._engine.getMovers(container, true);
|
|
209
203
|
this.updaters = await this._engine.getUpdaters(container, true);
|
|
210
|
-
await this._interactionManager.init();
|
|
211
204
|
for (const pathGenerator of container.pathGenerators.values()) {
|
|
212
205
|
pathGenerator.init(container);
|
|
213
206
|
}
|
|
214
207
|
}
|
|
215
|
-
push(nb,
|
|
208
|
+
push(nb, position, overrideOptions, group) {
|
|
216
209
|
for (let i = 0; i < nb; i++) {
|
|
217
|
-
this.addParticle(
|
|
210
|
+
this.addParticle(position, overrideOptions, group);
|
|
218
211
|
}
|
|
219
212
|
}
|
|
220
213
|
async redraw() {
|
|
@@ -241,16 +234,22 @@ export class Particles {
|
|
|
241
234
|
this.removeAt(minIndex, quantity, group);
|
|
242
235
|
}
|
|
243
236
|
setDensity() {
|
|
244
|
-
const options = this._container.actualOptions, groups = options.particles.groups
|
|
237
|
+
const options = this._container.actualOptions, groups = options.particles.groups;
|
|
238
|
+
let pluginsCount = 0;
|
|
239
|
+
for (const plugin of this._container.plugins) {
|
|
240
|
+
if (plugin.particlesDensityCount) {
|
|
241
|
+
pluginsCount += plugin.particlesDensityCount();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
245
244
|
for (const group in groups) {
|
|
246
245
|
const groupData = groups[group];
|
|
247
246
|
if (!groupData) {
|
|
248
247
|
continue;
|
|
249
248
|
}
|
|
250
249
|
const groupDataOptions = loadParticlesOptions(this._engine, this._container, groupData);
|
|
251
|
-
this._applyDensity(groupDataOptions,
|
|
250
|
+
this._applyDensity(groupDataOptions, pluginsCount, group);
|
|
252
251
|
}
|
|
253
|
-
this._applyDensity(options.particles,
|
|
252
|
+
this._applyDensity(options.particles, pluginsCount);
|
|
254
253
|
}
|
|
255
254
|
setLastZIndex(zIndex) {
|
|
256
255
|
this._lastZIndex = zIndex;
|
|
@@ -265,7 +264,7 @@ export class Particles {
|
|
|
265
264
|
for (const pathGenerator of container.pathGenerators.values()) {
|
|
266
265
|
pathGenerator.update();
|
|
267
266
|
}
|
|
268
|
-
for (const plugin of container.plugins
|
|
267
|
+
for (const plugin of container.plugins) {
|
|
269
268
|
plugin.update?.(delta);
|
|
270
269
|
}
|
|
271
270
|
const resizeFactor = this._resizeFactor;
|
|
@@ -277,8 +276,12 @@ export class Particles {
|
|
|
277
276
|
particle.initialPosition.y *= resizeFactor.height;
|
|
278
277
|
}
|
|
279
278
|
particle.ignoresResizeRatio = false;
|
|
280
|
-
this.
|
|
281
|
-
|
|
279
|
+
for (const plugin of this._container.plugins) {
|
|
280
|
+
if (plugin.particleReset) {
|
|
281
|
+
plugin.particleReset(particle);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
for (const plugin of this._container.plugins) {
|
|
282
285
|
if (particle.destroyed) {
|
|
283
286
|
break;
|
|
284
287
|
}
|
|
@@ -309,13 +312,21 @@ export class Particles {
|
|
|
309
312
|
}
|
|
310
313
|
this._addToPool(...particlesToDelete);
|
|
311
314
|
}
|
|
312
|
-
|
|
315
|
+
for (const plugin of container.plugins) {
|
|
316
|
+
if (plugin.postUpdate) {
|
|
317
|
+
plugin.postUpdate(delta);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
313
320
|
for (const particle of this._array) {
|
|
314
321
|
for (const updater of this.updaters) {
|
|
315
322
|
updater.update(particle, delta);
|
|
316
323
|
}
|
|
317
324
|
if (!particle.destroyed && !particle.spawning) {
|
|
318
|
-
|
|
325
|
+
for (const plugin of container.plugins) {
|
|
326
|
+
if (plugin.postParticleUpdate) {
|
|
327
|
+
plugin.postParticleUpdate(particle, delta);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
319
330
|
}
|
|
320
331
|
}
|
|
321
332
|
delete this._resizeFactor;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const generatedAttribute = "generated",
|
|
1
|
+
export const generatedAttribute = "generated", resizeEvent = "resize", visibilityChangeEvent = "visibilitychange", percentDenominator = 100, half = 0.5, millisecondsToSeconds = 1000, originPoint = {
|
|
2
2
|
x: 0,
|
|
3
3
|
y: 0,
|
|
4
4
|
z: 0,
|
|
@@ -7,4 +7,4 @@ export const generatedAttribute = "generated", mouseDownEvent = "pointerdown", m
|
|
|
7
7
|
b: 0,
|
|
8
8
|
c: 0,
|
|
9
9
|
d: 1,
|
|
10
|
-
}, randomColorValue = "random", midColorValue = "mid", double = 2, doublePI = Math.PI * double, defaultFps = 60, defaultAlpha = 1, generatedTrue = "true", generatedFalse = "false", canvasTag = "canvas", defaultRetryCount = 0, squareExp = 2, qTreeCapacity = 4, defaultRemoveQuantity = 1, defaultRatio = 1, defaultReduceFactor = 1, subdivideCount = 4, inverseFactorNumerator = 1.0, rgbMax = 255, hMax = 360, sMax = 100, lMax = 100, hMin = 0, sMin = 0, hPhase = 60, empty = 0, quarter = 0.25, threeQuarter = half + quarter, minVelocity = 0, defaultTransformValue = 1, minimumSize = 0, minimumLength = 0, zIndexFactorOffset = 1, defaultOpacity = 1, clickRadius = 1, touchEndLengthOffset = 1, minCoordinate = 0, removeDeleteCount = 1, removeMinIndex = 0, defaultFpsLimit = 120, minFpsLimit = 0, canvasFirstIndex = 0, loadRandomFactor = 10000, loadMinIndex = 0, one = 1, none = 0, decayOffset = 1, tryCountIncrement = 1, minRetries = 0, rollFactor = 1, minZ = 0, defaultRadius = 0, posOffset = -quarter, sizeFactor = 1.5, minLimit = 0, countOffset = 1, minCount = 0, minIndex = 0,
|
|
10
|
+
}, randomColorValue = "random", midColorValue = "mid", double = 2, doublePI = Math.PI * double, defaultFps = 60, defaultAlpha = 1, generatedTrue = "true", generatedFalse = "false", canvasTag = "canvas", defaultRetryCount = 0, squareExp = 2, qTreeCapacity = 4, defaultRemoveQuantity = 1, defaultRatio = 1, defaultReduceFactor = 1, subdivideCount = 4, inverseFactorNumerator = 1.0, rgbMax = 255, hMax = 360, sMax = 100, lMax = 100, hMin = 0, sMin = 0, hPhase = 60, empty = 0, quarter = 0.25, threeQuarter = half + quarter, minVelocity = 0, defaultTransformValue = 1, minimumSize = 0, minimumLength = 0, zIndexFactorOffset = 1, defaultOpacity = 1, clickRadius = 1, touchEndLengthOffset = 1, minCoordinate = 0, removeDeleteCount = 1, removeMinIndex = 0, defaultFpsLimit = 120, minFpsLimit = 0, canvasFirstIndex = 0, loadRandomFactor = 10000, loadMinIndex = 0, one = 1, none = 0, decayOffset = 1, tryCountIncrement = 1, minRetries = 0, rollFactor = 1, minZ = 0, defaultRadius = 0, posOffset = -quarter, sizeFactor = 1.5, minLimit = 0, countOffset = 1, minCount = 0, minIndex = 0, lengthOffset = 1, defaultDensityFactor = 1, deleteCount = 1, touchDelay = 500, manualDefaultPosition = 50, defaultAngle = 0, identity = 1, minStrokeWidth = 0, lFactor = 1, lMin = 0, triple = 3, sextuple = 6, sNormalizedOffset = 1, phaseNumerator = 1, defaultRgbMin = 0, defaultVelocity = 0, defaultLoops = 0, defaultTime = 0;
|