@tsparticles/plugin-absorbers 4.0.0-beta.0 → 4.0.0-beta.10

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 (59) hide show
  1. package/523.min.js +1 -0
  2. package/{162.min.js → 547.min.js} +1 -1
  3. package/{166.min.js → 555.min.js} +1 -1
  4. package/{497.min.js → 564.min.js} +1 -1
  5. package/63.min.js +1 -0
  6. package/986.min.js +1 -0
  7. package/README.md +29 -2
  8. package/browser/AbsorberInstance.js +18 -24
  9. package/browser/AbsorbersInstancesManager.js +4 -4
  10. package/browser/getAbsorbersInstancesManager.js +15 -0
  11. package/browser/index.js +4 -14
  12. package/browser/interaction.js +14 -0
  13. package/browser/plugin.js +10 -0
  14. package/cjs/AbsorberInstance.js +18 -24
  15. package/cjs/AbsorbersInstancesManager.js +4 -4
  16. package/cjs/getAbsorbersInstancesManager.js +15 -0
  17. package/cjs/index.js +4 -14
  18. package/cjs/interaction.js +14 -0
  19. package/cjs/plugin.js +10 -0
  20. package/dist_browser_AbsorberInstance_js.js +2 -2
  21. package/dist_browser_AbsorbersInstancesManager_js.js +2 -2
  22. package/dist_browser_AbsorbersInteractor_js.js +1 -1
  23. package/dist_browser_AbsorbersPluginInstance_js.js +1 -1
  24. package/dist_browser_AbsorbersPlugin_js.js +1 -1
  25. package/dist_browser_getAbsorbersInstancesManager_js.js +30 -0
  26. package/esm/AbsorberInstance.js +18 -24
  27. package/esm/AbsorbersInstancesManager.js +4 -4
  28. package/esm/getAbsorbersInstancesManager.js +15 -0
  29. package/esm/index.js +4 -14
  30. package/esm/interaction.js +14 -0
  31. package/esm/plugin.js +10 -0
  32. package/package.json +24 -6
  33. package/report.html +84 -29
  34. package/tsparticles.plugin.absorbers.js +22 -2
  35. package/tsparticles.plugin.absorbers.min.js +2 -2
  36. package/types/AbsorberInstance.d.ts +4 -4
  37. package/types/AbsorbersInstancesManager.d.ts +3 -3
  38. package/types/AbsorbersPluginInstance.d.ts +2 -2
  39. package/types/getAbsorbersInstancesManager.d.ts +3 -0
  40. package/types/interaction.d.ts +3 -0
  41. package/types/plugin.d.ts +3 -0
  42. package/49.min.js +0 -1
  43. package/598.min.js +0 -1
  44. package/umd/AbsorberContainer.js +0 -12
  45. package/umd/AbsorberInstance.js +0 -217
  46. package/umd/AbsorbersInstancesManager.js +0 -97
  47. package/umd/AbsorbersInteractor.js +0 -109
  48. package/umd/AbsorbersPlugin.js +0 -86
  49. package/umd/AbsorbersPluginInstance.js +0 -56
  50. package/umd/Options/Classes/Absorber.js +0 -74
  51. package/umd/Options/Classes/AbsorberLife.js +0 -41
  52. package/umd/Options/Classes/AbsorberSize.js +0 -41
  53. package/umd/Options/Classes/AbsorberSizeLimit.js +0 -34
  54. package/umd/Options/Interfaces/IAbsorber.js +0 -12
  55. package/umd/Options/Interfaces/IAbsorberLife.js +0 -12
  56. package/umd/Options/Interfaces/IAbsorberSize.js +0 -12
  57. package/umd/Options/Interfaces/IAbsorberSizeLimit.js +0 -12
  58. package/umd/index.js +0 -63
  59. package/umd/types.js +0 -12
@@ -0,0 +1,30 @@
1
+ /*!
2
+ * Author : Matteo Bruni
3
+ * MIT license: https://opensource.org/licenses/MIT
4
+ * Demo / Generator : https://particles.js.org/
5
+ * GitHub : https://www.github.com/matteobruni/tsparticles
6
+ * How to use? : Check the GitHub README
7
+ * v4.0.0-beta.10
8
+ */
9
+ "use strict";
10
+ /*
11
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
12
+ * This devtool is neither made for production nor for readable output files.
13
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
14
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
15
+ * or disable the default devtool with "devtool: false".
16
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
17
+ */
18
+ (this["webpackChunk_tsparticles_plugin_absorbers"] = this["webpackChunk_tsparticles_plugin_absorbers"] || []).push([["dist_browser_getAbsorbersInstancesManager_js"],{
19
+
20
+ /***/ "./dist/browser/getAbsorbersInstancesManager.js"
21
+ /*!******************************************************!*\
22
+ !*** ./dist/browser/getAbsorbersInstancesManager.js ***!
23
+ \******************************************************/
24
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25
+
26
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getAbsorbersInstancesManager: () => (/* binding */ getAbsorbersInstancesManager)\n/* harmony export */ });\nconst instancesManagers = new WeakMap();\nfunction getAbsorbersInstancesManager(e) {\n const pluginManager = e.pluginManager;\n let manager = instancesManagers.get(pluginManager);\n if (!manager) {\n manager = __webpack_require__.e(/*! import() */ \"dist_browser_AbsorbersInstancesManager_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./AbsorbersInstancesManager.js */ \"./dist/browser/AbsorbersInstancesManager.js\")).then(({ AbsorbersInstancesManager })=>new AbsorbersInstancesManager(pluginManager)).catch((error)=>{\n instancesManagers.delete(pluginManager);\n throw error;\n });\n instancesManagers.set(pluginManager, manager);\n }\n return manager;\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-absorbers/./dist/browser/getAbsorbersInstancesManager.js?\n}");
27
+
28
+ /***/ }
29
+
30
+ }]);
@@ -1,6 +1,6 @@
1
- import { RotateDirection, Vector, calcPositionOrRandomFromSize, calcPositionOrRandomFromSizeRanged, doublePI, getDistance, getDistances, getRandom, getRangeValue, getStyleFromRgb, isPointInside, millisecondsToSeconds, originPoint, percentDenominator, rangeColorToRgb, } from "@tsparticles/engine";
1
+ import { RotateDirection, Vector, calcPositionOrRandomFromSize, calcPositionOrRandomFromSizeRanged, doublePI, getDistance, getDistances, getRandom, getRangeMax, getRangeValue, getStyleFromRgb, half, identity, isPointInside, millisecondsToSeconds, originPoint, rangeColorToRgb, } from "@tsparticles/engine";
2
2
  import { Absorber } from "./Options/Classes/Absorber.js";
3
- const squareExp = 2, absorbFactor = 0.033, minOrbitLength = 0, minRadius = 0, minMass = 0, minAngle = 0, maxAngle = doublePI, minVelocity = 0, defaultLifeDelay = 0, minLifeCount = 0, defaultSpawnDelay = 0, defaultLifeCount = -1;
3
+ const squareExp = 2, absorbFactor = 0.033, minOrbitLength = 0, minRadius = 0, minMass = 0, minAngle = 0, maxAngle = doublePI, maxDegreeAngle = 360, angleIncrementFactor = identity / maxDegreeAngle, minVelocity = 0, defaultLifeDelay = 0, minLifeCount = 0, defaultSpawnDelay = 0, defaultLifeCount = -1;
4
4
  export class AbsorberInstance {
5
5
  color;
6
6
  limit;
@@ -14,15 +14,15 @@ export class AbsorberInstance {
14
14
  _currentDuration;
15
15
  _currentSpawnDelay;
16
16
  _duration;
17
- _engine;
18
17
  _firstSpawn;
19
18
  _immortal;
20
19
  _lifeCount;
20
+ _pluginManager;
21
21
  _spawnDelay;
22
22
  initialPosition;
23
- constructor(engine, container, options, position) {
23
+ constructor(pluginManager, container, options, position) {
24
24
  this._container = container;
25
- this._engine = engine;
25
+ this._pluginManager = pluginManager;
26
26
  this._currentDuration = 0;
27
27
  this._currentSpawnDelay = 0;
28
28
  this.initialPosition = position ? Vector.create(position.x, position.y) : undefined;
@@ -42,7 +42,7 @@ export class AbsorberInstance {
42
42
  radius: limit.radius * container.retina.pixelRatio * container.retina.reduceFactor,
43
43
  mass: limit.mass,
44
44
  };
45
- this.color = rangeColorToRgb(this._engine, this.options.color) ?? {
45
+ this.color = rangeColorToRgb(this._pluginManager, this.options.color) ?? {
46
46
  b: 0,
47
47
  g: 0,
48
48
  r: 0,
@@ -68,14 +68,14 @@ export class AbsorberInstance {
68
68
  }
69
69
  else {
70
70
  particle.needsNewPosition = true;
71
- this._updateParticlePosition(particle, v);
71
+ this._updateParticlePosition(particle, delta, v);
72
72
  }
73
73
  }
74
74
  else {
75
75
  if (options.destroy) {
76
76
  particle.size.value -= sizeFactor;
77
77
  }
78
- this._updateParticlePosition(particle, v);
78
+ this._updateParticlePosition(particle, delta, v);
79
79
  }
80
80
  if (this.limit.radius <= minRadius || this.size < this.limit.radius) {
81
81
  this.size += sizeFactor;
@@ -85,7 +85,7 @@ export class AbsorberInstance {
85
85
  }
86
86
  }
87
87
  else {
88
- this._updateParticlePosition(particle, v);
88
+ this._updateParticlePosition(particle, delta, v);
89
89
  }
90
90
  }
91
91
  draw(context) {
@@ -147,7 +147,7 @@ export class AbsorberInstance {
147
147
  this._duration = duration * millisecondsToSeconds;
148
148
  }
149
149
  };
150
- _updateParticlePosition = (particle, v) => {
150
+ _updateParticlePosition = (particle, delta, v) => {
151
151
  if (particle.destroyed) {
152
152
  return;
153
153
  }
@@ -173,22 +173,16 @@ export class AbsorberInstance {
173
173
  particle.velocity.x >= minVelocity ? RotateDirection.clockwise : RotateDirection.counterClockwise;
174
174
  const orbitRadius = particle.absorberOrbit.length, orbitAngle = particle.absorberOrbit.angle, orbitDirection = particle.absorberOrbitDirection;
175
175
  particle.velocity.setTo(Vector.origin);
176
- const updateFunc = {
177
- x: orbitDirection === RotateDirection.clockwise ? Math.cos : Math.sin,
178
- y: orbitDirection === RotateDirection.clockwise ? Math.sin : Math.cos,
179
- };
180
- particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);
181
- particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);
182
- particle.absorberOrbit.length -= v.length;
183
- particle.absorberOrbit.angle +=
184
- (((particle.retina.moveSpeed ?? minVelocity) * container.retina.pixelRatio) / percentDenominator) *
185
- container.retina.reduceFactor;
176
+ const maxSize = getRangeMax(particle.options.size.value) * container.retina.pixelRatio, sizeFactor = particle.options.move.size ? particle.getRadius() / maxSize : identity, deltaFactor = delta.factor || identity, baseSpeed = particle.retina.moveSpeed, moveSpeed = baseSpeed * sizeFactor * deltaFactor * half;
177
+ particle.position.x = this.position.x + orbitRadius * Math.cos(orbitAngle);
178
+ particle.position.y =
179
+ this.position.y +
180
+ orbitRadius * (orbitDirection === RotateDirection.clockwise ? identity : -identity) * Math.sin(orbitAngle);
181
+ particle.absorberOrbit.length = Math.max(minOrbitLength, particle.absorberOrbit.length - v.length);
182
+ particle.absorberOrbit.angle += moveSpeed * angleIncrementFactor * container.retina.reduceFactor;
186
183
  }
187
184
  else {
188
- const addV = Vector.origin;
189
- addV.length = v.length;
190
- addV.angle = v.angle;
191
- particle.velocity.addTo(addV);
185
+ particle.velocity.addTo(v);
192
186
  }
193
187
  };
194
188
  play = () => {
@@ -2,13 +2,13 @@ import { isNumber } from "@tsparticles/engine";
2
2
  const defaultIndex = 0;
3
3
  export class AbsorbersInstancesManager {
4
4
  _containerArrays;
5
- _engine;
6
- constructor(engine) {
5
+ _pluginManager;
6
+ constructor(pluginManager) {
7
+ this._pluginManager = pluginManager;
7
8
  this._containerArrays = new Map();
8
- this._engine = engine;
9
9
  }
10
10
  async addAbsorber(container, options, position) {
11
- const { AbsorberInstance } = await import("./AbsorberInstance.js"), absorber = new AbsorberInstance(this._engine, container, options, position), array = this.getArray(container);
11
+ const { AbsorberInstance } = await import("./AbsorberInstance.js"), absorber = new AbsorberInstance(this._pluginManager, container, options, position), array = this.getArray(container);
12
12
  array.push(absorber);
13
13
  return absorber;
14
14
  }
@@ -0,0 +1,15 @@
1
+ const instancesManagers = new WeakMap();
2
+ export function getAbsorbersInstancesManager(e) {
3
+ const pluginManager = e.pluginManager;
4
+ let manager = instancesManagers.get(pluginManager);
5
+ if (!manager) {
6
+ manager = import("./AbsorbersInstancesManager.js")
7
+ .then(({ AbsorbersInstancesManager }) => new AbsorbersInstancesManager(pluginManager))
8
+ .catch((error) => {
9
+ instancesManagers.delete(pluginManager);
10
+ throw error;
11
+ });
12
+ instancesManagers.set(pluginManager, manager);
13
+ }
14
+ return manager;
15
+ }
package/esm/index.js CHANGED
@@ -1,16 +1,6 @@
1
+ import { loadAbsorbersInteraction } from "./interaction.js";
2
+ import { loadAbsorbersPluginSimple } from "./plugin.js";
1
3
  export async function loadAbsorbersPlugin(engine) {
2
- engine.checkVersion("4.0.0-beta.0");
3
- await engine.register(async (e) => {
4
- const [{ ensureInteractivityPluginLoaded }, { AbsorbersInstancesManager }, { AbsorbersPlugin },] = await Promise.all([
5
- import("@tsparticles/plugin-interactivity"),
6
- import("./AbsorbersInstancesManager.js"),
7
- import("./AbsorbersPlugin.js"),
8
- ]), instancesManager = new AbsorbersInstancesManager(e);
9
- ensureInteractivityPluginLoaded(e);
10
- e.addPlugin(new AbsorbersPlugin(instancesManager));
11
- e.addInteractor?.("externalAbsorbers", async (container) => {
12
- const { AbsorbersInteractor } = await import("./AbsorbersInteractor.js");
13
- return new AbsorbersInteractor(container, instancesManager);
14
- });
15
- });
4
+ await loadAbsorbersPluginSimple(engine);
5
+ await loadAbsorbersInteraction(engine);
16
6
  }
@@ -0,0 +1,14 @@
1
+ export async function loadAbsorbersInteraction(engine) {
2
+ engine.checkVersion("4.0.0-beta.10");
3
+ await engine.pluginManager.register(async (e) => {
4
+ const [{ ensureInteractivityPluginLoaded }, { getAbsorbersInstancesManager },] = await Promise.all([
5
+ import("@tsparticles/plugin-interactivity"),
6
+ import("./getAbsorbersInstancesManager.js"),
7
+ ]), pluginManager = e.pluginManager, instancesManager = await getAbsorbersInstancesManager(e);
8
+ ensureInteractivityPluginLoaded(e);
9
+ pluginManager.addInteractor?.("externalAbsorbers", async (container) => {
10
+ const { AbsorbersInteractor } = await import("./AbsorbersInteractor.js");
11
+ return new AbsorbersInteractor(container, instancesManager);
12
+ });
13
+ });
14
+ }
package/esm/plugin.js ADDED
@@ -0,0 +1,10 @@
1
+ export async function loadAbsorbersPluginSimple(engine) {
2
+ engine.checkVersion("4.0.0-beta.10");
3
+ await engine.pluginManager.register(async (e) => {
4
+ const [{ getAbsorbersInstancesManager }, { AbsorbersPlugin },] = await Promise.all([
5
+ import("./getAbsorbersInstancesManager.js"),
6
+ import("./AbsorbersPlugin.js"),
7
+ ]), pluginManager = e.pluginManager, instancesManager = await getAbsorbersInstancesManager(e);
8
+ pluginManager.addPlugin(new AbsorbersPlugin(instancesManager));
9
+ });
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/plugin-absorbers",
3
- "version": "4.0.0-beta.0",
3
+ "version": "4.0.0-beta.10",
4
4
  "description": "tsParticles absorbers plugin",
5
5
  "homepage": "https://particles.js.org",
6
6
  "repository": {
@@ -80,14 +80,32 @@
80
80
  "browser": "./browser/index.js",
81
81
  "import": "./esm/index.js",
82
82
  "require": "./cjs/index.js",
83
- "umd": "./umd/index.js",
84
- "default": "./cjs/index.js"
83
+ "default": "./esm/index.js"
84
+ },
85
+ "./interaction": {
86
+ "types": "./types/interaction.d.ts",
87
+ "browser": "./browser/interaction.js",
88
+ "import": "./esm/interaction.js",
89
+ "require": "./cjs/interaction.js",
90
+ "default": "./esm/interaction.js"
91
+ },
92
+ "./plugin": {
93
+ "types": "./types/plugin.d.ts",
94
+ "browser": "./browser/plugin.js",
95
+ "import": "./esm/plugin.js",
96
+ "require": "./cjs/plugin.js",
97
+ "default": "./esm/plugin.js"
85
98
  },
86
99
  "./package.json": "./package.json"
87
100
  },
88
- "dependencies": {
89
- "@tsparticles/engine": "4.0.0-beta.0",
90
- "@tsparticles/plugin-interactivity": "4.0.0-beta.0"
101
+ "peerDependencies": {
102
+ "@tsparticles/engine": "4.0.0-beta.10",
103
+ "@tsparticles/plugin-interactivity": "4.0.0-beta.10"
104
+ },
105
+ "peerDependenciesMeta": {
106
+ "@tsparticles/plugin-interactivity": {
107
+ "optional": true
108
+ }
91
109
  },
92
110
  "publishConfig": {
93
111
  "access": "public"