@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
|
@@ -5,17 +5,19 @@ import { FullScreen } from "./FullScreen/FullScreen.js";
|
|
|
5
5
|
import { Interactivity } from "./Interactivity/Interactivity.js";
|
|
6
6
|
import { ManualParticle } from "./ManualParticle.js";
|
|
7
7
|
import { Responsive } from "./Responsive.js";
|
|
8
|
+
import { ResponsiveMode } from "../../Enums/Modes/ResponsiveMode.js";
|
|
8
9
|
import { Theme } from "./Theme/Theme.js";
|
|
10
|
+
import { ThemeMode } from "../../Enums/Modes/ThemeMode.js";
|
|
9
11
|
import { isBoolean } from "../../Utils/TypeUtils.js";
|
|
10
12
|
import { loadParticlesOptions } from "../../Utils/OptionsUtils.js";
|
|
11
13
|
import { setRangeValue } from "../../Utils/NumberUtils.js";
|
|
12
14
|
export class Options {
|
|
13
15
|
constructor(engine, container) {
|
|
14
|
-
this._findDefaultTheme =
|
|
15
|
-
return (this.themes.find(
|
|
16
|
-
this.themes.find(
|
|
16
|
+
this._findDefaultTheme = mode => {
|
|
17
|
+
return (this.themes.find(theme => theme.default.value && theme.default.mode === mode) ??
|
|
18
|
+
this.themes.find(theme => theme.default.value && theme.default.mode === ThemeMode.any));
|
|
17
19
|
};
|
|
18
|
-
this._importPreset =
|
|
20
|
+
this._importPreset = preset => {
|
|
19
21
|
this.load(this._engine.getPreset(preset));
|
|
20
22
|
};
|
|
21
23
|
this._engine = engine;
|
|
@@ -46,7 +48,7 @@ export class Options {
|
|
|
46
48
|
return;
|
|
47
49
|
}
|
|
48
50
|
if (data.preset !== undefined) {
|
|
49
|
-
executeOnSingleOrMultiple(data.preset,
|
|
51
|
+
executeOnSingleOrMultiple(data.preset, preset => this._importPreset(preset));
|
|
50
52
|
}
|
|
51
53
|
if (data.autoPlay !== undefined) {
|
|
52
54
|
this.autoPlay = data.autoPlay;
|
|
@@ -94,7 +96,7 @@ export class Options {
|
|
|
94
96
|
this.backgroundMask.load(data.backgroundMask);
|
|
95
97
|
this.interactivity.load(data.interactivity);
|
|
96
98
|
if (data.manualParticles) {
|
|
97
|
-
this.manualParticles = data.manualParticles.map(
|
|
99
|
+
this.manualParticles = data.manualParticles.map(t => {
|
|
98
100
|
const tmp = new ManualParticle();
|
|
99
101
|
tmp.load(t);
|
|
100
102
|
return tmp;
|
|
@@ -124,7 +126,7 @@ export class Options {
|
|
|
124
126
|
this.responsive.sort((a, b) => a.maxWidth - b.maxWidth);
|
|
125
127
|
if (data.themes !== undefined) {
|
|
126
128
|
for (const theme of data.themes) {
|
|
127
|
-
const existingTheme = this.themes.find(
|
|
129
|
+
const existingTheme = this.themes.find(t => t.name === theme.name);
|
|
128
130
|
if (!existingTheme) {
|
|
129
131
|
const optTheme = new Theme();
|
|
130
132
|
optTheme.load(theme);
|
|
@@ -135,24 +137,24 @@ export class Options {
|
|
|
135
137
|
}
|
|
136
138
|
}
|
|
137
139
|
}
|
|
138
|
-
this.defaultThemes.dark = this._findDefaultTheme(
|
|
139
|
-
this.defaultThemes.light = this._findDefaultTheme(
|
|
140
|
+
this.defaultThemes.dark = this._findDefaultTheme(ThemeMode.dark)?.name;
|
|
141
|
+
this.defaultThemes.light = this._findDefaultTheme(ThemeMode.light)?.name;
|
|
140
142
|
}
|
|
141
143
|
setResponsive(width, pxRatio, defaultOptions) {
|
|
142
144
|
this.load(defaultOptions);
|
|
143
|
-
const responsiveOptions = this.responsive.find(
|
|
145
|
+
const responsiveOptions = this.responsive.find(t => t.mode === ResponsiveMode.screen && screen ? t.maxWidth > screen.availWidth : t.maxWidth * pxRatio > width);
|
|
144
146
|
this.load(responsiveOptions?.options);
|
|
145
147
|
return responsiveOptions?.maxWidth;
|
|
146
148
|
}
|
|
147
149
|
setTheme(name) {
|
|
148
150
|
if (name) {
|
|
149
|
-
const chosenTheme = this.themes.find(
|
|
151
|
+
const chosenTheme = this.themes.find(theme => theme.name === name);
|
|
150
152
|
if (chosenTheme) {
|
|
151
153
|
this.load(chosenTheme.options);
|
|
152
154
|
}
|
|
153
155
|
}
|
|
154
156
|
else {
|
|
155
|
-
const mediaMatch = safeMatchMedia("(prefers-color-scheme: dark)"), clientDarkMode = mediaMatch
|
|
157
|
+
const mediaMatch = safeMatchMedia("(prefers-color-scheme: dark)"), clientDarkMode = mediaMatch?.matches, defaultTheme = this._findDefaultTheme(clientDarkMode ? ThemeMode.dark : ThemeMode.light);
|
|
156
158
|
if (defaultTheme) {
|
|
157
159
|
this.load(defaultTheme.options);
|
|
158
160
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CollisionMode } from "../../../../Enums/Modes/CollisionMode.js";
|
|
1
2
|
import { CollisionsAbsorb } from "./CollisionsAbsorb.js";
|
|
2
3
|
import { CollisionsOverlap } from "./CollisionsOverlap.js";
|
|
3
4
|
import { ParticlesBounce } from "../Bounce/ParticlesBounce.js";
|
|
@@ -8,7 +9,7 @@ export class Collisions {
|
|
|
8
9
|
this.bounce = new ParticlesBounce();
|
|
9
10
|
this.enable = false;
|
|
10
11
|
this.maxSpeed = 50;
|
|
11
|
-
this.mode =
|
|
12
|
+
this.mode = CollisionMode.bounce;
|
|
12
13
|
this.overlap = new CollisionsOverlap();
|
|
13
14
|
}
|
|
14
15
|
load(data) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MoveDirection } from "../../../../Enums/Directions/MoveDirection.js";
|
|
1
2
|
import { isNumber, isObject } from "../../../../Utils/TypeUtils.js";
|
|
2
3
|
import { MoveAngle } from "./MoveAngle.js";
|
|
3
4
|
import { MoveAttract } from "./MoveAttract.js";
|
|
@@ -15,7 +16,7 @@ export class Move {
|
|
|
15
16
|
this.center = new MoveCenter();
|
|
16
17
|
this.decay = 0;
|
|
17
18
|
this.distance = {};
|
|
18
|
-
this.direction =
|
|
19
|
+
this.direction = MoveDirection.none;
|
|
19
20
|
this.drift = 0;
|
|
20
21
|
this.enable = false;
|
|
21
22
|
this.gravity = new MoveGravity();
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { DestroyType } from "../../../../Enums/Types/DestroyType.js";
|
|
1
2
|
import { RangedAnimationOptions } from "../../AnimationOptions.js";
|
|
2
3
|
export class OpacityAnimation extends RangedAnimationOptions {
|
|
3
4
|
constructor() {
|
|
4
5
|
super();
|
|
5
|
-
this.destroy =
|
|
6
|
+
this.destroy = DestroyType.none;
|
|
6
7
|
this.speed = 2;
|
|
7
8
|
}
|
|
8
9
|
load(data) {
|
|
@@ -65,7 +65,7 @@ export class ParticlesOptions {
|
|
|
65
65
|
}
|
|
66
66
|
const strokeToLoad = data.stroke;
|
|
67
67
|
if (strokeToLoad) {
|
|
68
|
-
this.stroke = executeOnSingleOrMultiple(strokeToLoad,
|
|
68
|
+
this.stroke = executeOnSingleOrMultiple(strokeToLoad, t => {
|
|
69
69
|
const tmp = new Stroke();
|
|
70
70
|
tmp.load(t);
|
|
71
71
|
return tmp;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { DestroyType } from "../../../../Enums/Types/DestroyType.js";
|
|
1
2
|
import { RangedAnimationOptions } from "../../AnimationOptions.js";
|
|
2
3
|
export class SizeAnimation extends RangedAnimationOptions {
|
|
3
4
|
constructor() {
|
|
4
5
|
super();
|
|
5
|
-
this.destroy =
|
|
6
|
+
this.destroy = DestroyType.none;
|
|
6
7
|
this.speed = 5;
|
|
7
8
|
}
|
|
8
9
|
load(data) {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { ResponsiveMode } from "../../Enums/Modes/ResponsiveMode.js";
|
|
1
2
|
import { deepExtend } from "../../Utils/Utils.js";
|
|
2
3
|
export class Responsive {
|
|
3
4
|
constructor() {
|
|
4
5
|
this.maxWidth = Infinity;
|
|
5
6
|
this.options = {};
|
|
6
|
-
this.mode =
|
|
7
|
+
this.mode = ResponsiveMode.canvas;
|
|
7
8
|
}
|
|
8
9
|
load(data) {
|
|
9
10
|
if (!data) {
|
|
@@ -13,11 +14,11 @@ export class Responsive {
|
|
|
13
14
|
this.maxWidth = data.maxWidth;
|
|
14
15
|
}
|
|
15
16
|
if (data.mode !== undefined) {
|
|
16
|
-
if (data.mode ===
|
|
17
|
-
this.mode =
|
|
17
|
+
if (data.mode === ResponsiveMode.screen) {
|
|
18
|
+
this.mode = ResponsiveMode.screen;
|
|
18
19
|
}
|
|
19
20
|
else {
|
|
20
|
-
this.mode =
|
|
21
|
+
this.mode = ResponsiveMode.canvas;
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
if (data.options !== undefined) {
|
package/esm/Types/RangeType.js
CHANGED
package/esm/Utils/CanvasUtils.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import { AlterType } from "../Enums/Types/AlterType.js";
|
|
1
2
|
import { getStyleFromRgb } from "./ColorUtils.js";
|
|
2
|
-
const origin = { x: 0, y: 0 }
|
|
3
|
+
const origin = { x: 0, y: 0 }, defaultTransform = {
|
|
4
|
+
a: 1,
|
|
5
|
+
b: 0,
|
|
6
|
+
c: 0,
|
|
7
|
+
d: 1,
|
|
8
|
+
};
|
|
3
9
|
export function drawLine(context, begin, end) {
|
|
4
10
|
context.beginPath();
|
|
5
11
|
context.moveTo(begin.x, begin.y);
|
|
@@ -25,11 +31,11 @@ export function drawParticle(data) {
|
|
|
25
31
|
const { container, context, particle, delta, colorStyles, backgroundMask, composite, radius, opacity, shadow, transform, } = data, pos = particle.getPosition(), defaultAngle = 0, angle = particle.rotation + (particle.pathRotation ? particle.velocity.angle : defaultAngle), rotateData = {
|
|
26
32
|
sin: Math.sin(angle),
|
|
27
33
|
cos: Math.cos(angle),
|
|
28
|
-
},
|
|
29
|
-
a: rotateData.cos * (transform.a ??
|
|
30
|
-
b: rotateData.sin * (transform.b ??
|
|
31
|
-
c: -rotateData.sin * (transform.c ??
|
|
32
|
-
d: rotateData.cos * (transform.d ??
|
|
34
|
+
}, rotating = !!angle, identity = 1, transformData = {
|
|
35
|
+
a: rotateData.cos * (transform.a ?? defaultTransform.a),
|
|
36
|
+
b: rotating ? rotateData.sin * (transform.b ?? identity) : transform.b ?? defaultTransform.b,
|
|
37
|
+
c: rotating ? -rotateData.sin * (transform.c ?? identity) : transform.c ?? defaultTransform.c,
|
|
38
|
+
d: rotateData.cos * (transform.d ?? defaultTransform.d),
|
|
33
39
|
};
|
|
34
40
|
context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, pos.x, pos.y);
|
|
35
41
|
if (backgroundMask) {
|
|
@@ -150,6 +156,6 @@ export function alterHsl(color, type, value) {
|
|
|
150
156
|
return {
|
|
151
157
|
h: color.h,
|
|
152
158
|
s: color.s,
|
|
153
|
-
l: color.l + (type ===
|
|
159
|
+
l: color.l + (type === AlterType.darken ? -lFactor : lFactor) * value,
|
|
154
160
|
};
|
|
155
161
|
}
|
package/esm/Utils/ColorUtils.js
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { clamp, getRandom, getRangeMax, getRangeMin, getRangeValue, mix, randomInRange, setRangeValue, } from "./NumberUtils.js";
|
|
2
2
|
import { isArray, isString } from "./TypeUtils.js";
|
|
3
3
|
import { millisecondsToSeconds, percentDenominator } from "../Core/Utils/Constants.js";
|
|
4
|
+
import { AnimationStatus } from "../Enums/AnimationStatus.js";
|
|
4
5
|
import { itemFromArray } from "./Utils.js";
|
|
6
|
+
var RgbIndexes;
|
|
7
|
+
(function (RgbIndexes) {
|
|
8
|
+
RgbIndexes[RgbIndexes["r"] = 1] = "r";
|
|
9
|
+
RgbIndexes[RgbIndexes["g"] = 2] = "g";
|
|
10
|
+
RgbIndexes[RgbIndexes["b"] = 3] = "b";
|
|
11
|
+
RgbIndexes[RgbIndexes["a"] = 4] = "a";
|
|
12
|
+
})(RgbIndexes || (RgbIndexes = {}));
|
|
5
13
|
const randomColorValue = "random", midColorValue = "mid", colorManagers = new Map();
|
|
6
14
|
export function addColorManager(manager) {
|
|
7
15
|
colorManagers.set(manager.key, manager);
|
|
@@ -17,12 +25,12 @@ function stringToRgba(input) {
|
|
|
17
25
|
}), regex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i, result = regex.exec(hexFixed), radix = 16, defaultAlpha = 1, alphaFactor = 0xff;
|
|
18
26
|
return result
|
|
19
27
|
? {
|
|
20
|
-
a: result[
|
|
21
|
-
? parseInt(result[
|
|
28
|
+
a: result[RgbIndexes.a] !== undefined
|
|
29
|
+
? parseInt(result[RgbIndexes.a], radix) / alphaFactor
|
|
22
30
|
: defaultAlpha,
|
|
23
|
-
b: parseInt(result[
|
|
24
|
-
g: parseInt(result[
|
|
25
|
-
r: parseInt(result[
|
|
31
|
+
b: parseInt(result[RgbIndexes.b], radix),
|
|
32
|
+
g: parseInt(result[RgbIndexes.g], radix),
|
|
33
|
+
r: parseInt(result[RgbIndexes.r], radix),
|
|
26
34
|
}
|
|
27
35
|
: undefined;
|
|
28
36
|
}
|
|
@@ -252,7 +260,7 @@ function setColorAnimation(colorValue, colorAnimation, reduceFactor) {
|
|
|
252
260
|
if (colorValue.enable) {
|
|
253
261
|
colorValue.velocity = (getRangeValue(colorAnimation.speed) / percentDenominator) * reduceFactor;
|
|
254
262
|
colorValue.decay = decayOffset - getRangeValue(colorAnimation.decay);
|
|
255
|
-
colorValue.status =
|
|
263
|
+
colorValue.status = AnimationStatus.increasing;
|
|
256
264
|
colorValue.loops = defaultLoops;
|
|
257
265
|
colorValue.maxLoops = getRangeValue(colorAnimation.count);
|
|
258
266
|
colorValue.time = defaultTime;
|
|
@@ -285,7 +293,7 @@ export function updateColorValue(data, range, decrease, delta) {
|
|
|
285
293
|
return;
|
|
286
294
|
}
|
|
287
295
|
const offset = data.offset ? randomInRange(data.offset) : minOffset, velocity = (data.velocity ?? minVelocity) * delta.factor + offset * velocityFactor, decay = data.decay ?? identity, max = getRangeMax(range), min = getRangeMin(range);
|
|
288
|
-
if (!decrease || data.status ===
|
|
296
|
+
if (!decrease || data.status === AnimationStatus.increasing) {
|
|
289
297
|
data.value += velocity;
|
|
290
298
|
if (data.value > max) {
|
|
291
299
|
if (!data.loops) {
|
|
@@ -293,7 +301,7 @@ export function updateColorValue(data, range, decrease, delta) {
|
|
|
293
301
|
}
|
|
294
302
|
data.loops++;
|
|
295
303
|
if (decrease) {
|
|
296
|
-
data.status =
|
|
304
|
+
data.status = AnimationStatus.decreasing;
|
|
297
305
|
}
|
|
298
306
|
else {
|
|
299
307
|
data.value -= max;
|
|
@@ -308,7 +316,7 @@ export function updateColorValue(data, range, decrease, delta) {
|
|
|
308
316
|
data.loops = 0;
|
|
309
317
|
}
|
|
310
318
|
data.loops++;
|
|
311
|
-
data.status =
|
|
319
|
+
data.status = AnimationStatus.increasing;
|
|
312
320
|
}
|
|
313
321
|
}
|
|
314
322
|
if (data.velocity && decay !== identity) {
|
|
@@ -13,7 +13,7 @@ export class EventDispatcher {
|
|
|
13
13
|
}
|
|
14
14
|
dispatchEvent(type, args) {
|
|
15
15
|
const listeners = this._listeners.get(type);
|
|
16
|
-
listeners?.forEach(
|
|
16
|
+
listeners?.forEach(handler => handler(args));
|
|
17
17
|
}
|
|
18
18
|
hasEventListener(type) {
|
|
19
19
|
return !!this._listeners.get(type);
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { getRangeValue, parseAlpha } from "./NumberUtils.js";
|
|
2
2
|
import { hslToRgb, hslaToRgba } from "./ColorUtils.js";
|
|
3
|
+
var HslIndexes;
|
|
4
|
+
(function (HslIndexes) {
|
|
5
|
+
HslIndexes[HslIndexes["h"] = 1] = "h";
|
|
6
|
+
HslIndexes[HslIndexes["s"] = 2] = "s";
|
|
7
|
+
HslIndexes[HslIndexes["l"] = 3] = "l";
|
|
8
|
+
HslIndexes[HslIndexes["a"] = 5] = "a";
|
|
9
|
+
})(HslIndexes || (HslIndexes = {}));
|
|
3
10
|
export class HslColorManager {
|
|
4
11
|
constructor() {
|
|
5
12
|
this.key = "hsl";
|
|
@@ -28,10 +35,10 @@ export class HslColorManager {
|
|
|
28
35
|
const regex = /hsla?\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([\d.%]+)\s*)?\)/i, result = regex.exec(input), minLength = 4, defaultAlpha = 1, radix = 10;
|
|
29
36
|
return result
|
|
30
37
|
? hslaToRgba({
|
|
31
|
-
a: result.length > minLength ? parseAlpha(result[
|
|
32
|
-
h: parseInt(result[
|
|
33
|
-
l: parseInt(result[
|
|
34
|
-
s: parseInt(result[
|
|
38
|
+
a: result.length > minLength ? parseAlpha(result[HslIndexes.a]) : defaultAlpha,
|
|
39
|
+
h: parseInt(result[HslIndexes.h], radix),
|
|
40
|
+
l: parseInt(result[HslIndexes.l], radix),
|
|
41
|
+
s: parseInt(result[HslIndexes.s], radix),
|
|
35
42
|
})
|
|
36
43
|
: undefined;
|
|
37
44
|
}
|
package/esm/Utils/NumberUtils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MoveDirection } from "../Enums/Directions/MoveDirection.js";
|
|
1
2
|
import { Vector } from "../Core/Utils/Vectors.js";
|
|
2
3
|
import { isNumber } from "./TypeUtils.js";
|
|
3
4
|
import { percentDenominator } from "../Core/Utils/Constants.js";
|
|
@@ -71,25 +72,25 @@ export function getParticleDirectionAngle(direction, position, center) {
|
|
|
71
72
|
}
|
|
72
73
|
const empty = 0, half = 0.5, quarter = 0.25, threeQuarter = half + quarter;
|
|
73
74
|
switch (direction) {
|
|
74
|
-
case
|
|
75
|
+
case MoveDirection.top:
|
|
75
76
|
return -Math.PI * half;
|
|
76
|
-
case
|
|
77
|
+
case MoveDirection.topRight:
|
|
77
78
|
return -Math.PI * quarter;
|
|
78
|
-
case
|
|
79
|
+
case MoveDirection.right:
|
|
79
80
|
return empty;
|
|
80
|
-
case
|
|
81
|
+
case MoveDirection.bottomRight:
|
|
81
82
|
return Math.PI * quarter;
|
|
82
|
-
case
|
|
83
|
+
case MoveDirection.bottom:
|
|
83
84
|
return Math.PI * half;
|
|
84
|
-
case
|
|
85
|
+
case MoveDirection.bottomLeft:
|
|
85
86
|
return Math.PI * threeQuarter;
|
|
86
|
-
case
|
|
87
|
+
case MoveDirection.left:
|
|
87
88
|
return Math.PI;
|
|
88
|
-
case
|
|
89
|
+
case MoveDirection.topLeft:
|
|
89
90
|
return -Math.PI * threeQuarter;
|
|
90
|
-
case
|
|
91
|
+
case MoveDirection.inside:
|
|
91
92
|
return Math.atan2(center.y - position.y, center.x - position.x);
|
|
92
|
-
case
|
|
93
|
+
case MoveDirection.outside:
|
|
93
94
|
return Math.atan2(position.y - center.y, position.x - center.x);
|
|
94
95
|
default:
|
|
95
96
|
return getRandom() * doublePI;
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { getRangeValue, parseAlpha } from "./NumberUtils.js";
|
|
2
|
+
var RgbIndexes;
|
|
3
|
+
(function (RgbIndexes) {
|
|
4
|
+
RgbIndexes[RgbIndexes["r"] = 1] = "r";
|
|
5
|
+
RgbIndexes[RgbIndexes["g"] = 2] = "g";
|
|
6
|
+
RgbIndexes[RgbIndexes["b"] = 3] = "b";
|
|
7
|
+
RgbIndexes[RgbIndexes["a"] = 5] = "a";
|
|
8
|
+
})(RgbIndexes || (RgbIndexes = {}));
|
|
2
9
|
export class RgbColorManager {
|
|
3
10
|
constructor() {
|
|
4
11
|
this.key = "rgb";
|
|
@@ -27,10 +34,10 @@ export class RgbColorManager {
|
|
|
27
34
|
const regex = /rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([\d.%]+)\s*)?\)/i, result = regex.exec(input), radix = 10, minLength = 4, defaultAlpha = 1;
|
|
28
35
|
return result
|
|
29
36
|
? {
|
|
30
|
-
a: result.length > minLength ? parseAlpha(result[
|
|
31
|
-
b: parseInt(result[
|
|
32
|
-
g: parseInt(result[
|
|
33
|
-
r: parseInt(result[
|
|
37
|
+
a: result.length > minLength ? parseAlpha(result[RgbIndexes.a]) : defaultAlpha,
|
|
38
|
+
b: parseInt(result[RgbIndexes.b], radix),
|
|
39
|
+
g: parseInt(result[RgbIndexes.g], radix),
|
|
40
|
+
r: parseInt(result[RgbIndexes.r], radix),
|
|
34
41
|
}
|
|
35
42
|
: undefined;
|
|
36
43
|
}
|
package/esm/Utils/Utils.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { clamp, collisionVelocity, getDistances, getRandom, getRangeMax, getRangeMin, getRangeValue, randomInRange, } from "./NumberUtils.js";
|
|
2
2
|
import { halfRandom, millisecondsToSeconds, percentDenominator } from "../Core/Utils/Constants.js";
|
|
3
3
|
import { isArray, isObject } from "./TypeUtils.js";
|
|
4
|
+
import { AnimationMode } from "../Enums/Modes/AnimationMode.js";
|
|
5
|
+
import { AnimationStatus } from "../Enums/AnimationStatus.js";
|
|
6
|
+
import { DestroyType } from "../Enums/Types/DestroyType.js";
|
|
7
|
+
import { OutModeDirection } from "../Enums/Directions/OutModeDirection.js";
|
|
8
|
+
import { PixelMode } from "../Enums/Modes/PixelMode.js";
|
|
9
|
+
import { StartValueType } from "../Enums/Types/StartValueType.js";
|
|
4
10
|
import { Vector } from "../Core/Utils/Vectors.js";
|
|
5
11
|
const _logger = {
|
|
6
12
|
debug: console.debug,
|
|
@@ -37,10 +43,10 @@ function rectSideBounce(data) {
|
|
|
37
43
|
return res;
|
|
38
44
|
}
|
|
39
45
|
function checkSelector(element, selectors) {
|
|
40
|
-
const res = executeOnSingleOrMultiple(selectors,
|
|
46
|
+
const res = executeOnSingleOrMultiple(selectors, selector => {
|
|
41
47
|
return element.matches(selector);
|
|
42
48
|
});
|
|
43
|
-
return isArray(res) ? res.some(
|
|
49
|
+
return isArray(res) ? res.some(t => t) : res;
|
|
44
50
|
}
|
|
45
51
|
export function isSsr() {
|
|
46
52
|
return typeof window === "undefined" || !window || typeof window.document === "undefined" || !window.document;
|
|
@@ -89,16 +95,16 @@ export function isPointInside(point, size, offset, radius, direction) {
|
|
|
89
95
|
}
|
|
90
96
|
export function areBoundsInside(bounds, size, offset, direction) {
|
|
91
97
|
let inside = true;
|
|
92
|
-
if (!direction || direction ===
|
|
98
|
+
if (!direction || direction === OutModeDirection.bottom) {
|
|
93
99
|
inside = bounds.top < size.height + offset.x;
|
|
94
100
|
}
|
|
95
|
-
if (inside && (!direction || direction ===
|
|
101
|
+
if (inside && (!direction || direction === OutModeDirection.left)) {
|
|
96
102
|
inside = bounds.right > offset.x;
|
|
97
103
|
}
|
|
98
|
-
if (inside && (!direction || direction ===
|
|
104
|
+
if (inside && (!direction || direction === OutModeDirection.right)) {
|
|
99
105
|
inside = bounds.left < size.width + offset.y;
|
|
100
106
|
}
|
|
101
|
-
if (inside && (!direction || direction ===
|
|
107
|
+
if (inside && (!direction || direction === OutModeDirection.top)) {
|
|
102
108
|
inside = bounds.bottom > offset.y;
|
|
103
109
|
}
|
|
104
110
|
return inside;
|
|
@@ -134,17 +140,17 @@ export function deepExtend(destination, ...sources) {
|
|
|
134
140
|
const sourceDict = source, value = sourceDict[key], destDict = destination;
|
|
135
141
|
destDict[key] =
|
|
136
142
|
isObject(value) && Array.isArray(value)
|
|
137
|
-
? value.map(
|
|
143
|
+
? value.map(v => deepExtend(destDict[key], v))
|
|
138
144
|
: deepExtend(destDict[key], value);
|
|
139
145
|
}
|
|
140
146
|
}
|
|
141
147
|
return destination;
|
|
142
148
|
}
|
|
143
149
|
export function isDivModeEnabled(mode, divs) {
|
|
144
|
-
return !!findItemFromSingleOrMultiple(divs,
|
|
150
|
+
return !!findItemFromSingleOrMultiple(divs, t => t.enable && isInArray(mode, t.mode));
|
|
145
151
|
}
|
|
146
152
|
export function divModeExecute(mode, divs, callback) {
|
|
147
|
-
executeOnSingleOrMultiple(divs,
|
|
153
|
+
executeOnSingleOrMultiple(divs, div => {
|
|
148
154
|
const divMode = div.mode, divEnabled = div.enable;
|
|
149
155
|
if (divEnabled && isInArray(mode, divMode)) {
|
|
150
156
|
singleDivModeExecute(div, callback);
|
|
@@ -153,7 +159,7 @@ export function divModeExecute(mode, divs, callback) {
|
|
|
153
159
|
}
|
|
154
160
|
export function singleDivModeExecute(div, callback) {
|
|
155
161
|
const selectors = div.selectors;
|
|
156
|
-
executeOnSingleOrMultiple(selectors,
|
|
162
|
+
executeOnSingleOrMultiple(selectors, selector => {
|
|
157
163
|
callback(selector, div);
|
|
158
164
|
});
|
|
159
165
|
}
|
|
@@ -161,7 +167,7 @@ export function divMode(divs, element) {
|
|
|
161
167
|
if (!element || !divs) {
|
|
162
168
|
return;
|
|
163
169
|
}
|
|
164
|
-
return findItemFromSingleOrMultiple(divs,
|
|
170
|
+
return findItemFromSingleOrMultiple(divs, div => {
|
|
165
171
|
return checkSelector(element, div.selectors);
|
|
166
172
|
});
|
|
167
173
|
}
|
|
@@ -271,35 +277,35 @@ export function initParticleNumericAnimationValue(options, pxRatio) {
|
|
|
271
277
|
if (animationOptions.enable) {
|
|
272
278
|
res.decay = decayOffset - getRangeValue(animationOptions.decay);
|
|
273
279
|
switch (animationOptions.mode) {
|
|
274
|
-
case
|
|
275
|
-
res.status =
|
|
280
|
+
case AnimationMode.increase:
|
|
281
|
+
res.status = AnimationStatus.increasing;
|
|
276
282
|
break;
|
|
277
|
-
case
|
|
278
|
-
res.status =
|
|
283
|
+
case AnimationMode.decrease:
|
|
284
|
+
res.status = AnimationStatus.decreasing;
|
|
279
285
|
break;
|
|
280
|
-
case
|
|
281
|
-
res.status = getRandom() >= halfRandom ?
|
|
286
|
+
case AnimationMode.random:
|
|
287
|
+
res.status = getRandom() >= halfRandom ? AnimationStatus.increasing : AnimationStatus.decreasing;
|
|
282
288
|
break;
|
|
283
289
|
}
|
|
284
|
-
const autoStatus = animationOptions.mode ===
|
|
290
|
+
const autoStatus = animationOptions.mode === AnimationMode.auto;
|
|
285
291
|
switch (animationOptions.startValue) {
|
|
286
|
-
case
|
|
292
|
+
case StartValueType.min:
|
|
287
293
|
res.value = res.min;
|
|
288
294
|
if (autoStatus) {
|
|
289
|
-
res.status =
|
|
295
|
+
res.status = AnimationStatus.increasing;
|
|
290
296
|
}
|
|
291
297
|
break;
|
|
292
|
-
case
|
|
298
|
+
case StartValueType.max:
|
|
293
299
|
res.value = res.max;
|
|
294
300
|
if (autoStatus) {
|
|
295
|
-
res.status =
|
|
301
|
+
res.status = AnimationStatus.decreasing;
|
|
296
302
|
}
|
|
297
303
|
break;
|
|
298
|
-
case
|
|
304
|
+
case StartValueType.random:
|
|
299
305
|
default:
|
|
300
306
|
res.value = randomInRange(res);
|
|
301
307
|
if (autoStatus) {
|
|
302
|
-
res.status = getRandom() >= halfRandom ?
|
|
308
|
+
res.status = getRandom() >= halfRandom ? AnimationStatus.increasing : AnimationStatus.decreasing;
|
|
303
309
|
}
|
|
304
310
|
break;
|
|
305
311
|
}
|
|
@@ -308,7 +314,7 @@ export function initParticleNumericAnimationValue(options, pxRatio) {
|
|
|
308
314
|
return res;
|
|
309
315
|
}
|
|
310
316
|
function getPositionOrSize(positionOrSize, canvasSize) {
|
|
311
|
-
const isPercent = positionOrSize.mode ===
|
|
317
|
+
const isPercent = positionOrSize.mode === PixelMode.percent;
|
|
312
318
|
if (!isPercent) {
|
|
313
319
|
const { mode: _, ...rest } = positionOrSize;
|
|
314
320
|
return rest;
|
|
@@ -335,12 +341,12 @@ export function getSize(size, canvasSize) {
|
|
|
335
341
|
}
|
|
336
342
|
function checkDestroy(particle, destroyType, value, minValue, maxValue) {
|
|
337
343
|
switch (destroyType) {
|
|
338
|
-
case
|
|
344
|
+
case DestroyType.max:
|
|
339
345
|
if (value >= maxValue) {
|
|
340
346
|
particle.destroy();
|
|
341
347
|
}
|
|
342
348
|
break;
|
|
343
|
-
case
|
|
349
|
+
case DestroyType.min:
|
|
344
350
|
if (value <= minValue) {
|
|
345
351
|
particle.destroy();
|
|
346
352
|
}
|
|
@@ -366,10 +372,10 @@ export function updateAnimation(particle, data, changeDirection, destroyType, de
|
|
|
366
372
|
return;
|
|
367
373
|
}
|
|
368
374
|
switch (data.status) {
|
|
369
|
-
case
|
|
375
|
+
case AnimationStatus.increasing:
|
|
370
376
|
if (data.value >= maxValue) {
|
|
371
377
|
if (changeDirection) {
|
|
372
|
-
data.status =
|
|
378
|
+
data.status = AnimationStatus.decreasing;
|
|
373
379
|
}
|
|
374
380
|
else {
|
|
375
381
|
data.value -= maxValue;
|
|
@@ -383,10 +389,10 @@ export function updateAnimation(particle, data, changeDirection, destroyType, de
|
|
|
383
389
|
data.value += velocity;
|
|
384
390
|
}
|
|
385
391
|
break;
|
|
386
|
-
case
|
|
392
|
+
case AnimationStatus.decreasing:
|
|
387
393
|
if (data.value <= minValue) {
|
|
388
394
|
if (changeDirection) {
|
|
389
|
-
data.status =
|
|
395
|
+
data.status = AnimationStatus.increasing;
|
|
390
396
|
}
|
|
391
397
|
else {
|
|
392
398
|
data.value += maxValue;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsparticles/engine",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "Easily create highly customizable particle, confetti and fireworks animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.",
|
|
5
5
|
"homepage": "https://particles.js.org",
|
|
6
6
|
"scripts": {
|
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/engine [
|
|
6
|
+
<title>@tsparticles/engine [13 May 2024 at 00:05]</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>
|