@tsparticles/plugin-absorbers 3.0.0-alpha.1 → 3.0.0-beta.0

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
- * v3.0.0-alpha.1
7
+ * v3.0.0-beta.0
8
8
  */
9
9
  (function webpackUniversalModuleDefinition(root, factory) {
10
10
  if(typeof exports === 'object' && typeof module === 'object')
@@ -91,7 +91,7 @@ __webpack_require__.r(__webpack_exports__);
91
91
 
92
92
  // EXPORTS
93
93
  __webpack_require__.d(__webpack_exports__, {
94
- "loadAbsorbersPlugin": () => (/* binding */ loadAbsorbersPlugin)
94
+ loadAbsorbersPlugin: () => (/* binding */ loadAbsorbersPlugin)
95
95
  });
96
96
 
97
97
  // EXTERNAL MODULE: external {"commonjs":"@tsparticles/engine","commonjs2":"@tsparticles/engine","amd":"@tsparticles/engine","root":"window"}
@@ -132,7 +132,7 @@ class AbsorberSize extends engine_root_window_.ValueWithRandom {
132
132
  if (data.density !== undefined) {
133
133
  this.density = data.density;
134
134
  }
135
- if (typeof data.limit === "number") {
135
+ if ((0,engine_root_window_.isNumber)(data.limit)) {
136
136
  this.limit.radius = data.limit;
137
137
  } else {
138
138
  this.limit.load(data.limit);
@@ -191,9 +191,62 @@ class Absorber {
191
191
 
192
192
  class AbsorberInstance {
193
193
  constructor(absorbers, container, options, position) {
194
- var _a, _b, _c;
195
194
  this.absorbers = absorbers;
196
195
  this.container = container;
196
+ this._calcPosition = () => {
197
+ const exactPosition = (0,engine_root_window_.calcPositionOrRandomFromSizeRanged)({
198
+ size: this.container.canvas.size,
199
+ position: this.options.position
200
+ });
201
+ return engine_root_window_.Vector.create(exactPosition.x, exactPosition.y);
202
+ };
203
+ this._updateParticlePosition = (particle, v) => {
204
+ if (particle.destroyed) {
205
+ return;
206
+ }
207
+ const container = this.container,
208
+ canvasSize = container.canvas.size;
209
+ if (particle.needsNewPosition) {
210
+ const newPosition = (0,engine_root_window_.calcPositionOrRandomFromSize)({
211
+ size: canvasSize
212
+ });
213
+ particle.position.setTo(newPosition);
214
+ particle.velocity.setTo(particle.initialVelocity);
215
+ particle.absorberOrbit = undefined;
216
+ particle.needsNewPosition = false;
217
+ }
218
+ if (this.options.orbits) {
219
+ if (particle.absorberOrbit === undefined) {
220
+ particle.absorberOrbit = engine_root_window_.Vector.create(0, 0);
221
+ particle.absorberOrbit.length = (0,engine_root_window_.getDistance)(particle.getPosition(), this.position);
222
+ particle.absorberOrbit.angle = (0,engine_root_window_.getRandom)() * Math.PI * 2;
223
+ }
224
+ if (particle.absorberOrbit.length <= this.size && !this.options.destroy) {
225
+ const minSize = Math.min(canvasSize.width, canvasSize.height);
226
+ particle.absorberOrbit.length = minSize * (1 + ((0,engine_root_window_.getRandom)() * 0.2 - 0.1));
227
+ }
228
+ if (particle.absorberOrbitDirection === undefined) {
229
+ particle.absorberOrbitDirection = particle.velocity.x >= 0 ? "clockwise" : "counter-clockwise";
230
+ }
231
+ const orbitRadius = particle.absorberOrbit.length,
232
+ orbitAngle = particle.absorberOrbit.angle,
233
+ orbitDirection = particle.absorberOrbitDirection;
234
+ particle.velocity.setTo(engine_root_window_.Vector.origin);
235
+ const updateFunc = {
236
+ x: orbitDirection === "clockwise" ? Math.cos : Math.sin,
237
+ y: orbitDirection === "clockwise" ? Math.sin : Math.cos
238
+ };
239
+ particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);
240
+ particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);
241
+ particle.absorberOrbit.length -= v.length;
242
+ particle.absorberOrbit.angle += (particle.retina.moveSpeed ?? 0) * container.retina.pixelRatio / 100 * container.retina.reduceFactor;
243
+ } else {
244
+ const addV = engine_root_window_.Vector.origin;
245
+ addV.length = v.length;
246
+ addV.angle = v.angle;
247
+ particle.velocity.addTo(addV);
248
+ }
249
+ };
197
250
  this.initialPosition = position ? engine_root_window_.Vector.create(position.x, position.y) : undefined;
198
251
  if (options instanceof Absorber) {
199
252
  this.options = options;
@@ -211,12 +264,12 @@ class AbsorberInstance {
211
264
  radius: limit.radius * container.retina.pixelRatio * container.retina.reduceFactor,
212
265
  mass: limit.mass
213
266
  };
214
- this.color = (_a = (0,engine_root_window_.rangeColorToRgb)(this.options.color)) !== null && _a !== void 0 ? _a : {
267
+ this.color = (0,engine_root_window_.rangeColorToRgb)(this.options.color) ?? {
215
268
  b: 0,
216
269
  g: 0,
217
270
  r: 0
218
271
  };
219
- this.position = (_c = (_b = this.initialPosition) === null || _b === void 0 ? void 0 : _b.copy()) !== null && _c !== void 0 ? _c : this.calcPosition();
272
+ this.position = this.initialPosition?.copy() ?? this._calcPosition();
220
273
  }
221
274
  attract(particle) {
222
275
  const container = this.container,
@@ -251,13 +304,13 @@ class AbsorberInstance {
251
304
  particle.destroy();
252
305
  } else {
253
306
  particle.needsNewPosition = true;
254
- this.updateParticlePosition(particle, v);
307
+ this._updateParticlePosition(particle, v);
255
308
  }
256
309
  } else {
257
310
  if (options.destroy) {
258
311
  particle.size.value -= sizeFactor;
259
312
  }
260
- this.updateParticlePosition(particle, v);
313
+ this._updateParticlePosition(particle, v);
261
314
  }
262
315
  if (this.limit.radius <= 0 || this.size < this.limit.radius) {
263
316
  this.size += sizeFactor;
@@ -266,7 +319,7 @@ class AbsorberInstance {
266
319
  this.mass += sizeFactor * this.options.size.density * container.retina.reduceFactor;
267
320
  }
268
321
  } else {
269
- this.updateParticlePosition(particle, v);
322
+ this._updateParticlePosition(particle, v);
270
323
  }
271
324
  }
272
325
  draw(context) {
@@ -279,62 +332,7 @@ class AbsorberInstance {
279
332
  }
280
333
  resize() {
281
334
  const initialPosition = this.initialPosition;
282
- this.position = initialPosition && (0,engine_root_window_.isPointInside)(initialPosition, this.container.canvas.size, engine_root_window_.Vector.origin) ? initialPosition : this.calcPosition();
283
- }
284
- calcPosition() {
285
- const exactPosition = (0,engine_root_window_.calcPositionOrRandomFromSizeRanged)({
286
- size: this.container.canvas.size,
287
- position: this.options.position
288
- });
289
- return engine_root_window_.Vector.create(exactPosition.x, exactPosition.y);
290
- }
291
- updateParticlePosition(particle, v) {
292
- var _a;
293
- if (particle.destroyed) {
294
- return;
295
- }
296
- const container = this.container,
297
- canvasSize = container.canvas.size;
298
- if (particle.needsNewPosition) {
299
- const newPosition = (0,engine_root_window_.calcPositionOrRandomFromSize)({
300
- size: canvasSize
301
- });
302
- particle.position.setTo(newPosition);
303
- particle.velocity.setTo(particle.initialVelocity);
304
- particle.absorberOrbit = undefined;
305
- particle.needsNewPosition = false;
306
- }
307
- if (this.options.orbits) {
308
- if (particle.absorberOrbit === undefined) {
309
- particle.absorberOrbit = engine_root_window_.Vector.create(0, 0);
310
- particle.absorberOrbit.length = (0,engine_root_window_.getDistance)(particle.getPosition(), this.position);
311
- particle.absorberOrbit.angle = (0,engine_root_window_.getRandom)() * Math.PI * 2;
312
- }
313
- if (particle.absorberOrbit.length <= this.size && !this.options.destroy) {
314
- const minSize = Math.min(canvasSize.width, canvasSize.height);
315
- particle.absorberOrbit.length = minSize * (1 + ((0,engine_root_window_.getRandom)() * 0.2 - 0.1));
316
- }
317
- if (particle.absorberOrbitDirection === undefined) {
318
- particle.absorberOrbitDirection = particle.velocity.x >= 0 ? "clockwise" : "counter-clockwise";
319
- }
320
- const orbitRadius = particle.absorberOrbit.length,
321
- orbitAngle = particle.absorberOrbit.angle,
322
- orbitDirection = particle.absorberOrbitDirection;
323
- particle.velocity.setTo(engine_root_window_.Vector.origin);
324
- const updateFunc = {
325
- x: orbitDirection === "clockwise" ? Math.cos : Math.sin,
326
- y: orbitDirection === "clockwise" ? Math.sin : Math.cos
327
- };
328
- particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);
329
- particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);
330
- particle.absorberOrbit.length -= v.length;
331
- particle.absorberOrbit.angle += ((_a = particle.retina.moveSpeed) !== null && _a !== void 0 ? _a : 0) * container.retina.pixelRatio / 100 * container.retina.reduceFactor;
332
- } else {
333
- const addV = engine_root_window_.Vector.origin;
334
- addV.length = v.length;
335
- addV.angle = v.angle;
336
- particle.velocity.addTo(addV);
337
- }
335
+ this.position = initialPosition && (0,engine_root_window_.isPointInside)(initialPosition, this.container.canvas.size, engine_root_window_.Vector.origin) ? initialPosition : this._calcPosition();
338
336
  }
339
337
  }
340
338
  ;// CONCATENATED MODULE: ./dist/browser/Absorbers.js
@@ -346,7 +344,7 @@ class Absorbers {
346
344
  this.array = [];
347
345
  this.absorbers = [];
348
346
  this.interactivityAbsorbers = [];
349
- container.getAbsorber = idxOrName => idxOrName === undefined || typeof idxOrName === "number" ? this.array[idxOrName || 0] : this.array.find(t => t.name === idxOrName);
347
+ container.getAbsorber = idxOrName => idxOrName === undefined || (0,engine_root_window_.isNumber)(idxOrName) ? this.array[idxOrName || 0] : this.array.find(t => t.name === idxOrName);
350
348
  container.addAbsorber = (options, position) => this.addAbsorber(options, position);
351
349
  }
352
350
  addAbsorber(options, position) {
@@ -364,7 +362,7 @@ class Absorbers {
364
362
  modeAbsorbers = this.interactivityAbsorbers;
365
363
  if (mode === "absorber") {
366
364
  const absorbersModeOptions = (0,engine_root_window_.itemFromSingleOrMultiple)(modeAbsorbers),
367
- absorbersOptions = absorbersModeOptions !== null && absorbersModeOptions !== void 0 ? absorbersModeOptions : (0,engine_root_window_.itemFromSingleOrMultiple)(absorberOptions),
365
+ absorbersOptions = absorbersModeOptions ?? (0,engine_root_window_.itemFromSingleOrMultiple)(absorberOptions),
368
366
  aPosition = this.container.interactivity.mouse.clickPosition;
369
367
  this.addAbsorber(absorbersOptions, aPosition);
370
368
  }
@@ -411,42 +409,39 @@ class AbsorbersPlugin {
411
409
  return new Absorbers(container);
412
410
  }
413
411
  loadOptions(options, source) {
414
- var _a, _b;
415
412
  if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
416
413
  return;
417
414
  }
418
- if (source === null || source === void 0 ? void 0 : source.absorbers) {
415
+ if (source?.absorbers) {
419
416
  options.absorbers = (0,engine_root_window_.executeOnSingleOrMultiple)(source.absorbers, absorber => {
420
417
  const tmp = new Absorber();
421
418
  tmp.load(absorber);
422
419
  return tmp;
423
420
  });
424
421
  }
425
- options.interactivity.modes.absorbers = (0,engine_root_window_.executeOnSingleOrMultiple)((_b = (_a = source === null || source === void 0 ? void 0 : source.interactivity) === null || _a === void 0 ? void 0 : _a.modes) === null || _b === void 0 ? void 0 : _b.absorbers, absorber => {
422
+ options.interactivity.modes.absorbers = (0,engine_root_window_.executeOnSingleOrMultiple)(source?.interactivity?.modes?.absorbers, absorber => {
426
423
  const tmp = new Absorber();
427
424
  tmp.load(absorber);
428
425
  return tmp;
429
426
  });
430
427
  }
431
428
  needsPlugin(options) {
432
- var _a, _b, _c;
433
429
  if (!options) {
434
430
  return false;
435
431
  }
436
432
  const absorbers = options.absorbers;
437
- if (absorbers instanceof Array) {
433
+ if ((0,engine_root_window_.isArray)(absorbers)) {
438
434
  return !!absorbers.length;
439
435
  } else if (absorbers) {
440
436
  return true;
441
- } else if (((_c = (_b = (_a = options.interactivity) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.onClick) === null || _c === void 0 ? void 0 : _c.mode) && (0,engine_root_window_.isInArray)("absorber", options.interactivity.events.onClick.mode)) {
437
+ } else if (options.interactivity?.events?.onClick?.mode && (0,engine_root_window_.isInArray)("absorber", options.interactivity.events.onClick.mode)) {
442
438
  return true;
443
439
  }
444
440
  return false;
445
441
  }
446
442
  }
447
- async function loadAbsorbersPlugin(engine) {
448
- const plugin = new AbsorbersPlugin();
449
- await engine.addPlugin(plugin);
443
+ async function loadAbsorbersPlugin(engine, refresh = true) {
444
+ await engine.addPlugin(new AbsorbersPlugin(), refresh);
450
445
  }
451
446
 
452
447
 
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see tsparticles.plugin.absorbers.min.js.LICENSE.txt */
2
- !function(i,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],t);else{var s="object"==typeof exports?t(require("@tsparticles/engine")):t(i.window);for(var o in s)("object"==typeof exports?exports:i)[o]=s[o]}}(this,(i=>(()=>{"use strict";var t={533:t=>{t.exports=i}},s={};function o(i){var e=s[i];if(void 0!==e)return e.exports;var r=s[i]={exports:{}};return t[i](r,r.exports,o),r.exports}o.d=(i,t)=>{for(var s in t)o.o(t,s)&&!o.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:t[s]})},o.o=(i,t)=>Object.prototype.hasOwnProperty.call(i,t),o.r=i=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var e={};return(()=>{o.r(e),o.d(e,{loadAbsorbersPlugin:()=>l});var i=o(533);class t{constructor(){this.radius=0,this.mass=0}load(i){i&&(void 0!==i.mass&&(this.mass=i.mass),void 0!==i.radius&&(this.radius=i.radius))}}class s extends i.ValueWithRandom{constructor(){super(),this.density=5,this.value=50,this.limit=new t}load(i){i&&(super.load(i),void 0!==i.density&&(this.density=i.density),"number"==typeof i.limit?this.limit.radius=i.limit:this.limit.load(i.limit))}}class r{constructor(){this.color=new i.OptionsColor,this.color.value="#000000",this.draggable=!1,this.opacity=1,this.destroy=!0,this.orbits=!1,this.size=new s}load(t){void 0!==t&&(void 0!==t.color&&(this.color=i.OptionsColor.create(this.color,t.color)),void 0!==t.draggable&&(this.draggable=t.draggable),this.name=t.name,void 0!==t.opacity&&(this.opacity=t.opacity),void 0!==t.position&&(this.position={},void 0!==t.position.x&&(this.position.x=(0,i.setRangeValue)(t.position.x)),void 0!==t.position.y&&(this.position.y=(0,i.setRangeValue)(t.position.y))),void 0!==t.size&&this.size.load(t.size),void 0!==t.destroy&&(this.destroy=t.destroy),void 0!==t.orbits&&(this.orbits=t.orbits))}}class n{constructor(t,s,o,e){var n,a,c;this.absorbers=t,this.container=s,this.initialPosition=e?i.Vector.create(e.x,e.y):void 0,o instanceof r?this.options=o:(this.options=new r,this.options.load(o)),this.dragging=!1,this.name=this.options.name,this.opacity=this.options.opacity,this.size=(0,i.getRangeValue)(this.options.size.value)*s.retina.pixelRatio,this.mass=this.size*this.options.size.density*s.retina.reduceFactor;const l=this.options.size.limit;this.limit={radius:l.radius*s.retina.pixelRatio*s.retina.reduceFactor,mass:l.mass},this.color=null!==(n=(0,i.rangeColorToRgb)(this.options.color))&&void 0!==n?n:{b:0,g:0,r:0},this.position=null!==(c=null===(a=this.initialPosition)||void 0===a?void 0:a.copy())&&void 0!==c?c:this.calcPosition()}attract(t){const s=this.container,o=this.options;if(o.draggable){const t=s.interactivity.mouse;if(t.clicking&&t.downPosition){(0,i.getDistance)(this.position,t.downPosition)<=this.size&&(this.dragging=!0)}else this.dragging=!1;this.dragging&&t.position&&(this.position.x=t.position.x,this.position.y=t.position.y)}const e=t.getPosition(),{dx:r,dy:n,distance:a}=(0,i.getDistances)(this.position,e),c=i.Vector.create(r,n);if(c.length=this.mass/Math.pow(a,2)*s.retina.reduceFactor,a<this.size+t.getRadius()){const i=.033*t.getRadius()*s.retina.pixelRatio;this.size>t.getRadius()&&a<this.size-t.getRadius()||void 0!==t.absorberOrbit&&t.absorberOrbit.length<0?o.destroy?t.destroy():(t.needsNewPosition=!0,this.updateParticlePosition(t,c)):(o.destroy&&(t.size.value-=i),this.updateParticlePosition(t,c)),(this.limit.radius<=0||this.size<this.limit.radius)&&(this.size+=i),(this.limit.mass<=0||this.mass<this.limit.mass)&&(this.mass+=i*this.options.size.density*s.retina.reduceFactor)}else this.updateParticlePosition(t,c)}draw(t){t.translate(this.position.x,this.position.y),t.beginPath(),t.arc(0,0,this.size,0,2*Math.PI,!1),t.closePath(),t.fillStyle=(0,i.getStyleFromRgb)(this.color,this.opacity),t.fill()}resize(){const t=this.initialPosition;this.position=t&&(0,i.isPointInside)(t,this.container.canvas.size,i.Vector.origin)?t:this.calcPosition()}calcPosition(){const t=(0,i.calcPositionOrRandomFromSizeRanged)({size:this.container.canvas.size,position:this.options.position});return i.Vector.create(t.x,t.y)}updateParticlePosition(t,s){var o;if(t.destroyed)return;const e=this.container,r=e.canvas.size;if(t.needsNewPosition){const s=(0,i.calcPositionOrRandomFromSize)({size:r});t.position.setTo(s),t.velocity.setTo(t.initialVelocity),t.absorberOrbit=void 0,t.needsNewPosition=!1}if(this.options.orbits){if(void 0===t.absorberOrbit&&(t.absorberOrbit=i.Vector.create(0,0),t.absorberOrbit.length=(0,i.getDistance)(t.getPosition(),this.position),t.absorberOrbit.angle=(0,i.getRandom)()*Math.PI*2),t.absorberOrbit.length<=this.size&&!this.options.destroy){const s=Math.min(r.width,r.height);t.absorberOrbit.length=s*(.2*(0,i.getRandom)()-.1+1)}void 0===t.absorberOrbitDirection&&(t.absorberOrbitDirection=t.velocity.x>=0?"clockwise":"counter-clockwise");const n=t.absorberOrbit.length,a=t.absorberOrbit.angle,c=t.absorberOrbitDirection;t.velocity.setTo(i.Vector.origin);const l={x:"clockwise"===c?Math.cos:Math.sin,y:"clockwise"===c?Math.sin:Math.cos};t.position.x=this.position.x+n*l.x(a),t.position.y=this.position.y+n*l.y(a),t.absorberOrbit.length-=s.length,t.absorberOrbit.angle+=(null!==(o=t.retina.moveSpeed)&&void 0!==o?o:0)*e.retina.pixelRatio/100*e.retina.reduceFactor}else{const o=i.Vector.origin;o.length=s.length,o.angle=s.angle,t.velocity.addTo(o)}}}class a{constructor(i){this.container=i,this.array=[],this.absorbers=[],this.interactivityAbsorbers=[],i.getAbsorber=i=>void 0===i||"number"==typeof i?this.array[i||0]:this.array.find((t=>t.name===i)),i.addAbsorber=(i,t)=>this.addAbsorber(i,t)}addAbsorber(i,t){const s=new n(this,this.container,i,t);return this.array.push(s),s}draw(i){for(const t of this.array)t.draw(i)}handleClickMode(t){const s=this.absorbers,o=this.interactivityAbsorbers;if("absorber"===t){const t=(0,i.itemFromSingleOrMultiple)(o),e=null!=t?t:(0,i.itemFromSingleOrMultiple)(s),r=this.container.interactivity.mouse.clickPosition;this.addAbsorber(e,r)}}async init(){this.absorbers=this.container.actualOptions.absorbers,this.interactivityAbsorbers=this.container.actualOptions.interactivity.modes.absorbers,(0,i.executeOnSingleOrMultiple)(this.absorbers,(i=>{this.addAbsorber(i)}))}particleUpdate(i){for(const t of this.array)if(t.attract(i),i.destroyed)break}removeAbsorber(i){const t=this.array.indexOf(i);t>=0&&this.array.splice(t,1)}resize(){for(const i of this.array)i.resize()}stop(){this.array=[]}}class c{constructor(){this.id="absorbers"}getPlugin(i){return new a(i)}loadOptions(t,s){var o,e;(this.needsPlugin(t)||this.needsPlugin(s))&&((null==s?void 0:s.absorbers)&&(t.absorbers=(0,i.executeOnSingleOrMultiple)(s.absorbers,(i=>{const t=new r;return t.load(i),t}))),t.interactivity.modes.absorbers=(0,i.executeOnSingleOrMultiple)(null===(e=null===(o=null==s?void 0:s.interactivity)||void 0===o?void 0:o.modes)||void 0===e?void 0:e.absorbers,(i=>{const t=new r;return t.load(i),t})))}needsPlugin(t){var s,o,e;if(!t)return!1;const r=t.absorbers;return r instanceof Array?!!r.length:!!r||!(!(null===(e=null===(o=null===(s=t.interactivity)||void 0===s?void 0:s.events)||void 0===o?void 0:o.onClick)||void 0===e?void 0:e.mode)||!(0,i.isInArray)("absorber",t.interactivity.events.onClick.mode))}}async function l(i){const t=new c;await i.addPlugin(t)}})(),e})()));
2
+ !function(i,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],t);else{var s="object"==typeof exports?t(require("@tsparticles/engine")):t(i.window);for(var o in s)("object"==typeof exports?exports:i)[o]=s[o]}}(this,(i=>(()=>{"use strict";var t={533:t=>{t.exports=i}},s={};function o(i){var e=s[i];if(void 0!==e)return e.exports;var r=s[i]={exports:{}};return t[i](r,r.exports,o),r.exports}o.d=(i,t)=>{for(var s in t)o.o(t,s)&&!o.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:t[s]})},o.o=(i,t)=>Object.prototype.hasOwnProperty.call(i,t),o.r=i=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var e={};return(()=>{o.r(e),o.d(e,{loadAbsorbersPlugin:()=>h});var i=o(533);class t{constructor(){this.radius=0,this.mass=0}load(i){i&&(void 0!==i.mass&&(this.mass=i.mass),void 0!==i.radius&&(this.radius=i.radius))}}class s extends i.ValueWithRandom{constructor(){super(),this.density=5,this.value=50,this.limit=new t}load(t){t&&(super.load(t),void 0!==t.density&&(this.density=t.density),(0,i.isNumber)(t.limit)?this.limit.radius=t.limit:this.limit.load(t.limit))}}class r{constructor(){this.color=new i.OptionsColor,this.color.value="#000000",this.draggable=!1,this.opacity=1,this.destroy=!0,this.orbits=!1,this.size=new s}load(t){void 0!==t&&(void 0!==t.color&&(this.color=i.OptionsColor.create(this.color,t.color)),void 0!==t.draggable&&(this.draggable=t.draggable),this.name=t.name,void 0!==t.opacity&&(this.opacity=t.opacity),void 0!==t.position&&(this.position={},void 0!==t.position.x&&(this.position.x=(0,i.setRangeValue)(t.position.x)),void 0!==t.position.y&&(this.position.y=(0,i.setRangeValue)(t.position.y))),void 0!==t.size&&this.size.load(t.size),void 0!==t.destroy&&(this.destroy=t.destroy),void 0!==t.orbits&&(this.orbits=t.orbits))}}class n{constructor(t,s,o,e){this.absorbers=t,this.container=s,this._calcPosition=()=>{const t=(0,i.calcPositionOrRandomFromSizeRanged)({size:this.container.canvas.size,position:this.options.position});return i.Vector.create(t.x,t.y)},this._updateParticlePosition=(t,s)=>{if(t.destroyed)return;const o=this.container,e=o.canvas.size;if(t.needsNewPosition){const s=(0,i.calcPositionOrRandomFromSize)({size:e});t.position.setTo(s),t.velocity.setTo(t.initialVelocity),t.absorberOrbit=void 0,t.needsNewPosition=!1}if(this.options.orbits){if(void 0===t.absorberOrbit&&(t.absorberOrbit=i.Vector.create(0,0),t.absorberOrbit.length=(0,i.getDistance)(t.getPosition(),this.position),t.absorberOrbit.angle=(0,i.getRandom)()*Math.PI*2),t.absorberOrbit.length<=this.size&&!this.options.destroy){const s=Math.min(e.width,e.height);t.absorberOrbit.length=s*(.2*(0,i.getRandom)()-.1+1)}void 0===t.absorberOrbitDirection&&(t.absorberOrbitDirection=t.velocity.x>=0?"clockwise":"counter-clockwise");const r=t.absorberOrbit.length,n=t.absorberOrbit.angle,a=t.absorberOrbitDirection;t.velocity.setTo(i.Vector.origin);const c={x:"clockwise"===a?Math.cos:Math.sin,y:"clockwise"===a?Math.sin:Math.cos};t.position.x=this.position.x+r*c.x(n),t.position.y=this.position.y+r*c.y(n),t.absorberOrbit.length-=s.length,t.absorberOrbit.angle+=(t.retina.moveSpeed??0)*o.retina.pixelRatio/100*o.retina.reduceFactor}else{const o=i.Vector.origin;o.length=s.length,o.angle=s.angle,t.velocity.addTo(o)}},this.initialPosition=e?i.Vector.create(e.x,e.y):void 0,o instanceof r?this.options=o:(this.options=new r,this.options.load(o)),this.dragging=!1,this.name=this.options.name,this.opacity=this.options.opacity,this.size=(0,i.getRangeValue)(this.options.size.value)*s.retina.pixelRatio,this.mass=this.size*this.options.size.density*s.retina.reduceFactor;const n=this.options.size.limit;this.limit={radius:n.radius*s.retina.pixelRatio*s.retina.reduceFactor,mass:n.mass},this.color=(0,i.rangeColorToRgb)(this.options.color)??{b:0,g:0,r:0},this.position=this.initialPosition?.copy()??this._calcPosition()}attract(t){const s=this.container,o=this.options;if(o.draggable){const t=s.interactivity.mouse;if(t.clicking&&t.downPosition){(0,i.getDistance)(this.position,t.downPosition)<=this.size&&(this.dragging=!0)}else this.dragging=!1;this.dragging&&t.position&&(this.position.x=t.position.x,this.position.y=t.position.y)}const e=t.getPosition(),{dx:r,dy:n,distance:a}=(0,i.getDistances)(this.position,e),c=i.Vector.create(r,n);if(c.length=this.mass/Math.pow(a,2)*s.retina.reduceFactor,a<this.size+t.getRadius()){const i=.033*t.getRadius()*s.retina.pixelRatio;this.size>t.getRadius()&&a<this.size-t.getRadius()||void 0!==t.absorberOrbit&&t.absorberOrbit.length<0?o.destroy?t.destroy():(t.needsNewPosition=!0,this._updateParticlePosition(t,c)):(o.destroy&&(t.size.value-=i),this._updateParticlePosition(t,c)),(this.limit.radius<=0||this.size<this.limit.radius)&&(this.size+=i),(this.limit.mass<=0||this.mass<this.limit.mass)&&(this.mass+=i*this.options.size.density*s.retina.reduceFactor)}else this._updateParticlePosition(t,c)}draw(t){t.translate(this.position.x,this.position.y),t.beginPath(),t.arc(0,0,this.size,0,2*Math.PI,!1),t.closePath(),t.fillStyle=(0,i.getStyleFromRgb)(this.color,this.opacity),t.fill()}resize(){const t=this.initialPosition;this.position=t&&(0,i.isPointInside)(t,this.container.canvas.size,i.Vector.origin)?t:this._calcPosition()}}class a{constructor(t){this.container=t,this.array=[],this.absorbers=[],this.interactivityAbsorbers=[],t.getAbsorber=t=>void 0===t||(0,i.isNumber)(t)?this.array[t||0]:this.array.find((i=>i.name===t)),t.addAbsorber=(i,t)=>this.addAbsorber(i,t)}addAbsorber(i,t){const s=new n(this,this.container,i,t);return this.array.push(s),s}draw(i){for(const t of this.array)t.draw(i)}handleClickMode(t){const s=this.absorbers,o=this.interactivityAbsorbers;if("absorber"===t){const t=(0,i.itemFromSingleOrMultiple)(o)??(0,i.itemFromSingleOrMultiple)(s),e=this.container.interactivity.mouse.clickPosition;this.addAbsorber(t,e)}}async init(){this.absorbers=this.container.actualOptions.absorbers,this.interactivityAbsorbers=this.container.actualOptions.interactivity.modes.absorbers,(0,i.executeOnSingleOrMultiple)(this.absorbers,(i=>{this.addAbsorber(i)}))}particleUpdate(i){for(const t of this.array)if(t.attract(i),i.destroyed)break}removeAbsorber(i){const t=this.array.indexOf(i);t>=0&&this.array.splice(t,1)}resize(){for(const i of this.array)i.resize()}stop(){this.array=[]}}class c{constructor(){this.id="absorbers"}getPlugin(i){return new a(i)}loadOptions(t,s){(this.needsPlugin(t)||this.needsPlugin(s))&&(s?.absorbers&&(t.absorbers=(0,i.executeOnSingleOrMultiple)(s.absorbers,(i=>{const t=new r;return t.load(i),t}))),t.interactivity.modes.absorbers=(0,i.executeOnSingleOrMultiple)(s?.interactivity?.modes?.absorbers,(i=>{const t=new r;return t.load(i),t})))}needsPlugin(t){if(!t)return!1;const s=t.absorbers;return(0,i.isArray)(s)?!!s.length:!!s||!(!t.interactivity?.events?.onClick?.mode||!(0,i.isInArray)("absorber",t.interactivity.events.onClick.mode))}}async function h(i,t=!0){await i.addPlugin(new c,t)}})(),e})()));
@@ -1,8 +1 @@
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
- * v3.0.0-alpha.1
8
- */
1
+ /*! tsParticles Absorbers Plugin v3.0.0-beta.0 by Matteo Bruni */
@@ -1,5 +1,4 @@
1
- import type { Container, ICoordinates, IRgb, Particle, RecursivePartial } from "@tsparticles/engine";
2
- import { RotateDirection, Vector } from "@tsparticles/engine";
1
+ import { type Container, type ICoordinates, type IRgb, type Particle, type RecursivePartial, RotateDirection, Vector } from "@tsparticles/engine";
3
2
  import type { Absorbers } from "./Absorbers";
4
3
  import type { IAbsorber } from "./Options/Interfaces/IAbsorber";
5
4
  import type { IAbsorberSizeLimit } from "./Options/Interfaces/IAbsorberSizeLimit";
@@ -25,7 +24,7 @@ export declare class AbsorberInstance {
25
24
  attract(particle: OrbitingParticle): void;
26
25
  draw(context: CanvasRenderingContext2D): void;
27
26
  resize(): void;
28
- private calcPosition;
29
- private updateParticlePosition;
27
+ private readonly _calcPosition;
28
+ private readonly _updateParticlePosition;
30
29
  }
31
30
  export {};
@@ -1,4 +1,4 @@
1
- import type { IContainerPlugin, ICoordinates, Particle, RecursivePartial, SingleOrMultiple } from "@tsparticles/engine";
1
+ import { type IContainerPlugin, type ICoordinates, type Particle, type RecursivePartial, type SingleOrMultiple } from "@tsparticles/engine";
2
2
  import type { Absorber } from "./Options/Classes/Absorber";
3
3
  import type { AbsorberContainer } from "./AbsorberContainer";
4
4
  import { AbsorberInstance } from "./AbsorberInstance";
@@ -1,5 +1,4 @@
1
- import type { IOptionLoader, IRangedCoordinates, RecursivePartial } from "@tsparticles/engine";
2
- import { OptionsColor } from "@tsparticles/engine";
1
+ import { type IOptionLoader, type IRangedCoordinates, OptionsColor, type RecursivePartial } from "@tsparticles/engine";
3
2
  import { AbsorberSize } from "./AbsorberSize";
4
3
  import type { IAbsorber } from "../Interfaces/IAbsorber";
5
4
  export declare class Absorber implements IAbsorber, IOptionLoader<IAbsorber> {
@@ -1,7 +1,6 @@
1
- import type { IOptionLoader, RecursivePartial } from "@tsparticles/engine";
1
+ import { type IOptionLoader, type RecursivePartial, ValueWithRandom } from "@tsparticles/engine";
2
2
  import { AbsorberSizeLimit } from "./AbsorberSizeLimit";
3
3
  import type { IAbsorberSize } from "../Interfaces/IAbsorberSize";
4
- import { ValueWithRandom } from "@tsparticles/engine";
5
4
  export declare class AbsorberSize extends ValueWithRandom implements IAbsorberSize, IOptionLoader<IAbsorberSize> {
6
5
  density: number;
7
6
  limit: AbsorberSizeLimit;
package/types/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Engine } from "@tsparticles/engine";
2
- export declare function loadAbsorbersPlugin(engine: Engine): Promise<void>;
1
+ import { type Engine } from "@tsparticles/engine";
2
+ export declare function loadAbsorbersPlugin(engine: Engine, refresh?: boolean): Promise<void>;
3
3
  export * from "./AbsorberContainer";
4
4
  export * from "./Enums/AbsorberClickMode";
@@ -14,9 +14,61 @@
14
14
  const Absorber_1 = require("./Options/Classes/Absorber");
15
15
  class AbsorberInstance {
16
16
  constructor(absorbers, container, options, position) {
17
- var _a, _b, _c;
18
17
  this.absorbers = absorbers;
19
18
  this.container = container;
19
+ this._calcPosition = () => {
20
+ const exactPosition = (0, engine_1.calcPositionOrRandomFromSizeRanged)({
21
+ size: this.container.canvas.size,
22
+ position: this.options.position,
23
+ });
24
+ return engine_1.Vector.create(exactPosition.x, exactPosition.y);
25
+ };
26
+ this._updateParticlePosition = (particle, v) => {
27
+ if (particle.destroyed) {
28
+ return;
29
+ }
30
+ const container = this.container, canvasSize = container.canvas.size;
31
+ if (particle.needsNewPosition) {
32
+ const newPosition = (0, engine_1.calcPositionOrRandomFromSize)({ size: canvasSize });
33
+ particle.position.setTo(newPosition);
34
+ particle.velocity.setTo(particle.initialVelocity);
35
+ particle.absorberOrbit = undefined;
36
+ particle.needsNewPosition = false;
37
+ }
38
+ if (this.options.orbits) {
39
+ if (particle.absorberOrbit === undefined) {
40
+ particle.absorberOrbit = engine_1.Vector.create(0, 0);
41
+ particle.absorberOrbit.length = (0, engine_1.getDistance)(particle.getPosition(), this.position);
42
+ particle.absorberOrbit.angle = (0, engine_1.getRandom)() * Math.PI * 2;
43
+ }
44
+ if (particle.absorberOrbit.length <= this.size && !this.options.destroy) {
45
+ const minSize = Math.min(canvasSize.width, canvasSize.height);
46
+ particle.absorberOrbit.length = minSize * (1 + ((0, engine_1.getRandom)() * 0.2 - 0.1));
47
+ }
48
+ if (particle.absorberOrbitDirection === undefined) {
49
+ particle.absorberOrbitDirection =
50
+ particle.velocity.x >= 0 ? "clockwise" : "counter-clockwise";
51
+ }
52
+ const orbitRadius = particle.absorberOrbit.length, orbitAngle = particle.absorberOrbit.angle, orbitDirection = particle.absorberOrbitDirection;
53
+ particle.velocity.setTo(engine_1.Vector.origin);
54
+ const updateFunc = {
55
+ x: orbitDirection === "clockwise" ? Math.cos : Math.sin,
56
+ y: orbitDirection === "clockwise" ? Math.sin : Math.cos,
57
+ };
58
+ particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);
59
+ particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);
60
+ particle.absorberOrbit.length -= v.length;
61
+ particle.absorberOrbit.angle +=
62
+ (((particle.retina.moveSpeed ?? 0) * container.retina.pixelRatio) / 100) *
63
+ container.retina.reduceFactor;
64
+ }
65
+ else {
66
+ const addV = engine_1.Vector.origin;
67
+ addV.length = v.length;
68
+ addV.angle = v.angle;
69
+ particle.velocity.addTo(addV);
70
+ }
71
+ };
20
72
  this.initialPosition = position ? engine_1.Vector.create(position.x, position.y) : undefined;
21
73
  if (options instanceof Absorber_1.Absorber) {
22
74
  this.options = options;
@@ -35,12 +87,12 @@
35
87
  radius: limit.radius * container.retina.pixelRatio * container.retina.reduceFactor,
36
88
  mass: limit.mass,
37
89
  };
38
- this.color = (_a = (0, engine_1.rangeColorToRgb)(this.options.color)) !== null && _a !== void 0 ? _a : {
90
+ this.color = (0, engine_1.rangeColorToRgb)(this.options.color) ?? {
39
91
  b: 0,
40
92
  g: 0,
41
93
  r: 0,
42
94
  };
43
- this.position = (_c = (_b = this.initialPosition) === null || _b === void 0 ? void 0 : _b.copy()) !== null && _c !== void 0 ? _c : this.calcPosition();
95
+ this.position = this.initialPosition?.copy() ?? this._calcPosition();
44
96
  }
45
97
  attract(particle) {
46
98
  const container = this.container, options = this.options;
@@ -71,14 +123,14 @@
71
123
  }
72
124
  else {
73
125
  particle.needsNewPosition = true;
74
- this.updateParticlePosition(particle, v);
126
+ this._updateParticlePosition(particle, v);
75
127
  }
76
128
  }
77
129
  else {
78
130
  if (options.destroy) {
79
131
  particle.size.value -= sizeFactor;
80
132
  }
81
- this.updateParticlePosition(particle, v);
133
+ this._updateParticlePosition(particle, v);
82
134
  }
83
135
  if (this.limit.radius <= 0 || this.size < this.limit.radius) {
84
136
  this.size += sizeFactor;
@@ -88,7 +140,7 @@
88
140
  }
89
141
  }
90
142
  else {
91
- this.updateParticlePosition(particle, v);
143
+ this._updateParticlePosition(particle, v);
92
144
  }
93
145
  }
94
146
  draw(context) {
@@ -104,61 +156,7 @@
104
156
  this.position =
105
157
  initialPosition && (0, engine_1.isPointInside)(initialPosition, this.container.canvas.size, engine_1.Vector.origin)
106
158
  ? initialPosition
107
- : this.calcPosition();
108
- }
109
- calcPosition() {
110
- const exactPosition = (0, engine_1.calcPositionOrRandomFromSizeRanged)({
111
- size: this.container.canvas.size,
112
- position: this.options.position,
113
- });
114
- return engine_1.Vector.create(exactPosition.x, exactPosition.y);
115
- }
116
- updateParticlePosition(particle, v) {
117
- var _a;
118
- if (particle.destroyed) {
119
- return;
120
- }
121
- const container = this.container, canvasSize = container.canvas.size;
122
- if (particle.needsNewPosition) {
123
- const newPosition = (0, engine_1.calcPositionOrRandomFromSize)({ size: canvasSize });
124
- particle.position.setTo(newPosition);
125
- particle.velocity.setTo(particle.initialVelocity);
126
- particle.absorberOrbit = undefined;
127
- particle.needsNewPosition = false;
128
- }
129
- if (this.options.orbits) {
130
- if (particle.absorberOrbit === undefined) {
131
- particle.absorberOrbit = engine_1.Vector.create(0, 0);
132
- particle.absorberOrbit.length = (0, engine_1.getDistance)(particle.getPosition(), this.position);
133
- particle.absorberOrbit.angle = (0, engine_1.getRandom)() * Math.PI * 2;
134
- }
135
- if (particle.absorberOrbit.length <= this.size && !this.options.destroy) {
136
- const minSize = Math.min(canvasSize.width, canvasSize.height);
137
- particle.absorberOrbit.length = minSize * (1 + ((0, engine_1.getRandom)() * 0.2 - 0.1));
138
- }
139
- if (particle.absorberOrbitDirection === undefined) {
140
- particle.absorberOrbitDirection =
141
- particle.velocity.x >= 0 ? "clockwise" : "counter-clockwise";
142
- }
143
- const orbitRadius = particle.absorberOrbit.length, orbitAngle = particle.absorberOrbit.angle, orbitDirection = particle.absorberOrbitDirection;
144
- particle.velocity.setTo(engine_1.Vector.origin);
145
- const updateFunc = {
146
- x: orbitDirection === "clockwise" ? Math.cos : Math.sin,
147
- y: orbitDirection === "clockwise" ? Math.sin : Math.cos,
148
- };
149
- particle.position.x = this.position.x + orbitRadius * updateFunc.x(orbitAngle);
150
- particle.position.y = this.position.y + orbitRadius * updateFunc.y(orbitAngle);
151
- particle.absorberOrbit.length -= v.length;
152
- particle.absorberOrbit.angle +=
153
- ((((_a = particle.retina.moveSpeed) !== null && _a !== void 0 ? _a : 0) * container.retina.pixelRatio) / 100) *
154
- container.retina.reduceFactor;
155
- }
156
- else {
157
- const addV = engine_1.Vector.origin;
158
- addV.length = v.length;
159
- addV.angle = v.angle;
160
- particle.velocity.addTo(addV);
161
- }
159
+ : this._calcPosition();
162
160
  }
163
161
  }
164
162
  exports.AbsorberInstance = AbsorberInstance;
package/umd/Absorbers.js CHANGED
@@ -18,7 +18,7 @@
18
18
  this.array = [];
19
19
  this.absorbers = [];
20
20
  this.interactivityAbsorbers = [];
21
- container.getAbsorber = (idxOrName) => idxOrName === undefined || typeof idxOrName === "number"
21
+ container.getAbsorber = (idxOrName) => idxOrName === undefined || (0, engine_1.isNumber)(idxOrName)
22
22
  ? this.array[idxOrName || 0]
23
23
  : this.array.find((t) => t.name === idxOrName);
24
24
  container.addAbsorber = (options, position) => this.addAbsorber(options, position);
@@ -36,7 +36,7 @@
36
36
  handleClickMode(mode) {
37
37
  const absorberOptions = this.absorbers, modeAbsorbers = this.interactivityAbsorbers;
38
38
  if (mode === "absorber") {
39
- const absorbersModeOptions = (0, engine_1.itemFromSingleOrMultiple)(modeAbsorbers), absorbersOptions = absorbersModeOptions !== null && absorbersModeOptions !== void 0 ? absorbersModeOptions : (0, engine_1.itemFromSingleOrMultiple)(absorberOptions), aPosition = this.container.interactivity.mouse.clickPosition;
39
+ const absorbersModeOptions = (0, engine_1.itemFromSingleOrMultiple)(modeAbsorbers), absorbersOptions = absorbersModeOptions ?? (0, engine_1.itemFromSingleOrMultiple)(absorberOptions), aPosition = this.container.interactivity.mouse.clickPosition;
40
40
  this.addAbsorber(absorbersOptions, aPosition);
41
41
  }
42
42
  }
@@ -4,14 +4,14 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "./AbsorberSizeLimit", "@tsparticles/engine"], factory);
7
+ define(["require", "exports", "@tsparticles/engine", "./AbsorberSizeLimit"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AbsorberSize = void 0;
13
- const AbsorberSizeLimit_1 = require("./AbsorberSizeLimit");
14
13
  const engine_1 = require("@tsparticles/engine");
14
+ const AbsorberSizeLimit_1 = require("./AbsorberSizeLimit");
15
15
  class AbsorberSize extends engine_1.ValueWithRandom {
16
16
  constructor() {
17
17
  super();
@@ -27,7 +27,7 @@
27
27
  if (data.density !== undefined) {
28
28
  this.density = data.density;
29
29
  }
30
- if (typeof data.limit === "number") {
30
+ if ((0, engine_1.isNumber)(data.limit)) {
31
31
  this.limit.radius = data.limit;
32
32
  }
33
33
  else {
package/umd/index.js CHANGED
@@ -35,45 +35,42 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
35
35
  return new Absorbers_1.Absorbers(container);
36
36
  }
37
37
  loadOptions(options, source) {
38
- var _a, _b;
39
38
  if (!this.needsPlugin(options) && !this.needsPlugin(source)) {
40
39
  return;
41
40
  }
42
- if (source === null || source === void 0 ? void 0 : source.absorbers) {
41
+ if (source?.absorbers) {
43
42
  options.absorbers = (0, engine_1.executeOnSingleOrMultiple)(source.absorbers, (absorber) => {
44
43
  const tmp = new Absorber_1.Absorber();
45
44
  tmp.load(absorber);
46
45
  return tmp;
47
46
  });
48
47
  }
49
- options.interactivity.modes.absorbers = (0, engine_1.executeOnSingleOrMultiple)((_b = (_a = source === null || source === void 0 ? void 0 : source.interactivity) === null || _a === void 0 ? void 0 : _a.modes) === null || _b === void 0 ? void 0 : _b.absorbers, (absorber) => {
48
+ options.interactivity.modes.absorbers = (0, engine_1.executeOnSingleOrMultiple)(source?.interactivity?.modes?.absorbers, (absorber) => {
50
49
  const tmp = new Absorber_1.Absorber();
51
50
  tmp.load(absorber);
52
51
  return tmp;
53
52
  });
54
53
  }
55
54
  needsPlugin(options) {
56
- var _a, _b, _c;
57
55
  if (!options) {
58
56
  return false;
59
57
  }
60
58
  const absorbers = options.absorbers;
61
- if (absorbers instanceof Array) {
59
+ if ((0, engine_1.isArray)(absorbers)) {
62
60
  return !!absorbers.length;
63
61
  }
64
62
  else if (absorbers) {
65
63
  return true;
66
64
  }
67
- else if (((_c = (_b = (_a = options.interactivity) === null || _a === void 0 ? void 0 : _a.events) === null || _b === void 0 ? void 0 : _b.onClick) === null || _c === void 0 ? void 0 : _c.mode) &&
65
+ else if (options.interactivity?.events?.onClick?.mode &&
68
66
  (0, engine_1.isInArray)("absorber", options.interactivity.events.onClick.mode)) {
69
67
  return true;
70
68
  }
71
69
  return false;
72
70
  }
73
71
  }
74
- async function loadAbsorbersPlugin(engine) {
75
- const plugin = new AbsorbersPlugin();
76
- await engine.addPlugin(plugin);
72
+ async function loadAbsorbersPlugin(engine, refresh = true) {
73
+ await engine.addPlugin(new AbsorbersPlugin(), refresh);
77
74
  }
78
75
  exports.loadAbsorbersPlugin = loadAbsorbersPlugin;
79
76
  __exportStar(require("./AbsorberContainer"), exports);