@tsparticles/plugin-emitters 4.0.0-beta.0 → 4.0.0-beta.1

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.
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v4.0.0-beta.0
7
+ * v4.0.0-beta.1
8
8
  */
9
9
  /*
10
10
  * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
@@ -74,7 +74,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
74
74
  \*******************************/
75
75
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
76
76
 
77
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EmitterClickMode: () => (/* reexport safe */ _Enums_EmitterClickMode_js__WEBPACK_IMPORTED_MODULE_1__.EmitterClickMode),\n/* harmony export */ EmitterShapeBase: () => (/* reexport safe */ _EmitterShapeBase_js__WEBPACK_IMPORTED_MODULE_0__.EmitterShapeBase),\n/* harmony export */ ensureEmittersPluginLoaded: () => (/* binding */ ensureEmittersPluginLoaded),\n/* harmony export */ loadEmittersPlugin: () => (/* binding */ loadEmittersPlugin)\n/* harmony export */ });\n/* harmony import */ var _EmitterShapeBase_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EmitterShapeBase.js */ \"./dist/browser/EmitterShapeBase.js\");\n/* harmony import */ var _Enums_EmitterClickMode_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Enums/EmitterClickMode.js */ \"./dist/browser/Enums/EmitterClickMode.js\");\nasync function loadEmittersPlugin(engine) {\n engine.checkVersion(\"4.0.0-beta.0\");\n await engine.register(async (e)=>{\n const [{ ensureInteractivityPluginLoaded }, { ShapeManager }, { EmittersInstancesManager }, { EmittersPlugin }] = await Promise.all([\n Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(__webpack_require__, /*! @tsparticles/plugin-interactivity */ \"@tsparticles/plugin-interactivity\", 19)),\n __webpack_require__.e(/*! import() */ \"dist_browser_ShapeManager_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./ShapeManager.js */ \"./dist/browser/ShapeManager.js\")),\n __webpack_require__.e(/*! import() */ \"dist_browser_EmittersInstancesManager_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./EmittersInstancesManager.js */ \"./dist/browser/EmittersInstancesManager.js\")),\n __webpack_require__.e(/*! import() */ \"dist_browser_EmittersPlugin_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./EmittersPlugin.js */ \"./dist/browser/EmittersPlugin.js\"))\n ]), instancesManager = new EmittersInstancesManager(e);\n ensureInteractivityPluginLoaded(e);\n e.emitterShapeManager ??= new ShapeManager();\n e.addEmitterShapeGenerator ??= (name, generator)=>{\n e.emitterShapeManager?.addShapeGenerator(name, generator);\n };\n e.addPlugin(new EmittersPlugin(instancesManager));\n e.addInteractor?.(\"externalEmitters\", async (container)=>{\n const { EmittersInteractor } = await __webpack_require__.e(/*! import() */ \"dist_browser_EmittersInteractor_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./EmittersInteractor.js */ \"./dist/browser/EmittersInteractor.js\"));\n return new EmittersInteractor(instancesManager, container);\n });\n });\n}\nfunction ensureEmittersPluginLoaded(e) {\n if (!e.addEmitterShapeGenerator) {\n throw new Error(\"tsParticles Emitters Plugin is not loaded\");\n }\n}\n\n\n\n\n//# sourceURL=webpack://@tsparticles/plugin-emitters/./dist/browser/index.js?\n}");
77
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EmitterClickMode: () => (/* reexport safe */ _Enums_EmitterClickMode_js__WEBPACK_IMPORTED_MODULE_1__.EmitterClickMode),\n/* harmony export */ EmitterShapeBase: () => (/* reexport safe */ _EmitterShapeBase_js__WEBPACK_IMPORTED_MODULE_0__.EmitterShapeBase),\n/* harmony export */ ensureEmittersPluginLoaded: () => (/* binding */ ensureEmittersPluginLoaded),\n/* harmony export */ loadEmittersPlugin: () => (/* binding */ loadEmittersPlugin)\n/* harmony export */ });\n/* harmony import */ var _EmitterShapeBase_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EmitterShapeBase.js */ \"./dist/browser/EmitterShapeBase.js\");\n/* harmony import */ var _Enums_EmitterClickMode_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Enums/EmitterClickMode.js */ \"./dist/browser/Enums/EmitterClickMode.js\");\nasync function loadEmittersPlugin(engine) {\n engine.checkVersion(\"4.0.0-beta.1\");\n await engine.pluginManager.register(async (e)=>{\n const [{ ensureInteractivityPluginLoaded }, { ShapeManager }, { EmittersInstancesManager }, { EmittersPlugin }] = await Promise.all([\n Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(__webpack_require__, /*! @tsparticles/plugin-interactivity */ \"@tsparticles/plugin-interactivity\", 19)),\n __webpack_require__.e(/*! import() */ \"dist_browser_ShapeManager_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./ShapeManager.js */ \"./dist/browser/ShapeManager.js\")),\n __webpack_require__.e(/*! import() */ \"dist_browser_EmittersInstancesManager_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./EmittersInstancesManager.js */ \"./dist/browser/EmittersInstancesManager.js\")),\n __webpack_require__.e(/*! import() */ \"dist_browser_EmittersPlugin_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./EmittersPlugin.js */ \"./dist/browser/EmittersPlugin.js\"))\n ]), pluginManager = e.pluginManager, instancesManager = new EmittersInstancesManager(pluginManager);\n ensureInteractivityPluginLoaded(e);\n pluginManager.emitterShapeManager ??= new ShapeManager();\n pluginManager.addEmitterShapeGenerator ??= (name, generator)=>{\n pluginManager.emitterShapeManager?.addShapeGenerator(name, generator);\n };\n pluginManager.addPlugin(new EmittersPlugin(instancesManager));\n pluginManager.addInteractor?.(\"externalEmitters\", async (container)=>{\n const { EmittersInteractor } = await __webpack_require__.e(/*! import() */ \"dist_browser_EmittersInteractor_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./EmittersInteractor.js */ \"./dist/browser/EmittersInteractor.js\"));\n return new EmittersInteractor(instancesManager, container);\n });\n });\n}\nfunction ensureEmittersPluginLoaded(e) {\n if (!e.pluginManager.addEmitterShapeGenerator) {\n throw new Error(\"tsParticles Emitters Plugin is not loaded\");\n }\n}\n\n\n\n\n//# sourceURL=webpack://@tsparticles/plugin-emitters/./dist/browser/index.js?\n}");
78
78
 
79
79
  /***/ }
80
80
 
@@ -1,2 +1,2 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/plugin-interactivity"),require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/plugin-interactivity","@tsparticles/engine"],t);else{var r="object"==typeof exports?t(require("@tsparticles/plugin-interactivity"),require("@tsparticles/engine")):t(e.window,e.window);for(var i in r)("object"==typeof exports?exports:e)[i]=r[i]}}(this,(e,t)=>(()=>{"use strict";var r,i,o,n,a={303(e){e.exports=t},702(t){t.exports=e}},s={};function l(e){var t=s[e];if(void 0!==t)return t.exports;var r=s[e]={exports:{}};return a[e](r,r.exports,l),r.exports}l.m=a,p=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.t=function(e,t){if(1&t&&(e=this(e)),8&t||"object"==typeof e&&e&&(4&t&&e.__esModule||16&t&&"function"==typeof e.then))return e;var r=Object.create(null);l.r(r);var i={};c=c||[null,p({}),p([]),p(p)];for(var o=2&t&&e;("object"==typeof o||"function"==typeof o)&&!~c.indexOf(o);o=p(o))Object.getOwnPropertyNames(o).forEach(t=>i[t]=()=>e[t]);return i.default=()=>e,l.d(r,i),r},l.d=(e,t)=>{for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,r)=>(l.f[r](e,t),t),[])),l.u=e=>""+e+".min.js",l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),u={},l.l=(e,t,r,i)=>{if(u[e])return void u[e].push(t);if(void 0!==r)for(var o,n,a=document.getElementsByTagName("script"),s=0;s<a.length;s++){var c=a[s];if(c.getAttribute("src")==e||c.getAttribute("data-webpack")=="@tsparticles/plugin-emitters:"+r){o=c;break}}o||(n=!0,(o=document.createElement("script")).charset="utf-8",l.nc&&o.setAttribute("nonce",l.nc),o.setAttribute("data-webpack","@tsparticles/plugin-emitters:"+r),o.src=e),u[e]=[t];var p=(t,r)=>{o.onerror=o.onload=null,clearTimeout(d);var i=u[e];if(delete u[e],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach(e=>e(r)),t)return t(r)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=p.bind(null,o.onerror),o.onload=p.bind(null,o.onload),n&&document.head.appendChild(o)},l.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.g.importScripts&&(d=l.g.location+"");var c,p,u,d,f=l.g.document;if(!d&&f&&(f.currentScript&&"SCRIPT"===f.currentScript.tagName.toUpperCase()&&(d=f.currentScript.src),!d)){var h=f.getElementsByTagName("script");if(h.length)for(var m=h.length-1;m>-1&&(!d||!/^http(s?):/.test(d));)d=h[m--].src}if(!d)throw Error("Automatic publicPath is not supported in this browser");l.p=d=d.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r={833:0},l.f.j=(e,t)=>{var i=l.o(r,e)?r[e]:void 0;if(0!==i)if(i)t.push(i[2]);else{var o=new Promise((t,o)=>i=r[e]=[t,o]);t.push(i[2]=o);var n=l.p+l.u(e),a=Error();l.l(n,t=>{if(l.o(r,e)&&(0!==(i=r[e])&&(r[e]=void 0),i)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;a.message="Loading chunk "+e+` failed.
2
- (`+o+": "+n+")",a.name="ChunkLoadError",a.type=o,a.request=n,i[1](a)}},"chunk-"+e,e)}},i=(e,t)=>{var i,o,[n,a,s]=t,c=0;if(n.some(e=>0!==r[e])){for(i in a)l.o(a,i)&&(l.m[i]=a[i]);s&&s(l)}for(e&&e(t);c<n.length;c++)o=n[c],l.o(r,o)&&r[o]&&r[o][0](),r[o]=0},(o=this.webpackChunk_tsparticles_plugin_emitters=this.webpackChunk_tsparticles_plugin_emitters||[]).forEach(i.bind(null,0)),o.push=i.bind(null,o.push.bind(o));var b={};l.r(b),l.d(b,{EmitterClickMode:()=>n,EmitterShapeBase:()=>g,ensureEmittersPluginLoaded:()=>v,loadEmittersPlugin:()=>y});class g{fill;options;position;size;constructor(e,t,r,i){this.position=e,this.size=t,this.fill=r,this.options=i}resize(e,t){this.position=e,this.size=t}}async function y(e){e.checkVersion("4.0.0-beta.0"),await e.register(async e=>{let[{ensureInteractivityPluginLoaded:t},{ShapeManager:r},{EmittersInstancesManager:i},{EmittersPlugin:o}]=await Promise.all([Promise.resolve().then(l.t.bind(l,702,19)),l.e(772).then(l.bind(l,772)),l.e(784).then(l.bind(l,784)),l.e(588).then(l.bind(l,588))]),n=new i(e);t(e),e.emitterShapeManager??=new r,e.addEmitterShapeGenerator??=(t,r)=>{e.emitterShapeManager?.addShapeGenerator(t,r)},e.addPlugin(new o(n)),e.addInteractor?.("externalEmitters",async e=>{let{EmittersInteractor:t}=await l.e(526).then(l.bind(l,526));return new t(n,e)})})}function v(e){if(!e.addEmitterShapeGenerator)throw Error("tsParticles Emitters Plugin is not loaded")}return(n||(n={})).emitter="emitter",b})());
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/plugin-interactivity"),require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/plugin-interactivity","@tsparticles/engine"],t);else{var r="object"==typeof exports?t(require("@tsparticles/plugin-interactivity"),require("@tsparticles/engine")):t(e.window,e.window);for(var i in r)("object"==typeof exports?exports:e)[i]=r[i]}}(this,(e,t)=>(()=>{"use strict";var r,i,n,o,a={303(e){e.exports=t},702(t){t.exports=e}},s={};function l(e){var t=s[e];if(void 0!==t)return t.exports;var r=s[e]={exports:{}};return a[e](r,r.exports,l),r.exports}l.m=a,c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.t=function(e,t){if(1&t&&(e=this(e)),8&t||"object"==typeof e&&e&&(4&t&&e.__esModule||16&t&&"function"==typeof e.then))return e;var r=Object.create(null);l.r(r);var i={};p=p||[null,c({}),c([]),c(c)];for(var n=2&t&&e;("object"==typeof n||"function"==typeof n)&&!~p.indexOf(n);n=c(n))Object.getOwnPropertyNames(n).forEach(t=>i[t]=()=>e[t]);return i.default=()=>e,l.d(r,i),r},l.d=(e,t)=>{for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,r)=>(l.f[r](e,t),t),[])),l.u=e=>""+e+".min.js",l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),u={},l.l=(e,t,r,i)=>{if(u[e])return void u[e].push(t);if(void 0!==r)for(var n,o,a=document.getElementsByTagName("script"),s=0;s<a.length;s++){var p=a[s];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")=="@tsparticles/plugin-emitters:"+r){n=p;break}}n||(o=!0,(n=document.createElement("script")).charset="utf-8",l.nc&&n.setAttribute("nonce",l.nc),n.setAttribute("data-webpack","@tsparticles/plugin-emitters:"+r),n.src=e),u[e]=[t];var c=(t,r)=>{n.onerror=n.onload=null,clearTimeout(d);var i=u[e];if(delete u[e],n.parentNode&&n.parentNode.removeChild(n),i&&i.forEach(e=>e(r)),t)return t(r)},d=setTimeout(c.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=c.bind(null,n.onerror),n.onload=c.bind(null,n.onload),o&&document.head.appendChild(n)},l.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.g.importScripts&&(d=l.g.location+"");var p,c,u,d,f=l.g.document;if(!d&&f&&(f.currentScript&&"SCRIPT"===f.currentScript.tagName.toUpperCase()&&(d=f.currentScript.src),!d)){var h=f.getElementsByTagName("script");if(h.length)for(var g=h.length-1;g>-1&&(!d||!/^http(s?):/.test(d));)d=h[g--].src}if(!d)throw Error("Automatic publicPath is not supported in this browser");l.p=d=d.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r={833:0},l.f.j=(e,t)=>{var i=l.o(r,e)?r[e]:void 0;if(0!==i)if(i)t.push(i[2]);else{var n=new Promise((t,n)=>i=r[e]=[t,n]);t.push(i[2]=n);var o=l.p+l.u(e),a=Error();l.l(o,t=>{if(l.o(r,e)&&(0!==(i=r[e])&&(r[e]=void 0),i)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;a.message="Loading chunk "+e+` failed.
2
+ (`+n+": "+o+")",a.name="ChunkLoadError",a.type=n,a.request=o,i[1](a)}},"chunk-"+e,e)}},i=(e,t)=>{var i,n,[o,a,s]=t,p=0;if(o.some(e=>0!==r[e])){for(i in a)l.o(a,i)&&(l.m[i]=a[i]);s&&s(l)}for(e&&e(t);p<o.length;p++)n=o[p],l.o(r,n)&&r[n]&&r[n][0](),r[n]=0},(n=this.webpackChunk_tsparticles_plugin_emitters=this.webpackChunk_tsparticles_plugin_emitters||[]).forEach(i.bind(null,0)),n.push=i.bind(null,n.push.bind(n));var m={};l.r(m),l.d(m,{EmitterClickMode:()=>o,EmitterShapeBase:()=>b,ensureEmittersPluginLoaded:()=>v,loadEmittersPlugin:()=>y});class b{fill;options;position;size;constructor(e,t,r,i){this.position=e,this.size=t,this.fill=r,this.options=i}resize(e,t){this.position=e,this.size=t}}async function y(e){e.checkVersion("4.0.0-beta.1"),await e.pluginManager.register(async e=>{let[{ensureInteractivityPluginLoaded:t},{ShapeManager:r},{EmittersInstancesManager:i},{EmittersPlugin:n}]=await Promise.all([Promise.resolve().then(l.t.bind(l,702,19)),l.e(592).then(l.bind(l,592)),l.e(764).then(l.bind(l,764)),l.e(392).then(l.bind(l,392))]),o=e.pluginManager,a=new i(o);t(e),o.emitterShapeManager??=new r,o.addEmitterShapeGenerator??=(e,t)=>{o.emitterShapeManager?.addShapeGenerator(e,t)},o.addPlugin(new n(a)),o.addInteractor?.("externalEmitters",async e=>{let{EmittersInteractor:t}=await l.e(414).then(l.bind(l,414));return new t(a,e)})})}function v(e){if(!e.pluginManager.addEmitterShapeGenerator)throw Error("tsParticles Emitters Plugin is not loaded")}return(o||(o={})).emitter="emitter",m})());
@@ -1,10 +1,8 @@
1
1
  import { type Container, type ICoordinates, type IDelta, type IDimension, type IHsl, type RecursivePartial } from "@tsparticles/engine";
2
2
  import { Emitter } from "./Options/Classes/Emitter.js";
3
- import type { EmittersEngine } from "./EmittersEngine.js";
3
+ import type { EmittersPluginManager } from "./EmittersEngine.js";
4
4
  import type { IEmitter } from "./Options/Interfaces/IEmitter.js";
5
5
  export declare class EmitterInstance {
6
- private readonly container;
7
- private readonly removeCallback;
8
6
  fill: boolean;
9
7
  readonly name?: string;
10
8
  options: Emitter;
@@ -16,12 +14,12 @@ export declare class EmitterInstance {
16
14
  spawnStrokeColor?: IHsl;
17
15
  spawnStrokeOpacity?: number;
18
16
  spawnStrokeWidth?: number;
17
+ private readonly _container;
19
18
  private _currentDuration;
20
19
  private _currentEmitDelay;
21
20
  private _currentSpawnDelay;
22
21
  private _duration?;
23
22
  private _emitDelay?;
24
- private readonly _engine;
25
23
  private _firstSpawn;
26
24
  private readonly _immortal;
27
25
  private readonly _initialPosition?;
@@ -29,12 +27,14 @@ export declare class EmitterInstance {
29
27
  private _mutationObserver?;
30
28
  private readonly _particlesOptions;
31
29
  private _paused;
30
+ private readonly _pluginManager;
31
+ private readonly _removeCallback;
32
32
  private _resizeObserver?;
33
33
  private readonly _shape?;
34
34
  private _size;
35
35
  private _spawnDelay?;
36
36
  private _startParticlesAdded;
37
- constructor(engine: EmittersEngine, container: Container, removeCallback: (emitter: EmitterInstance) => void, options: Emitter | RecursivePartial<IEmitter>, position?: ICoordinates);
37
+ constructor(pluginManager: EmittersPluginManager, container: Container, removeCallback: (emitter: EmitterInstance) => void, options: Emitter | RecursivePartial<IEmitter>, position?: ICoordinates);
38
38
  externalPause(): void;
39
39
  externalPlay(): void;
40
40
  init(): Promise<void>;
@@ -1,7 +1,10 @@
1
+ import type { InteractivityEngine, InteractivityPluginManager } from "@tsparticles/plugin-interactivity";
1
2
  import type { IEmitterShapeGenerator } from "./IEmitterShapeGenerator.js";
2
- import type { InteractivityEngine } from "@tsparticles/plugin-interactivity";
3
3
  import type { ShapeManager } from "./ShapeManager.js";
4
- export type EmittersEngine = InteractivityEngine & {
4
+ export type EmittersPluginManager = InteractivityPluginManager & {
5
5
  addEmitterShapeGenerator?: (name: string, shape: IEmitterShapeGenerator) => void;
6
6
  emitterShapeManager?: ShapeManager;
7
7
  };
8
+ export type EmittersEngine = InteractivityEngine & {
9
+ pluginManager: EmittersPluginManager;
10
+ };
@@ -1,12 +1,12 @@
1
1
  import { type ICoordinates, type RecursivePartial } from "@tsparticles/engine";
2
2
  import type { EmitterContainer } from "./EmitterContainer.js";
3
3
  import type { EmitterInstance } from "./EmitterInstance.js";
4
- import type { EmittersEngine } from "./EmittersEngine.js";
4
+ import type { EmittersPluginManager } from "./EmittersEngine.js";
5
5
  import type { IEmitter } from "./Options/Interfaces/IEmitter.js";
6
6
  export declare class EmittersInstancesManager {
7
7
  private readonly _containerArrays;
8
- private readonly _engine;
9
- constructor(engine: EmittersEngine);
8
+ private readonly _pluginManager;
9
+ constructor(pluginManager: EmittersPluginManager);
10
10
  addEmitter(container: EmitterContainer, options: RecursivePartial<IEmitter>, position?: ICoordinates): Promise<EmitterInstance>;
11
11
  clear(container: EmitterContainer): void;
12
12
  getArray(container: EmitterContainer): EmitterInstance[];
@@ -27,8 +27,6 @@
27
27
  particlesOptions.stroke.width = width;
28
28
  }
29
29
  class EmitterInstance {
30
- container;
31
- removeCallback;
32
30
  fill;
33
31
  name;
34
32
  options;
@@ -40,12 +38,12 @@
40
38
  spawnStrokeColor;
41
39
  spawnStrokeOpacity;
42
40
  spawnStrokeWidth;
41
+ _container;
43
42
  _currentDuration;
44
43
  _currentEmitDelay;
45
44
  _currentSpawnDelay;
46
45
  _duration;
47
46
  _emitDelay;
48
- _engine;
49
47
  _firstSpawn;
50
48
  _immortal;
51
49
  _initialPosition;
@@ -53,15 +51,17 @@
53
51
  _mutationObserver;
54
52
  _particlesOptions;
55
53
  _paused;
54
+ _pluginManager;
55
+ _removeCallback;
56
56
  _resizeObserver;
57
57
  _shape;
58
58
  _size;
59
59
  _spawnDelay;
60
60
  _startParticlesAdded;
61
- constructor(engine, container, removeCallback, options, position) {
62
- this.container = container;
63
- this.removeCallback = removeCallback;
64
- this._engine = engine;
61
+ constructor(pluginManager, container, removeCallback, options, position) {
62
+ this._pluginManager = pluginManager;
63
+ this._container = container;
64
+ this._removeCallback = removeCallback;
65
65
  this._currentDuration = 0;
66
66
  this._currentEmitDelay = 0;
67
67
  this._currentSpawnDelay = 0;
@@ -86,15 +86,15 @@
86
86
  particlesOptions.move ??= {};
87
87
  particlesOptions.move.direction ??= this.options.direction;
88
88
  if (this.options.spawn.fill?.color) {
89
- this.spawnFillColor = (0, engine_1.rangeColorToHsl)(this._engine, this.options.spawn.fill.color);
89
+ this.spawnFillColor = (0, engine_1.rangeColorToHsl)(this._pluginManager, this.options.spawn.fill.color);
90
90
  }
91
91
  if (this.options.spawn.stroke?.color) {
92
- this.spawnStrokeColor = (0, engine_1.rangeColorToHsl)(this._engine, this.options.spawn.stroke.color);
92
+ this.spawnStrokeColor = (0, engine_1.rangeColorToHsl)(this._pluginManager, this.options.spawn.stroke.color);
93
93
  }
94
94
  this._paused = !this.options.autoPlay;
95
95
  this._particlesOptions = particlesOptions;
96
96
  this._size = this._calcSize();
97
- this.size = (0, engine_1.getSize)(this._size, this.container.canvas.size);
97
+ this.size = (0, engine_1.getSize)(this._size, this._container.canvas.size);
98
98
  this._lifeCount = this.options.life.count ?? defaultLifeCount;
99
99
  this._immortal = this._lifeCount <= minLifeCount;
100
100
  if (this.options.domId) {
@@ -113,15 +113,12 @@
113
113
  this._resizeObserver.observe(element);
114
114
  }
115
115
  }
116
- const shapeOptions = this.options.shape, shapeGenerator = this._engine.emitterShapeManager?.getShapeGenerator(shapeOptions.type);
116
+ const shapeOptions = this.options.shape, shapeGenerator = this._pluginManager.emitterShapeManager?.getShapeGenerator(shapeOptions.type);
117
117
  if (shapeGenerator) {
118
- this._shape = shapeGenerator.generate(this.container, this.position, this.size, this.fill, shapeOptions.options);
118
+ this._shape = shapeGenerator.generate(this._container, this.position, this.size, this.fill, shapeOptions.options);
119
119
  }
120
- this._engine.dispatchEvent("emitterCreated", {
121
- container,
122
- data: {
123
- emitter: this,
124
- },
120
+ this._container.dispatchEvent("emitterCreated", {
121
+ emitter: this,
125
122
  });
126
123
  this.play();
127
124
  }
@@ -150,7 +147,7 @@
150
147
  (this._firstSpawn || this._currentSpawnDelay >= (this._spawnDelay ?? defaultSpawnDelay)))) {
151
148
  return;
152
149
  }
153
- const container = this.container;
150
+ const container = this._container;
154
151
  if (this._emitDelay === undefined) {
155
152
  const delay = (0, engine_1.getRangeValue)(this.options.rate.delay);
156
153
  this._emitDelay = container.retina.reduceFactor
@@ -162,7 +159,7 @@
162
159
  }
163
160
  }
164
161
  resize() {
165
- const initialPosition = this._initialPosition, container = this.container;
162
+ const initialPosition = this._initialPosition, container = this._container;
166
163
  this.position =
167
164
  initialPosition && (0, engine_1.isPointInside)(initialPosition, container.canvas.size, engine_1.Vector.origin)
168
165
  ? initialPosition
@@ -175,7 +172,7 @@
175
172
  if (this._paused) {
176
173
  return;
177
174
  }
178
- const container = this.container;
175
+ const container = this._container;
179
176
  if (this._firstSpawn) {
180
177
  this._firstSpawn = false;
181
178
  this._currentSpawnDelay = this._spawnDelay ?? defaultSpawnDelay;
@@ -213,9 +210,7 @@
213
210
  if (this._spawnDelay !== undefined) {
214
211
  this._currentSpawnDelay += delta.value;
215
212
  if (this._currentSpawnDelay >= this._spawnDelay) {
216
- this._engine.dispatchEvent("emitterPlay", {
217
- container: this.container,
218
- });
213
+ this._container.dispatchEvent("emitterPlay");
219
214
  this.play();
220
215
  this._currentSpawnDelay -= this._spawnDelay;
221
216
  delete this._spawnDelay;
@@ -230,7 +225,7 @@
230
225
  }
231
226
  }
232
227
  _calcPosition() {
233
- const container = this.container;
228
+ const container = this._container;
234
229
  if (this.options.domId) {
235
230
  const element = (0, engine_1.safeDocument)().getElementById(this.options.domId);
236
231
  if (element) {
@@ -247,7 +242,7 @@
247
242
  });
248
243
  }
249
244
  _calcSize() {
250
- const container = this.container;
245
+ const container = this._container;
251
246
  if (this.options.domId) {
252
247
  const element = (0, engine_1.safeDocument)().getElementById(this.options.domId);
253
248
  if (element) {
@@ -275,12 +270,9 @@
275
270
  this._mutationObserver = undefined;
276
271
  this._resizeObserver?.disconnect();
277
272
  this._resizeObserver = undefined;
278
- this.removeCallback(this);
279
- this._engine.dispatchEvent("emitterDestroyed", {
280
- container: this.container,
281
- data: {
282
- emitter: this,
283
- },
273
+ this._removeCallback(this);
274
+ this._container.dispatchEvent("emitterDestroyed", {
275
+ emitter: this,
284
276
  });
285
277
  };
286
278
  _emit() {
@@ -298,7 +290,7 @@
298
290
  ? engine_1.defaultOpacity
299
291
  : (0, engine_1.getRangeValue)(this.options.spawn.stroke.opacity), strokeWidth = this.options.spawn.stroke?.width === undefined
300
292
  ? defaultStrokeWidth
301
- : (0, engine_1.getRangeValue)(this.options.spawn.stroke.width), reduceFactor = this.container.retina.reduceFactor, needsFillColorAnimation = !!fillHslAnimation, needsStrokeColorAnimation = !!strokeHslAnimation, needsShapeData = !!this._shape, needsColorAnimation = needsFillColorAnimation || needsStrokeColorAnimation, needsCopy = needsColorAnimation || needsShapeData, maxValues = needsColorAnimation ? { h: engine_1.hMax, s: engine_1.sMax, l: engine_1.lMax } : null, shapeOptions = this.options.shape;
293
+ : (0, engine_1.getRangeValue)(this.options.spawn.stroke.width), reduceFactor = this._container.retina.reduceFactor, needsFillColorAnimation = !!fillHslAnimation, needsStrokeColorAnimation = !!strokeHslAnimation, needsShapeData = !!this._shape, needsColorAnimation = needsFillColorAnimation || needsStrokeColorAnimation, needsCopy = needsColorAnimation || needsShapeData, maxValues = needsColorAnimation ? { h: engine_1.hMax, s: engine_1.sMax, l: engine_1.lMax } : null, shapeOptions = this.options.shape;
302
294
  for (let i = 0; i < quantity * reduceFactor; i++) {
303
295
  const particlesOptions = needsCopy
304
296
  ? (0, engine_1.deepExtend)({}, singleParticlesOptions)
@@ -338,7 +330,7 @@
338
330
  }
339
331
  }
340
332
  if (position) {
341
- this.container.particles.addParticle(position, particlesOptions);
333
+ this._container.particles.addParticle(position, particlesOptions);
342
334
  }
343
335
  }
344
336
  }
@@ -352,7 +344,7 @@
352
344
  }
353
345
  };
354
346
  _setColorAnimation = (animation, initValue, maxValue, factor = defaultColorAnimationFactor) => {
355
- const container = this.container;
347
+ const container = this._container;
356
348
  if (!animation.enable) {
357
349
  return initValue;
358
350
  }
@@ -49,15 +49,15 @@ var __importStar = (this && this.__importStar) || (function () {
49
49
  const defaultIndex = 0;
50
50
  class EmittersInstancesManager {
51
51
  _containerArrays;
52
- _engine;
53
- constructor(engine) {
52
+ _pluginManager;
53
+ constructor(pluginManager) {
54
54
  this._containerArrays = new Map();
55
- this._engine = engine;
55
+ this._pluginManager = pluginManager;
56
56
  }
57
57
  async addEmitter(container, options, position) {
58
58
  const emitterOptions = new Emitter_js_1.Emitter();
59
59
  emitterOptions.load(options);
60
- const { EmitterInstance } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./EmitterInstance.js"))) : new Promise((resolve_1, reject_1) => { require(["./EmitterInstance.js"], resolve_1, reject_1); }).then(__importStar)), emitter = new EmitterInstance(this._engine, container, (emitter) => {
60
+ const { EmitterInstance } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./EmitterInstance.js"))) : new Promise((resolve_1, reject_1) => { require(["./EmitterInstance.js"], resolve_1, reject_1); }).then(__importStar)), emitter = new EmitterInstance(this._pluginManager, container, (emitter) => {
61
61
  this.removeEmitter(container, emitter);
62
62
  }, emitterOptions, position);
63
63
  await emitter.init();
package/umd/index.js CHANGED
@@ -49,28 +49,28 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
49
49
  exports.loadEmittersPlugin = loadEmittersPlugin;
50
50
  exports.ensureEmittersPluginLoaded = ensureEmittersPluginLoaded;
51
51
  async function loadEmittersPlugin(engine) {
52
- engine.checkVersion("4.0.0-beta.0");
53
- await engine.register(async (e) => {
52
+ engine.checkVersion("4.0.0-beta.1");
53
+ await engine.pluginManager.register(async (e) => {
54
54
  const [{ ensureInteractivityPluginLoaded }, { ShapeManager }, { EmittersInstancesManager }, { EmittersPlugin },] = await Promise.all([
55
55
  __syncRequire ? Promise.resolve().then(() => __importStar(require("@tsparticles/plugin-interactivity"))) : new Promise((resolve_1, reject_1) => { require(["@tsparticles/plugin-interactivity"], resolve_1, reject_1); }).then(__importStar),
56
56
  __syncRequire ? Promise.resolve().then(() => __importStar(require("./ShapeManager.js"))) : new Promise((resolve_2, reject_2) => { require(["./ShapeManager.js"], resolve_2, reject_2); }).then(__importStar),
57
57
  __syncRequire ? Promise.resolve().then(() => __importStar(require("./EmittersInstancesManager.js"))) : new Promise((resolve_3, reject_3) => { require(["./EmittersInstancesManager.js"], resolve_3, reject_3); }).then(__importStar),
58
58
  __syncRequire ? Promise.resolve().then(() => __importStar(require("./EmittersPlugin.js"))) : new Promise((resolve_4, reject_4) => { require(["./EmittersPlugin.js"], resolve_4, reject_4); }).then(__importStar),
59
- ]), instancesManager = new EmittersInstancesManager(e);
59
+ ]), pluginManager = e.pluginManager, instancesManager = new EmittersInstancesManager(pluginManager);
60
60
  ensureInteractivityPluginLoaded(e);
61
- e.emitterShapeManager ??= new ShapeManager();
62
- e.addEmitterShapeGenerator ??= (name, generator) => {
63
- e.emitterShapeManager?.addShapeGenerator(name, generator);
61
+ pluginManager.emitterShapeManager ??= new ShapeManager();
62
+ pluginManager.addEmitterShapeGenerator ??= (name, generator) => {
63
+ pluginManager.emitterShapeManager?.addShapeGenerator(name, generator);
64
64
  };
65
- e.addPlugin(new EmittersPlugin(instancesManager));
66
- e.addInteractor?.("externalEmitters", async (container) => {
65
+ pluginManager.addPlugin(new EmittersPlugin(instancesManager));
66
+ pluginManager.addInteractor?.("externalEmitters", async (container) => {
67
67
  const { EmittersInteractor } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./EmittersInteractor.js"))) : new Promise((resolve_5, reject_5) => { require(["./EmittersInteractor.js"], resolve_5, reject_5); }).then(__importStar));
68
68
  return new EmittersInteractor(instancesManager, container);
69
69
  });
70
70
  });
71
71
  }
72
72
  function ensureEmittersPluginLoaded(e) {
73
- if (!e.addEmitterShapeGenerator) {
73
+ if (!e.pluginManager.addEmitterShapeGenerator) {
74
74
  throw new Error("tsParticles Emitters Plugin is not loaded");
75
75
  }
76
76
  }
package/784.min.js DELETED
@@ -1 +0,0 @@
1
- "use strict";(this.webpackChunk_tsparticles_plugin_emitters=this.webpackChunk_tsparticles_plugin_emitters||[]).push([[784],{784(t,i,e){e.r(i),e.d(i,{EmittersInstancesManager:()=>a});var s=e(303),o=e(982);class a{_containerArrays;_engine;constructor(t){this._containerArrays=new Map,this._engine=t}async addEmitter(t,i,s){let a=new o.v;a.load(i);let{EmitterInstance:l}=await e.e(795).then(e.bind(e,795)),r=new l(this._engine,t,i=>{this.removeEmitter(t,i)},a,s);return await r.init(),this.getArray(t).push(r),r}clear(t){this.initContainer(t),this._containerArrays.set(t,[])}getArray(t){this.initContainer(t);let i=this._containerArrays.get(t);return i||(i=[],this._containerArrays.set(t,i)),i}initContainer(t){this._containerArrays.has(t)||(this._containerArrays.set(t,[]),t.getEmitter=i=>{let e=this.getArray(t);return void 0===i||(0,s.isNumber)(i)?e[i??0]:e.find(t=>t.name===i)},t.addEmitter=async(i,e)=>this.addEmitter(t,i,e),t.removeEmitter=i=>{let e=t.getEmitter?.(i);e&&this.removeEmitter(t,e)},t.playEmitter=i=>{let e=t.getEmitter?.(i);e&&e.externalPlay()},t.pauseEmitter=i=>{let e=t.getEmitter?.(i);e&&e.externalPause()})}removeEmitter(t,i){let e=this.getArray(t).indexOf(i);e>=0&&this.getArray(t).splice(e,1)}}},982(t,i,e){e.d(i,{v:()=>d});var s=e(303);class o{count;delay;duration;wait;constructor(){this.wait=!1}load(t){(0,s.isNull)(t)||(void 0!==t.count&&(this.count=t.count),void 0!==t.delay&&(this.delay=(0,s.setRangeValue)(t.delay)),void 0!==t.duration&&(this.duration=(0,s.setRangeValue)(t.duration)),void 0!==t.wait&&(this.wait=t.wait))}}class a{delay;quantity;constructor(){this.quantity=1,this.delay=.1}load(t){(0,s.isNull)(t)||(void 0!==t.quantity&&(this.quantity=(0,s.setRangeValue)(t.quantity)),void 0!==t.delay&&(this.delay=(0,s.setRangeValue)(t.delay)))}}class l{color;opacity;constructor(){this.color=!1,this.opacity=!1}load(t){(0,s.isNull)(t)||(void 0!==t.color&&(this.color=t.color),void 0!==t.opacity&&(this.opacity=t.opacity))}}class r{options;replace;type;constructor(){this.options={},this.replace=new l,this.type="square"}load(t){(0,s.isNull)(t)||(void 0!==t.options&&(this.options=(0,s.deepExtend)({},t.options??{})),this.replace.load(t.replace),void 0!==t.type&&(this.type=t.type))}}var n=e(747);class h{fill;stroke;load(t){!(0,s.isNull)(t)&&(t.fill&&(this.fill??=new s.Fill,this.fill.load(t.fill)),t.stroke&&(this.stroke??=new s.Stroke,this.stroke.load(t.stroke)))}}class d{autoPlay;direction;domId;fill;life;name;particles;position;rate;shape;size;spawn;spawnFillColor;spawnStrokeColor;startCount;constructor(){this.autoPlay=!0,this.fill=!0,this.life=new o,this.rate=new a,this.shape=new r,this.spawn=new h,this.startCount=0}load(t){(0,s.isNull)(t)||(void 0!==t.autoPlay&&(this.autoPlay=t.autoPlay),void 0!==t.size&&(this.size??=new n.G,this.size.load(t.size)),void 0!==t.direction&&(this.direction=t.direction),this.domId=t.domId,void 0!==t.fill&&(this.fill=t.fill),this.life.load(t.life),this.name=t.name,this.particles=(0,s.executeOnSingleOrMultiple)(t.particles,t=>(0,s.deepExtend)({},t)),this.rate.load(t.rate),this.shape.load(t.shape),this.spawn.load(t.spawn),void 0!==t.position&&(this.position={},void 0!==t.position.x&&(this.position.x=(0,s.setRangeValue)(t.position.x)),void 0!==t.position.y&&(this.position.y=(0,s.setRangeValue)(t.position.y))),void 0!==t.spawnFillColor&&(this.spawnFillColor??=new s.AnimatableColor,this.spawnFillColor.load(t.spawnFillColor)),void 0!==t.spawnStrokeColor&&(this.spawnStrokeColor??=new s.AnimatableColor,this.spawnStrokeColor.load(t.spawnStrokeColor)),void 0!==t.startCount&&(this.startCount=t.startCount))}}},747(t,i,e){e.d(i,{G:()=>o});var s=e(303);class o{height;mode;width;constructor(){this.mode=s.PixelMode.percent,this.height=0,this.width=0}load(t){(0,s.isNull)(t)||(void 0!==t.mode&&(this.mode=t.mode),void 0!==t.height&&(this.height=t.height),void 0!==t.width&&(this.width=t.width))}}}}]);
package/795.min.js DELETED
@@ -1 +0,0 @@
1
- "use strict";(this.webpackChunk_tsparticles_plugin_emitters=this.webpackChunk_tsparticles_plugin_emitters||[]).push([[795],{795(t,i,e){e.d(i,{EmitterInstance:()=>r});var s=e(303),o=e(982),n=e(747);let a=1;function l(t,i,e,o){t.fill=new s.Fill,t.fill.color=s.AnimatableColor.create(void 0,{value:i}),t.fill.enable=o,t.fill.opacity=e}class r{container;removeCallback;fill;name;options;position;size;spawnFillColor;spawnFillEnabled;spawnFillOpacity;spawnStrokeColor;spawnStrokeOpacity;spawnStrokeWidth;_currentDuration;_currentEmitDelay;_currentSpawnDelay;_duration;_emitDelay;_engine;_firstSpawn;_immortal;_initialPosition;_lifeCount;_mutationObserver;_particlesOptions;_paused;_resizeObserver;_shape;_size;_spawnDelay;_startParticlesAdded;constructor(t,i,e,n,a){this.container=i,this.removeCallback=e,this._engine=t,this._currentDuration=0,this._currentEmitDelay=0,this._currentSpawnDelay=0,this._initialPosition=a,n instanceof o.v?this.options=n:(this.options=new o.v,this.options.load(n)),this._spawnDelay=i.retina.reduceFactor?(0,s.getRangeValue)(this.options.life.delay??0)*s.millisecondsToSeconds/i.retina.reduceFactor:1/0,this.position=this._initialPosition??this._calcPosition(),this.name=this.options.name,this.fill=this.options.fill,this._firstSpawn=!this.options.life.wait,this._startParticlesAdded=!1;const l=(0,s.deepExtend)({},this.options.particles);if(l.move??={},l.move.direction??=this.options.direction,this.options.spawn.fill?.color&&(this.spawnFillColor=(0,s.rangeColorToHsl)(this._engine,this.options.spawn.fill.color)),this.options.spawn.stroke?.color&&(this.spawnStrokeColor=(0,s.rangeColorToHsl)(this._engine,this.options.spawn.stroke.color)),this._paused=!this.options.autoPlay,this._particlesOptions=l,this._size=this._calcSize(),this.size=(0,s.getSize)(this._size,this.container.canvas.size),this._lifeCount=this.options.life.count??-1,this._immortal=this._lifeCount<=0,this.options.domId){const t=(0,s.safeDocument)().getElementById(this.options.domId);t&&(this._mutationObserver=new MutationObserver(()=>{this.resize()}),this._resizeObserver=new ResizeObserver(()=>{this.resize()}),this._mutationObserver.observe(t,{attributes:!0,attributeFilter:["style","width","height"]}),this._resizeObserver.observe(t))}const r=this.options.shape,h=this._engine.emitterShapeManager?.getShapeGenerator(r.type);h&&(this._shape=h.generate(this.container,this.position,this.size,this.fill,r.options)),this._engine.dispatchEvent("emitterCreated",{container:i,data:{emitter:this}}),this.play()}externalPause(){this._paused=!0,this.pause()}externalPlay(){this._paused=!1,this.play()}async init(){await this._shape?.init()}pause(){this._paused||delete this._emitDelay}play(){if(this._paused||!((this._lifeCount>0||this._immortal||!this.options.life.count)&&(this._firstSpawn||this._currentSpawnDelay>=(this._spawnDelay??0))))return;let t=this.container;if(void 0===this._emitDelay){let i=(0,s.getRangeValue)(this.options.rate.delay);this._emitDelay=t.retina.reduceFactor?i*s.millisecondsToSeconds/t.retina.reduceFactor:1/0}(this._lifeCount>0||this._immortal)&&this._prepareToDie()}resize(){let t=this._initialPosition,i=this.container;this.position=t&&(0,s.isPointInside)(t,i.canvas.size,s.Vector.origin)?t:this._calcPosition(),this._size=this._calcSize(),this.size=(0,s.getSize)(this._size,i.canvas.size),this._shape?.resize(this.position,this.size)}update(t){if(this._paused)return;let i=this.container;this._firstSpawn&&(this._firstSpawn=!1,this._currentSpawnDelay=this._spawnDelay??0,this._currentEmitDelay=this._emitDelay??0),this._startParticlesAdded||(this._startParticlesAdded=!0,this._emitParticles(this.options.startCount)),void 0!==this._duration&&(this._currentDuration+=t.value,this._currentDuration>=this._duration&&(this.pause(),void 0!==this._spawnDelay&&delete this._spawnDelay,!this._immortal&&this._lifeCount--,this._lifeCount>0||this._immortal?(this.position=this._calcPosition(),this._shape?.resize(this.position,this.size),this._spawnDelay=i.retina.reduceFactor?(0,s.getRangeValue)(this.options.life.delay??0)*s.millisecondsToSeconds/i.retina.reduceFactor:1/0):this._destroy(),this._currentDuration-=this._duration,delete this._duration)),void 0!==this._spawnDelay&&(this._currentSpawnDelay+=t.value,this._currentSpawnDelay>=this._spawnDelay&&(this._engine.dispatchEvent("emitterPlay",{container:this.container}),this.play(),this._currentSpawnDelay-=this._spawnDelay,delete this._spawnDelay)),void 0!==this._emitDelay&&(this._currentEmitDelay+=t.value,this._currentEmitDelay>=this._emitDelay&&(this._emit(),this._currentEmitDelay-=this._emitDelay))}_calcPosition(){let t=this.container;if(this.options.domId){let i=(0,s.safeDocument)().getElementById(this.options.domId);if(i){let e=i.getBoundingClientRect(),o=t.retina.pixelRatio;return{x:(e.x+e.width*s.half)*o,y:(e.y+e.height*s.half)*o}}}return(0,s.calcPositionOrRandomFromSizeRanged)({size:t.canvas.size,position:this.options.position})}_calcSize(){let t,i=this.container;if(this.options.domId){let t=(0,s.safeDocument)().getElementById(this.options.domId);if(t){let e=t.getBoundingClientRect();return{width:e.width*i.retina.pixelRatio,height:e.height*i.retina.pixelRatio,mode:s.PixelMode.precise}}}return this.options.size??((t=new n.G).load({height:0,mode:s.PixelMode.percent,width:0}),t)}_destroy=()=>{this._mutationObserver?.disconnect(),this._mutationObserver=void 0,this._resizeObserver?.disconnect(),this._resizeObserver=void 0,this.removeCallback(this),this._engine.dispatchEvent("emitterDestroyed",{container:this.container,data:{emitter:this}})};_emit(){if(this._paused)return;let t=(0,s.getRangeValue)(this.options.rate.quantity);this._emitParticles(t)}_emitParticles(t){let i=(0,s.itemFromSingleOrMultiple)(this._particlesOptions)??{},e=this.options.spawn.fill?.color.animation,o=this.options.spawn.fill?.enable??!!this.options.spawn.fill?.color,n=this.options.spawn.fill?.opacity===void 0?s.defaultOpacity:(0,s.getRangeValue)(this.options.spawn.fill.opacity),a=this.options.spawn.stroke?.color?.animation,r=this.options.spawn.stroke?.opacity===void 0?s.defaultOpacity:(0,s.getRangeValue)(this.options.spawn.stroke.opacity),h=this.options.spawn.stroke?.width===void 0?1:(0,s.getRangeValue)(this.options.spawn.stroke.width),p=this.container.retina.reduceFactor,c=!!e,_=!!a,d=!!this._shape,u=c||_,m=u||d,w=u?{h:s.hMax,s:s.sMax,l:s.lMax}:null,y=this.options.shape;for(let c=0;c<t*p;c++){let t=m?(0,s.deepExtend)({},i):i;if(this.spawnFillOpacity=n,this.spawnFillEnabled=o,this.spawnStrokeOpacity=r,this.spawnStrokeWidth=h,this.spawnFillColor&&(e&&w&&(this.spawnFillColor.h=this._setColorAnimation(e.h,this.spawnFillColor.h,w.h,3.6),this.spawnFillColor.s=this._setColorAnimation(e.s,this.spawnFillColor.s,w.s),this.spawnFillColor.l=this._setColorAnimation(e.l,this.spawnFillColor.l,w.l)),l(t,this.spawnFillColor,this.spawnFillOpacity,this.spawnFillEnabled)),this.spawnStrokeColor){var f,g,v;a&&w&&(this.spawnStrokeColor.h=this._setColorAnimation(a.h,this.spawnStrokeColor.h,w.h,3.6),this.spawnStrokeColor.s=this._setColorAnimation(a.s,this.spawnStrokeColor.s,w.s),this.spawnStrokeColor.l=this._setColorAnimation(a.l,this.spawnStrokeColor.l,w.l)),f=this.spawnStrokeColor,g=this.spawnStrokeOpacity,v=this.spawnStrokeWidth,t.stroke=new s.Stroke,t.stroke.color=s.AnimatableColor.create(void 0,{value:f}),t.stroke.opacity=g,t.stroke.width=v}let p=this.position;if(this._shape){let i=this._shape.randomPosition();if(i){p=i.position;let e=y.replace;e.color&&i.color&&l(t,i.color,e.opacity?i.opacity??s.defaultOpacity:s.defaultOpacity,!0)}else p=null}p&&this.container.particles.addParticle(p,t)}}_prepareToDie=()=>{if(this._paused)return;let t=void 0!==this.options.life.duration?(0,s.getRangeValue)(this.options.life.duration):void 0;(this._lifeCount>0||this._immortal)&&void 0!==t&&t>0&&(this._duration=t*s.millisecondsToSeconds)};_setColorAnimation=(t,i,e,o=a)=>{let n=this.container;if(!t.enable)return i;let l=(0,s.randomInRangeValue)(t.offset),r=(0,s.getRangeValue)(this.options.rate.delay),h=n.retina.reduceFactor?r*s.millisecondsToSeconds/n.retina.reduceFactor:1/0;return(i+(0,s.getRangeValue)(t.speed)*n.fpsLimit/h+l*o)%e}}}}]);