@tsparticles/confetti 3.0.0-beta.2 → 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.2
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) {
@@ -4476,7 +4521,6 @@ function loadContainerOptions(engine, container, ...sourceOptionsArr) {
4476
4521
  }
4477
4522
  class Container {
4478
4523
  constructor(engine, id, sourceOptions) {
4479
- this.id = id;
4480
4524
  this._intersectionManager = entries => {
4481
4525
  if (!guardCheck(this) || !this.actualOptions.pauseOnOutsideViewport) {
4482
4526
  return;
@@ -4515,6 +4559,7 @@ class Container {
4515
4559
  }
4516
4560
  };
4517
4561
  this._engine = engine;
4562
+ this.id = Symbol(id);
4518
4563
  this.fpsLimit = 120;
4519
4564
  this.smooth = false;
4520
4565
  this._delay = 0;
@@ -4544,9 +4589,7 @@ class Container {
4544
4589
  this._options = loadContainerOptions(this._engine, this);
4545
4590
  this.actualOptions = loadContainerOptions(this._engine, this);
4546
4591
  this._eventListeners = new EventListeners(this);
4547
- if (typeof IntersectionObserver !== "undefined" && IntersectionObserver) {
4548
- this._intersectionObserver = new IntersectionObserver(entries => this._intersectionManager(entries));
4549
- }
4592
+ this._intersectionObserver = safeIntersectionObserver(entries => this._intersectionManager(entries));
4550
4593
  this._engine.dispatchEvent("containerBuilt", {
4551
4594
  container: this
4552
4595
  });
@@ -4989,17 +5032,17 @@ class Engine {
4989
5032
  return res;
4990
5033
  }
4991
5034
  get version() {
4992
- return "3.0.0-beta.2";
5035
+ return "3.0.0-beta.3";
4993
5036
  }
4994
- addConfig(nameOrConfig, config) {
4995
- if (isString(nameOrConfig)) {
4996
- if (config) {
4997
- config.name = nameOrConfig;
4998
- 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
4999
5044
  }
5000
- } else {
5001
- this._configs.set(nameOrConfig.name ?? "default", nameOrConfig);
5002
- }
5045
+ });
5003
5046
  }
5004
5047
  addEventListener(type, listener) {
5005
5048
  this._eventDispatcher.addEventListener(type, listener);
@@ -5028,44 +5071,11 @@ class Engine {
5028
5071
  (override || !this.getPreset(preset)) && this.presets.set(preset, options);
5029
5072
  await this.refresh(refresh);
5030
5073
  }
5031
- async addShape(shape, drawer, initOrRefresh, afterEffectOrRefresh, destroyOrRefresh, refresh = true) {
5032
- let customDrawer;
5033
- let realRefresh = refresh,
5034
- realInit,
5035
- realAfterEffect,
5036
- realDestroy;
5037
- if (isBoolean(initOrRefresh)) {
5038
- realRefresh = initOrRefresh;
5039
- realInit = undefined;
5040
- } else {
5041
- realInit = initOrRefresh;
5042
- }
5043
- if (isBoolean(afterEffectOrRefresh)) {
5044
- realRefresh = afterEffectOrRefresh;
5045
- realAfterEffect = undefined;
5046
- } else {
5047
- realAfterEffect = afterEffectOrRefresh;
5048
- }
5049
- if (isBoolean(destroyOrRefresh)) {
5050
- realRefresh = destroyOrRefresh;
5051
- realDestroy = undefined;
5052
- } else {
5053
- realDestroy = destroyOrRefresh;
5054
- }
5055
- if (isFunction(drawer)) {
5056
- customDrawer = {
5057
- afterEffect: realAfterEffect,
5058
- destroy: realDestroy,
5059
- draw: drawer,
5060
- init: realInit
5061
- };
5062
- } else {
5063
- customDrawer = drawer;
5064
- }
5074
+ async addShape(shape, drawer, refresh = true) {
5065
5075
  executeOnSingleOrMultiple(shape, type => {
5066
- !this.getShapeDrawer(type) && this.drawers.set(type, customDrawer);
5076
+ !this.getShapeDrawer(type) && this.drawers.set(type, drawer);
5067
5077
  });
5068
- await this.refresh(realRefresh);
5078
+ await this.refresh(refresh);
5069
5079
  }
5070
5080
  clearPlugins(container) {
5071
5081
  this.updaters.delete(container);
@@ -5143,7 +5153,7 @@ class Engine {
5143
5153
  }
5144
5154
  const currentOptions = itemFromSingleOrMultiple(options, index),
5145
5155
  dom = this.dom(),
5146
- oldIndex = dom.findIndex(v => v.id === id);
5156
+ oldIndex = dom.findIndex(v => v.id.description === id);
5147
5157
  if (oldIndex >= 0) {
5148
5158
  const old = this.domItem(oldIndex);
5149
5159
  if (old && !old.destroyed) {
@@ -5734,7 +5744,12 @@ async function loadBaseMover(engine, refresh = true) {
5734
5744
  ;// CONCATENATED MODULE: ../../shapes/circle/dist/browser/CircleDrawer.js
5735
5745
 
5736
5746
  class CircleDrawer {
5737
- draw(context, particle, radius) {
5747
+ draw(data) {
5748
+ const {
5749
+ context,
5750
+ particle,
5751
+ radius
5752
+ } = data;
5738
5753
  if (!particle.circleRange) {
5739
5754
  particle.circleRange = {
5740
5755
  min: 0,
@@ -6429,18 +6444,22 @@ async function loadBasic(engine, refresh = true) {
6429
6444
  await engine.refresh(refresh);
6430
6445
  }
6431
6446
  ;// CONCATENATED MODULE: ../../shapes/cards/dist/browser/Utils.js
6432
- function drawPath(ctx, radius, path) {
6447
+ function drawPath(data, path) {
6433
6448
  if (!path.segments.length || !path.segments[0].values.length) {
6434
6449
  return;
6435
6450
  }
6436
- ctx.moveTo(path.segments[0].values[0].x * radius, path.segments[0].values[0].y * radius);
6451
+ const {
6452
+ context,
6453
+ radius
6454
+ } = data;
6455
+ context.moveTo(path.segments[0].values[0].x * radius, path.segments[0].values[0].y * radius);
6437
6456
  for (let i = 0; i < path.segments.length; i++) {
6438
6457
  const segment = path.segments[i];
6439
- ctx.bezierCurveTo(segment.values[1].x * radius, segment.values[1].y * radius, segment.values[2].x * radius, segment.values[2].y * radius, segment.values[3].x * radius, segment.values[3].y * radius);
6458
+ context.bezierCurveTo(segment.values[1].x * radius, segment.values[1].y * radius, segment.values[2].x * radius, segment.values[2].y * radius, segment.values[3].x * radius, segment.values[3].y * radius);
6440
6459
  }
6441
6460
  for (let i = path.segments.length - 1; i >= 0; i--) {
6442
6461
  const segment = path.segments[i];
6443
- ctx.bezierCurveTo(-segment.values[2].x * radius, segment.values[2].y * radius, -segment.values[1].x * radius, segment.values[1].y * radius, -segment.values[0].x * radius, segment.values[0].y * radius);
6462
+ context.bezierCurveTo(-segment.values[2].x * radius, segment.values[2].y * radius, -segment.values[1].x * radius, segment.values[1].y * radius, -segment.values[0].x * radius, segment.values[0].y * radius);
6444
6463
  }
6445
6464
  }
6446
6465
  const n = 1.0 / 2;
@@ -6685,23 +6704,23 @@ const paths = {
6685
6704
  ;// CONCATENATED MODULE: ../../shapes/cards/dist/browser/CardsSuitsDrawers.js
6686
6705
 
6687
6706
  class SpadeDrawer {
6688
- draw(context, _particle, radius) {
6689
- drawPath(context, radius, paths.spade);
6707
+ draw(data) {
6708
+ drawPath(data, paths.spade);
6690
6709
  }
6691
6710
  }
6692
6711
  class HeartDrawer {
6693
- draw(context, _particle, radius) {
6694
- drawPath(context, radius, paths.heart);
6712
+ draw(data) {
6713
+ drawPath(data, paths.heart);
6695
6714
  }
6696
6715
  }
6697
6716
  class DiamondDrawer {
6698
- draw(context, _particle, radius) {
6699
- drawPath(context, radius, paths.diamond);
6717
+ draw(data) {
6718
+ drawPath(data, paths.diamond);
6700
6719
  }
6701
6720
  }
6702
6721
  class ClubDrawer {
6703
- draw(context, _particle, radius) {
6704
- drawPath(context, radius, paths.club);
6722
+ draw(data) {
6723
+ drawPath(data, paths.club);
6705
6724
  }
6706
6725
  }
6707
6726
  ;// CONCATENATED MODULE: ../../shapes/cards/dist/browser/index.js
@@ -7396,7 +7415,11 @@ async function loadEmittersPlugin(engine, refresh = true) {
7396
7415
 
7397
7416
  ;// CONCATENATED MODULE: ../../shapes/heart/dist/browser/HeartDrawer.js
7398
7417
  class HeartDrawer_HeartDrawer {
7399
- draw(context, _particle, radius) {
7418
+ draw(data) {
7419
+ const {
7420
+ context,
7421
+ radius
7422
+ } = data;
7400
7423
  const x = -radius,
7401
7424
  y = -radius;
7402
7425
  context.moveTo(x, y + radius / 2);
@@ -7966,8 +7989,15 @@ class ImageDrawer {
7966
7989
  }
7967
7990
  this._engine.images.push(image);
7968
7991
  }
7969
- draw(context, particle, radius, opacity, delta) {
7970
- const image = particle.image,
7992
+ draw(data) {
7993
+ const {
7994
+ context,
7995
+ radius,
7996
+ particle,
7997
+ opacity,
7998
+ delta
7999
+ } = data,
8000
+ image = particle.image,
7971
8001
  element = image?.element;
7972
8002
  if (!image) {
7973
8003
  return;
@@ -8508,8 +8538,13 @@ async function loadMotionPlugin(engine, refresh = true) {
8508
8538
  ;// CONCATENATED MODULE: ../../shapes/polygon/dist/browser/PolygonDrawerBase.js
8509
8539
 
8510
8540
  class PolygonDrawerBase {
8511
- draw(context, particle, radius) {
8512
- const start = this.getCenter(particle, radius),
8541
+ draw(data) {
8542
+ const {
8543
+ context,
8544
+ particle,
8545
+ radius
8546
+ } = data,
8547
+ start = this.getCenter(particle, radius),
8513
8548
  side = this.getSidesData(particle, radius),
8514
8549
  sideCount = side.count.numerator * side.count.denominator,
8515
8550
  decimalSides = side.count.numerator / side.count.denominator,
@@ -8887,8 +8922,12 @@ async function loadRotateUpdater(engine, refresh = true) {
8887
8922
  ;// CONCATENATED MODULE: ../../shapes/square/dist/browser/SquareDrawer.js
8888
8923
  const fixFactor = Math.sqrt(2);
8889
8924
  class SquareDrawer {
8890
- draw(context, particle, radius) {
8891
- const fixedRadius = radius / fixFactor,
8925
+ draw(data) {
8926
+ const {
8927
+ context,
8928
+ radius
8929
+ } = data,
8930
+ fixedRadius = radius / fixFactor,
8892
8931
  fixedDiameter = fixedRadius * 2;
8893
8932
  context.rect(-fixedRadius, -fixedRadius, fixedDiameter, fixedDiameter);
8894
8933
  }
@@ -8904,8 +8943,13 @@ async function loadSquareShape(engine, refresh = true) {
8904
8943
  ;// CONCATENATED MODULE: ../../shapes/star/dist/browser/StarDrawer.js
8905
8944
 
8906
8945
  class StarDrawer {
8907
- draw(context, particle, radius) {
8908
- const sides = particle.sides,
8946
+ draw(data) {
8947
+ const {
8948
+ context,
8949
+ particle,
8950
+ radius
8951
+ } = data,
8952
+ sides = particle.sides,
8909
8953
  inset = particle.starInset ?? 2;
8910
8954
  context.moveTo(0, 0 - radius);
8911
8955
  for (let i = 0; i < sides; i++) {
@@ -8933,8 +8977,14 @@ async function loadStarShape(engine, refresh = true) {
8933
8977
 
8934
8978
  const validTypes = ["text", "character", "char"];
8935
8979
  class TextDrawer {
8936
- draw(context, particle, radius, opacity) {
8937
- const character = particle.shapeData;
8980
+ draw(data) {
8981
+ const {
8982
+ context,
8983
+ particle,
8984
+ radius,
8985
+ opacity
8986
+ } = data,
8987
+ character = particle.shapeData;
8938
8988
  if (character === undefined) {
8939
8989
  return;
8940
8990
  }