@tsparticles/engine 4.0.0-beta.12 → 4.0.0-beta.15

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.
Files changed (46) hide show
  1. package/browser/Core/CanvasManager.js +1 -1
  2. package/browser/Core/Engine.js +13 -4
  3. package/browser/Core/Particle.js +2 -0
  4. package/browser/Options/Classes/Particles/Fill.js +0 -2
  5. package/browser/Options/Classes/Particles/Paint.js +5 -0
  6. package/browser/Options/Classes/Particles/ParticlesOptions.js +20 -5
  7. package/browser/Utils/LogUtils.js +32 -15
  8. package/browser/Utils/Utils.js +1 -0
  9. package/browser/browser.js +5 -0
  10. package/browser/index.js +0 -1
  11. package/cjs/Core/CanvasManager.js +1 -1
  12. package/cjs/Core/Engine.js +13 -4
  13. package/cjs/Core/Particle.js +2 -0
  14. package/cjs/Options/Classes/Particles/Fill.js +0 -2
  15. package/cjs/Options/Classes/Particles/Paint.js +5 -0
  16. package/cjs/Options/Classes/Particles/ParticlesOptions.js +20 -5
  17. package/cjs/Utils/LogUtils.js +32 -15
  18. package/cjs/Utils/Utils.js +1 -0
  19. package/cjs/browser.js +5 -0
  20. package/cjs/index.js +0 -1
  21. package/esm/Core/CanvasManager.js +1 -1
  22. package/esm/Core/Engine.js +13 -4
  23. package/esm/Core/Particle.js +2 -0
  24. package/esm/Options/Classes/Particles/Fill.js +0 -2
  25. package/esm/Options/Classes/Particles/Paint.js +5 -0
  26. package/esm/Options/Classes/Particles/ParticlesOptions.js +20 -5
  27. package/esm/Utils/LogUtils.js +32 -15
  28. package/esm/Utils/Utils.js +1 -0
  29. package/esm/browser.js +5 -0
  30. package/esm/index.js +0 -1
  31. package/package.json +8 -1
  32. package/report.html +4949 -94
  33. package/tsparticles.engine.js +5174 -949
  34. package/tsparticles.engine.min.js +1 -2
  35. package/types/Core/Particle.d.ts +1 -0
  36. package/types/Options/Classes/Particles/Fill.d.ts +1 -1
  37. package/types/Options/Classes/Particles/Paint.d.ts +2 -0
  38. package/types/Options/Interfaces/Particles/IPaint.d.ts +4 -0
  39. package/types/Utils/LogUtils.d.ts +1 -1
  40. package/types/browser.d.ts +1 -0
  41. package/types/{bundle.d.ts → index.lazy.d.ts} +1 -0
  42. package/232.min.js +0 -1
  43. package/dist_browser_Core_Container_js.js +0 -102
  44. /package/browser/{bundle.js → index.lazy.js} +0 -0
  45. /package/cjs/{bundle.js → index.lazy.js} +0 -0
  46. /package/esm/{bundle.js → index.lazy.js} +0 -0
@@ -272,7 +272,7 @@ export class CanvasManager {
272
272
  this.initBackground();
273
273
  const pointerEvents = this._pointerEvents;
274
274
  element.style.pointerEvents = pointerEvents;
275
- element.setAttribute("pointer-events", pointerEvents);
275
+ element.style.setProperty("pointer-events", pointerEvents);
276
276
  this._safeMutationObserver(observer => {
277
277
  if (!(element instanceof Node)) {
278
278
  return;
@@ -20,9 +20,16 @@ async function getDataFromUrl(data) {
20
20
  const getCanvasFromContainer = (domContainer) => {
21
21
  const documentSafe = safeDocument();
22
22
  let canvasEl;
23
- if (domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag) {
23
+ const isCanvas = domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag;
24
+ if (isCanvas) {
24
25
  canvasEl = domContainer;
25
26
  canvasEl.dataset[generatedAttribute] ??= generatedFalse;
27
+ if (canvasEl.dataset[generatedAttribute] === generatedTrue) {
28
+ canvasEl.style.width ||= fullPercent;
29
+ canvasEl.style.height ||= fullPercent;
30
+ canvasEl.style.pointerEvents = "none";
31
+ canvasEl.style.setProperty("pointer-events", "none");
32
+ }
26
33
  }
27
34
  else {
28
35
  const existingCanvases = domContainer.getElementsByTagName(canvasTag), foundCanvas = existingCanvases[canvasFirstIndex];
@@ -35,9 +42,11 @@ const getCanvasFromContainer = (domContainer) => {
35
42
  canvasEl.dataset[generatedAttribute] = generatedTrue;
36
43
  domContainer.appendChild(canvasEl);
37
44
  }
45
+ canvasEl.style.width ||= fullPercent;
46
+ canvasEl.style.height ||= fullPercent;
47
+ canvasEl.style.pointerEvents = "none";
48
+ canvasEl.style.setProperty("pointer-events", "none");
38
49
  }
39
- canvasEl.style.width ||= fullPercent;
40
- canvasEl.style.height ||= fullPercent;
41
50
  return canvasEl;
42
51
  }, getDomContainer = (id, source) => {
43
52
  const documentSafe = safeDocument();
@@ -60,7 +69,7 @@ export class Engine {
60
69
  return this._domArray;
61
70
  }
62
71
  get version() {
63
- return "4.0.0-beta.12";
72
+ return "4.0.0-beta.15";
64
73
  }
65
74
  addEventListener(type, listener) {
66
75
  this._eventDispatcher.addEventListener(type, listener);
@@ -49,6 +49,7 @@ export class Particle {
49
49
  initialPosition;
50
50
  initialVelocity;
51
51
  isRotating;
52
+ justWarped;
52
53
  lastPathTime;
53
54
  misplaced;
54
55
  moveCenter;
@@ -168,6 +169,7 @@ export class Particle {
168
169
  const container = this._container;
169
170
  this.id = id;
170
171
  this.group = group;
172
+ this.justWarped = false;
171
173
  this.effectClose = true;
172
174
  this.shapeClose = true;
173
175
  this.pathRotation = false;
@@ -7,8 +7,6 @@ export class Fill {
7
7
  opacity;
8
8
  constructor() {
9
9
  this.enable = true;
10
- this.color = new AnimatableColor();
11
- this.color.value = "#fff";
12
10
  this.opacity = 1;
13
11
  }
14
12
  load(data) {
@@ -1,13 +1,18 @@
1
+ import { AnimatableColor } from "../AnimatableColor.js";
1
2
  import { Fill } from "./Fill.js";
2
3
  import { Stroke } from "./Stroke.js";
3
4
  import { isNull } from "../../../Utils/TypeUtils.js";
4
5
  export class Paint {
6
+ color;
5
7
  fill;
6
8
  stroke;
7
9
  load(data) {
8
10
  if (isNull(data)) {
9
11
  return;
10
12
  }
13
+ if (data.color !== undefined) {
14
+ this.color = AnimatableColor.create(this.color, data.color);
15
+ }
11
16
  if (data.fill !== undefined) {
12
17
  this.fill ??= new Fill();
13
18
  this.fill.load(data.fill);
@@ -1,6 +1,8 @@
1
1
  import { deepExtend, executeOnSingleOrMultiple } from "../../../Utils/Utils.js";
2
2
  import { isArray, isNull } from "../../../Utils/TypeUtils.js";
3
+ import { AnimatableColor } from "../AnimatableColor.js";
3
4
  import { Effect } from "./Effect/Effect.js";
5
+ import { Fill } from "./Fill.js";
4
6
  import { Move } from "./Move/Move.js";
5
7
  import { Opacity } from "./Opacity/Opacity.js";
6
8
  import { Paint } from "./Paint.js";
@@ -34,6 +36,10 @@ export class ParticlesOptions {
34
36
  this.number = new ParticlesNumber();
35
37
  this.opacity = new Opacity();
36
38
  this.paint = new Paint();
39
+ this.paint.color = new AnimatableColor();
40
+ this.paint.color.value = "#fff";
41
+ this.paint.fill = new Fill();
42
+ this.paint.fill.enable = true;
37
43
  this.reduceDuplicates = false;
38
44
  this.shape = new Shape();
39
45
  this.size = new Size();
@@ -68,11 +74,20 @@ export class ParticlesOptions {
68
74
  this.opacity.load(data.opacity);
69
75
  const paintToLoad = data.paint;
70
76
  if (paintToLoad) {
71
- this.paint = executeOnSingleOrMultiple(paintToLoad, t => {
72
- const tmp = new Paint();
73
- tmp.load(t);
74
- return tmp;
75
- });
77
+ if (isArray(paintToLoad)) {
78
+ this.paint = executeOnSingleOrMultiple(paintToLoad, t => {
79
+ const tmp = new Paint();
80
+ tmp.load(t);
81
+ return tmp;
82
+ });
83
+ }
84
+ else if (isArray(this.paint)) {
85
+ this.paint = new Paint();
86
+ this.paint.load(paintToLoad);
87
+ }
88
+ else {
89
+ this.paint.load(paintToLoad);
90
+ }
76
91
  }
77
92
  this.shape.load(data.shape);
78
93
  this.size.load(data.size);
@@ -1,22 +1,39 @@
1
1
  const errorPrefix = "tsParticles - Error";
2
- const _logger = {
3
- debug: console.debug,
4
- error: (message, optionalParams) => {
5
- console.error(`${errorPrefix} - ${message}`, optionalParams);
2
+ const wrap = (fn) => (...args) => {
3
+ fn(...args);
4
+ }, _logger = {
5
+ debug: wrap(console.debug),
6
+ error: (message, ...optionalParams) => {
7
+ console.error(`${errorPrefix} - ${message}`, ...optionalParams);
6
8
  },
7
- info: console.info,
8
- log: console.log,
9
- trace: console.trace,
10
- verbose: console.log,
11
- warning: console.warn,
9
+ info: wrap(console.info),
10
+ log: wrap(console.log),
11
+ trace: wrap(console.trace),
12
+ verbose: wrap(console.log),
13
+ warning: wrap(console.warn),
12
14
  };
13
15
  export function setLogger(logger) {
14
- _logger.debug = logger.debug;
15
- _logger.error = logger.error;
16
- _logger.info = logger.info;
17
- _logger.log = logger.log;
18
- _logger.verbose = logger.verbose;
19
- _logger.warning = logger.warning;
16
+ if (logger.debug) {
17
+ _logger.debug = wrap(logger.debug);
18
+ }
19
+ if (logger.error) {
20
+ _logger.error = wrap(logger.error);
21
+ }
22
+ if (logger.info) {
23
+ _logger.info = wrap(logger.info);
24
+ }
25
+ if (logger.log) {
26
+ _logger.log = wrap(logger.log);
27
+ }
28
+ if (logger.trace) {
29
+ _logger.trace = wrap(logger.trace);
30
+ }
31
+ if (logger.verbose) {
32
+ _logger.verbose = wrap(logger.verbose);
33
+ }
34
+ if (logger.warning) {
35
+ _logger.warning = wrap(logger.warning);
36
+ }
20
37
  }
21
38
  export function getLogger() {
22
39
  return _logger;
@@ -405,6 +405,7 @@ function computeFullScreenStyle(zIndex) {
405
405
  "z-index": zIndex.toString(radix),
406
406
  top: "0",
407
407
  left: "0",
408
+ "pointer-events": "none",
408
409
  };
409
410
  for (const key in style) {
410
411
  const value = style[key];
@@ -0,0 +1,5 @@
1
+ import { tsParticles } from "./index.js";
2
+ const globalObject = globalThis;
3
+ globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {};
4
+ globalObject.tsParticles = tsParticles;
5
+ export * from "./index.js";
package/browser/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { initEngine } from "./initEngine.js";
2
2
  const tsParticles = initEngine();
3
- globalThis.tsParticles = tsParticles;
4
3
  export * from "./exports.js";
5
4
  export { tsParticles };
@@ -272,7 +272,7 @@ export class CanvasManager {
272
272
  this.initBackground();
273
273
  const pointerEvents = this._pointerEvents;
274
274
  element.style.pointerEvents = pointerEvents;
275
- element.setAttribute("pointer-events", pointerEvents);
275
+ element.style.setProperty("pointer-events", pointerEvents);
276
276
  this._safeMutationObserver(observer => {
277
277
  if (!(element instanceof Node)) {
278
278
  return;
@@ -20,9 +20,16 @@ async function getDataFromUrl(data) {
20
20
  const getCanvasFromContainer = (domContainer) => {
21
21
  const documentSafe = safeDocument();
22
22
  let canvasEl;
23
- if (domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag) {
23
+ const isCanvas = domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag;
24
+ if (isCanvas) {
24
25
  canvasEl = domContainer;
25
26
  canvasEl.dataset[generatedAttribute] ??= generatedFalse;
27
+ if (canvasEl.dataset[generatedAttribute] === generatedTrue) {
28
+ canvasEl.style.width ||= fullPercent;
29
+ canvasEl.style.height ||= fullPercent;
30
+ canvasEl.style.pointerEvents = "none";
31
+ canvasEl.style.setProperty("pointer-events", "none");
32
+ }
26
33
  }
27
34
  else {
28
35
  const existingCanvases = domContainer.getElementsByTagName(canvasTag), foundCanvas = existingCanvases[canvasFirstIndex];
@@ -35,9 +42,11 @@ const getCanvasFromContainer = (domContainer) => {
35
42
  canvasEl.dataset[generatedAttribute] = generatedTrue;
36
43
  domContainer.appendChild(canvasEl);
37
44
  }
45
+ canvasEl.style.width ||= fullPercent;
46
+ canvasEl.style.height ||= fullPercent;
47
+ canvasEl.style.pointerEvents = "none";
48
+ canvasEl.style.setProperty("pointer-events", "none");
38
49
  }
39
- canvasEl.style.width ||= fullPercent;
40
- canvasEl.style.height ||= fullPercent;
41
50
  return canvasEl;
42
51
  }, getDomContainer = (id, source) => {
43
52
  const documentSafe = safeDocument();
@@ -60,7 +69,7 @@ export class Engine {
60
69
  return this._domArray;
61
70
  }
62
71
  get version() {
63
- return "4.0.0-beta.12";
72
+ return "4.0.0-beta.15";
64
73
  }
65
74
  addEventListener(type, listener) {
66
75
  this._eventDispatcher.addEventListener(type, listener);
@@ -49,6 +49,7 @@ export class Particle {
49
49
  initialPosition;
50
50
  initialVelocity;
51
51
  isRotating;
52
+ justWarped;
52
53
  lastPathTime;
53
54
  misplaced;
54
55
  moveCenter;
@@ -168,6 +169,7 @@ export class Particle {
168
169
  const container = this._container;
169
170
  this.id = id;
170
171
  this.group = group;
172
+ this.justWarped = false;
171
173
  this.effectClose = true;
172
174
  this.shapeClose = true;
173
175
  this.pathRotation = false;
@@ -7,8 +7,6 @@ export class Fill {
7
7
  opacity;
8
8
  constructor() {
9
9
  this.enable = true;
10
- this.color = new AnimatableColor();
11
- this.color.value = "#fff";
12
10
  this.opacity = 1;
13
11
  }
14
12
  load(data) {
@@ -1,13 +1,18 @@
1
+ import { AnimatableColor } from "../AnimatableColor.js";
1
2
  import { Fill } from "./Fill.js";
2
3
  import { Stroke } from "./Stroke.js";
3
4
  import { isNull } from "../../../Utils/TypeUtils.js";
4
5
  export class Paint {
6
+ color;
5
7
  fill;
6
8
  stroke;
7
9
  load(data) {
8
10
  if (isNull(data)) {
9
11
  return;
10
12
  }
13
+ if (data.color !== undefined) {
14
+ this.color = AnimatableColor.create(this.color, data.color);
15
+ }
11
16
  if (data.fill !== undefined) {
12
17
  this.fill ??= new Fill();
13
18
  this.fill.load(data.fill);
@@ -1,6 +1,8 @@
1
1
  import { deepExtend, executeOnSingleOrMultiple } from "../../../Utils/Utils.js";
2
2
  import { isArray, isNull } from "../../../Utils/TypeUtils.js";
3
+ import { AnimatableColor } from "../AnimatableColor.js";
3
4
  import { Effect } from "./Effect/Effect.js";
5
+ import { Fill } from "./Fill.js";
4
6
  import { Move } from "./Move/Move.js";
5
7
  import { Opacity } from "./Opacity/Opacity.js";
6
8
  import { Paint } from "./Paint.js";
@@ -34,6 +36,10 @@ export class ParticlesOptions {
34
36
  this.number = new ParticlesNumber();
35
37
  this.opacity = new Opacity();
36
38
  this.paint = new Paint();
39
+ this.paint.color = new AnimatableColor();
40
+ this.paint.color.value = "#fff";
41
+ this.paint.fill = new Fill();
42
+ this.paint.fill.enable = true;
37
43
  this.reduceDuplicates = false;
38
44
  this.shape = new Shape();
39
45
  this.size = new Size();
@@ -68,11 +74,20 @@ export class ParticlesOptions {
68
74
  this.opacity.load(data.opacity);
69
75
  const paintToLoad = data.paint;
70
76
  if (paintToLoad) {
71
- this.paint = executeOnSingleOrMultiple(paintToLoad, t => {
72
- const tmp = new Paint();
73
- tmp.load(t);
74
- return tmp;
75
- });
77
+ if (isArray(paintToLoad)) {
78
+ this.paint = executeOnSingleOrMultiple(paintToLoad, t => {
79
+ const tmp = new Paint();
80
+ tmp.load(t);
81
+ return tmp;
82
+ });
83
+ }
84
+ else if (isArray(this.paint)) {
85
+ this.paint = new Paint();
86
+ this.paint.load(paintToLoad);
87
+ }
88
+ else {
89
+ this.paint.load(paintToLoad);
90
+ }
76
91
  }
77
92
  this.shape.load(data.shape);
78
93
  this.size.load(data.size);
@@ -1,22 +1,39 @@
1
1
  const errorPrefix = "tsParticles - Error";
2
- const _logger = {
3
- debug: console.debug,
4
- error: (message, optionalParams) => {
5
- console.error(`${errorPrefix} - ${message}`, optionalParams);
2
+ const wrap = (fn) => (...args) => {
3
+ fn(...args);
4
+ }, _logger = {
5
+ debug: wrap(console.debug),
6
+ error: (message, ...optionalParams) => {
7
+ console.error(`${errorPrefix} - ${message}`, ...optionalParams);
6
8
  },
7
- info: console.info,
8
- log: console.log,
9
- trace: console.trace,
10
- verbose: console.log,
11
- warning: console.warn,
9
+ info: wrap(console.info),
10
+ log: wrap(console.log),
11
+ trace: wrap(console.trace),
12
+ verbose: wrap(console.log),
13
+ warning: wrap(console.warn),
12
14
  };
13
15
  export function setLogger(logger) {
14
- _logger.debug = logger.debug;
15
- _logger.error = logger.error;
16
- _logger.info = logger.info;
17
- _logger.log = logger.log;
18
- _logger.verbose = logger.verbose;
19
- _logger.warning = logger.warning;
16
+ if (logger.debug) {
17
+ _logger.debug = wrap(logger.debug);
18
+ }
19
+ if (logger.error) {
20
+ _logger.error = wrap(logger.error);
21
+ }
22
+ if (logger.info) {
23
+ _logger.info = wrap(logger.info);
24
+ }
25
+ if (logger.log) {
26
+ _logger.log = wrap(logger.log);
27
+ }
28
+ if (logger.trace) {
29
+ _logger.trace = wrap(logger.trace);
30
+ }
31
+ if (logger.verbose) {
32
+ _logger.verbose = wrap(logger.verbose);
33
+ }
34
+ if (logger.warning) {
35
+ _logger.warning = wrap(logger.warning);
36
+ }
20
37
  }
21
38
  export function getLogger() {
22
39
  return _logger;
@@ -405,6 +405,7 @@ function computeFullScreenStyle(zIndex) {
405
405
  "z-index": zIndex.toString(radix),
406
406
  top: "0",
407
407
  left: "0",
408
+ "pointer-events": "none",
408
409
  };
409
410
  for (const key in style) {
410
411
  const value = style[key];
package/cjs/browser.js ADDED
@@ -0,0 +1,5 @@
1
+ import { tsParticles } from "./index.js";
2
+ const globalObject = globalThis;
3
+ globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {};
4
+ globalObject.tsParticles = tsParticles;
5
+ export * from "./index.js";
package/cjs/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { initEngine } from "./initEngine.js";
2
2
  const tsParticles = initEngine();
3
- globalThis.tsParticles = tsParticles;
4
3
  export * from "./exports.js";
5
4
  export { tsParticles };
@@ -272,7 +272,7 @@ export class CanvasManager {
272
272
  this.initBackground();
273
273
  const pointerEvents = this._pointerEvents;
274
274
  element.style.pointerEvents = pointerEvents;
275
- element.setAttribute("pointer-events", pointerEvents);
275
+ element.style.setProperty("pointer-events", pointerEvents);
276
276
  this._safeMutationObserver(observer => {
277
277
  if (!(element instanceof Node)) {
278
278
  return;
@@ -20,9 +20,16 @@ async function getDataFromUrl(data) {
20
20
  const getCanvasFromContainer = (domContainer) => {
21
21
  const documentSafe = safeDocument();
22
22
  let canvasEl;
23
- if (domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag) {
23
+ const isCanvas = domContainer instanceof HTMLCanvasElement || domContainer.tagName.toLowerCase() === canvasTag;
24
+ if (isCanvas) {
24
25
  canvasEl = domContainer;
25
26
  canvasEl.dataset[generatedAttribute] ??= generatedFalse;
27
+ if (canvasEl.dataset[generatedAttribute] === generatedTrue) {
28
+ canvasEl.style.width ||= fullPercent;
29
+ canvasEl.style.height ||= fullPercent;
30
+ canvasEl.style.pointerEvents = "none";
31
+ canvasEl.style.setProperty("pointer-events", "none");
32
+ }
26
33
  }
27
34
  else {
28
35
  const existingCanvases = domContainer.getElementsByTagName(canvasTag), foundCanvas = existingCanvases[canvasFirstIndex];
@@ -35,9 +42,11 @@ const getCanvasFromContainer = (domContainer) => {
35
42
  canvasEl.dataset[generatedAttribute] = generatedTrue;
36
43
  domContainer.appendChild(canvasEl);
37
44
  }
45
+ canvasEl.style.width ||= fullPercent;
46
+ canvasEl.style.height ||= fullPercent;
47
+ canvasEl.style.pointerEvents = "none";
48
+ canvasEl.style.setProperty("pointer-events", "none");
38
49
  }
39
- canvasEl.style.width ||= fullPercent;
40
- canvasEl.style.height ||= fullPercent;
41
50
  return canvasEl;
42
51
  }, getDomContainer = (id, source) => {
43
52
  const documentSafe = safeDocument();
@@ -60,7 +69,7 @@ export class Engine {
60
69
  return this._domArray;
61
70
  }
62
71
  get version() {
63
- return "4.0.0-beta.12";
72
+ return "4.0.0-beta.15";
64
73
  }
65
74
  addEventListener(type, listener) {
66
75
  this._eventDispatcher.addEventListener(type, listener);
@@ -49,6 +49,7 @@ export class Particle {
49
49
  initialPosition;
50
50
  initialVelocity;
51
51
  isRotating;
52
+ justWarped;
52
53
  lastPathTime;
53
54
  misplaced;
54
55
  moveCenter;
@@ -168,6 +169,7 @@ export class Particle {
168
169
  const container = this._container;
169
170
  this.id = id;
170
171
  this.group = group;
172
+ this.justWarped = false;
171
173
  this.effectClose = true;
172
174
  this.shapeClose = true;
173
175
  this.pathRotation = false;
@@ -7,8 +7,6 @@ export class Fill {
7
7
  opacity;
8
8
  constructor() {
9
9
  this.enable = true;
10
- this.color = new AnimatableColor();
11
- this.color.value = "#fff";
12
10
  this.opacity = 1;
13
11
  }
14
12
  load(data) {
@@ -1,13 +1,18 @@
1
+ import { AnimatableColor } from "../AnimatableColor.js";
1
2
  import { Fill } from "./Fill.js";
2
3
  import { Stroke } from "./Stroke.js";
3
4
  import { isNull } from "../../../Utils/TypeUtils.js";
4
5
  export class Paint {
6
+ color;
5
7
  fill;
6
8
  stroke;
7
9
  load(data) {
8
10
  if (isNull(data)) {
9
11
  return;
10
12
  }
13
+ if (data.color !== undefined) {
14
+ this.color = AnimatableColor.create(this.color, data.color);
15
+ }
11
16
  if (data.fill !== undefined) {
12
17
  this.fill ??= new Fill();
13
18
  this.fill.load(data.fill);
@@ -1,6 +1,8 @@
1
1
  import { deepExtend, executeOnSingleOrMultiple } from "../../../Utils/Utils.js";
2
2
  import { isArray, isNull } from "../../../Utils/TypeUtils.js";
3
+ import { AnimatableColor } from "../AnimatableColor.js";
3
4
  import { Effect } from "./Effect/Effect.js";
5
+ import { Fill } from "./Fill.js";
4
6
  import { Move } from "./Move/Move.js";
5
7
  import { Opacity } from "./Opacity/Opacity.js";
6
8
  import { Paint } from "./Paint.js";
@@ -34,6 +36,10 @@ export class ParticlesOptions {
34
36
  this.number = new ParticlesNumber();
35
37
  this.opacity = new Opacity();
36
38
  this.paint = new Paint();
39
+ this.paint.color = new AnimatableColor();
40
+ this.paint.color.value = "#fff";
41
+ this.paint.fill = new Fill();
42
+ this.paint.fill.enable = true;
37
43
  this.reduceDuplicates = false;
38
44
  this.shape = new Shape();
39
45
  this.size = new Size();
@@ -68,11 +74,20 @@ export class ParticlesOptions {
68
74
  this.opacity.load(data.opacity);
69
75
  const paintToLoad = data.paint;
70
76
  if (paintToLoad) {
71
- this.paint = executeOnSingleOrMultiple(paintToLoad, t => {
72
- const tmp = new Paint();
73
- tmp.load(t);
74
- return tmp;
75
- });
77
+ if (isArray(paintToLoad)) {
78
+ this.paint = executeOnSingleOrMultiple(paintToLoad, t => {
79
+ const tmp = new Paint();
80
+ tmp.load(t);
81
+ return tmp;
82
+ });
83
+ }
84
+ else if (isArray(this.paint)) {
85
+ this.paint = new Paint();
86
+ this.paint.load(paintToLoad);
87
+ }
88
+ else {
89
+ this.paint.load(paintToLoad);
90
+ }
76
91
  }
77
92
  this.shape.load(data.shape);
78
93
  this.size.load(data.size);
@@ -1,22 +1,39 @@
1
1
  const errorPrefix = "tsParticles - Error";
2
- const _logger = {
3
- debug: console.debug,
4
- error: (message, optionalParams) => {
5
- console.error(`${errorPrefix} - ${message}`, optionalParams);
2
+ const wrap = (fn) => (...args) => {
3
+ fn(...args);
4
+ }, _logger = {
5
+ debug: wrap(console.debug),
6
+ error: (message, ...optionalParams) => {
7
+ console.error(`${errorPrefix} - ${message}`, ...optionalParams);
6
8
  },
7
- info: console.info,
8
- log: console.log,
9
- trace: console.trace,
10
- verbose: console.log,
11
- warning: console.warn,
9
+ info: wrap(console.info),
10
+ log: wrap(console.log),
11
+ trace: wrap(console.trace),
12
+ verbose: wrap(console.log),
13
+ warning: wrap(console.warn),
12
14
  };
13
15
  export function setLogger(logger) {
14
- _logger.debug = logger.debug;
15
- _logger.error = logger.error;
16
- _logger.info = logger.info;
17
- _logger.log = logger.log;
18
- _logger.verbose = logger.verbose;
19
- _logger.warning = logger.warning;
16
+ if (logger.debug) {
17
+ _logger.debug = wrap(logger.debug);
18
+ }
19
+ if (logger.error) {
20
+ _logger.error = wrap(logger.error);
21
+ }
22
+ if (logger.info) {
23
+ _logger.info = wrap(logger.info);
24
+ }
25
+ if (logger.log) {
26
+ _logger.log = wrap(logger.log);
27
+ }
28
+ if (logger.trace) {
29
+ _logger.trace = wrap(logger.trace);
30
+ }
31
+ if (logger.verbose) {
32
+ _logger.verbose = wrap(logger.verbose);
33
+ }
34
+ if (logger.warning) {
35
+ _logger.warning = wrap(logger.warning);
36
+ }
20
37
  }
21
38
  export function getLogger() {
22
39
  return _logger;
@@ -405,6 +405,7 @@ function computeFullScreenStyle(zIndex) {
405
405
  "z-index": zIndex.toString(radix),
406
406
  top: "0",
407
407
  left: "0",
408
+ "pointer-events": "none",
408
409
  };
409
410
  for (const key in style) {
410
411
  const value = style[key];
package/esm/browser.js ADDED
@@ -0,0 +1,5 @@
1
+ import { tsParticles } from "./index.js";
2
+ const globalObject = globalThis;
3
+ globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {};
4
+ globalObject.tsParticles = tsParticles;
5
+ export * from "./index.js";