@tsparticles/riot 4.1.3 → 4.2.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/riot",
3
- "version": "4.1.3",
3
+ "version": "4.2.1",
4
4
  "description": "Official tsParticles Riot Component - 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 Web Components, React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Inferno.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -90,7 +90,7 @@
90
90
  },
91
91
  "peerDependencies": {
92
92
  "riot": "^10",
93
- "@tsparticles/engine": "4.1.3"
93
+ "@tsparticles/engine": "4.2.1"
94
94
  },
95
95
  "publishConfig": {
96
96
  "access": "public"
@@ -4,14 +4,19 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var engine = require('@tsparticles/engine');
6
6
 
7
- let oldId;
8
7
  let initialized = false;
9
8
  let initPromise;
10
9
  let initCallback;
11
10
 
12
- async function initParticlesEngine(
13
- cb,
14
- ) {
11
+ let container;
12
+ let mounted = false;
13
+ let prevId;
14
+ let prevOptions;
15
+ let prevUrl;
16
+ let prevTheme;
17
+ let loadId = 0;
18
+
19
+ async function initParticlesEngine(cb) {
15
20
  if (initialized) {
16
21
  return;
17
22
  }
@@ -53,6 +58,42 @@ async function waitForParticlesEngineInitialization() {
53
58
  await (initPromise ? initPromise : Promise.resolve());
54
59
  }
55
60
 
61
+ async function loadParticles(props) {
62
+ const currentLoadId = ++loadId;
63
+
64
+ if (!props.id) {
65
+ if (props.particlesLoaded) {
66
+ props.particlesLoaded(undefined);
67
+ }
68
+ return;
69
+ }
70
+
71
+ const newContainer = await engine.tsParticles.load({
72
+ id: props.id,
73
+ options: props.options,
74
+ url: props.url,
75
+ });
76
+
77
+ if (currentLoadId !== loadId) {
78
+ newContainer?.destroy();
79
+ return;
80
+ }
81
+
82
+ container = newContainer;
83
+ prevId = props.id;
84
+ prevOptions = props.options;
85
+ prevUrl = props.url;
86
+ prevTheme = props.theme;
87
+
88
+ if (newContainer && props.theme) {
89
+ newContainer?.loadTheme?.(props.theme);
90
+ }
91
+
92
+ if (props.particlesLoaded) {
93
+ props.particlesLoaded(newContainer);
94
+ }
95
+ }
96
+
56
97
  var riotParticles = {
57
98
  css: null,
58
99
 
@@ -64,28 +105,41 @@ var riotParticles = {
64
105
  throw new Error("initParticlesEngine(...) must be called once before mounting <riot-particles /> components.");
65
106
  }
66
107
 
67
- if (oldId) {
68
- const oldContainer = engine.tsParticles.dom().find((c) => c.id === oldId);
108
+ mounted = true;
109
+
110
+ await loadParticles(props);
111
+ },
69
112
 
70
- if (oldContainer) {
71
- oldContainer.destroy();
72
- }
113
+ onUnmounted() {
114
+ mounted = false;
115
+ container?.destroy();
116
+ container = undefined;
117
+ },
118
+
119
+ async onUpdated(props) {
120
+ if (!mounted) {
121
+ return;
73
122
  }
74
123
 
75
- if (props.id) {
76
- const cb = (container) => {
77
- if (props.particlesLoaded) {
78
- props.particlesLoaded(container);
79
- }
124
+ const idChanged = props.id !== prevId;
125
+ const optionsChanged = props.options !== prevOptions;
126
+ const urlChanged = props.url !== prevUrl;
127
+ const themeChanged = props.theme !== prevTheme;
128
+
129
+ if (idChanged || optionsChanged || urlChanged) {
130
+ container?.destroy();
131
+ container = undefined;
80
132
 
81
- oldId = props.id;
82
- };
133
+ await loadParticles(props);
134
+ } else if (themeChanged && container) {
135
+ container?.loadTheme?.(props.theme);
83
136
 
84
- engine.tsParticles.load({ id: props.id, options: props.options, url: props.url }).then(cb);
137
+ prevTheme = props.theme;
85
138
  } else {
86
- if (props.particlesLoaded) {
87
- props.particlesLoaded(undefined);
88
- }
139
+ prevId = props.id;
140
+ prevOptions = props.options;
141
+ prevUrl = props.url;
142
+ prevTheme = props.theme;
89
143
  }
90
144
  }
91
145
  },
@@ -1 +1 @@
1
- {"version":3,"file":"riot-particles.cjs","sources":["../src/riot-particles.riot"],"sourcesContent":["<riot-particles>\n <script>\n import { tsParticles } from \"@tsparticles/engine\";\n\n let oldId;\n let initialized = false;\n let initPromise;\n let initCallback;\n\n export async function initParticlesEngine(\n cb,\n ) {\n if (initialized) {\n return;\n }\n\n if (initPromise) {\n if (initCallback !== cb) {\n throw new Error(\"initParticlesEngine callback must be stable across the app lifecycle.\");\n }\n\n await initPromise;\n\n return;\n }\n\n initCallback = cb;\n initPromise = (async () => {\n if (cb) {\n await cb(tsParticles);\n }\n\n await tsParticles.init();\n initialized = true;\n })().catch((error) => {\n initPromise = undefined;\n initCallback = undefined;\n initialized = false;\n\n throw error;\n });\n\n await initPromise;\n }\n\n export function isParticlesEngineInitialized() {\n return initialized;\n }\n\n export async function waitForParticlesEngineInitialization() {\n await (initPromise ? initPromise : Promise.resolve());\n }\n\n export default {\n async onMounted(props) {\n await waitForParticlesEngineInitialization();\n\n if (!isParticlesEngineInitialized()) {\n throw new Error(\"initParticlesEngine(...) must be called once before mounting <riot-particles /> components.\");\n }\n\n if (oldId) {\n const oldContainer = tsParticles.dom().find((c) => c.id === oldId);\n\n if (oldContainer) {\n oldContainer.destroy();\n }\n }\n\n if (props.id) {\n const cb = (container) => {\n if (props.particlesLoaded) {\n props.particlesLoaded(container);\n }\n\n oldId = props.id;\n };\n\n tsParticles.load({ id: props.id, options: props.options, url: props.url }).then(cb);\n } else {\n if (props.particlesLoaded) {\n props.particlesLoaded(undefined);\n }\n }\n }\n }\n </script>\n <div id=\"{props.id}\"></div>\n\n</riot-particles>\n"],"names":["tsParticles"],"mappings":";;;;;;AAIQ,IAAI,KAAK;AACT,IAAI,WAAU,GAAI,KAAK;AACvB,IAAI,WAAW;AACf,IAAI,YAAY;;AAET,eAAe,mBAAmB;AACrC,IAAA,EAAE;AACN,EAAE;AACE,IAAA,IAAI,WAAW,EAAE;AACb,QAAA;AACJ,IAAA;;AAEA,IAAA,IAAI,WAAW,EAAE;AACb,QAAA,IAAI,YAAW,KAAM,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC;AAC5F,QAAA;;AAEA,QAAA,MAAM,WAAW;;AAEjB,QAAA;AACJ,IAAA;;AAEA,IAAA,YAAW,GAAI,EAAE;IACjB,WAAU,GAAI,CAAC,YAAY;AACvB,QAAA,IAAI,EAAE,EAAE;AACJ,YAAA,MAAM,EAAE,CAACA,kBAAW,CAAC;AACzB,QAAA;;QAEA,MAAMA,kBAAW,CAAC,IAAI,EAAE;AACxB,QAAA,WAAU,GAAI,IAAI;AACtB,IAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK;AAClB,QAAA,cAAc,SAAS;QACvB,eAAe,SAAS;AACxB,QAAA,cAAc,KAAK;;QAEnB,MAAM,KAAK;AACf,IAAA,CAAC,CAAC;;AAEF,IAAA,MAAM,WAAW;AACrB;;AAEO,SAAS,4BAA4B,GAAG;AAC3C,IAAA,OAAO,WAAW;AACtB;;AAEO,eAAe,oCAAoC,GAAG;IACzD,OAAO,WAAU,GAAI,WAAU,GAAI,OAAO,CAAC,OAAO,EAAE,CAAC;AACzD;;;;;;AAGI,IAAA,MAAM,SAAS,CAAC,KAAK,EAAE;AACnB,QAAA,MAAM,oCAAoC,EAAE;;AAE5C,QAAA,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC;AAClH,QAAA;;AAEA,QAAA,IAAI,KAAK,EAAE;YACP,MAAM,YAAW,GAAIA,kBAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,KAAM,KAAK,CAAC;;AAElE,YAAA,IAAI,YAAY,EAAE;gBACd,YAAY,CAAC,OAAO,EAAE;AAC1B,YAAA;AACJ,QAAA;;QAEA,IAAI,KAAK,CAAC,EAAE,EAAE;AACV,YAAA,MAAM,EAAC,GAAI,CAAC,SAAS,KAAK;gBACtB,IAAI,KAAK,CAAC,eAAe,EAAE;AACvB,oBAAA,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC;AACpC,gBAAA;;AAEA,gBAAA,KAAI,GAAI,KAAK,CAAC,EAAE;YACpB,CAAC;;AAED,YAAAA,kBAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACvF,CAAA,MAAO;YACH,IAAI,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC;AACpC,YAAA;AACJ,QAAA;AACJ,IAAA;;;;;;;;;;;;;;;;;;;;AAGE,YAAA,QAAA,EAAA,MAAA,IAAA,MAAA,CAAA,KAAI,CAAE;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"riot-particles.cjs","sources":["../src/riot-particles.riot"],"sourcesContent":["<riot-particles>\n <script>\n import { tsParticles } from \"@tsparticles/engine\";\n\n let initialized = false;\n let initPromise;\n let initCallback;\n\n let container;\n let mounted = false;\n let prevId;\n let prevOptions;\n let prevUrl;\n let prevTheme;\n let loadId = 0;\n\n export async function initParticlesEngine(cb) {\n if (initialized) {\n return;\n }\n\n if (initPromise) {\n if (initCallback !== cb) {\n throw new Error(\"initParticlesEngine callback must be stable across the app lifecycle.\");\n }\n\n await initPromise;\n\n return;\n }\n\n initCallback = cb;\n initPromise = (async () => {\n if (cb) {\n await cb(tsParticles);\n }\n\n await tsParticles.init();\n initialized = true;\n })().catch((error) => {\n initPromise = undefined;\n initCallback = undefined;\n initialized = false;\n\n throw error;\n });\n\n await initPromise;\n }\n\n export function isParticlesEngineInitialized() {\n return initialized;\n }\n\n export async function waitForParticlesEngineInitialization() {\n await (initPromise ? initPromise : Promise.resolve());\n }\n\n async function loadParticles(props) {\n const currentLoadId = ++loadId;\n\n if (!props.id) {\n if (props.particlesLoaded) {\n props.particlesLoaded(undefined);\n }\n return;\n }\n\n const newContainer = await tsParticles.load({\n id: props.id,\n options: props.options,\n url: props.url,\n });\n\n if (currentLoadId !== loadId) {\n newContainer?.destroy();\n return;\n }\n\n container = newContainer;\n prevId = props.id;\n prevOptions = props.options;\n prevUrl = props.url;\n prevTheme = props.theme;\n\n if (newContainer && props.theme) {\n newContainer?.loadTheme?.(props.theme);\n }\n\n if (props.particlesLoaded) {\n props.particlesLoaded(newContainer);\n }\n }\n\n export default {\n async onMounted(props) {\n await waitForParticlesEngineInitialization();\n\n if (!isParticlesEngineInitialized()) {\n throw new Error(\"initParticlesEngine(...) must be called once before mounting <riot-particles /> components.\");\n }\n\n mounted = true;\n\n await loadParticles(props);\n },\n onUnmounted() {\n mounted = false;\n container?.destroy();\n container = undefined;\n },\n async onUpdated(props) {\n if (!mounted) {\n return;\n }\n\n const idChanged = props.id !== prevId;\n const optionsChanged = props.options !== prevOptions;\n const urlChanged = props.url !== prevUrl;\n const themeChanged = props.theme !== prevTheme;\n\n if (idChanged || optionsChanged || urlChanged) {\n container?.destroy();\n container = undefined;\n\n await loadParticles(props);\n } else if (themeChanged && container) {\n container?.loadTheme?.(props.theme);\n\n prevTheme = props.theme;\n } else {\n prevId = props.id;\n prevOptions = props.options;\n prevUrl = props.url;\n prevTheme = props.theme;\n }\n },\n }\n </script>\n <div id=\"{props.id}\"></div>\n\n</riot-particles>\n"],"names":["tsParticles"],"mappings":"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"}
@@ -1,13 +1,18 @@
1
1
  import { tsParticles } from '@tsparticles/engine';
2
2
 
3
- let oldId;
4
3
  let initialized = false;
5
4
  let initPromise;
6
5
  let initCallback;
7
6
 
8
- async function initParticlesEngine(
9
- cb,
10
- ) {
7
+ let container;
8
+ let mounted = false;
9
+ let prevId;
10
+ let prevOptions;
11
+ let prevUrl;
12
+ let prevTheme;
13
+ let loadId = 0;
14
+
15
+ async function initParticlesEngine(cb) {
11
16
  if (initialized) {
12
17
  return;
13
18
  }
@@ -49,6 +54,42 @@ async function waitForParticlesEngineInitialization() {
49
54
  await (initPromise ? initPromise : Promise.resolve());
50
55
  }
51
56
 
57
+ async function loadParticles(props) {
58
+ const currentLoadId = ++loadId;
59
+
60
+ if (!props.id) {
61
+ if (props.particlesLoaded) {
62
+ props.particlesLoaded(undefined);
63
+ }
64
+ return;
65
+ }
66
+
67
+ const newContainer = await tsParticles.load({
68
+ id: props.id,
69
+ options: props.options,
70
+ url: props.url,
71
+ });
72
+
73
+ if (currentLoadId !== loadId) {
74
+ newContainer?.destroy();
75
+ return;
76
+ }
77
+
78
+ container = newContainer;
79
+ prevId = props.id;
80
+ prevOptions = props.options;
81
+ prevUrl = props.url;
82
+ prevTheme = props.theme;
83
+
84
+ if (newContainer && props.theme) {
85
+ newContainer?.loadTheme?.(props.theme);
86
+ }
87
+
88
+ if (props.particlesLoaded) {
89
+ props.particlesLoaded(newContainer);
90
+ }
91
+ }
92
+
52
93
  var riotParticles = {
53
94
  css: null,
54
95
 
@@ -60,28 +101,41 @@ var riotParticles = {
60
101
  throw new Error("initParticlesEngine(...) must be called once before mounting <riot-particles /> components.");
61
102
  }
62
103
 
63
- if (oldId) {
64
- const oldContainer = tsParticles.dom().find((c) => c.id === oldId);
104
+ mounted = true;
105
+
106
+ await loadParticles(props);
107
+ },
65
108
 
66
- if (oldContainer) {
67
- oldContainer.destroy();
68
- }
109
+ onUnmounted() {
110
+ mounted = false;
111
+ container?.destroy();
112
+ container = undefined;
113
+ },
114
+
115
+ async onUpdated(props) {
116
+ if (!mounted) {
117
+ return;
69
118
  }
70
119
 
71
- if (props.id) {
72
- const cb = (container) => {
73
- if (props.particlesLoaded) {
74
- props.particlesLoaded(container);
75
- }
120
+ const idChanged = props.id !== prevId;
121
+ const optionsChanged = props.options !== prevOptions;
122
+ const urlChanged = props.url !== prevUrl;
123
+ const themeChanged = props.theme !== prevTheme;
124
+
125
+ if (idChanged || optionsChanged || urlChanged) {
126
+ container?.destroy();
127
+ container = undefined;
76
128
 
77
- oldId = props.id;
78
- };
129
+ await loadParticles(props);
130
+ } else if (themeChanged && container) {
131
+ container?.loadTheme?.(props.theme);
79
132
 
80
- tsParticles.load({ id: props.id, options: props.options, url: props.url }).then(cb);
133
+ prevTheme = props.theme;
81
134
  } else {
82
- if (props.particlesLoaded) {
83
- props.particlesLoaded(undefined);
84
- }
135
+ prevId = props.id;
136
+ prevOptions = props.options;
137
+ prevUrl = props.url;
138
+ prevTheme = props.theme;
85
139
  }
86
140
  }
87
141
  },
@@ -1 +1 @@
1
- {"version":3,"file":"riot-particles.esm.js","sources":["../src/riot-particles.riot"],"sourcesContent":["<riot-particles>\n <script>\n import { tsParticles } from \"@tsparticles/engine\";\n\n let oldId;\n let initialized = false;\n let initPromise;\n let initCallback;\n\n export async function initParticlesEngine(\n cb,\n ) {\n if (initialized) {\n return;\n }\n\n if (initPromise) {\n if (initCallback !== cb) {\n throw new Error(\"initParticlesEngine callback must be stable across the app lifecycle.\");\n }\n\n await initPromise;\n\n return;\n }\n\n initCallback = cb;\n initPromise = (async () => {\n if (cb) {\n await cb(tsParticles);\n }\n\n await tsParticles.init();\n initialized = true;\n })().catch((error) => {\n initPromise = undefined;\n initCallback = undefined;\n initialized = false;\n\n throw error;\n });\n\n await initPromise;\n }\n\n export function isParticlesEngineInitialized() {\n return initialized;\n }\n\n export async function waitForParticlesEngineInitialization() {\n await (initPromise ? initPromise : Promise.resolve());\n }\n\n export default {\n async onMounted(props) {\n await waitForParticlesEngineInitialization();\n\n if (!isParticlesEngineInitialized()) {\n throw new Error(\"initParticlesEngine(...) must be called once before mounting <riot-particles /> components.\");\n }\n\n if (oldId) {\n const oldContainer = tsParticles.dom().find((c) => c.id === oldId);\n\n if (oldContainer) {\n oldContainer.destroy();\n }\n }\n\n if (props.id) {\n const cb = (container) => {\n if (props.particlesLoaded) {\n props.particlesLoaded(container);\n }\n\n oldId = props.id;\n };\n\n tsParticles.load({ id: props.id, options: props.options, url: props.url }).then(cb);\n } else {\n if (props.particlesLoaded) {\n props.particlesLoaded(undefined);\n }\n }\n }\n }\n </script>\n <div id=\"{props.id}\"></div>\n\n</riot-particles>\n"],"names":[],"mappings":";;AAIQ,IAAI,KAAK;AACT,IAAI,WAAU,GAAI,KAAK;AACvB,IAAI,WAAW;AACf,IAAI,YAAY;;AAET,eAAe,mBAAmB;AACrC,IAAA,EAAE;AACN,EAAE;AACE,IAAA,IAAI,WAAW,EAAE;AACb,QAAA;AACJ,IAAA;;AAEA,IAAA,IAAI,WAAW,EAAE;AACb,QAAA,IAAI,YAAW,KAAM,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC;AAC5F,QAAA;;AAEA,QAAA,MAAM,WAAW;;AAEjB,QAAA;AACJ,IAAA;;AAEA,IAAA,YAAW,GAAI,EAAE;IACjB,WAAU,GAAI,CAAC,YAAY;AACvB,QAAA,IAAI,EAAE,EAAE;AACJ,YAAA,MAAM,EAAE,CAAC,WAAW,CAAC;AACzB,QAAA;;QAEA,MAAM,WAAW,CAAC,IAAI,EAAE;AACxB,QAAA,WAAU,GAAI,IAAI;AACtB,IAAA,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK;AAClB,QAAA,cAAc,SAAS;QACvB,eAAe,SAAS;AACxB,QAAA,cAAc,KAAK;;QAEnB,MAAM,KAAK;AACf,IAAA,CAAC,CAAC;;AAEF,IAAA,MAAM,WAAW;AACrB;;AAEO,SAAS,4BAA4B,GAAG;AAC3C,IAAA,OAAO,WAAW;AACtB;;AAEO,eAAe,oCAAoC,GAAG;IACzD,OAAO,WAAU,GAAI,WAAU,GAAI,OAAO,CAAC,OAAO,EAAE,CAAC;AACzD;;;;;;AAGI,IAAA,MAAM,SAAS,CAAC,KAAK,EAAE;AACnB,QAAA,MAAM,oCAAoC,EAAE;;AAE5C,QAAA,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC;AAClH,QAAA;;AAEA,QAAA,IAAI,KAAK,EAAE;YACP,MAAM,YAAW,GAAI,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,KAAM,KAAK,CAAC;;AAElE,YAAA,IAAI,YAAY,EAAE;gBACd,YAAY,CAAC,OAAO,EAAE;AAC1B,YAAA;AACJ,QAAA;;QAEA,IAAI,KAAK,CAAC,EAAE,EAAE;AACV,YAAA,MAAM,EAAC,GAAI,CAAC,SAAS,KAAK;gBACtB,IAAI,KAAK,CAAC,eAAe,EAAE;AACvB,oBAAA,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC;AACpC,gBAAA;;AAEA,gBAAA,KAAI,GAAI,KAAK,CAAC,EAAE;YACpB,CAAC;;AAED,YAAA,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACvF,CAAA,MAAO;YACH,IAAI,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC;AACpC,YAAA;AACJ,QAAA;AACJ,IAAA;;;;;;;;;;;;;;;;;;;;AAGE,YAAA,QAAA,EAAA,MAAA,IAAA,MAAA,CAAA,KAAI,CAAE;;;;;;;;;;;;"}
1
+ {"version":3,"file":"riot-particles.esm.js","sources":["../src/riot-particles.riot"],"sourcesContent":["<riot-particles>\n <script>\n import { tsParticles } from \"@tsparticles/engine\";\n\n let initialized = false;\n let initPromise;\n let initCallback;\n\n let container;\n let mounted = false;\n let prevId;\n let prevOptions;\n let prevUrl;\n let prevTheme;\n let loadId = 0;\n\n export async function initParticlesEngine(cb) {\n if (initialized) {\n return;\n }\n\n if (initPromise) {\n if (initCallback !== cb) {\n throw new Error(\"initParticlesEngine callback must be stable across the app lifecycle.\");\n }\n\n await initPromise;\n\n return;\n }\n\n initCallback = cb;\n initPromise = (async () => {\n if (cb) {\n await cb(tsParticles);\n }\n\n await tsParticles.init();\n initialized = true;\n })().catch((error) => {\n initPromise = undefined;\n initCallback = undefined;\n initialized = false;\n\n throw error;\n });\n\n await initPromise;\n }\n\n export function isParticlesEngineInitialized() {\n return initialized;\n }\n\n export async function waitForParticlesEngineInitialization() {\n await (initPromise ? initPromise : Promise.resolve());\n }\n\n async function loadParticles(props) {\n const currentLoadId = ++loadId;\n\n if (!props.id) {\n if (props.particlesLoaded) {\n props.particlesLoaded(undefined);\n }\n return;\n }\n\n const newContainer = await tsParticles.load({\n id: props.id,\n options: props.options,\n url: props.url,\n });\n\n if (currentLoadId !== loadId) {\n newContainer?.destroy();\n return;\n }\n\n container = newContainer;\n prevId = props.id;\n prevOptions = props.options;\n prevUrl = props.url;\n prevTheme = props.theme;\n\n if (newContainer && props.theme) {\n newContainer?.loadTheme?.(props.theme);\n }\n\n if (props.particlesLoaded) {\n props.particlesLoaded(newContainer);\n }\n }\n\n export default {\n async onMounted(props) {\n await waitForParticlesEngineInitialization();\n\n if (!isParticlesEngineInitialized()) {\n throw new Error(\"initParticlesEngine(...) must be called once before mounting <riot-particles /> components.\");\n }\n\n mounted = true;\n\n await loadParticles(props);\n },\n onUnmounted() {\n mounted = false;\n container?.destroy();\n container = undefined;\n },\n async onUpdated(props) {\n if (!mounted) {\n return;\n }\n\n const idChanged = props.id !== prevId;\n const optionsChanged = props.options !== prevOptions;\n const urlChanged = props.url !== prevUrl;\n const themeChanged = props.theme !== prevTheme;\n\n if (idChanged || optionsChanged || urlChanged) {\n container?.destroy();\n container = undefined;\n\n await loadParticles(props);\n } else if (themeChanged && container) {\n container?.loadTheme?.(props.theme);\n\n prevTheme = props.theme;\n } else {\n prevId = props.id;\n prevOptions = props.options;\n prevUrl = props.url;\n prevTheme = props.theme;\n }\n },\n }\n </script>\n <div id=\"{props.id}\"></div>\n\n</riot-particles>\n"],"names":[],"mappings":"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"}