@tsparticles/slim 3.0.0-beta.1 → 3.0.0-beta.3

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-beta.1
7
+ * v3.0.0-beta.3
8
8
  */
9
9
  (function webpackUniversalModuleDefinition(root, factory) {
10
10
  if(typeof exports === 'object' && typeof module === 'object')
@@ -206,6 +206,7 @@ __webpack_require__.d(__webpack_exports__, {
206
206
  rectBounce: () => (/* reexport */ rectBounce),
207
207
  resizeEvent: () => (/* reexport */ resizeEvent),
208
208
  rgbToHsl: () => (/* reexport */ rgbToHsl),
209
+ safeIntersectionObserver: () => (/* reexport */ safeIntersectionObserver),
209
210
  safeMatchMedia: () => (/* reexport */ safeMatchMedia),
210
211
  safeMutationObserver: () => (/* reexport */ safeMutationObserver),
211
212
  setLogger: () => (/* reexport */ setLogger),
@@ -572,6 +573,12 @@ function safeMatchMedia(query) {
572
573
  }
573
574
  return matchMedia(query);
574
575
  }
576
+ function safeIntersectionObserver(callback) {
577
+ if (isSsr() || typeof IntersectionObserver === "undefined") {
578
+ return;
579
+ }
580
+ return new IntersectionObserver(callback);
581
+ }
575
582
  function safeMutationObserver(callback) {
576
583
  if (isSsr() || typeof MutationObserver === "undefined") {
577
584
  return;
@@ -1231,7 +1238,15 @@ function drawParticle(data) {
1231
1238
  if (colorStyles.stroke) {
1232
1239
  context.strokeStyle = colorStyles.stroke;
1233
1240
  }
1234
- drawShape(container, context, particle, radius, opacity, delta);
1241
+ const drawData = {
1242
+ container,
1243
+ context,
1244
+ particle,
1245
+ radius,
1246
+ opacity,
1247
+ delta
1248
+ };
1249
+ drawShape(drawData);
1235
1250
  if (strokeWidth > 0) {
1236
1251
  context.stroke();
1237
1252
  }
@@ -1241,11 +1256,19 @@ function drawParticle(data) {
1241
1256
  if (particle.fill) {
1242
1257
  context.fill();
1243
1258
  }
1244
- drawShapeAfterEffect(container, context, particle, radius, opacity, delta);
1259
+ drawShapeAfterEffect(drawData);
1245
1260
  context.globalCompositeOperation = "source-over";
1246
1261
  context.setTransform(1, 0, 0, 1, 0, 0);
1247
1262
  }
1248
- function drawShape(container, context, particle, radius, opacity, delta) {
1263
+ function drawShape(data) {
1264
+ const {
1265
+ container,
1266
+ context,
1267
+ particle,
1268
+ radius,
1269
+ opacity,
1270
+ delta
1271
+ } = data;
1249
1272
  if (!particle.shape) {
1250
1273
  return;
1251
1274
  }
@@ -1253,9 +1276,24 @@ function drawShape(container, context, particle, radius, opacity, delta) {
1253
1276
  if (!drawer) {
1254
1277
  return;
1255
1278
  }
1256
- drawer.draw(context, particle, radius, opacity, delta, container.retina.pixelRatio);
1279
+ drawer.draw({
1280
+ context,
1281
+ particle,
1282
+ radius,
1283
+ opacity,
1284
+ delta,
1285
+ pixelRatio: container.retina.pixelRatio
1286
+ });
1257
1287
  }
1258
- function drawShapeAfterEffect(container, context, particle, radius, opacity, delta) {
1288
+ function drawShapeAfterEffect(data) {
1289
+ const {
1290
+ container,
1291
+ context,
1292
+ particle,
1293
+ radius,
1294
+ opacity,
1295
+ delta
1296
+ } = data;
1259
1297
  if (!particle.shape) {
1260
1298
  return;
1261
1299
  }
@@ -1263,7 +1301,14 @@ function drawShapeAfterEffect(container, context, particle, radius, opacity, del
1263
1301
  if (!drawer || !drawer.afterEffect) {
1264
1302
  return;
1265
1303
  }
1266
- drawer.afterEffect(context, particle, radius, opacity, delta, container.retina.pixelRatio);
1304
+ drawer.afterEffect({
1305
+ context,
1306
+ particle,
1307
+ radius,
1308
+ opacity,
1309
+ delta,
1310
+ pixelRatio: container.retina.pixelRatio
1311
+ });
1267
1312
  }
1268
1313
  function drawPlugin(context, plugin, delta) {
1269
1314
  if (!plugin.draw) {
@@ -3647,7 +3692,17 @@ class InteractionManager {
3647
3692
 
3648
3693
 
3649
3694
 
3650
- const fixOutMode = data => {
3695
+ function loadShapeData(shape, shapeOptions, id, reduceDuplicates) {
3696
+ const shapeData = shapeOptions.options[shape];
3697
+ if (!shapeData) {
3698
+ return;
3699
+ }
3700
+ return deepExtend({
3701
+ close: shapeOptions.close,
3702
+ fill: shapeOptions.fill
3703
+ }, itemFromSingleOrMultiple(shapeData, id, reduceDuplicates));
3704
+ }
3705
+ function fixOutMode(data) {
3651
3706
  if (!isInArray(data.outMode, data.checkModes)) {
3652
3707
  return;
3653
3708
  }
@@ -3657,7 +3712,7 @@ const fixOutMode = data => {
3657
3712
  } else if (data.coord < diameter) {
3658
3713
  data.setCb(data.radius);
3659
3714
  }
3660
- };
3715
+ }
3661
3716
  class Particle {
3662
3717
  constructor(engine, id, container, position, overrideOptions, group) {
3663
3718
  this.container = container;
@@ -3782,16 +3837,6 @@ class Particle {
3782
3837
  }
3783
3838
  this.offset = Vector.origin;
3784
3839
  };
3785
- this._loadShapeData = (shapeOptions, reduceDuplicates) => {
3786
- const shapeData = shapeOptions.options[this.shape];
3787
- if (!shapeData) {
3788
- return;
3789
- }
3790
- return deepExtend({
3791
- close: shapeOptions.close,
3792
- fill: shapeOptions.fill
3793
- }, itemFromSingleOrMultiple(shapeData, this.id, reduceDuplicates));
3794
- };
3795
3840
  this._engine = engine;
3796
3841
  this.init(id, position, overrideOptions, group);
3797
3842
  }
@@ -3880,7 +3925,7 @@ class Particle {
3880
3925
  shapeOptions.load(overrideOptions.shape);
3881
3926
  }
3882
3927
  }
3883
- this.shapeData = this._loadShapeData(shapeOptions, reduceDuplicates);
3928
+ this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);
3884
3929
  particlesOptions.load(overrideOptions);
3885
3930
  const shapeData = this.shapeData;
3886
3931
  if (shapeData) {
@@ -4191,8 +4236,9 @@ class Particles {
4191
4236
  return false;
4192
4237
  }
4193
4238
  particle.destroy(override);
4239
+ const zIdx = this._zArray.indexOf(particle);
4194
4240
  this._array.splice(index, 1);
4195
- this._zArray = this._zArray.splice(this._zArray.indexOf(particle), 1);
4241
+ this._zArray.splice(zIdx, 1);
4196
4242
  this.pool.push(particle);
4197
4243
  this._engine.dispatchEvent("particleRemoved", {
4198
4244
  container: this._container,
@@ -4299,7 +4345,7 @@ class Particles {
4299
4345
  this.addManualParticles();
4300
4346
  if (!handled) {
4301
4347
  const particlesOptions = options.particles,
4302
- groups = options.particles.groups;
4348
+ groups = particlesOptions.groups;
4303
4349
  for (const group in groups) {
4304
4350
  const groupOptions = groups[group];
4305
4351
  for (let i = this.count, j = 0; j < groupOptions.number?.value && i < particlesOptions.number.value; i++, j++) {
@@ -4475,7 +4521,6 @@ function loadContainerOptions(engine, container, ...sourceOptionsArr) {
4475
4521
  }
4476
4522
  class Container {
4477
4523
  constructor(engine, id, sourceOptions) {
4478
- this.id = id;
4479
4524
  this._intersectionManager = entries => {
4480
4525
  if (!guardCheck(this) || !this.actualOptions.pauseOnOutsideViewport) {
4481
4526
  return;
@@ -4514,6 +4559,7 @@ class Container {
4514
4559
  }
4515
4560
  };
4516
4561
  this._engine = engine;
4562
+ this.id = Symbol(id);
4517
4563
  this.fpsLimit = 120;
4518
4564
  this.smooth = false;
4519
4565
  this._delay = 0;
@@ -4543,9 +4589,7 @@ class Container {
4543
4589
  this._options = loadContainerOptions(this._engine, this);
4544
4590
  this.actualOptions = loadContainerOptions(this._engine, this);
4545
4591
  this._eventListeners = new EventListeners(this);
4546
- if (typeof IntersectionObserver !== "undefined" && IntersectionObserver) {
4547
- this._intersectionObserver = new IntersectionObserver(entries => this._intersectionManager(entries));
4548
- }
4592
+ this._intersectionObserver = safeIntersectionObserver(entries => this._intersectionManager(entries));
4549
4593
  this._engine.dispatchEvent("containerBuilt", {
4550
4594
  container: this
4551
4595
  });
@@ -4988,17 +5032,17 @@ class Engine {
4988
5032
  return res;
4989
5033
  }
4990
5034
  get version() {
4991
- return "3.0.0-beta.1";
5035
+ return "3.0.0-beta.3";
4992
5036
  }
4993
- addConfig(nameOrConfig, config) {
4994
- if (isString(nameOrConfig)) {
4995
- if (config) {
4996
- config.name = nameOrConfig;
4997
- this._configs.set(nameOrConfig, config);
5037
+ addConfig(config) {
5038
+ const name = config.name ?? "default";
5039
+ this._configs.set(name, config);
5040
+ this._eventDispatcher.dispatchEvent("configAdded", {
5041
+ data: {
5042
+ name,
5043
+ config
4998
5044
  }
4999
- } else {
5000
- this._configs.set(nameOrConfig.name ?? "default", nameOrConfig);
5001
- }
5045
+ });
5002
5046
  }
5003
5047
  addEventListener(type, listener) {
5004
5048
  this._eventDispatcher.addEventListener(type, listener);
@@ -5027,44 +5071,11 @@ class Engine {
5027
5071
  (override || !this.getPreset(preset)) && this.presets.set(preset, options);
5028
5072
  await this.refresh(refresh);
5029
5073
  }
5030
- async addShape(shape, drawer, initOrRefresh, afterEffectOrRefresh, destroyOrRefresh, refresh = true) {
5031
- let customDrawer;
5032
- let realRefresh = refresh,
5033
- realInit,
5034
- realAfterEffect,
5035
- realDestroy;
5036
- if (isBoolean(initOrRefresh)) {
5037
- realRefresh = initOrRefresh;
5038
- realInit = undefined;
5039
- } else {
5040
- realInit = initOrRefresh;
5041
- }
5042
- if (isBoolean(afterEffectOrRefresh)) {
5043
- realRefresh = afterEffectOrRefresh;
5044
- realAfterEffect = undefined;
5045
- } else {
5046
- realAfterEffect = afterEffectOrRefresh;
5047
- }
5048
- if (isBoolean(destroyOrRefresh)) {
5049
- realRefresh = destroyOrRefresh;
5050
- realDestroy = undefined;
5051
- } else {
5052
- realDestroy = destroyOrRefresh;
5053
- }
5054
- if (isFunction(drawer)) {
5055
- customDrawer = {
5056
- afterEffect: realAfterEffect,
5057
- destroy: realDestroy,
5058
- draw: drawer,
5059
- init: realInit
5060
- };
5061
- } else {
5062
- customDrawer = drawer;
5063
- }
5074
+ async addShape(shape, drawer, refresh = true) {
5064
5075
  executeOnSingleOrMultiple(shape, type => {
5065
- !this.getShapeDrawer(type) && this.drawers.set(type, customDrawer);
5076
+ !this.getShapeDrawer(type) && this.drawers.set(type, drawer);
5066
5077
  });
5067
- await this.refresh(realRefresh);
5078
+ await this.refresh(refresh);
5068
5079
  }
5069
5080
  clearPlugins(container) {
5070
5081
  this.updaters.delete(container);
@@ -5142,7 +5153,7 @@ class Engine {
5142
5153
  }
5143
5154
  const currentOptions = itemFromSingleOrMultiple(options, index),
5144
5155
  dom = this.dom(),
5145
- oldIndex = dom.findIndex(v => v.id === id);
5156
+ oldIndex = dom.findIndex(v => v.id.description === id);
5146
5157
  if (oldIndex >= 0) {
5147
5158
  const old = this.domItem(oldIndex);
5148
5159
  if (old && !old.destroyed) {
@@ -5749,7 +5760,12 @@ async function loadBaseMover(engine, refresh = true) {
5749
5760
  ;// CONCATENATED MODULE: ../../shapes/circle/dist/browser/CircleDrawer.js
5750
5761
 
5751
5762
  class CircleDrawer {
5752
- draw(context, particle, radius) {
5763
+ draw(data) {
5764
+ const {
5765
+ context,
5766
+ particle,
5767
+ radius
5768
+ } = data;
5753
5769
  if (!particle.circleRange) {
5754
5770
  particle.circleRange = {
5755
5771
  min: 0,
@@ -8553,8 +8569,15 @@ class ImageDrawer {
8553
8569
  }
8554
8570
  this._engine.images.push(image);
8555
8571
  }
8556
- draw(context, particle, radius, opacity, delta) {
8557
- const image = particle.image,
8572
+ draw(data) {
8573
+ const {
8574
+ context,
8575
+ radius,
8576
+ particle,
8577
+ opacity,
8578
+ delta
8579
+ } = data,
8580
+ image = particle.image,
8558
8581
  element = image?.element;
8559
8582
  if (!image) {
8560
8583
  return;
@@ -8990,8 +9013,13 @@ async function loadLifeUpdater(engine, refresh = true) {
8990
9013
  }
8991
9014
  ;// CONCATENATED MODULE: ../../shapes/line/dist/browser/LineDrawer.js
8992
9015
  class LineDrawer {
8993
- draw(context, particle, radius) {
8994
- const shapeData = particle.shapeData;
9016
+ draw(data) {
9017
+ const {
9018
+ context,
9019
+ particle,
9020
+ radius
9021
+ } = data,
9022
+ shapeData = particle.shapeData;
8995
9023
  context.moveTo(-radius / 2, 0);
8996
9024
  context.lineTo(radius / 2, 0);
8997
9025
  context.lineCap = shapeData?.cap ?? "butt";
@@ -9807,8 +9835,13 @@ async function loadParticlesLinksInteraction(engine, refresh = true) {
9807
9835
  ;// CONCATENATED MODULE: ../../shapes/polygon/dist/browser/PolygonDrawerBase.js
9808
9836
 
9809
9837
  class PolygonDrawerBase {
9810
- draw(context, particle, radius) {
9811
- const start = this.getCenter(particle, radius),
9838
+ draw(data) {
9839
+ const {
9840
+ context,
9841
+ particle,
9842
+ radius
9843
+ } = data,
9844
+ start = this.getCenter(particle, radius),
9812
9845
  side = this.getSidesData(particle, radius),
9813
9846
  sideCount = side.count.numerator * side.count.denominator,
9814
9847
  decimalSides = side.count.numerator / side.count.denominator,
@@ -10042,8 +10075,12 @@ async function loadRotateUpdater(engine, refresh = true) {
10042
10075
  ;// CONCATENATED MODULE: ../../shapes/square/dist/browser/SquareDrawer.js
10043
10076
  const fixFactor = Math.sqrt(2);
10044
10077
  class SquareDrawer {
10045
- draw(context, particle, radius) {
10046
- const fixedRadius = radius / fixFactor,
10078
+ draw(data) {
10079
+ const {
10080
+ context,
10081
+ radius
10082
+ } = data,
10083
+ fixedRadius = radius / fixFactor,
10047
10084
  fixedDiameter = fixedRadius * 2;
10048
10085
  context.rect(-fixedRadius, -fixedRadius, fixedDiameter, fixedDiameter);
10049
10086
  }
@@ -10059,8 +10096,13 @@ async function loadSquareShape(engine, refresh = true) {
10059
10096
  ;// CONCATENATED MODULE: ../../shapes/star/dist/browser/StarDrawer.js
10060
10097
 
10061
10098
  class StarDrawer {
10062
- draw(context, particle, radius) {
10063
- const sides = particle.sides,
10099
+ draw(data) {
10100
+ const {
10101
+ context,
10102
+ particle,
10103
+ radius
10104
+ } = data,
10105
+ sides = particle.sides,
10064
10106
  inset = particle.starInset ?? 2;
10065
10107
  context.moveTo(0, 0 - radius);
10066
10108
  for (let i = 0; i < sides; i++) {
@@ -10198,8 +10240,14 @@ async function loadStrokeColorUpdater(engine, refresh = true) {
10198
10240
 
10199
10241
  const validTypes = ["text", "character", "char"];
10200
10242
  class TextDrawer {
10201
- draw(context, particle, radius, opacity) {
10202
- const character = particle.shapeData;
10243
+ draw(data) {
10244
+ const {
10245
+ context,
10246
+ particle,
10247
+ radius,
10248
+ opacity
10249
+ } = data,
10250
+ character = particle.shapeData;
10203
10251
  if (character === undefined) {
10204
10252
  return;
10205
10253
  }