@tsparticles/engine 3.0.3 → 3.1.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.
Files changed (124) hide show
  1. package/README.md +265 -145
  2. package/browser/Core/Canvas.js +19 -19
  3. package/browser/Core/Container.js +45 -34
  4. package/browser/Core/Engine.js +36 -20
  5. package/browser/Core/Particle.js +35 -36
  6. package/browser/Core/Particles.js +30 -24
  7. package/browser/Core/Retina.js +5 -4
  8. package/browser/Core/Utils/Circle.js +4 -3
  9. package/browser/Core/Utils/Constants.js +3 -0
  10. package/browser/Core/Utils/EventListeners.js +18 -15
  11. package/browser/Core/Utils/ExternalInteractorBase.js +1 -1
  12. package/browser/Core/Utils/InteractionManager.js +14 -6
  13. package/browser/Core/Utils/ParticlesInteractorBase.js +1 -1
  14. package/browser/Core/Utils/QuadTree.js +5 -3
  15. package/browser/Core/Utils/Vector.js +7 -2
  16. package/browser/Core/Utils/Vector3d.js +14 -9
  17. package/browser/Options/Classes/ManualParticle.js +3 -2
  18. package/browser/Options/Classes/Options.js +3 -0
  19. package/browser/Utils/CanvasUtils.js +36 -26
  20. package/browser/Utils/ColorUtils.js +124 -45
  21. package/browser/Utils/EventDispatcher.js +6 -5
  22. package/browser/Utils/HslColorManager.js +5 -5
  23. package/browser/Utils/NumberUtils.js +35 -23
  24. package/browser/Utils/RgbColorManager.js +5 -5
  25. package/browser/Utils/Utils.js +102 -19
  26. package/cjs/Core/Canvas.js +19 -19
  27. package/cjs/Core/Container.js +45 -34
  28. package/cjs/Core/Engine.js +36 -20
  29. package/cjs/Core/Particle.js +34 -35
  30. package/cjs/Core/Particles.js +30 -24
  31. package/cjs/Core/Retina.js +5 -4
  32. package/cjs/Core/Utils/Circle.js +4 -3
  33. package/cjs/Core/Utils/Constants.js +4 -1
  34. package/cjs/Core/Utils/EventListeners.js +17 -14
  35. package/cjs/Core/Utils/ExternalInteractorBase.js +1 -1
  36. package/cjs/Core/Utils/InteractionManager.js +14 -6
  37. package/cjs/Core/Utils/ParticlesInteractorBase.js +1 -1
  38. package/cjs/Core/Utils/QuadTree.js +5 -3
  39. package/cjs/Core/Utils/Vector.js +7 -2
  40. package/cjs/Core/Utils/Vector3d.js +14 -9
  41. package/cjs/Options/Classes/ManualParticle.js +3 -2
  42. package/cjs/Options/Classes/Options.js +3 -0
  43. package/cjs/Utils/CanvasUtils.js +36 -26
  44. package/cjs/Utils/ColorUtils.js +126 -45
  45. package/cjs/Utils/EventDispatcher.js +6 -5
  46. package/cjs/Utils/HslColorManager.js +5 -5
  47. package/cjs/Utils/NumberUtils.js +37 -24
  48. package/cjs/Utils/RgbColorManager.js +5 -5
  49. package/cjs/Utils/Utils.js +103 -19
  50. package/esm/Core/Canvas.js +19 -19
  51. package/esm/Core/Container.js +45 -34
  52. package/esm/Core/Engine.js +36 -20
  53. package/esm/Core/Particle.js +35 -36
  54. package/esm/Core/Particles.js +30 -24
  55. package/esm/Core/Retina.js +5 -4
  56. package/esm/Core/Utils/Circle.js +4 -3
  57. package/esm/Core/Utils/Constants.js +3 -0
  58. package/esm/Core/Utils/EventListeners.js +18 -15
  59. package/esm/Core/Utils/ExternalInteractorBase.js +1 -1
  60. package/esm/Core/Utils/InteractionManager.js +14 -6
  61. package/esm/Core/Utils/ParticlesInteractorBase.js +1 -1
  62. package/esm/Core/Utils/QuadTree.js +5 -3
  63. package/esm/Core/Utils/Vector.js +7 -2
  64. package/esm/Core/Utils/Vector3d.js +14 -9
  65. package/esm/Options/Classes/ManualParticle.js +3 -2
  66. package/esm/Options/Classes/Options.js +3 -0
  67. package/esm/Utils/CanvasUtils.js +36 -26
  68. package/esm/Utils/ColorUtils.js +124 -45
  69. package/esm/Utils/EventDispatcher.js +6 -5
  70. package/esm/Utils/HslColorManager.js +5 -5
  71. package/esm/Utils/NumberUtils.js +35 -23
  72. package/esm/Utils/RgbColorManager.js +5 -5
  73. package/esm/Utils/Utils.js +102 -19
  74. package/package.json +1 -1
  75. package/report.html +2 -2
  76. package/tsparticles.engine.js +693 -334
  77. package/tsparticles.engine.min.js +1 -1
  78. package/tsparticles.engine.min.js.LICENSE.txt +1 -1
  79. package/types/Core/Interfaces/IParticleHslAnimation.d.ts +4 -4
  80. package/types/Core/Interfaces/IParticleValueAnimation.d.ts +4 -0
  81. package/types/Core/Interfaces/IShapeDrawData.d.ts +2 -2
  82. package/types/Core/Utils/Constants.d.ts +3 -0
  83. package/types/Core/Utils/ExternalInteractorBase.d.ts +1 -1
  84. package/types/Core/Utils/InteractionManager.d.ts +1 -1
  85. package/types/Core/Utils/ParticlesInteractorBase.d.ts +1 -1
  86. package/types/Core/Utils/Point.d.ts +1 -1
  87. package/types/Options/Classes/Options.d.ts +1 -0
  88. package/types/Options/Classes/Particles/Move/Move.d.ts +1 -2
  89. package/types/Options/Classes/Particles/Move/OutModes.d.ts +1 -2
  90. package/types/Options/Interfaces/IOptions.d.ts +1 -0
  91. package/types/Options/Interfaces/Interactivity/Modes/IModes.d.ts +1 -3
  92. package/types/Types/CustomEventArgs.d.ts +2 -2
  93. package/types/Types/ExportResult.d.ts +2 -2
  94. package/types/Types/ParticlesGroups.d.ts +1 -3
  95. package/types/Types/PathOptions.d.ts +1 -3
  96. package/types/Types/ShapeData.d.ts +1 -3
  97. package/types/Utils/CanvasUtils.d.ts +3 -2
  98. package/types/Utils/ColorUtils.d.ts +5 -0
  99. package/types/Utils/NumberUtils.d.ts +2 -2
  100. package/types/Utils/Utils.d.ts +9 -6
  101. package/umd/Core/Canvas.js +19 -19
  102. package/umd/Core/Container.js +46 -35
  103. package/umd/Core/Engine.js +36 -20
  104. package/umd/Core/Particle.js +35 -36
  105. package/umd/Core/Particles.js +30 -24
  106. package/umd/Core/Retina.js +5 -4
  107. package/umd/Core/Utils/Circle.js +4 -3
  108. package/umd/Core/Utils/Constants.js +4 -1
  109. package/umd/Core/Utils/EventListeners.js +17 -14
  110. package/umd/Core/Utils/ExternalInteractorBase.js +1 -1
  111. package/umd/Core/Utils/InteractionManager.js +14 -6
  112. package/umd/Core/Utils/ParticlesInteractorBase.js +1 -1
  113. package/umd/Core/Utils/QuadTree.js +5 -3
  114. package/umd/Core/Utils/Vector.js +7 -2
  115. package/umd/Core/Utils/Vector3d.js +14 -9
  116. package/umd/Options/Classes/ManualParticle.js +3 -2
  117. package/umd/Options/Classes/Options.js +3 -0
  118. package/umd/Utils/CanvasUtils.js +36 -26
  119. package/umd/Utils/ColorUtils.js +127 -46
  120. package/umd/Utils/EventDispatcher.js +6 -5
  121. package/umd/Utils/HslColorManager.js +5 -5
  122. package/umd/Utils/NumberUtils.js +38 -25
  123. package/umd/Utils/RgbColorManager.js +5 -5
  124. package/umd/Utils/Utils.js +104 -20
package/README.md CHANGED
@@ -688,151 +688,271 @@ _Read more [here](https://particles.js.org/docs/modules/Core_Interfaces_IPlugin.
688
688
  ## Dependency Graph
689
689
 
690
690
  ```mermaid
691
- flowchart LR
692
-
693
- subgraph b [Bundles]
694
- bb[tsParticles Basic] --> bs[tsParticles Slim]
695
- bp[Particles.js compatibility bundle] --> bs
696
- bs --> bf[tsParticles]
697
- end
698
-
699
- e[tsParticles Engine] --> b
700
-
701
- iea & iebo & iebu & iec & ieg & iepa & iepu & ierem & ierep & ies --> bs
702
- ipa & ipc & ipl --> bs
703
- mb --> bb
704
- mp --> bs
705
- pleq --> bs
706
- sci --> bb
707
- si & sl & spo & ssq & sst & st --> bs
708
- uc & uop & uou & usi --> bb
709
- ul & urot & ust --> bs
710
-
711
- iet --> bf
712
- pla & plem --> bf
713
- urol & uti & utw & uw --> bf
714
-
715
- subgraph i [Interactions]
716
-
717
- subgraph ie [Externals]
718
- iea[Attract]
719
- iebo[Bounce]
720
- iebu[Bubble]
721
- iec[Connect]
722
- ieg[Grab]
723
- iepa[Pause]
724
- iepu[Push]
725
- ierem[Remove]
726
- ierep[Repulse]
727
- ies[Slow]
728
- iet[Trail]
729
- end
730
-
731
- il[Light]
732
-
733
- subgraph ip [Particles]
734
- ipa[Attract]
735
- ipc[Collisions]
736
- ipl[Links]
737
- ipr[Repulse]
738
- end
739
-
740
- end
741
-
742
- i --> ie
743
- i --> ip
744
-
745
- e --> i
746
-
747
- subgraph m [Movers]
748
- mb[Base]
749
- mp[Parallax]
750
- end
751
-
752
- e --> m
753
-
754
- subgraph pa [Paths]
755
- pac[Curves]
756
- papn[Perlin Noise]
757
- pap[Polygon]
758
- pasn[Simplex Noise]
759
- pasvg[SVG]
760
- end
761
-
762
- e --> pa
763
-
764
- subgraph pl [Plugins]
765
- pla[Absorbers]
766
- plcm[Canvas Mask]
767
- plem[Emitters]
768
- plh[HSV Color]
769
- pli[Infection]
770
- plm[Motion]
771
- plp[Polygon Mask]
772
- pls[Sounds]
773
-
774
- subgraph plea [Easings]
775
- pleb[Back]
776
- pleci[Circ]
777
- plecu[Cubic]
778
- plee[Expo]
779
- pleq[Quad]
780
- ple4[Quart]
781
- ple5[Quint]
782
- ples[Sine]
783
- end
784
-
785
- subgraph plex [Exports]
786
- plexi[Image]
787
- plexj[JSON]
788
- plexv[Video]
789
- end
790
-
791
- end
792
-
793
- pl --> plea
794
-
795
- e --> pl
796
-
797
- subgraph s [Shapes]
798
- sa[Arrow]
799
- sb[Bubble]
800
- sci[Circle]
801
- scog[Cog]
802
- sh[Heart]
803
- si[Image]
804
- sl[Line]
805
- smt[Multiline Text]
806
- spa[Path]
807
- spo[Polygon]
808
- srp[Rounded Polygon]
809
- srr[Rounded Rectangle]
810
- ssp[Spiral]
811
- ssq[Square]
812
- sst[Star]
813
- st[Text]
814
- end
815
-
816
- e --> s
817
-
818
- subgraph u [Updaters]
819
- uc[Color]
820
- ud[Destroy]
821
- ug[Gradient]
822
- ul[Life]
823
- uop[Opacity]
824
- uor[Orbit]
825
- uou[Out Modes]
826
- urol[Roll]
827
- urot[Rotate]
828
- usi[Size]
829
- ust[Stroke Color]
830
- uti[Tilt]
831
- utw[Twinkle]
832
- uw[Wobble]
833
- end
834
-
835
- e --> u
691
+ flowchart TD
692
+
693
+ subgraph core [Core]
694
+ engine[tsParticles Engine]
695
+ perlin-noise[Perlin Noise Lib]
696
+ simplex-noise[Simplex Noise Lib]
697
+ configs[tsParticles Configs]
698
+ end
699
+
700
+ subgraph bundle-basic [tsParticles Basic]
701
+
702
+ subgraph basic-movers [Movers]
703
+ move-base[Base]
704
+ end
705
+
706
+ subgraph basic-shapes [Shapes]
707
+ shape-circle[Circle]
708
+ end
709
+
710
+ subgraph basic-updates [Updaters]
711
+ updater-color[Color]
712
+ updater-opacity[Opacity]
713
+ updater-out-modes[Out Modes]
714
+ updater-size[Size]
715
+ end
716
+
717
+ end
718
+
719
+ engine --> bundle-basic
720
+
721
+ subgraph bundle-confetti [tsParticles Confetti]
722
+
723
+ subgraph confetti-plugins [Plugins]
724
+ plugin-emitters
725
+ plugin-motion
726
+ end
727
+
728
+ subgraph confetti-shapes [Shapes]
729
+ shape-cards
730
+ shape-emoji
731
+ shape-heart
732
+ shape-image
733
+ shape-polygon
734
+ shape-square
735
+ shape-star
736
+ end
737
+
738
+ subgraph confetti-updaters [Updaters]
739
+ updater-life
740
+ updater-roll
741
+ updater-rotate
742
+ updater-tilt
743
+ updater-wobble
744
+ end
745
+
746
+ end
747
+
748
+ bundle-basic --> bundle-confetti
749
+
750
+ subgraph bundle-slim [tsParticles Slim]
751
+
752
+ subgraph slim-interactions [Interactions]
753
+
754
+ subgraph slim-interactions-external [Externals]
755
+ interaction-external-attract[Attract]
756
+ interaction-external-bounce[Bounce]
757
+ interaction-external-bubble[Bubble]
758
+ interaction-external-connect[Connect]
759
+ interaction-external-grab[Grab]
760
+ interaction-external-pause[Pause]
761
+ interaction-external-push[Push]
762
+ interaction-external-remove[Remove]
763
+ interaction-external-repulse[Repulse]
764
+ interaction-external-slow[Slow]
765
+ end
766
+
767
+ subgraph slim-interactions-particles [Particles]
768
+ interaction-particles-attract[Attract]
769
+ interaction-particles-collisions[Collisions]
770
+ interaction-particles-links[Links]
771
+ end
772
+
773
+ end
774
+
775
+ subgraph slim-movers [Movers]
776
+ move-parallax[Parallax]
777
+ end
778
+
779
+ subgraph slim-plugins [Plugins]
780
+
781
+ subgraph slim-plugins-easings [Easings]
782
+ plugin-easing-quad[Quad]
783
+ end
784
+
785
+ end
786
+
787
+ subgraph slim-shapes [Shapes]
788
+ shape-emoji[Emoji]
789
+ shape-image[Image]
790
+ shape-line[Line]
791
+ shape-polygon[Polygon]
792
+ shape-square[Square]
793
+ shape-star[Star]
794
+ end
795
+
796
+ subgraph slim-updaters [Updaters]
797
+ updater-life[Life]
798
+ updater-rotate[Rotate]
799
+ updater-stroke-color[Stroke Color]
800
+ end
801
+
802
+ end
803
+
804
+ bundle-basic --> bundle-slim
805
+
806
+ subgraph bundle-fireworks [tsParticles Fireworks]
807
+
808
+ subgraph fireworks-effects [Effects]
809
+ effect-trail
810
+ end
811
+
812
+ subgraph fireworks-plugins [Plugins]
813
+ plugin-emitters
814
+
815
+ subgraph fireworks-plugin-emitters-shapes [Emitters Shapes]
816
+ plugin-emitters-shape-square
817
+ end
818
+
819
+ plugin-sounds
820
+ end
821
+
822
+ subgraph fireworks-updaters [Updaters]
823
+ updater-destroy
824
+ updater-life
825
+ updater-rotate
826
+ end
827
+
828
+ end
829
+
830
+ bundle-basic --> bundle-fireworks
831
+
832
+ subgraph bundle-full [tsParticles]
833
+
834
+ subgraph full-interactions [Interactions]
835
+
836
+ subgraph full-interactions-external [Externals]
837
+ interaction-external-trail[Trail]
838
+ end
839
+
840
+ end
841
+
842
+ subgraph full-plugins [Plugins]
843
+ plugin-absorbers[Absorbers]
844
+ plugin-emitters[Emitters]
845
+
846
+ subgraph full-plugin-emitters-shapes [Emitters Shapes]
847
+ plugin-emitters-shape-circle[Circle]
848
+ plugin-emitters-shape-square[Square]
849
+ end
850
+
851
+ end
852
+
853
+ subgraph full-shapes [Shapes]
854
+ shape-text[Text]
855
+ end
856
+
857
+ subgraph full-updaters [Updaters]
858
+ updater-destroy[Destroy]
859
+ updater-roll[Roll]
860
+ updater-tilt[Tilt]
861
+ updater-twinkle[Twinkle]
862
+ updater-wobble[Wobble]
863
+ end
864
+
865
+ end
866
+
867
+ bundle-slim --> bundle-full
868
+
869
+ subgraph bundle-all [tsParticles All]
870
+
871
+ bundle-pjs[tsParticles Particles.js Compatibility]
872
+
873
+ subgraph all-effects [Effects]
874
+ effect-bubble[Bubble]
875
+ effect-trail[Trail]
876
+ end
877
+
878
+ subgraph all-interactions [Interactions]
879
+ subgraph all-interactions-external [External]
880
+ interaction-external-pop[Pop]
881
+ end
882
+
883
+ interaction-light[Light]
884
+
885
+ subgraph all-interactions-particles [Particles]
886
+ interaction-particles-repulse[Repulse]
887
+ end
888
+ end
889
+
890
+ subgraph all-paths [Paths]
891
+ path-curl-noise[Curl Noise]
892
+ path-curves[Curves]
893
+ path-perlin-noise[Perlin Noise]
894
+ path-polygon[Polygon]
895
+ path-simplex-noise[Simplex Noise]
896
+ path-svg[SVG]
897
+ end
898
+
899
+ subgraph all-plugins [Plugins]
900
+ plugin-canvas-mask[Canvas Mask]
901
+
902
+ subgraph all-plugins-easings [Easings]
903
+ plugin-easing-back[Back]
904
+ plugin-easing-circ[Circ]
905
+ plugin-easing-cubic[Cubic]
906
+ plugin-easing-expo[Expo]
907
+ plugin-easing-linear[Linear]
908
+ plugin-easing-quart[Quart]
909
+ plugin-easing-quint[Quint]
910
+ plugin-easing-sine[Sine]
911
+ end
912
+
913
+ subgraph all-plugin-emitters-shapes [Emitters Shapes]
914
+ plugin-emitters-shape-canvas[Canvas]
915
+ plugin-emitters-shape-path[Path]
916
+ plugin-emitters-shape-polygon[Polygon]
917
+ end
918
+
919
+ subgraph all-plugins-exports [Exports]
920
+ plugin-export-image[Image]
921
+ plugin-export-json[JSON]
922
+ plugin-export-video[Video]
923
+ end
924
+
925
+ plugin-hsv-color[HSV Color]
926
+ plugin-infection[Infection]
927
+ plugin-motion[Motion]
928
+ plugin-poisson-disc[Poisson Disc]
929
+ plugin-polygon-mask[Polygon Mask]
930
+ plugin-sounds[Sounds]
931
+ end
932
+
933
+ subgraph all-shapes [Shapes]
934
+ shape-arrow[Arrow]
935
+ shape-cards[Cards]
936
+ shape-cog[Cog]
937
+ shape-heart[Heart]
938
+ shape-path[Path]
939
+ shape-rounded-polygon[Rounded Polygon]
940
+ shape-rounded-rect[Rounded Rect]
941
+ shape-spiral[Spiral]
942
+ end
943
+
944
+ subgraph all-updaters [Updaters]
945
+ updater-gradient[Gradient]
946
+ updater-orbit[Orbit]
947
+ end
948
+
949
+ simplex-noise --> path-curl-noise
950
+ perlin-noise --> path-perlin-noise
951
+ simplex-noise --> path-simplex-noise
952
+
953
+ end
954
+
955
+ bundle-full --> bundle-all
836
956
  ```
837
957
 
838
958
  ---
@@ -3,9 +3,9 @@ import { deepExtend, getLogger, safeMutationObserver } from "../Utils/Utils.js";
3
3
  import { getStyleFromHsl, getStyleFromRgb, rangeColorToHsl, rangeColorToRgb } from "../Utils/ColorUtils.js";
4
4
  import { generatedAttribute } from "./Utils/Constants.js";
5
5
  function setTransformValue(factor, newFactor, key) {
6
- const newValue = newFactor[key];
6
+ const newValue = newFactor[key], defaultValue = 1;
7
7
  if (newValue !== undefined) {
8
- factor[key] = (factor[key] ?? 1) * newValue;
8
+ factor[key] = (factor[key] ?? defaultValue) * newValue;
9
9
  }
10
10
  }
11
11
  export class Canvas {
@@ -13,7 +13,7 @@ export class Canvas {
13
13
  this.container = container;
14
14
  this._applyPostDrawUpdaters = (particle) => {
15
15
  for (const updater of this._postDrawUpdaters) {
16
- updater.afterDraw && updater.afterDraw(particle);
16
+ updater.afterDraw?.(particle);
17
17
  }
18
18
  };
19
19
  this._applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform) => {
@@ -33,12 +33,12 @@ export class Canvas {
33
33
  setTransformValue(transform, updaterTransform, key);
34
34
  }
35
35
  }
36
- updater.beforeDraw && updater.beforeDraw(particle);
36
+ updater.beforeDraw?.(particle);
37
37
  }
38
38
  };
39
39
  this._applyResizePlugins = () => {
40
40
  for (const plugin of this._resizePlugins) {
41
- plugin.resize && plugin.resize();
41
+ plugin.resize?.();
42
42
  }
43
43
  };
44
44
  this._getPluginParticleColors = (particle) => {
@@ -94,17 +94,17 @@ export class Canvas {
94
94
  if (!trail.enable) {
95
95
  return;
96
96
  }
97
+ const factorNumerator = 1, opacity = factorNumerator / trail.length;
97
98
  if (trailFill.color) {
98
99
  const fillColor = rangeColorToRgb(trailFill.color);
99
100
  if (!fillColor) {
100
101
  return;
101
102
  }
102
- const trail = options.particles.move.trail;
103
103
  this._trailFill = {
104
104
  color: {
105
105
  ...fillColor,
106
106
  },
107
- opacity: 1 / trail.length,
107
+ opacity,
108
108
  };
109
109
  }
110
110
  else {
@@ -116,7 +116,7 @@ export class Canvas {
116
116
  img.addEventListener("load", () => {
117
117
  this._trailFill = {
118
118
  image: img,
119
- opacity: 1 / trail.length,
119
+ opacity,
120
120
  };
121
121
  resolve();
122
122
  });
@@ -167,9 +167,9 @@ export class Canvas {
167
167
  if (!element) {
168
168
  return;
169
169
  }
170
- const priority = "important", style = element.style;
170
+ const priority = "important", style = element.style, radix = 10;
171
171
  style.setProperty("position", "fixed", priority);
172
- style.setProperty("z-index", this.container.actualOptions.fullScreen.zIndex.toString(10), priority);
172
+ style.setProperty("z-index", this.container.actualOptions.fullScreen.zIndex.toString(radix), priority);
173
173
  style.setProperty("top", "0", priority);
174
174
  style.setProperty("left", "0", priority);
175
175
  style.setProperty("width", "100%", priority);
@@ -190,11 +190,11 @@ export class Canvas {
190
190
  return this.container.actualOptions.fullScreen.enable;
191
191
  }
192
192
  clear() {
193
- const options = this.container.actualOptions, trail = options.particles.move.trail, trailFill = this._trailFill;
193
+ const options = this.container.actualOptions, trail = options.particles.move.trail, trailFill = this._trailFill, minimumLength = 0;
194
194
  if (options.backgroundMask.enable) {
195
195
  this.paint();
196
196
  }
197
- else if (trail.enable && trail.length > 0 && trailFill) {
197
+ else if (trail.enable && trail.length > minimumLength && trailFill) {
198
198
  if (trailFill.color) {
199
199
  this._paintBase(getStyleFromRgb(trailFill.color, trailFill.opacity));
200
200
  }
@@ -212,7 +212,7 @@ export class Canvas {
212
212
  this.stop();
213
213
  if (this._generated) {
214
214
  const element = this.element;
215
- element && element.remove();
215
+ element?.remove();
216
216
  }
217
217
  else {
218
218
  this._resetOriginalStyle();
@@ -233,8 +233,8 @@ export class Canvas {
233
233
  if (particle.spawning || particle.destroyed) {
234
234
  return;
235
235
  }
236
- const radius = particle.getRadius();
237
- if (radius <= 0) {
236
+ const radius = particle.getRadius(), minimumSize = 0;
237
+ if (radius <= minimumSize) {
238
238
  return;
239
239
  }
240
240
  const pfColor = particle.getFillColor(), psColor = particle.getStrokeColor() ?? pfColor;
@@ -249,7 +249,7 @@ export class Canvas {
249
249
  return;
250
250
  }
251
251
  this.draw((ctx) => {
252
- const container = this.container, options = container.actualOptions, zIndexOptions = particle.options.zIndex, zOpacityFactor = (1 - particle.zIndexFactor) ** zIndexOptions.opacityRate, opacity = particle.bubble.opacity ?? particle.opacity?.value ?? 1, strokeOpacity = particle.strokeOpacity ?? opacity, zOpacity = opacity * zOpacityFactor, zStrokeOpacity = strokeOpacity * zOpacityFactor, transform = {}, colorStyles = {
252
+ const container = this.container, options = container.actualOptions, zIndexOptions = particle.options.zIndex, zIndexFactorOffset = 1, zIndexFactor = zIndexFactorOffset - particle.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, defaultOpacity = 1, opacity = particle.bubble.opacity ?? particle.opacity?.value ?? defaultOpacity, strokeOpacity = particle.strokeOpacity ?? opacity, zOpacity = opacity * zOpacityFactor, zStrokeOpacity = strokeOpacity * zOpacityFactor, transform = {}, colorStyles = {
253
253
  fill: fColor ? getStyleFromHsl(fColor, zOpacity) : undefined,
254
254
  };
255
255
  colorStyles.stroke = sColor ? getStyleFromHsl(sColor, zStrokeOpacity) : colorStyles.fill;
@@ -262,7 +262,7 @@ export class Canvas {
262
262
  colorStyles,
263
263
  backgroundMask: options.backgroundMask.enable,
264
264
  composite: options.backgroundMask.composite,
265
- radius: radius * (1 - particle.zIndexFactor) ** zIndexOptions.sizeRate,
265
+ radius: radius * zIndexFactor ** zIndexOptions.sizeRate,
266
266
  opacity: zOpacity,
267
267
  shadow: particle.options.shadow,
268
268
  transform,
@@ -332,7 +332,7 @@ export class Canvas {
332
332
  if (plugin.resize) {
333
333
  this._resizePlugins.push(plugin);
334
334
  }
335
- if (plugin.particleFillColor || plugin.particleStrokeColor) {
335
+ if (plugin.particleFillColor ?? plugin.particleStrokeColor) {
336
336
  this._colorPlugins.push(plugin);
337
337
  }
338
338
  }
@@ -344,7 +344,7 @@ export class Canvas {
344
344
  if (updater.afterDraw) {
345
345
  this._postDrawUpdaters.push(updater);
346
346
  }
347
- if (updater.getColorStyles || updater.getTransformValues || updater.beforeDraw) {
347
+ if (updater.getColorStyles ?? updater.getTransformValues ?? updater.beforeDraw) {
348
348
  this._preDrawUpdaters.push(updater);
349
349
  }
350
350
  }