@tsparticles/engine 4.0.0-alpha.26 → 4.0.0-alpha.28
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/164.min.js +1 -0
- package/README.md +39 -5
- package/browser/Core/Canvas.js +7 -4
- package/browser/Core/Engine.js +8 -1
- package/browser/Core/Interfaces/IPalette.js +1 -0
- package/browser/Core/Particle.js +8 -12
- package/browser/Core/Utils/Constants.js +1 -1
- package/browser/Options/Classes/ColorAnimation.js +11 -1
- package/browser/Options/Classes/HslAnimation.js +4 -3
- package/browser/Options/Classes/Options.js +38 -1
- package/browser/Options/Classes/Particles/Effect/Effect.js +0 -5
- package/browser/Options/Classes/Particles/Fill.js +28 -0
- package/browser/Options/Classes/Particles/ParticlesOptions.js +12 -6
- package/browser/Options/Classes/Particles/Shape/Shape.js +0 -5
- package/browser/Options/Interfaces/Particles/IFill.js +1 -0
- package/browser/Utils/CanvasUtils.js +5 -5
- package/browser/Utils/ColorUtils.js +22 -19
- package/browser/Utils/Utils.js +86 -13
- package/browser/exports.js +1 -0
- package/cjs/Core/Canvas.js +7 -4
- package/cjs/Core/Engine.js +8 -1
- package/cjs/Core/Interfaces/IPalette.js +1 -0
- package/cjs/Core/Particle.js +8 -12
- package/cjs/Core/Utils/Constants.js +1 -1
- package/cjs/Options/Classes/ColorAnimation.js +11 -1
- package/cjs/Options/Classes/HslAnimation.js +4 -3
- package/cjs/Options/Classes/Options.js +38 -1
- package/cjs/Options/Classes/Particles/Effect/Effect.js +0 -5
- package/cjs/Options/Classes/Particles/Fill.js +28 -0
- package/cjs/Options/Classes/Particles/ParticlesOptions.js +12 -6
- package/cjs/Options/Classes/Particles/Shape/Shape.js +0 -5
- package/cjs/Options/Interfaces/Particles/IFill.js +1 -0
- package/cjs/Utils/CanvasUtils.js +5 -5
- package/cjs/Utils/ColorUtils.js +22 -19
- package/cjs/Utils/Utils.js +86 -13
- package/cjs/exports.js +1 -0
- package/dist_browser_Core_Container_js.js +3 -3
- package/esm/Core/Canvas.js +7 -4
- package/esm/Core/Engine.js +8 -1
- package/esm/Core/Interfaces/IPalette.js +1 -0
- package/esm/Core/Particle.js +8 -12
- package/esm/Core/Utils/Constants.js +1 -1
- package/esm/Options/Classes/ColorAnimation.js +11 -1
- package/esm/Options/Classes/HslAnimation.js +4 -3
- package/esm/Options/Classes/Options.js +38 -1
- package/esm/Options/Classes/Particles/Effect/Effect.js +0 -5
- package/esm/Options/Classes/Particles/Fill.js +28 -0
- package/esm/Options/Classes/Particles/ParticlesOptions.js +12 -6
- package/esm/Options/Classes/Particles/Shape/Shape.js +0 -5
- package/esm/Options/Interfaces/Particles/IFill.js +1 -0
- package/esm/Utils/CanvasUtils.js +5 -5
- package/esm/Utils/ColorUtils.js +22 -19
- package/esm/Utils/Utils.js +86 -13
- package/esm/exports.js +1 -0
- package/package.json +1 -1
- package/report.html +1 -1
- package/scripts/install.js +2 -18
- package/tsparticles.engine.js +30 -20
- package/tsparticles.engine.min.js +2 -2
- package/types/Core/Engine.d.ts +4 -0
- package/types/Core/Interfaces/IPalette.d.ts +7 -0
- package/types/Core/Interfaces/IParticleOpacityData.d.ts +1 -0
- package/types/Core/Interfaces/IParticleValueAnimation.d.ts +3 -3
- package/types/Core/Interfaces/IShapeValues.d.ts +0 -1
- package/types/Core/Particle.d.ts +3 -3
- package/types/Core/Utils/Constants.d.ts +1 -1
- package/types/Options/Classes/ColorAnimation.d.ts +3 -1
- package/types/Options/Classes/Options.d.ts +2 -0
- package/types/Options/Classes/Particles/Effect/Effect.d.ts +0 -1
- package/types/Options/Classes/Particles/Fill.d.ts +12 -0
- package/types/Options/Classes/Particles/ParticlesOptions.d.ts +2 -2
- package/types/Options/Classes/Particles/Shape/Shape.d.ts +0 -1
- package/types/Options/Interfaces/IColorAnimation.d.ts +2 -0
- package/types/Options/Interfaces/IOptions.d.ts +1 -0
- package/types/Options/Interfaces/Particles/Effect/IEffect.d.ts +0 -1
- package/types/Options/Interfaces/Particles/IFill.d.ts +9 -0
- package/types/Options/Interfaces/Particles/IParticlesOptions.d.ts +2 -2
- package/types/Options/Interfaces/Particles/IStroke.d.ts +2 -2
- package/types/Options/Interfaces/Particles/Shape/IShape.d.ts +0 -1
- package/types/Utils/ColorUtils.d.ts +1 -2
- package/types/Utils/Utils.d.ts +7 -0
- package/types/export-types.d.ts +2 -1
- package/types/exports.d.ts +1 -0
- package/umd/Core/Canvas.js +6 -3
- package/umd/Core/Engine.js +8 -1
- package/umd/Core/Interfaces/IPalette.js +12 -0
- package/umd/Core/Particle.js +8 -12
- package/umd/Core/Utils/Constants.js +2 -2
- package/umd/Options/Classes/ColorAnimation.js +11 -1
- package/umd/Options/Classes/HslAnimation.js +5 -4
- package/umd/Options/Classes/Options.js +38 -1
- package/umd/Options/Classes/Particles/Effect/Effect.js +0 -5
- package/umd/Options/Classes/Particles/Fill.js +42 -0
- package/umd/Options/Classes/Particles/ParticlesOptions.js +13 -7
- package/umd/Options/Classes/Particles/Shape/Shape.js +0 -5
- package/umd/Options/Interfaces/Particles/IFill.js +12 -0
- package/umd/Utils/CanvasUtils.js +5 -5
- package/umd/Utils/ColorUtils.js +21 -18
- package/umd/Utils/Utils.js +87 -13
- package/umd/exports.js +2 -1
- package/622.min.js +0 -1
package/esm/Utils/Utils.js
CHANGED
|
@@ -8,16 +8,70 @@ import { OutModeDirection } from "../Enums/Directions/OutModeDirection.js";
|
|
|
8
8
|
import { PixelMode } from "../Enums/Modes/PixelMode.js";
|
|
9
9
|
import { StartValueType } from "../Enums/Types/StartValueType.js";
|
|
10
10
|
import { Vector } from "../Core/Utils/Vectors.js";
|
|
11
|
-
const minRadius = 0;
|
|
12
|
-
function memoize(fn) {
|
|
13
|
-
const cache = new Map()
|
|
11
|
+
const minRadius = 0, minMemoizeSize = 0;
|
|
12
|
+
export function memoize(fn, options) {
|
|
13
|
+
const cache = new Map(), maxSize = options?.maxSize, ttlMs = options?.ttlMs, keyFn = options?.keyFn, stableStringify = (obj, seen = new WeakSet()) => {
|
|
14
|
+
if (obj === null) {
|
|
15
|
+
return "null";
|
|
16
|
+
}
|
|
17
|
+
const t = typeof obj;
|
|
18
|
+
if (t === "undefined") {
|
|
19
|
+
return "undefined";
|
|
20
|
+
}
|
|
21
|
+
if (t === "number" || t === "boolean" || t === "string") {
|
|
22
|
+
return JSON.stringify(obj);
|
|
23
|
+
}
|
|
24
|
+
if (t === "function") {
|
|
25
|
+
try {
|
|
26
|
+
const fn = obj;
|
|
27
|
+
return fn.toString();
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return '"[Function]"';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (t === "symbol") {
|
|
34
|
+
try {
|
|
35
|
+
return obj.toString();
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return '"[Symbol]"';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(obj)) {
|
|
42
|
+
return `[${obj.map(i => stableStringify(i, seen)).join(",")}]`;
|
|
43
|
+
}
|
|
44
|
+
if (seen.has(obj)) {
|
|
45
|
+
return '"[Circular]"';
|
|
46
|
+
}
|
|
47
|
+
seen.add(obj);
|
|
48
|
+
const keys = Object.keys(obj).sort();
|
|
49
|
+
return `{${keys.map(k => `${JSON.stringify(k)}:${stableStringify(obj[k], seen)}`).join(",")}}`;
|
|
50
|
+
}, defaultKeyer = (args) => stableStringify(args), makeKey = (args) => (keyFn ? keyFn(args) : defaultKeyer(args)), ensureBounds = () => {
|
|
51
|
+
if (typeof maxSize === "number" && maxSize >= minMemoizeSize) {
|
|
52
|
+
while (cache.size > maxSize) {
|
|
53
|
+
const firstKey = cache.keys().next().value;
|
|
54
|
+
if (firstKey === undefined)
|
|
55
|
+
break;
|
|
56
|
+
cache.delete(firstKey);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
14
60
|
return (...args) => {
|
|
15
|
-
const key =
|
|
16
|
-
if (
|
|
17
|
-
|
|
61
|
+
const key = makeKey(args), now = Date.now(), entry = cache.get(key);
|
|
62
|
+
if (entry !== undefined) {
|
|
63
|
+
if (ttlMs && now - entry.ts > ttlMs) {
|
|
64
|
+
cache.delete(key);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
cache.delete(key);
|
|
68
|
+
cache.set(key, { value: entry.value, ts: entry.ts });
|
|
69
|
+
return entry.value;
|
|
70
|
+
}
|
|
18
71
|
}
|
|
19
72
|
const result = fn(...args);
|
|
20
|
-
cache.set(key, result);
|
|
73
|
+
cache.set(key, { value: result, ts: now });
|
|
74
|
+
ensureBounds();
|
|
21
75
|
return result;
|
|
22
76
|
};
|
|
23
77
|
}
|
|
@@ -98,8 +152,27 @@ export function deepExtend(destination, ...sources) {
|
|
|
98
152
|
else if (!isObject(destination) || Array.isArray(destination)) {
|
|
99
153
|
destination = {};
|
|
100
154
|
}
|
|
101
|
-
|
|
102
|
-
|
|
155
|
+
const sourceKeys = Object.keys(source), dangerousKeys = new Set(["__proto__", "constructor", "prototype"]), hasNested = sourceKeys.some(k => {
|
|
156
|
+
const v = source[k];
|
|
157
|
+
return isObject(v) || Array.isArray(v);
|
|
158
|
+
});
|
|
159
|
+
if (!hasNested) {
|
|
160
|
+
const sourceDict = source, destDict = destination;
|
|
161
|
+
for (const key of sourceKeys) {
|
|
162
|
+
if (dangerousKeys.has(key)) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (key in sourceDict) {
|
|
166
|
+
const v = sourceDict[key];
|
|
167
|
+
if (v !== undefined) {
|
|
168
|
+
destDict[key] = v;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
for (const key of sourceKeys) {
|
|
175
|
+
if (dangerousKeys.has(key)) {
|
|
103
176
|
continue;
|
|
104
177
|
}
|
|
105
178
|
const sourceDict = source, destDict = destination, value = sourceDict[key];
|
|
@@ -297,7 +370,7 @@ export function cloneStyle(style) {
|
|
|
297
370
|
const clonedStyle = safeDocument().createElement("div").style;
|
|
298
371
|
for (const key in style) {
|
|
299
372
|
const styleKey = style[key];
|
|
300
|
-
if (!
|
|
373
|
+
if (!(key in style) || isNull(styleKey)) {
|
|
301
374
|
continue;
|
|
302
375
|
}
|
|
303
376
|
const styleValue = style.getPropertyValue?.(styleKey);
|
|
@@ -305,11 +378,11 @@ export function cloneStyle(style) {
|
|
|
305
378
|
continue;
|
|
306
379
|
}
|
|
307
380
|
const stylePriority = style.getPropertyPriority?.(styleKey);
|
|
308
|
-
if (
|
|
309
|
-
clonedStyle.setProperty(styleKey, styleValue);
|
|
381
|
+
if (stylePriority) {
|
|
382
|
+
clonedStyle.setProperty(styleKey, styleValue, stylePriority);
|
|
310
383
|
}
|
|
311
384
|
else {
|
|
312
|
-
clonedStyle.setProperty(styleKey, styleValue
|
|
385
|
+
clonedStyle.setProperty(styleKey, styleValue);
|
|
313
386
|
}
|
|
314
387
|
}
|
|
315
388
|
return clonedStyle;
|
package/esm/exports.js
CHANGED
|
@@ -27,6 +27,7 @@ export * from "./Options/Classes/OptionsColor.js";
|
|
|
27
27
|
export * from "./Options/Classes/Particles/Bounce/ParticlesBounce.js";
|
|
28
28
|
export * from "./Options/Classes/Particles/Bounce/ParticlesBounceFactor.js";
|
|
29
29
|
export * from "./Options/Classes/Particles/ParticlesOptions.js";
|
|
30
|
+
export * from "./Options/Classes/Particles/Fill.js";
|
|
30
31
|
export * from "./Options/Classes/Particles/Stroke.js";
|
|
31
32
|
export * from "./Options/Classes/Particles/Move/Move.js";
|
|
32
33
|
export * from "./Options/Classes/Particles/Move/MoveAngle.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsparticles/engine",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.28",
|
|
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 [15 Mar 2026 at 13:46]</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>
|
package/scripts/install.js
CHANGED
|
@@ -8,7 +8,6 @@ async function checkErrors() {
|
|
|
8
8
|
reactParticlesJsFoundError = "react-particles-js-found",
|
|
9
9
|
reactParticlesFoundError = "react-particles-found",
|
|
10
10
|
reactTsParticlesFoundError = "react-tsparticles-found",
|
|
11
|
-
svelteParticlesFoundError = "svelte-particles-found",
|
|
12
11
|
vue2ParticlesFoundError = "vue2-particles-found",
|
|
13
12
|
vue3ParticlesFoundError = "vue3-particles-found";
|
|
14
13
|
|
|
@@ -187,20 +186,6 @@ async function checkErrors() {
|
|
|
187
186
|
}
|
|
188
187
|
|
|
189
188
|
if (dependencies["svelte"]) {
|
|
190
|
-
if (dependencies["svelte-particles"]) {
|
|
191
|
-
console.error(
|
|
192
|
-
"\x1b[31m%s\x1b[0m",
|
|
193
|
-
"The package svelte-particles has been deprecated and is not supported anymore."
|
|
194
|
-
);
|
|
195
|
-
console.error("\x1b[31m%s\x1b[0m", "Please consider switching to @tsparticles/svelte package.");
|
|
196
|
-
console.error(
|
|
197
|
-
"\x1b[31m%s\x1b[0m",
|
|
198
|
-
"This error will be fixed once svelte-particles is removed from the package.json file."
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
throw new Error(svelteParticlesFoundError);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
189
|
if (!dependencies["@tsparticles/svelte"]) {
|
|
205
190
|
console.warn(
|
|
206
191
|
"\x1b[43m\x1b[30m%s\x1b[0m",
|
|
@@ -254,8 +239,7 @@ async function checkErrors() {
|
|
|
254
239
|
error.message === reactTsParticlesFoundError ||
|
|
255
240
|
error.message === angularParticlesFoundError ||
|
|
256
241
|
error.message === vue2ParticlesFoundError ||
|
|
257
|
-
error.message === vue3ParticlesFoundError
|
|
258
|
-
error.message === svelteParticlesFoundError
|
|
242
|
+
error.message === vue3ParticlesFoundError
|
|
259
243
|
) {
|
|
260
244
|
throw error;
|
|
261
245
|
}
|
|
@@ -264,4 +248,4 @@ async function checkErrors() {
|
|
|
264
248
|
}
|
|
265
249
|
}
|
|
266
250
|
|
|
267
|
-
checkErrors();
|
|
251
|
+
checkErrors();
|