@tsparticles/pjs 4.0.0-alpha.25 → 4.0.0-alpha.27

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 (340) hide show
  1. package/102.min.js +1 -0
  2. package/1098.min.js +1 -0
  3. package/{7293.min.js → 1298.min.js} +1 -1
  4. package/1302.min.js +1 -0
  5. package/1368.min.js +1 -0
  6. package/1510.min.js +1 -0
  7. package/1553.min.js +1 -0
  8. package/161.min.js +1 -0
  9. package/{3936.min.js → 1624.min.js} +1 -1
  10. package/1667.min.js +1 -0
  11. package/229.min.js +1 -0
  12. package/{4026.min.js → 2382.min.js} +1 -1
  13. package/243.min.js +1 -0
  14. package/2616.min.js +1 -0
  15. package/2618.min.js +1 -0
  16. package/{3092.min.js → 2738.min.js} +1 -1
  17. package/2846.min.js +1 -0
  18. package/{9797.min.js → 2926.min.js} +1 -1
  19. package/3091.min.js +1 -0
  20. package/3093.min.js +1 -0
  21. package/3130.min.js +1 -0
  22. package/3194.min.js +1 -0
  23. package/3296.min.js +1 -0
  24. package/3407.min.js +1 -0
  25. package/{4609.min.js → 3413.min.js} +1 -1
  26. package/3433.min.js +1 -0
  27. package/3455.min.js +1 -0
  28. package/{8361.min.js → 3464.min.js} +1 -1
  29. package/358.min.js +1 -0
  30. package/3618.min.js +1 -0
  31. package/{2542.min.js → 3657.min.js} +1 -1
  32. package/3659.min.js +1 -0
  33. package/366.min.js +1 -0
  34. package/3663.min.js +1 -0
  35. package/3713.min.js +1 -0
  36. package/3715.min.js +1 -0
  37. package/{8868.min.js → 3813.min.js} +1 -1
  38. package/4089.min.js +1 -0
  39. package/4149.min.js +1 -0
  40. package/4191.min.js +1 -0
  41. package/4257.min.js +1 -0
  42. package/4268.min.js +1 -0
  43. package/4270.min.js +1 -0
  44. package/4285.min.js +1 -0
  45. package/{9474.min.js → 4292.min.js} +1 -1
  46. package/439.min.js +1 -0
  47. package/4462.min.js +1 -0
  48. package/4570.min.js +1 -0
  49. package/4572.min.js +1 -0
  50. package/{9433.min.js → 4588.min.js} +1 -1
  51. package/465.min.js +1 -0
  52. package/4660.min.js +1 -0
  53. package/4724.min.js +1 -1
  54. package/4792.min.js +1 -0
  55. package/485.min.js +1 -0
  56. package/4932.min.js +1 -0
  57. package/514.min.js +1 -0
  58. package/5157.min.js +1 -1
  59. package/5315.min.js +1 -0
  60. package/5390.min.js +1 -0
  61. package/5406.min.js +1 -0
  62. package/{4363.min.js → 5478.min.js} +1 -1
  63. package/5538.min.js +1 -0
  64. package/5552.min.js +1 -0
  65. package/5855.min.js +1 -0
  66. package/5964.min.js +1 -0
  67. package/{6213.min.js → 6066.min.js} +1 -1
  68. package/608.min.js +1 -0
  69. package/6098.min.js +1 -0
  70. package/6101.min.js +1 -0
  71. package/6179.min.js +1 -0
  72. package/622.min.js +1 -0
  73. package/6299.min.js +1 -0
  74. package/6361.min.js +1 -0
  75. package/6465.min.js +1 -0
  76. package/65.min.js +1 -0
  77. package/653.min.js +1 -0
  78. package/6583.min.js +1 -0
  79. package/6638.min.js +1 -0
  80. package/6684.min.js +1 -0
  81. package/{7771.min.js → 6839.min.js} +1 -1
  82. package/{7153.min.js → 6970.min.js} +1 -1
  83. package/6982.min.js +1 -0
  84. package/6986.min.js +1 -0
  85. package/7116.min.js +1 -0
  86. package/7256.min.js +1 -0
  87. package/{7329.min.js → 7258.min.js} +1 -1
  88. package/7318.min.js +1 -0
  89. package/7449.min.js +1 -0
  90. package/7475.min.js +1 -0
  91. package/7520.min.js +1 -0
  92. package/{9873.min.js → 7622.min.js} +2 -2
  93. package/7646.min.js +1 -0
  94. package/7812.min.js +1 -0
  95. package/{9777.min.js → 7876.min.js} +1 -1
  96. package/{3685.min.js → 7922.min.js} +1 -1
  97. package/7925.min.js +1 -0
  98. package/7977.min.js +1 -0
  99. package/8109.min.js +1 -0
  100. package/8214.min.js +1 -0
  101. package/8222.min.js +1 -0
  102. package/8315.min.js +1 -0
  103. package/84.min.js +1 -0
  104. package/8476.min.js +1 -0
  105. package/{7973.min.js → 8484.min.js} +1 -1
  106. package/8589.min.js +1 -0
  107. package/8684.min.js +1 -0
  108. package/8689.min.js +1 -0
  109. package/8902.min.js +1 -0
  110. package/8926.min.js +2 -0
  111. package/{4099.min.js → 9082.min.js} +1 -1
  112. package/9202.min.js +1 -0
  113. package/9544.min.js +1 -0
  114. package/9578.min.js +1 -0
  115. package/9611.min.js +1 -0
  116. package/9739.min.js +1 -0
  117. package/basic_dist_browser_index_js.js +2 -2
  118. package/browser/VincentGarreau/particles.js +7 -7
  119. package/browser/index.js +1 -1
  120. package/cjs/VincentGarreau/particles.js +7 -7
  121. package/cjs/index.js +1 -1
  122. package/engine_dist_browser_Core_Container_js.js +4 -4
  123. package/esm/VincentGarreau/particles.js +7 -7
  124. package/esm/index.js +1 -1
  125. package/full_dist_browser_index_js.js +2 -2
  126. package/interactions_external_attract_dist_browser_Attractor_js.js +3 -3
  127. package/interactions_external_attract_dist_browser_index_js.js +2 -2
  128. package/interactions_external_bounce_dist_browser_Bouncer_js.js +2 -2
  129. package/interactions_external_bounce_dist_browser_index_js.js +2 -2
  130. package/interactions_external_bubble_dist_browser_Bubbler_js.js +2 -2
  131. package/interactions_external_bubble_dist_browser_index_js.js +2 -2
  132. package/interactions_external_connect_dist_browser_Connector_js.js +2 -2
  133. package/interactions_external_connect_dist_browser_index_js.js +2 -2
  134. package/interactions_external_grab_dist_browser_Grabber_js.js +2 -2
  135. package/interactions_external_grab_dist_browser_index_js.js +2 -2
  136. package/interactions_external_parallax_dist_browser_Parallaxer_js.js +2 -2
  137. package/interactions_external_parallax_dist_browser_index_js.js +2 -2
  138. package/interactions_external_pause_dist_browser_Pauser_js.js +2 -2
  139. package/interactions_external_pause_dist_browser_index_js.js +2 -2
  140. package/interactions_external_push_dist_browser_Pusher_js.js +2 -2
  141. package/interactions_external_push_dist_browser_index_js.js +2 -2
  142. package/interactions_external_remove_dist_browser_Remover_js.js +2 -2
  143. package/interactions_external_remove_dist_browser_index_js.js +2 -2
  144. package/interactions_external_repulse_dist_browser_Repulser_js.js +3 -3
  145. package/interactions_external_repulse_dist_browser_index_js.js +2 -2
  146. package/interactions_external_slow_dist_browser_Slower_js.js +2 -2
  147. package/interactions_external_slow_dist_browser_index_js.js +2 -2
  148. package/interactions_external_trail_dist_browser_TrailMaker_js.js +3 -3
  149. package/interactions_external_trail_dist_browser_index_js.js +2 -2
  150. package/interactions_particles_attract_dist_browser_Attractor_js.js +13 -3
  151. package/interactions_particles_attract_dist_browser_index_js.js +2 -2
  152. package/interactions_particles_collisions_dist_browser_Collider_js.js +5 -5
  153. package/interactions_particles_collisions_dist_browser_OverlapPluginInstance_js.js +1 -1
  154. package/interactions_particles_collisions_dist_browser_OverlapPlugin_js.js +1 -1
  155. package/interactions_particles_collisions_dist_browser_index_js.js +2 -2
  156. package/interactions_particles_links_dist_browser_LinkInstance_js.js +3 -3
  157. package/interactions_particles_links_dist_browser_Linker_js.js +2 -2
  158. package/interactions_particles_links_dist_browser_LinksPlugin_js.js +1 -1
  159. package/interactions_particles_links_dist_browser_index_js.js +2 -2
  160. package/package.json +4 -4
  161. package/plugins_absorbers_dist_browser_AbsorberInstance_js.js +1 -1
  162. package/plugins_absorbers_dist_browser_AbsorbersInstancesManager_js.js +1 -1
  163. package/plugins_absorbers_dist_browser_AbsorbersInteractor_js.js +2 -2
  164. package/plugins_absorbers_dist_browser_AbsorbersPluginInstance_js.js +1 -1
  165. package/plugins_absorbers_dist_browser_AbsorbersPlugin_js.js +1 -1
  166. package/plugins_absorbers_dist_browser_index_js.js +2 -2
  167. package/plugins_colors_hex_dist_browser_HexColorManager_js.js +1 -1
  168. package/plugins_colors_hex_dist_browser_index_js.js +2 -2
  169. package/plugins_colors_hsl_dist_browser_HslColorManager_js.js +2 -2
  170. package/plugins_colors_hsl_dist_browser_index_js.js +2 -2
  171. package/plugins_colors_rgb_dist_browser_RgbColorManager_js.js +2 -2
  172. package/plugins_colors_rgb_dist_browser_index_js.js +2 -2
  173. package/plugins_easings_quad_dist_browser_easingsFunctions_js.js +1 -1
  174. package/plugins_easings_quad_dist_browser_index_js.js +2 -2
  175. package/plugins_emittersShapes_circle_dist_browser_EmittersCircleShapeGenerator_js.js +2 -2
  176. package/plugins_emittersShapes_circle_dist_browser_index_js.js +2 -2
  177. package/plugins_emittersShapes_square_dist_browser_EmittersSquareShapeGenerator_js.js +2 -2
  178. package/plugins_emittersShapes_square_dist_browser_index_js.js +2 -2
  179. package/plugins_emitters_dist_browser_EmitterInstance_js.js +2 -2
  180. package/plugins_emitters_dist_browser_EmittersInstancesManager_js.js +12 -2
  181. package/plugins_emitters_dist_browser_EmittersInteractor_js.js +14 -4
  182. package/plugins_emitters_dist_browser_EmittersPluginInstance_js.js +1 -1
  183. package/plugins_emitters_dist_browser_EmittersPlugin_js.js +12 -2
  184. package/plugins_emitters_dist_browser_ShapeManager_js.js +1 -1
  185. package/plugins_emitters_dist_browser_index_js.js +2 -2
  186. package/plugins_interactivity_dist_browser_InteractivityPluginInstance_js.js +1 -1
  187. package/plugins_interactivity_dist_browser_InteractivityPlugin_js.js +1 -1
  188. package/plugins_interactivity_dist_browser_index_js.js +2 -2
  189. package/plugins_move_dist_browser_MovePluginInstance_js.js +40 -0
  190. package/{move_base_dist_browser_index_js.js → plugins_move_dist_browser_MovePlugin_js.js} +7 -7
  191. package/plugins_move_dist_browser_index_js.js +30 -0
  192. package/plugins_responsive_dist_browser_ResponsivePluginInstance_js.js +1 -1
  193. package/plugins_responsive_dist_browser_ResponsivePlugin_js.js +3 -3
  194. package/plugins_responsive_dist_browser_index_js.js +2 -2
  195. package/report.html +1 -1
  196. package/shapes_circle_dist_browser_CircleDrawer_js.js +1 -1
  197. package/shapes_circle_dist_browser_index_js.js +2 -2
  198. package/shapes_emoji_dist_browser_EmojiDrawer_js.js +1 -1
  199. package/shapes_emoji_dist_browser_index_js.js +2 -2
  200. package/shapes_image_dist_browser_GifUtils_Utils_js.js +3 -3
  201. package/shapes_image_dist_browser_ImageDrawer_js.js +2 -2
  202. package/shapes_image_dist_browser_ImagePreloaderInstance_js.js +1 -1
  203. package/shapes_image_dist_browser_ImagePreloader_js.js +1 -1
  204. package/shapes_image_dist_browser_index_js.js +2 -2
  205. package/shapes_line_dist_browser_LineDrawer_js.js +1 -1
  206. package/shapes_line_dist_browser_index_js.js +2 -2
  207. package/shapes_polygon_dist_browser_PolygonDrawer_js.js +1 -1
  208. package/shapes_polygon_dist_browser_TriangleDrawer_js.js +1 -1
  209. package/shapes_polygon_dist_browser_index_js.js +2 -2
  210. package/shapes_square_dist_browser_SquareDrawer_js.js +1 -1
  211. package/shapes_square_dist_browser_index_js.js +2 -2
  212. package/shapes_star_dist_browser_StarDrawer_js.js +1 -1
  213. package/shapes_star_dist_browser_index_js.js +2 -2
  214. package/shapes_text_dist_browser_TextDrawer_js.js +1 -1
  215. package/shapes_text_dist_browser_index_js.js +2 -2
  216. package/slim_dist_browser_index_js.js +2 -2
  217. package/tsparticles.pjs.bundle.js +37 -37
  218. package/tsparticles.pjs.bundle.min.js +2 -2
  219. package/tsparticles.pjs.js +9 -9
  220. package/tsparticles.pjs.min.js +1 -1
  221. package/umd/VincentGarreau/particles.js +7 -7
  222. package/umd/index.js +1 -1
  223. package/updaters_destroy_dist_browser_DestroyUpdater_js.js +4 -4
  224. package/updaters_destroy_dist_browser_index_js.js +2 -2
  225. package/updaters_fillColor_dist_browser_FillColorUpdater_js.js +30 -0
  226. package/{updaters_color_dist_browser_index_js.js → updaters_fillColor_dist_browser_index_js.js} +7 -7
  227. package/updaters_life_dist_browser_LifeUpdater_js.js +1 -1
  228. package/updaters_life_dist_browser_index_js.js +2 -2
  229. package/updaters_opacity_dist_browser_OpacityUpdater_js.js +1 -1
  230. package/updaters_opacity_dist_browser_index_js.js +2 -2
  231. package/updaters_outModes_dist_browser_OutOfCanvasUpdater_js.js +4 -4
  232. package/updaters_outModes_dist_browser_index_js.js +2 -2
  233. package/updaters_roll_dist_browser_RollUpdater_js.js +1 -1
  234. package/updaters_roll_dist_browser_index_js.js +2 -2
  235. package/updaters_rotate_dist_browser_RotateUpdater_js.js +1 -1
  236. package/updaters_rotate_dist_browser_index_js.js +2 -2
  237. package/updaters_size_dist_browser_SizeUpdater_js.js +1 -1
  238. package/updaters_size_dist_browser_index_js.js +2 -2
  239. package/updaters_strokeColor_dist_browser_StrokeColorUpdater_js.js +1 -1
  240. package/updaters_strokeColor_dist_browser_index_js.js +2 -2
  241. package/updaters_tilt_dist_browser_TiltUpdater_js.js +1 -1
  242. package/updaters_tilt_dist_browser_index_js.js +2 -2
  243. package/updaters_twinkle_dist_browser_TwinkleUpdater_js.js +18 -8
  244. package/updaters_twinkle_dist_browser_index_js.js +2 -2
  245. package/updaters_wobble_dist_browser_WobbleUpdater_js.js +2 -2
  246. package/updaters_wobble_dist_browser_index_js.js +2 -2
  247. package/1028.min.js +0 -1
  248. package/1031.min.js +0 -1
  249. package/125.min.js +0 -1
  250. package/1256.min.js +0 -1
  251. package/1523.min.js +0 -1
  252. package/1599.min.js +0 -1
  253. package/1681.min.js +0 -1
  254. package/182.min.js +0 -1
  255. package/1825.min.js +0 -1
  256. package/1959.min.js +0 -1
  257. package/2068.min.js +0 -1
  258. package/2521.min.js +0 -1
  259. package/2696.min.js +0 -1
  260. package/2805.min.js +0 -1
  261. package/284.min.js +0 -1
  262. package/2981.min.js +0 -1
  263. package/3006.min.js +0 -1
  264. package/3023.min.js +0 -1
  265. package/3122.min.js +0 -1
  266. package/3148.min.js +0 -1
  267. package/3205.min.js +0 -1
  268. package/3258.min.js +0 -1
  269. package/3486.min.js +0 -1
  270. package/3499.min.js +0 -1
  271. package/3517.min.js +0 -1
  272. package/3546.min.js +0 -1
  273. package/3616.min.js +0 -1
  274. package/362.min.js +0 -1
  275. package/3626.min.js +0 -1
  276. package/374.min.js +0 -1
  277. package/3822.min.js +0 -1
  278. package/3951.min.js +0 -1
  279. package/4013.min.js +0 -1
  280. package/4141.min.js +0 -1
  281. package/4344.min.js +0 -1
  282. package/4404.min.js +0 -1
  283. package/4566.min.js +0 -1
  284. package/4659.min.js +0 -1
  285. package/4990.min.js +0 -1
  286. package/5061.min.js +0 -1
  287. package/5253.min.js +0 -1
  288. package/5287.min.js +0 -1
  289. package/5293.min.js +0 -1
  290. package/5395.min.js +0 -1
  291. package/5434.min.js +0 -1
  292. package/5818.min.js +0 -1
  293. package/584.min.js +0 -1
  294. package/6015.min.js +0 -1
  295. package/6094.min.js +0 -1
  296. package/6097.min.js +0 -1
  297. package/6251.min.js +0 -1
  298. package/6275.min.js +0 -1
  299. package/6397.min.js +0 -1
  300. package/679.min.js +0 -1
  301. package/6801.min.js +0 -1
  302. package/6837.min.js +0 -1
  303. package/6893.min.js +0 -1
  304. package/7029.min.js +0 -1
  305. package/7046.min.js +0 -1
  306. package/7193.min.js +0 -1
  307. package/7283.min.js +0 -1
  308. package/7344.min.js +0 -1
  309. package/7790.min.js +0 -1
  310. package/7803.min.js +0 -1
  311. package/7828.min.js +0 -1
  312. package/7881.min.js +0 -1
  313. package/80.min.js +0 -1
  314. package/8182.min.js +0 -1
  315. package/8204.min.js +0 -1
  316. package/8208.min.js +0 -1
  317. package/8300.min.js +0 -1
  318. package/8335.min.js +0 -1
  319. package/8353.min.js +0 -1
  320. package/8370.min.js +0 -1
  321. package/8426.min.js +0 -1
  322. package/8857.min.js +0 -1
  323. package/909.min.js +0 -1
  324. package/9150.min.js +0 -1
  325. package/9171.min.js +0 -1
  326. package/92.min.js +0 -1
  327. package/9336.min.js +0 -1
  328. package/9494.min.js +0 -1
  329. package/9522.min.js +0 -1
  330. package/9531.min.js +0 -1
  331. package/9537.min.js +0 -1
  332. package/9653.min.js +0 -1
  333. package/9731.min.js +0 -1
  334. package/9745.min.js +0 -1
  335. package/9757.min.js +0 -1
  336. package/9792.min.js +0 -1
  337. package/9825.min.js +0 -1
  338. package/99.min.js +0 -2
  339. package/move_base_dist_browser_BaseMover_js.js +0 -40
  340. package/updaters_color_dist_browser_ColorUpdater_js.js +0 -30
@@ -158,6 +158,13 @@ const defaultMinOpacity = 0, defaultMinSize = 0, speedFactor = 3, defaultPjsOpti
158
158
  },
159
159
  },
160
160
  particles: {
161
+ attract: {
162
+ enable: fixedOptions.particles.move.attract.enable,
163
+ rotate: {
164
+ x: fixedOptions.particles.move.attract.rotateX,
165
+ y: fixedOptions.particles.move.attract.rotateY,
166
+ },
167
+ },
161
168
  collisions: {
162
169
  enable: fixedOptions.particles.move.bounce,
163
170
  },
@@ -234,13 +241,6 @@ const defaultMinOpacity = 0, defaultMinSize = 0, speedFactor = 3, defaultPjsOpti
234
241
  random: fixedOptions.particles.move.random,
235
242
  straight: fixedOptions.particles.move.straight,
236
243
  outModes: fixedOptions.particles.move.out_mode,
237
- attract: {
238
- enable: fixedOptions.particles.move.attract.enable,
239
- rotate: {
240
- x: fixedOptions.particles.move.attract.rotateX,
241
- y: fixedOptions.particles.move.attract.rotateY,
242
- },
243
- },
244
244
  },
245
245
  },
246
246
  resize: {
package/browser/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { MBParticles } from "./marcbruederlin/Particles.js";
2
2
  import { initParticlesJS } from "./VincentGarreau/particles.js";
3
3
  const initPjs = async (engine) => {
4
- engine.checkVersion("4.0.0-alpha.25");
4
+ engine.checkVersion("4.0.0-alpha.27");
5
5
  await engine.register(async (e) => {
6
6
  const [{ loadFull }, { loadResponsivePlugin },] = await Promise.all([
7
7
  import("tsparticles"),
@@ -158,6 +158,13 @@ const defaultMinOpacity = 0, defaultMinSize = 0, speedFactor = 3, defaultPjsOpti
158
158
  },
159
159
  },
160
160
  particles: {
161
+ attract: {
162
+ enable: fixedOptions.particles.move.attract.enable,
163
+ rotate: {
164
+ x: fixedOptions.particles.move.attract.rotateX,
165
+ y: fixedOptions.particles.move.attract.rotateY,
166
+ },
167
+ },
161
168
  collisions: {
162
169
  enable: fixedOptions.particles.move.bounce,
163
170
  },
@@ -234,13 +241,6 @@ const defaultMinOpacity = 0, defaultMinSize = 0, speedFactor = 3, defaultPjsOpti
234
241
  random: fixedOptions.particles.move.random,
235
242
  straight: fixedOptions.particles.move.straight,
236
243
  outModes: fixedOptions.particles.move.out_mode,
237
- attract: {
238
- enable: fixedOptions.particles.move.attract.enable,
239
- rotate: {
240
- x: fixedOptions.particles.move.attract.rotateX,
241
- y: fixedOptions.particles.move.attract.rotateY,
242
- },
243
- },
244
244
  },
245
245
  },
246
246
  resize: {
package/cjs/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { MBParticles } from "./marcbruederlin/Particles.js";
2
2
  import { initParticlesJS } from "./VincentGarreau/particles.js";
3
3
  const initPjs = async (engine) => {
4
- engine.checkVersion("4.0.0-alpha.25");
4
+ engine.checkVersion("4.0.0-alpha.27");
5
5
  await engine.register(async (e) => {
6
6
  const [{ loadFull }, { loadResponsivePlugin },] = await Promise.all([
7
7
  import("tsparticles"),
@@ -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
- * v4.0.0-alpha.25
7
+ * v4.0.0-alpha.27
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -23,7 +23,7 @@
23
23
  \************************************************/
24
24
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25
25
 
26
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Canvas: () => (/* binding */ Canvas)\n/* harmony export */ });\n/* harmony import */ var _Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/CanvasUtils.js */ \"../../engine/dist/browser/Utils/CanvasUtils.js\");\n/* harmony import */ var _Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.js\");\n/* harmony import */ var _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Utils/Constants.js */ \"../../engine/dist/browser/Core/Utils/Constants.js\");\n/* harmony import */ var _Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Utils/ColorUtils.js */ \"../../engine/dist/browser/Utils/ColorUtils.js\");\n\n\n\n\nconst fColorIndex = 0, sColorIndex = 1;\nfunction setTransformValue(factor, newFactor, key) {\n const newValue = newFactor[key];\n if (newValue !== undefined) {\n factor[key] = (factor[key] ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.defaultTransformValue) * newValue;\n }\n}\nfunction setStyle(canvas, style, important = false) {\n if (!style) {\n return;\n }\n const element = canvas, elementStyle = element.style, keys = new Set();\n for(let i = 0; i < elementStyle.length; i++){\n const key = elementStyle.item(i);\n if (!key) {\n continue;\n }\n keys.add(key);\n }\n for(let i = 0; i < style.length; i++){\n const key = style.item(i);\n if (!key) {\n continue;\n }\n keys.add(key);\n }\n for (const key of keys){\n const value = style.getPropertyValue(key);\n if (value) {\n elementStyle.setProperty(key, value, important ? \"important\" : \"\");\n } else {\n elementStyle.removeProperty(key);\n }\n }\n}\nclass Canvas {\n container;\n element;\n size;\n zoom = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.defaultZoom;\n _canvasClearPlugins;\n _canvasPaintPlugins;\n _canvasSettings;\n _clearDrawPlugins;\n _colorPlugins;\n _context;\n _drawParticlePlugins;\n _drawParticlesCleanupPlugins;\n _drawParticlesSetupPlugins;\n _drawPlugins;\n _drawSettingsCleanupPlugins;\n _drawSettingsSetupPlugins;\n _engine;\n _generated;\n _mutationObserver;\n _originalStyle;\n _pointerEvents;\n _postDrawUpdaters;\n _preDrawUpdaters;\n _resizePlugins;\n _reusableColorStyles = {};\n _reusablePluginColors = [\n undefined,\n undefined\n ];\n _reusableTransform = {};\n _standardSize;\n _zoomCenter;\n constructor(container, engine){\n this.container = container;\n this._engine = engine;\n this._standardSize = {\n height: 0,\n width: 0\n };\n const pxRatio = container.retina.pixelRatio, stdSize = this._standardSize;\n this.size = {\n height: stdSize.height * pxRatio,\n width: stdSize.width * pxRatio\n };\n this._context = null;\n this._generated = false;\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n this._canvasClearPlugins = [];\n this._canvasPaintPlugins = [];\n this._clearDrawPlugins = [];\n this._drawParticlePlugins = [];\n this._drawParticlesCleanupPlugins = [];\n this._drawParticlesSetupPlugins = [];\n this._drawPlugins = [];\n this._drawSettingsSetupPlugins = [];\n this._drawSettingsCleanupPlugins = [];\n this._pointerEvents = \"none\";\n }\n get settings() {\n return this._canvasSettings;\n }\n get _fullScreen() {\n return this.container.actualOptions.fullScreen.enable;\n }\n canvasClear() {\n if (!this.container.actualOptions.clear) {\n return;\n }\n this.draw((ctx)=>{\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size);\n });\n }\n clear() {\n let pluginHandled = false;\n for (const plugin of this._canvasClearPlugins){\n pluginHandled = plugin.canvasClear?.() ?? false;\n if (pluginHandled) {\n break;\n }\n }\n if (pluginHandled) {\n return;\n }\n this.canvasClear();\n }\n destroy() {\n this.stop();\n if (this._generated) {\n const element = this.element;\n element?.remove();\n this.element = undefined;\n } else {\n this._resetOriginalStyle();\n }\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n this._canvasClearPlugins = [];\n this._canvasPaintPlugins = [];\n this._clearDrawPlugins = [];\n this._drawParticlePlugins = [];\n this._drawParticlesCleanupPlugins = [];\n this._drawParticlesSetupPlugins = [];\n this._drawPlugins = [];\n this._drawSettingsSetupPlugins = [];\n this._drawSettingsCleanupPlugins = [];\n }\n draw(cb) {\n const ctx = this._context;\n if (!ctx) {\n return;\n }\n return cb(ctx);\n }\n drawParticle(particle, delta) {\n if (particle.spawning || particle.destroyed) {\n return;\n }\n const radius = particle.getRadius();\n if (radius <= _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.minimumSize) {\n return;\n }\n const pfColor = particle.getFillColor(), psColor = particle.getStrokeColor() ?? pfColor;\n let [fColor, sColor] = this._getPluginParticleColors(particle);\n fColor ??= pfColor;\n sColor ??= psColor;\n if (!fColor && !sColor) {\n return;\n }\n const container = this.container, zIndexOptions = particle.options.zIndex, zIndexFactor = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.zIndexFactorOffset - particle.zIndexFactor, { opacity, strokeOpacity } = particle.getOpacity(), transform = this._reusableTransform, colorStyles = this._reusableColorStyles, fill = fColor ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.getStyleFromHsl)(fColor, container.hdr, opacity) : undefined, stroke = sColor ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.getStyleFromHsl)(sColor, container.hdr, strokeOpacity) : fill;\n transform.a = transform.b = transform.c = transform.d = undefined;\n colorStyles.fill = fill;\n colorStyles.stroke = stroke;\n this.draw((context)=>{\n for (const plugin of this._drawParticlesSetupPlugins){\n plugin.drawParticleSetup?.(context, particle, delta);\n }\n this._applyPreDrawUpdaters(context, particle, radius, opacity, colorStyles, transform);\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawParticle)({\n container,\n context,\n particle,\n delta,\n colorStyles,\n radius: radius * zIndexFactor ** zIndexOptions.sizeRate,\n opacity: opacity,\n transform\n });\n this._applyPostDrawUpdaters(particle);\n for (const plugin of this._drawParticlesCleanupPlugins){\n plugin.drawParticleCleanup?.(context, particle, delta);\n }\n });\n }\n drawParticlePlugins(particle, delta) {\n this.draw((ctx)=>{\n for (const plugin of this._drawParticlePlugins){\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawParticlePlugin)(ctx, plugin, particle, delta);\n }\n });\n }\n drawParticles(delta) {\n const { particles } = this.container;\n this.clear();\n particles.update(delta);\n this.draw((ctx)=>{\n for (const plugin of this._drawSettingsSetupPlugins){\n plugin.drawSettingsSetup?.(ctx, delta);\n }\n for (const plugin of this._drawPlugins){\n plugin.draw?.(ctx, delta);\n }\n particles.drawParticles(delta);\n for (const plugin of this._clearDrawPlugins){\n plugin.clearDraw?.(ctx, delta);\n }\n for (const plugin of this._drawSettingsCleanupPlugins){\n plugin.drawSettingsCleanup?.(ctx, delta);\n }\n });\n }\n getZoomCenter() {\n const pxRatio = this.container.retina.pixelRatio, { width, height } = this.size;\n if (this._zoomCenter) {\n return this._zoomCenter;\n }\n return {\n x: width * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.half / pxRatio,\n y: height * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.half / pxRatio\n };\n }\n init() {\n this._safeMutationObserver((obs)=>{\n obs.disconnect();\n });\n this._mutationObserver = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.safeMutationObserver)((records)=>{\n for (const record of records){\n if (record.type === \"attributes\" && record.attributeName === \"style\") {\n this._repairStyle();\n }\n }\n });\n this.resize();\n this._initStyle();\n this.initBackground();\n this._safeMutationObserver((obs)=>{\n if (!this.element || !(this.element instanceof Node)) {\n return;\n }\n obs.observe(this.element, {\n attributes: true\n });\n });\n this.initUpdaters();\n this.initPlugins();\n this.paint();\n }\n initBackground() {\n const { container } = this, options = container.actualOptions, background = options.background, element = this.element;\n if (!element) {\n return;\n }\n const elementStyle = element.style, color = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.rangeColorToRgb)(this._engine, background.color);\n if (color) {\n elementStyle.backgroundColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.getStyleFromRgb)(color, container.hdr, background.opacity);\n } else {\n elementStyle.backgroundColor = \"\";\n }\n elementStyle.backgroundImage = background.image || \"\";\n elementStyle.backgroundPosition = background.position || \"\";\n elementStyle.backgroundRepeat = background.repeat || \"\";\n elementStyle.backgroundSize = background.size || \"\";\n }\n initPlugins() {\n this._resizePlugins = [];\n this._colorPlugins = [];\n this._canvasClearPlugins = [];\n this._canvasPaintPlugins = [];\n this._clearDrawPlugins = [];\n this._drawParticlePlugins = [];\n this._drawParticlesSetupPlugins = [];\n this._drawParticlesCleanupPlugins = [];\n this._drawPlugins = [];\n this._drawSettingsSetupPlugins = [];\n this._drawSettingsCleanupPlugins = [];\n for (const plugin of this.container.plugins){\n if (plugin.resize) {\n this._resizePlugins.push(plugin);\n }\n if (plugin.particleFillColor ?? plugin.particleStrokeColor) {\n this._colorPlugins.push(plugin);\n }\n if (plugin.canvasClear) {\n this._canvasClearPlugins.push(plugin);\n }\n if (plugin.canvasPaint) {\n this._canvasPaintPlugins.push(plugin);\n }\n if (plugin.drawParticle) {\n this._drawParticlePlugins.push(plugin);\n }\n if (plugin.drawParticleSetup) {\n this._drawParticlesSetupPlugins.push(plugin);\n }\n if (plugin.drawParticleCleanup) {\n this._drawParticlesCleanupPlugins.push(plugin);\n }\n if (plugin.draw) {\n this._drawPlugins.push(plugin);\n }\n if (plugin.drawSettingsSetup) {\n this._drawSettingsSetupPlugins.push(plugin);\n }\n if (plugin.drawSettingsCleanup) {\n this._drawSettingsCleanupPlugins.push(plugin);\n }\n if (plugin.clearDraw) {\n this._clearDrawPlugins.push(plugin);\n }\n }\n }\n initUpdaters() {\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n for (const updater of this.container.particles.updaters){\n if (updater.afterDraw) {\n this._postDrawUpdaters.push(updater);\n }\n if (updater.getColorStyles ?? updater.getTransformValues ?? updater.beforeDraw) {\n this._preDrawUpdaters.push(updater);\n }\n }\n }\n loadCanvas(canvas) {\n if (this._generated && this.element) {\n this.element.remove();\n }\n const container = this.container;\n this._generated = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.generatedAttribute in canvas.dataset ? canvas.dataset[_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.generatedAttribute] === \"true\" : this._generated;\n this.element = canvas;\n this.element.ariaHidden = \"true\";\n this._originalStyle = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.cloneStyle)(this.element.style);\n const standardSize = this._standardSize;\n standardSize.height = canvas.offsetHeight;\n standardSize.width = canvas.offsetWidth;\n const pxRatio = this.container.retina.pixelRatio, retinaSize = this.size;\n canvas.height = retinaSize.height = standardSize.height * pxRatio;\n canvas.width = retinaSize.width = standardSize.width * pxRatio;\n const canSupportHdrQuery = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.safeMatchMedia)(\"(color-gamut: p3)\");\n this._canvasSettings = {\n alpha: true,\n colorSpace: canSupportHdrQuery?.matches && container.hdr ? \"display-p3\" : \"srgb\",\n desynchronized: true,\n willReadFrequently: false\n };\n this._context = this.element.getContext(\"2d\", this._canvasSettings);\n this._safeMutationObserver((obs)=>{\n obs.disconnect();\n });\n container.retina.init();\n this.initBackground();\n this._safeMutationObserver((obs)=>{\n if (!this.element || !(this.element instanceof Node)) {\n return;\n }\n obs.observe(this.element, {\n attributes: true\n });\n });\n }\n paint() {\n let handled = false;\n for (const plugin of this._canvasPaintPlugins){\n handled = plugin.canvasPaint?.() ?? false;\n if (handled) {\n break;\n }\n }\n if (handled) {\n return;\n }\n this.paintBase();\n }\n paintBase(baseColor) {\n this.draw((ctx)=>{\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.paintBase)(ctx, this.size, baseColor);\n });\n }\n paintImage(image, opacity) {\n this.draw((ctx)=>{\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.paintImage)(ctx, this.size, image, opacity);\n });\n }\n resize() {\n if (!this.element) {\n return false;\n }\n const container = this.container, currentSize = container.canvas._standardSize, newSize = {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight\n }, pxRatio = container.retina.pixelRatio, retinaSize = {\n width: newSize.width * pxRatio,\n height: newSize.height * pxRatio\n };\n if (newSize.height === currentSize.height && newSize.width === currentSize.width && retinaSize.height === this.element.height && retinaSize.width === this.element.width) {\n return false;\n }\n const oldSize = {\n ...currentSize\n };\n currentSize.height = newSize.height;\n currentSize.width = newSize.width;\n const canvasSize = this.size;\n this.element.width = canvasSize.width = retinaSize.width;\n this.element.height = canvasSize.height = retinaSize.height;\n if (this.container.started) {\n container.particles.setResizeFactor({\n width: currentSize.width / oldSize.width,\n height: currentSize.height / oldSize.height\n });\n }\n return true;\n }\n setPointerEvents(type) {\n const element = this.element;\n if (!element) {\n return;\n }\n this._pointerEvents = type;\n this._repairStyle();\n }\n setZoom(zoomLevel, center) {\n this.zoom = zoomLevel;\n this._zoomCenter = center;\n }\n stop() {\n this._safeMutationObserver((obs)=>{\n obs.disconnect();\n });\n this._mutationObserver = undefined;\n this.draw((ctx)=>{\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size);\n });\n }\n async windowResize() {\n if (!this.element || !this.resize()) {\n return;\n }\n const container = this.container, needsRefresh = container.updateActualOptions();\n container.particles.setDensity();\n this._applyResizePlugins();\n if (needsRefresh) {\n await container.refresh();\n }\n }\n _applyPostDrawUpdaters = (particle)=>{\n for (const updater of this._postDrawUpdaters){\n updater.afterDraw?.(particle);\n }\n };\n _applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform)=>{\n for (const updater of this._preDrawUpdaters){\n if (updater.getColorStyles) {\n const { fill, stroke } = updater.getColorStyles(particle, ctx, radius, zOpacity);\n if (fill) {\n colorStyles.fill = fill;\n }\n if (stroke) {\n colorStyles.stroke = stroke;\n }\n }\n if (updater.getTransformValues) {\n const updaterTransform = updater.getTransformValues(particle);\n for(const key in updaterTransform){\n setTransformValue(transform, updaterTransform, key);\n }\n }\n updater.beforeDraw?.(particle);\n }\n };\n _applyResizePlugins = ()=>{\n for (const plugin of this._resizePlugins){\n plugin.resize?.();\n }\n };\n _getPluginParticleColors = (particle)=>{\n let fColor, sColor;\n for (const plugin of this._colorPlugins){\n if (!fColor && plugin.particleFillColor) {\n fColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.rangeColorToHsl)(this._engine, plugin.particleFillColor(particle));\n }\n if (!sColor && plugin.particleStrokeColor) {\n sColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.rangeColorToHsl)(this._engine, plugin.particleStrokeColor(particle));\n }\n if (fColor && sColor) {\n break;\n }\n }\n this._reusablePluginColors[fColorIndex] = fColor;\n this._reusablePluginColors[sColorIndex] = sColor;\n return this._reusablePluginColors;\n };\n _initStyle = ()=>{\n const element = this.element, options = this.container.actualOptions;\n if (!element) {\n return;\n }\n if (this._fullScreen) {\n this._setFullScreenStyle();\n } else {\n this._resetOriginalStyle();\n }\n for(const key in options.style){\n if (!key || !Object.hasOwn(options.style, key)) {\n continue;\n }\n const value = options.style[key];\n if (!value) {\n continue;\n }\n element.style.setProperty(key, value, \"important\");\n }\n };\n _repairStyle = ()=>{\n const element = this.element;\n if (!element) {\n return;\n }\n this._safeMutationObserver((observer)=>{\n observer.disconnect();\n });\n this._initStyle();\n this.initBackground();\n const pointerEvents = this._pointerEvents;\n element.style.pointerEvents = pointerEvents;\n element.setAttribute(\"pointer-events\", pointerEvents);\n this._safeMutationObserver((observer)=>{\n if (!(element instanceof Node)) {\n return;\n }\n observer.observe(element, {\n attributes: true\n });\n });\n };\n _resetOriginalStyle = ()=>{\n const element = this.element, originalStyle = this._originalStyle;\n if (!element || !originalStyle) {\n return;\n }\n setStyle(element, originalStyle, true);\n };\n _safeMutationObserver = (callback)=>{\n if (!this._mutationObserver) {\n return;\n }\n callback(this._mutationObserver);\n };\n _setFullScreenStyle = ()=>{\n const element = this.element;\n if (!element) {\n return;\n }\n setStyle(element, (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getFullScreenStyle)(this.container.actualOptions.fullScreen.zIndex), true);\n };\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../engine/dist/browser/Core/Canvas.js?\n}");
26
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Canvas: () => (/* binding */ Canvas)\n/* harmony export */ });\n/* harmony import */ var _Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/CanvasUtils.js */ \"../../engine/dist/browser/Utils/CanvasUtils.js\");\n/* harmony import */ var _Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.js\");\n/* harmony import */ var _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Utils/Constants.js */ \"../../engine/dist/browser/Core/Utils/Constants.js\");\n/* harmony import */ var _Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Utils/ColorUtils.js */ \"../../engine/dist/browser/Utils/ColorUtils.js\");\n\n\n\n\nconst fColorIndex = 0, sColorIndex = 1;\nfunction setTransformValue(factor, newFactor, key) {\n const newValue = newFactor[key];\n if (newValue !== undefined) {\n factor[key] = (factor[key] ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.defaultTransformValue) * newValue;\n }\n}\nfunction setStyle(canvas, style, important = false) {\n if (!style) {\n return;\n }\n const element = canvas, elementStyle = element.style, keys = new Set();\n for(let i = 0; i < elementStyle.length; i++){\n const key = elementStyle.item(i);\n if (!key) {\n continue;\n }\n keys.add(key);\n }\n for(let i = 0; i < style.length; i++){\n const key = style.item(i);\n if (!key) {\n continue;\n }\n keys.add(key);\n }\n for (const key of keys){\n const value = style.getPropertyValue(key);\n if (value) {\n elementStyle.setProperty(key, value, important ? \"important\" : \"\");\n } else {\n elementStyle.removeProperty(key);\n }\n }\n}\nclass Canvas {\n container;\n element;\n size;\n zoom = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.defaultZoom;\n _canvasClearPlugins;\n _canvasPaintPlugins;\n _canvasSettings;\n _clearDrawPlugins;\n _colorPlugins;\n _context;\n _drawParticlePlugins;\n _drawParticlesCleanupPlugins;\n _drawParticlesSetupPlugins;\n _drawPlugins;\n _drawSettingsCleanupPlugins;\n _drawSettingsSetupPlugins;\n _engine;\n _generated;\n _mutationObserver;\n _originalStyle;\n _pointerEvents;\n _postDrawUpdaters;\n _preDrawUpdaters;\n _resizePlugins;\n _reusableColorStyles = {};\n _reusablePluginColors = [\n undefined,\n undefined\n ];\n _reusableTransform = {};\n _standardSize;\n _zoomCenter;\n constructor(container, engine){\n this.container = container;\n this._engine = engine;\n this._standardSize = {\n height: 0,\n width: 0\n };\n const pxRatio = container.retina.pixelRatio, stdSize = this._standardSize;\n this.size = {\n height: stdSize.height * pxRatio,\n width: stdSize.width * pxRatio\n };\n this._context = null;\n this._generated = false;\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n this._canvasClearPlugins = [];\n this._canvasPaintPlugins = [];\n this._clearDrawPlugins = [];\n this._drawParticlePlugins = [];\n this._drawParticlesCleanupPlugins = [];\n this._drawParticlesSetupPlugins = [];\n this._drawPlugins = [];\n this._drawSettingsSetupPlugins = [];\n this._drawSettingsCleanupPlugins = [];\n this._pointerEvents = \"none\";\n }\n get settings() {\n return this._canvasSettings;\n }\n get _fullScreen() {\n return this.container.actualOptions.fullScreen.enable;\n }\n canvasClear() {\n if (!this.container.actualOptions.clear) {\n return;\n }\n this.draw((ctx)=>{\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size);\n });\n }\n clear() {\n let pluginHandled = false;\n for (const plugin of this._canvasClearPlugins){\n pluginHandled = plugin.canvasClear?.() ?? false;\n if (pluginHandled) {\n break;\n }\n }\n if (pluginHandled) {\n return;\n }\n this.canvasClear();\n }\n destroy() {\n this.stop();\n if (this._generated) {\n const element = this.element;\n element?.remove();\n this.element = undefined;\n } else {\n this._resetOriginalStyle();\n }\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n this._canvasClearPlugins = [];\n this._canvasPaintPlugins = [];\n this._clearDrawPlugins = [];\n this._drawParticlePlugins = [];\n this._drawParticlesCleanupPlugins = [];\n this._drawParticlesSetupPlugins = [];\n this._drawPlugins = [];\n this._drawSettingsSetupPlugins = [];\n this._drawSettingsCleanupPlugins = [];\n }\n draw(cb) {\n const ctx = this._context;\n if (!ctx) {\n return;\n }\n return cb(ctx);\n }\n drawParticle(particle, delta) {\n if (particle.spawning || particle.destroyed) {\n return;\n }\n const radius = particle.getRadius();\n if (radius <= _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.minimumSize) {\n return;\n }\n const pfColor = particle.getFillColor(), psColor = particle.getStrokeColor();\n let [fColor, sColor] = this._getPluginParticleColors(particle);\n fColor ??= pfColor;\n sColor ??= psColor;\n if (!fColor && !sColor) {\n return;\n }\n const container = this.container, zIndexOptions = particle.options.zIndex, zIndexFactor = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.zIndexFactorOffset - particle.zIndexFactor, { fillOpacity, opacity, strokeOpacity } = particle.getOpacity(), transform = this._reusableTransform, colorStyles = this._reusableColorStyles, fill = fColor ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.getStyleFromHsl)(fColor, container.hdr, fillOpacity * opacity) : undefined, stroke = sColor ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.getStyleFromHsl)(sColor, container.hdr, strokeOpacity * opacity) : fill;\n transform.a = transform.b = transform.c = transform.d = undefined;\n colorStyles.fill = fill;\n colorStyles.stroke = stroke;\n this.draw((context)=>{\n for (const plugin of this._drawParticlesSetupPlugins){\n plugin.drawParticleSetup?.(context, particle, delta);\n }\n this._applyPreDrawUpdaters(context, particle, radius, opacity, colorStyles, transform);\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawParticle)({\n container,\n context,\n particle,\n delta,\n colorStyles,\n radius: radius * zIndexFactor ** zIndexOptions.sizeRate,\n opacity: opacity,\n transform\n });\n this._applyPostDrawUpdaters(particle);\n for (const plugin of this._drawParticlesCleanupPlugins){\n plugin.drawParticleCleanup?.(context, particle, delta);\n }\n });\n }\n drawParticlePlugins(particle, delta) {\n this.draw((ctx)=>{\n for (const plugin of this._drawParticlePlugins){\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawParticlePlugin)(ctx, plugin, particle, delta);\n }\n });\n }\n drawParticles(delta) {\n const { particles } = this.container;\n this.clear();\n particles.update(delta);\n this.draw((ctx)=>{\n for (const plugin of this._drawSettingsSetupPlugins){\n plugin.drawSettingsSetup?.(ctx, delta);\n }\n for (const plugin of this._drawPlugins){\n plugin.draw?.(ctx, delta);\n }\n particles.drawParticles(delta);\n for (const plugin of this._clearDrawPlugins){\n plugin.clearDraw?.(ctx, delta);\n }\n for (const plugin of this._drawSettingsCleanupPlugins){\n plugin.drawSettingsCleanup?.(ctx, delta);\n }\n });\n }\n getZoomCenter() {\n const pxRatio = this.container.retina.pixelRatio, { width, height } = this.size;\n if (this._zoomCenter) {\n return this._zoomCenter;\n }\n return {\n x: width * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.half / pxRatio,\n y: height * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.half / pxRatio\n };\n }\n init() {\n this._safeMutationObserver((obs)=>{\n obs.disconnect();\n });\n this._mutationObserver = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.safeMutationObserver)((records)=>{\n for (const record of records){\n if (record.type === \"attributes\" && record.attributeName === \"style\") {\n this._repairStyle();\n }\n }\n });\n this.resize();\n this._initStyle();\n this.initBackground();\n this._safeMutationObserver((obs)=>{\n if (!this.element || !(this.element instanceof Node)) {\n return;\n }\n obs.observe(this.element, {\n attributes: true\n });\n });\n this.initUpdaters();\n this.initPlugins();\n this.paint();\n }\n initBackground() {\n const { container } = this, options = container.actualOptions, background = options.background, element = this.element;\n if (!element) {\n return;\n }\n const elementStyle = element.style, color = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.rangeColorToRgb)(this._engine, background.color);\n if (color) {\n elementStyle.backgroundColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.getStyleFromRgb)(color, container.hdr, background.opacity);\n } else {\n elementStyle.backgroundColor = \"\";\n }\n elementStyle.backgroundImage = background.image || \"\";\n elementStyle.backgroundPosition = background.position || \"\";\n elementStyle.backgroundRepeat = background.repeat || \"\";\n elementStyle.backgroundSize = background.size || \"\";\n }\n initPlugins() {\n this._resizePlugins = [];\n this._colorPlugins = [];\n this._canvasClearPlugins = [];\n this._canvasPaintPlugins = [];\n this._clearDrawPlugins = [];\n this._drawParticlePlugins = [];\n this._drawParticlesSetupPlugins = [];\n this._drawParticlesCleanupPlugins = [];\n this._drawPlugins = [];\n this._drawSettingsSetupPlugins = [];\n this._drawSettingsCleanupPlugins = [];\n for (const plugin of this.container.plugins){\n if (plugin.resize) {\n this._resizePlugins.push(plugin);\n }\n if (plugin.particleFillColor ?? plugin.particleStrokeColor) {\n this._colorPlugins.push(plugin);\n }\n if (plugin.canvasClear) {\n this._canvasClearPlugins.push(plugin);\n }\n if (plugin.canvasPaint) {\n this._canvasPaintPlugins.push(plugin);\n }\n if (plugin.drawParticle) {\n this._drawParticlePlugins.push(plugin);\n }\n if (plugin.drawParticleSetup) {\n this._drawParticlesSetupPlugins.push(plugin);\n }\n if (plugin.drawParticleCleanup) {\n this._drawParticlesCleanupPlugins.push(plugin);\n }\n if (plugin.draw) {\n this._drawPlugins.push(plugin);\n }\n if (plugin.drawSettingsSetup) {\n this._drawSettingsSetupPlugins.push(plugin);\n }\n if (plugin.drawSettingsCleanup) {\n this._drawSettingsCleanupPlugins.push(plugin);\n }\n if (plugin.clearDraw) {\n this._clearDrawPlugins.push(plugin);\n }\n }\n }\n initUpdaters() {\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n for (const updater of this.container.particles.updaters){\n if (updater.afterDraw) {\n this._postDrawUpdaters.push(updater);\n }\n if (updater.getColorStyles ?? updater.getTransformValues ?? updater.beforeDraw) {\n this._preDrawUpdaters.push(updater);\n }\n }\n }\n loadCanvas(canvas) {\n if (this._generated && this.element) {\n this.element.remove();\n }\n const container = this.container;\n this._generated = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.generatedAttribute in canvas.dataset ? canvas.dataset[_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.generatedAttribute] === \"true\" : this._generated;\n this.element = canvas;\n this.element.ariaHidden = \"true\";\n this._originalStyle = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.cloneStyle)(this.element.style);\n const standardSize = this._standardSize;\n standardSize.height = canvas.offsetHeight;\n standardSize.width = canvas.offsetWidth;\n const pxRatio = this.container.retina.pixelRatio, retinaSize = this.size;\n canvas.height = retinaSize.height = standardSize.height * pxRatio;\n canvas.width = retinaSize.width = standardSize.width * pxRatio;\n const canSupportHdrQuery = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.safeMatchMedia)(\"(color-gamut: p3)\");\n this._canvasSettings = {\n alpha: true,\n colorSpace: canSupportHdrQuery?.matches && container.hdr ? \"display-p3\" : \"srgb\",\n desynchronized: true,\n willReadFrequently: false\n };\n this._context = this.element.getContext(\"2d\", this._canvasSettings);\n if (this._context) {\n this._context.globalCompositeOperation = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_2__.defaultCompositeValue;\n }\n this._safeMutationObserver((obs)=>{\n obs.disconnect();\n });\n container.retina.init();\n this.initBackground();\n this._safeMutationObserver((obs)=>{\n if (!this.element || !(this.element instanceof Node)) {\n return;\n }\n obs.observe(this.element, {\n attributes: true\n });\n });\n }\n paint() {\n let handled = false;\n for (const plugin of this._canvasPaintPlugins){\n handled = plugin.canvasPaint?.() ?? false;\n if (handled) {\n break;\n }\n }\n if (handled) {\n return;\n }\n this.paintBase();\n }\n paintBase(baseColor) {\n this.draw((ctx)=>{\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.paintBase)(ctx, this.size, baseColor);\n });\n }\n paintImage(image, opacity) {\n this.draw((ctx)=>{\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.paintImage)(ctx, this.size, image, opacity);\n });\n }\n resize() {\n if (!this.element) {\n return false;\n }\n const container = this.container, currentSize = container.canvas._standardSize, newSize = {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight\n }, pxRatio = container.retina.pixelRatio, retinaSize = {\n width: newSize.width * pxRatio,\n height: newSize.height * pxRatio\n };\n if (newSize.height === currentSize.height && newSize.width === currentSize.width && retinaSize.height === this.element.height && retinaSize.width === this.element.width) {\n return false;\n }\n const oldSize = {\n ...currentSize\n };\n currentSize.height = newSize.height;\n currentSize.width = newSize.width;\n const canvasSize = this.size;\n this.element.width = canvasSize.width = retinaSize.width;\n this.element.height = canvasSize.height = retinaSize.height;\n if (this.container.started) {\n container.particles.setResizeFactor({\n width: currentSize.width / oldSize.width,\n height: currentSize.height / oldSize.height\n });\n }\n return true;\n }\n setPointerEvents(type) {\n const element = this.element;\n if (!element) {\n return;\n }\n this._pointerEvents = type;\n this._repairStyle();\n }\n setZoom(zoomLevel, center) {\n this.zoom = zoomLevel;\n this._zoomCenter = center;\n }\n stop() {\n this._safeMutationObserver((obs)=>{\n obs.disconnect();\n });\n this._mutationObserver = undefined;\n this.draw((ctx)=>{\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size);\n });\n }\n async windowResize() {\n if (!this.element || !this.resize()) {\n return;\n }\n const container = this.container, needsRefresh = container.updateActualOptions();\n container.particles.setDensity();\n this._applyResizePlugins();\n if (needsRefresh) {\n await container.refresh();\n }\n }\n _applyPostDrawUpdaters = (particle)=>{\n for (const updater of this._postDrawUpdaters){\n updater.afterDraw?.(particle);\n }\n };\n _applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform)=>{\n for (const updater of this._preDrawUpdaters){\n if (updater.getColorStyles) {\n const { fill, stroke } = updater.getColorStyles(particle, ctx, radius, zOpacity);\n if (fill) {\n colorStyles.fill = fill;\n }\n if (stroke) {\n colorStyles.stroke = stroke;\n }\n }\n if (updater.getTransformValues) {\n const updaterTransform = updater.getTransformValues(particle);\n for(const key in updaterTransform){\n setTransformValue(transform, updaterTransform, key);\n }\n }\n updater.beforeDraw?.(particle);\n }\n };\n _applyResizePlugins = ()=>{\n for (const plugin of this._resizePlugins){\n plugin.resize?.();\n }\n };\n _getPluginParticleColors = (particle)=>{\n let fColor, sColor;\n for (const plugin of this._colorPlugins){\n if (!fColor && plugin.particleFillColor) {\n fColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.rangeColorToHsl)(this._engine, plugin.particleFillColor(particle));\n }\n if (!sColor && plugin.particleStrokeColor) {\n sColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_3__.rangeColorToHsl)(this._engine, plugin.particleStrokeColor(particle));\n }\n if (fColor && sColor) {\n break;\n }\n }\n this._reusablePluginColors[fColorIndex] = fColor;\n this._reusablePluginColors[sColorIndex] = sColor;\n return this._reusablePluginColors;\n };\n _initStyle = ()=>{\n const element = this.element, options = this.container.actualOptions;\n if (!element) {\n return;\n }\n if (this._fullScreen) {\n this._setFullScreenStyle();\n } else {\n this._resetOriginalStyle();\n }\n for(const key in options.style){\n if (!key || !(key in options.style)) {\n continue;\n }\n const value = options.style[key];\n if (!value) {\n continue;\n }\n element.style.setProperty(key, value, \"important\");\n }\n };\n _repairStyle = ()=>{\n const element = this.element;\n if (!element) {\n return;\n }\n this._safeMutationObserver((observer)=>{\n observer.disconnect();\n });\n this._initStyle();\n this.initBackground();\n const pointerEvents = this._pointerEvents;\n element.style.pointerEvents = pointerEvents;\n element.setAttribute(\"pointer-events\", pointerEvents);\n this._safeMutationObserver((observer)=>{\n if (!(element instanceof Node)) {\n return;\n }\n observer.observe(element, {\n attributes: true\n });\n });\n };\n _resetOriginalStyle = ()=>{\n const element = this.element, originalStyle = this._originalStyle;\n if (!element || !originalStyle) {\n return;\n }\n setStyle(element, originalStyle, true);\n };\n _safeMutationObserver = (callback)=>{\n if (!this._mutationObserver) {\n return;\n }\n callback(this._mutationObserver);\n };\n _setFullScreenStyle = ()=>{\n const element = this.element;\n if (!element) {\n return;\n }\n setStyle(element, (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getFullScreenStyle)(this.container.actualOptions.fullScreen.zIndex), true);\n };\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../engine/dist/browser/Core/Canvas.js?\n}");
27
27
 
28
28
  /***/ },
29
29
 
@@ -43,7 +43,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
43
43
  \**************************************************/
44
44
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
45
45
 
46
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Particle: () => (/* binding */ Particle)\n/* harmony export */ });\n/* harmony import */ var _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils/Vectors.js */ \"../../engine/dist/browser/Core/Utils/Vectors.js\");\n/* harmony import */ var _Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/ColorUtils.js */ \"../../engine/dist/browser/Utils/ColorUtils.js\");\n/* harmony import */ var _Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Utils/MathUtils.js */ \"../../engine/dist/browser/Utils/MathUtils.js\");\n/* harmony import */ var _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Utils/Constants.js */ \"../../engine/dist/browser/Core/Utils/Constants.js\");\n/* harmony import */ var _Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.js\");\n/* harmony import */ var _Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Enums/Types/EventType.js */ \"../../engine/dist/browser/Enums/Types/EventType.js\");\n/* harmony import */ var _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Enums/Directions/MoveDirection.js */ \"../../engine/dist/browser/Enums/Directions/MoveDirection.js\");\n/* harmony import */ var _Enums_Modes_OutMode_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Enums/Modes/OutMode.js */ \"../../engine/dist/browser/Enums/Modes/OutMode.js\");\n/* harmony import */ var _Enums_Types_ParticleOutType_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Enums/Types/ParticleOutType.js */ \"../../engine/dist/browser/Enums/Types/ParticleOutType.js\");\n/* harmony import */ var _Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Utils/OptionsUtils.js */ \"../../engine/dist/browser/Utils/OptionsUtils.js\");\n\n\n\n\n\n\n\n\n\n\nfunction loadEffectData(effect, effectOptions, id, reduceDuplicates) {\n const effectData = effectOptions.options[effect];\n return (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.deepExtend)({\n close: effectOptions.close,\n fill: effectOptions.fill\n }, (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.itemFromSingleOrMultiple)(effectData, id, reduceDuplicates));\n}\nfunction loadShapeData(shape, shapeOptions, id, reduceDuplicates) {\n const shapeData = shapeOptions.options[shape];\n return (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.deepExtend)({\n close: shapeOptions.close,\n fill: shapeOptions.fill\n }, (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.itemFromSingleOrMultiple)(shapeData, id, reduceDuplicates));\n}\nfunction fixOutMode(data) {\n if (!(0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.isInArray)(data.outMode, data.checkModes)) {\n return;\n }\n const diameter = data.radius * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.double;\n if (data.coord > data.maxCoord - diameter) {\n data.setCb(-data.radius);\n } else if (data.coord < diameter) {\n data.setCb(data.radius);\n }\n}\nclass Particle {\n container;\n backColor;\n bubble;\n color;\n destroyed;\n direction;\n effect;\n effectClose;\n effectData;\n effectFill;\n group;\n id;\n ignoresResizeRatio;\n initialPosition;\n initialVelocity;\n isRotating;\n lastPathTime;\n misplaced;\n moveCenter;\n moveDecay;\n offset;\n opacity;\n options;\n outType;\n pathDelay;\n pathGenerator;\n pathRotation;\n position;\n randomIndexData;\n retina;\n roll;\n rotation;\n shape;\n shapeClose;\n shapeData;\n shapeFill;\n sides;\n size;\n slow;\n spawning;\n strokeColor;\n strokeOpacity;\n strokeWidth;\n unbreakable;\n velocity;\n zIndexFactor;\n _cachedOpacityData = {\n opacity: _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultOpacity,\n strokeOpacity: _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultOpacity\n };\n _cachedPosition = _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.origin;\n _cachedRotateData = {\n sin: 0,\n cos: 0\n };\n _cachedTransform = {\n a: 1,\n b: 0,\n c: 0,\n d: 1\n };\n _engine;\n constructor(engine, container){\n this.container = container;\n this._engine = engine;\n }\n destroy(override) {\n if (this.unbreakable || this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.bubble.inRange = false;\n this.slow.inRange = false;\n const container = this.container, pathGenerator = this.pathGenerator, shapeDrawer = this.shape ? container.particles.shapeDrawers.get(this.shape) : undefined;\n shapeDrawer?.particleDestroy?.(this);\n for (const plugin of container.particleDestroyedPlugins){\n plugin.particleDestroyed?.(this, override);\n }\n for (const updater of container.particles.updaters){\n updater.particleDestroyed?.(this, override);\n }\n pathGenerator?.reset(this);\n this._engine.dispatchEvent(_Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_5__.EventType.particleDestroyed, {\n container: this.container,\n data: {\n particle: this\n }\n });\n }\n draw(delta) {\n const container = this.container, canvas = container.canvas;\n canvas.drawParticlePlugins(this, delta);\n canvas.drawParticle(this, delta);\n }\n getAngle() {\n return this.rotation + (this.pathRotation ? this.velocity.angle : _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultAngle);\n }\n getFillColor() {\n return this._getRollColor(this.bubble.color ?? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_1__.getHslFromAnimation)(this.color));\n }\n getMass() {\n return this.getRadius() ** _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.squareExp * Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.half;\n }\n getOpacity() {\n const zIndexOptions = this.options.zIndex, zIndexFactor = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.zIndexFactorOffset - this.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, opacity = this.bubble.opacity ?? (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(this.opacity?.value ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultOpacity), strokeOpacity = this.strokeOpacity ?? opacity;\n this._cachedOpacityData.opacity = opacity * zOpacityFactor;\n this._cachedOpacityData.strokeOpacity = strokeOpacity * zOpacityFactor;\n return this._cachedOpacityData;\n }\n getPosition() {\n this._cachedPosition.x = this.position.x + this.offset.x;\n this._cachedPosition.y = this.position.y + this.offset.y;\n this._cachedPosition.z = this.position.z;\n return this._cachedPosition;\n }\n getRadius() {\n return this.bubble.radius ?? this.size.value;\n }\n getRotateData() {\n const angle = this.getAngle();\n this._cachedRotateData.sin = Math.sin(angle);\n this._cachedRotateData.cos = Math.cos(angle);\n return this._cachedRotateData;\n }\n getStrokeColor() {\n return this._getRollColor(this.bubble.color ?? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_1__.getHslFromAnimation)(this.strokeColor));\n }\n getTransformData(externalTransform) {\n const rotateData = this.getRotateData(), rotating = this.isRotating;\n this._cachedTransform.a = rotateData.cos * (externalTransform.a ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultTransform.a);\n this._cachedTransform.b = rotating ? rotateData.sin * (externalTransform.b ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.identity) : externalTransform.b ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultTransform.b;\n this._cachedTransform.c = rotating ? -rotateData.sin * (externalTransform.c ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.identity) : externalTransform.c ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultTransform.c;\n this._cachedTransform.d = rotateData.cos * (externalTransform.d ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultTransform.d);\n return this._cachedTransform;\n }\n init(id, position, overrideOptions, group) {\n const container = this.container;\n this.id = id;\n this.group = group;\n this.effectClose = true;\n this.effectFill = true;\n this.shapeClose = true;\n this.shapeFill = true;\n this.pathRotation = false;\n this.lastPathTime = 0;\n this.destroyed = false;\n this.unbreakable = false;\n this.isRotating = false;\n this.rotation = 0;\n this.misplaced = false;\n this.retina = {\n maxDistance: {}\n };\n this.outType = _Enums_Types_ParticleOutType_js__WEBPACK_IMPORTED_MODULE_8__.ParticleOutType.normal;\n this.ignoresResizeRatio = true;\n const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0,_Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_9__.loadParticlesOptions)(this._engine, container, mainOptions.particles), reduceDuplicates = particlesOptions.reduceDuplicates, effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type;\n this.effect = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.itemFromSingleOrMultiple)(effectType, this.id, reduceDuplicates);\n this.shape = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.itemFromSingleOrMultiple)(shapeType, this.id, reduceDuplicates);\n const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;\n if (overrideOptions) {\n if (overrideOptions.effect?.type) {\n const overrideEffectType = overrideOptions.effect.type, effect = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.itemFromSingleOrMultiple)(overrideEffectType, this.id, reduceDuplicates);\n if (effect) {\n this.effect = effect;\n effectOptions.load(overrideOptions.effect);\n }\n }\n if (overrideOptions.shape?.type) {\n const overrideShapeType = overrideOptions.shape.type, shape = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.itemFromSingleOrMultiple)(overrideShapeType, this.id, reduceDuplicates);\n if (shape) {\n this.shape = shape;\n shapeOptions.load(overrideOptions.shape);\n }\n }\n }\n if (this.effect === _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.randomColorValue) {\n const availableEffects = [\n ...this.container.particles.effectDrawers.keys()\n ];\n this.effect = availableEffects[Math.floor((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRandom)() * availableEffects.length)];\n }\n if (this.shape === _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.randomColorValue) {\n const availableShapes = [\n ...this.container.particles.shapeDrawers.keys()\n ];\n this.shape = availableShapes[Math.floor((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRandom)() * availableShapes.length)];\n }\n this.effectData = this.effect ? loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates) : undefined;\n this.shapeData = this.shape ? loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates) : undefined;\n particlesOptions.load(overrideOptions);\n const effectData = this.effectData;\n if (effectData) {\n particlesOptions.load(effectData.particles);\n }\n const shapeData = this.shapeData;\n if (shapeData) {\n particlesOptions.load(shapeData.particles);\n }\n this.effectFill = effectData?.fill ?? particlesOptions.effect.fill;\n this.effectClose = effectData?.close ?? particlesOptions.effect.close;\n this.shapeFill = shapeData?.fill ?? particlesOptions.shape.fill;\n this.shapeClose = shapeData?.close ?? particlesOptions.shape.close;\n this.options = particlesOptions;\n const pathOptions = this.options.move.path;\n this.pathDelay = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(pathOptions.delay.value) * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.millisecondsToSeconds;\n if (pathOptions.generator) {\n let pathGenerator = this.container.particles.pathGenerators.get(pathOptions.generator);\n if (!pathGenerator) {\n pathGenerator = this.container.particles.availablePathGenerators.get(pathOptions.generator);\n if (pathGenerator) {\n this.container.particles.pathGenerators.set(pathOptions.generator, pathGenerator);\n pathGenerator.init();\n }\n }\n this.pathGenerator = pathGenerator;\n }\n container.retina.initParticle(this);\n this.size = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.initParticleNumericAnimationValue)(this.options.size, pxRatio);\n this.bubble = {\n inRange: false\n };\n this.slow = {\n inRange: false,\n factor: 1\n };\n this._initPosition(position);\n this.initialVelocity = this._calculateVelocity();\n this.velocity = this.initialVelocity.copy();\n this.moveDecay = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.decayOffset - (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(this.options.move.decay);\n const particles = container.particles;\n particles.setLastZIndex(this.position.z);\n this.zIndexFactor = this.position.z / container.zLayers;\n this.sides = 24;\n let effectDrawer, shapeDrawer;\n if (this.effect) {\n effectDrawer = container.particles.effectDrawers.get(this.effect);\n }\n if (effectDrawer?.loadEffect) {\n effectDrawer.loadEffect(this);\n }\n if (this.shape) {\n shapeDrawer = container.particles.shapeDrawers.get(this.shape);\n }\n if (shapeDrawer?.loadShape) {\n shapeDrawer.loadShape(this);\n }\n const sideCountFunc = shapeDrawer?.getSidesCount;\n if (sideCountFunc) {\n this.sides = sideCountFunc(this);\n }\n this.spawning = false;\n for (const updater of particles.updaters){\n updater.init(this);\n }\n for (const mover of particles.movers){\n mover.init(this);\n }\n effectDrawer?.particleInit?.(container, this);\n shapeDrawer?.particleInit?.(container, this);\n for (const plugin of container.particleCreatedPlugins){\n plugin.particleCreated?.(this);\n }\n }\n isInsideCanvas() {\n const radius = this.getRadius(), canvasSize = this.container.canvas.size, position = this.position;\n return position.x >= -radius && position.y >= -radius && position.y <= canvasSize.height + radius && position.x <= canvasSize.width + radius;\n }\n isShowingBack() {\n if (!this.roll) {\n return false;\n }\n const angle = this.roll.angle;\n if (this.roll.horizontal && this.roll.vertical) {\n const normalizedAngle = angle % _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.doublePI, adjustedAngle = normalizedAngle < _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultAngle ? normalizedAngle + _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.doublePI : normalizedAngle;\n return adjustedAngle >= Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.half && adjustedAngle < Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.triple * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.half;\n }\n if (this.roll.horizontal) {\n const normalizedAngle = (angle + Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.half) % (Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.double), adjustedAngle = normalizedAngle < _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultAngle ? normalizedAngle + Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.double : normalizedAngle;\n return adjustedAngle >= Math.PI && adjustedAngle < Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.double;\n }\n if (this.roll.vertical) {\n const normalizedAngle = angle % (Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.double), adjustedAngle = normalizedAngle < _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultAngle ? normalizedAngle + Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.double : normalizedAngle;\n return adjustedAngle >= Math.PI && adjustedAngle < Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.double;\n }\n return false;\n }\n isVisible() {\n return !this.destroyed && !this.spawning && this.isInsideCanvas();\n }\n reset() {\n for (const updater of this.container.particles.updaters){\n updater.reset?.(this);\n }\n }\n _calcPosition = (position, zIndex)=>{\n let tryCount = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.defaultRetryCount, posVec = position ? _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create(position.x, position.y, zIndex) : undefined;\n const container = this.container, plugins = container.particlePositionPlugins, outModes = this.options.move.outModes, radius = this.getRadius(), canvasSize = container.canvas.size, abortController = new AbortController(), { signal } = abortController;\n while(!signal.aborted){\n for (const plugin of plugins){\n const pluginPos = plugin.particlePosition?.(posVec, this);\n if (pluginPos) {\n return _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create(pluginPos.x, pluginPos.y, zIndex);\n }\n }\n const exactPosition = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.calcExactPositionOrRandomFromSize)({\n size: canvasSize,\n position: posVec\n }), pos = _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create(exactPosition.x, exactPosition.y, zIndex);\n this._fixHorizontal(pos, radius, outModes.left ?? outModes.default);\n this._fixHorizontal(pos, radius, outModes.right ?? outModes.default);\n this._fixVertical(pos, radius, outModes.top ?? outModes.default);\n this._fixVertical(pos, radius, outModes.bottom ?? outModes.default);\n let isValidPosition = true;\n for (const plugin of container.particles.checkParticlePositionPlugins){\n isValidPosition = plugin.checkParticlePosition?.(this, pos, tryCount) ?? true;\n if (!isValidPosition) {\n break;\n }\n }\n if (isValidPosition) {\n return pos;\n }\n tryCount += _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.tryCountIncrement;\n posVec = undefined;\n }\n return posVec;\n };\n _calculateVelocity = ()=>{\n const baseVelocity = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getParticleBaseVelocity)(this.direction), res = baseVelocity.copy(), moveOptions = this.options.move;\n if (moveOptions.direction === _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__.MoveDirection.inside || moveOptions.direction === _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__.MoveDirection.outside) {\n return res;\n }\n const rad = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.degToRad)((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(moveOptions.angle.value)), radOffset = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.degToRad)((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(moveOptions.angle.offset)), range = {\n left: radOffset - rad * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.half,\n right: radOffset + rad * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.half\n };\n if (!moveOptions.straight) {\n res.angle += (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.randomInRangeValue)((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.setRangeValue)(range.left, range.right));\n }\n if (moveOptions.random && typeof moveOptions.speed === \"number\") {\n res.length *= (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRandom)();\n }\n return res;\n };\n _fixHorizontal = (pos, radius, outMode)=>{\n fixOutMode({\n outMode,\n checkModes: [\n _Enums_Modes_OutMode_js__WEBPACK_IMPORTED_MODULE_7__.OutMode.bounce\n ],\n coord: pos.x,\n maxCoord: this.container.canvas.size.width,\n setCb: (value)=>pos.x += value,\n radius\n });\n };\n _fixVertical = (pos, radius, outMode)=>{\n fixOutMode({\n outMode,\n checkModes: [\n _Enums_Modes_OutMode_js__WEBPACK_IMPORTED_MODULE_7__.OutMode.bounce\n ],\n coord: pos.y,\n maxCoord: this.container.canvas.size.height,\n setCb: (value)=>pos.y += value,\n radius\n });\n };\n _getRollColor = (color)=>{\n if (!color || !this.roll || !this.backColor && !this.roll.alter) {\n return color;\n }\n if (!this.isShowingBack()) {\n return color;\n }\n if (this.backColor) {\n return this.backColor;\n }\n if (this.roll.alter) {\n return (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_1__.alterHsl)(color, this.roll.alter.type, this.roll.alter.value);\n }\n return color;\n };\n _initPosition = (position)=>{\n const container = this.container, zIndexValue = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(this.options.zIndex.value), initialPosition = this._calcPosition(position, (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.clamp)(zIndexValue, _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.minZ, container.zLayers));\n if (!initialPosition) {\n throw new Error(\"a valid position cannot be found for particle\");\n }\n this.position = initialPosition;\n this.initialPosition = this.position.copy();\n const canvasSize = container.canvas.size;\n this.moveCenter = {\n ...(0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_4__.getPosition)(this.options.move.center, canvasSize),\n radius: this.options.move.center.radius,\n mode: this.options.move.center.mode\n };\n this.direction = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getParticleDirectionAngle)(this.options.move.direction, this.position, this.moveCenter);\n switch(this.options.move.direction){\n case _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__.MoveDirection.inside:\n this.outType = _Enums_Types_ParticleOutType_js__WEBPACK_IMPORTED_MODULE_8__.ParticleOutType.inside;\n break;\n case _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__.MoveDirection.outside:\n this.outType = _Enums_Types_ParticleOutType_js__WEBPACK_IMPORTED_MODULE_8__.ParticleOutType.outside;\n break;\n default:\n break;\n }\n this.offset = _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector.origin;\n };\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../engine/dist/browser/Core/Particle.js?\n}");
46
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Particle: () => (/* binding */ Particle)\n/* harmony export */ });\n/* harmony import */ var _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils/Vectors.js */ \"../../engine/dist/browser/Core/Utils/Vectors.js\");\n/* harmony import */ var _Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/ColorUtils.js */ \"../../engine/dist/browser/Utils/ColorUtils.js\");\n/* harmony import */ var _Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Utils/MathUtils.js */ \"../../engine/dist/browser/Utils/MathUtils.js\");\n/* harmony import */ var _Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.js\");\n/* harmony import */ var _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Utils/Constants.js */ \"../../engine/dist/browser/Core/Utils/Constants.js\");\n/* harmony import */ var _Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Enums/Types/EventType.js */ \"../../engine/dist/browser/Enums/Types/EventType.js\");\n/* harmony import */ var _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Enums/Directions/MoveDirection.js */ \"../../engine/dist/browser/Enums/Directions/MoveDirection.js\");\n/* harmony import */ var _Enums_Modes_OutMode_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Enums/Modes/OutMode.js */ \"../../engine/dist/browser/Enums/Modes/OutMode.js\");\n/* harmony import */ var _Enums_Types_ParticleOutType_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Enums/Types/ParticleOutType.js */ \"../../engine/dist/browser/Enums/Types/ParticleOutType.js\");\n/* harmony import */ var _Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Utils/OptionsUtils.js */ \"../../engine/dist/browser/Utils/OptionsUtils.js\");\n\n\n\n\n\n\n\n\n\n\nfunction loadEffectData(effect, effectOptions, id, reduceDuplicates) {\n const effectData = effectOptions.options[effect];\n return (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.deepExtend)({\n close: effectOptions.close\n }, (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.itemFromSingleOrMultiple)(effectData, id, reduceDuplicates));\n}\nfunction loadShapeData(shape, shapeOptions, id, reduceDuplicates) {\n const shapeData = shapeOptions.options[shape];\n return (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.deepExtend)({\n close: shapeOptions.close\n }, (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.itemFromSingleOrMultiple)(shapeData, id, reduceDuplicates));\n}\nfunction fixOutMode(data) {\n if (!(0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.isInArray)(data.outMode, data.checkModes)) {\n return;\n }\n const diameter = data.radius * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.double;\n if (data.coord > data.maxCoord - diameter) {\n data.setCb(-data.radius);\n } else if (data.coord < diameter) {\n data.setCb(data.radius);\n }\n}\nclass Particle {\n container;\n backColor;\n bubble;\n destroyed;\n direction;\n effect;\n effectClose;\n effectData;\n fillColor;\n fillEnabled;\n fillOpacity;\n group;\n id;\n ignoresResizeRatio;\n initialPosition;\n initialVelocity;\n isRotating;\n lastPathTime;\n misplaced;\n moveCenter;\n offset;\n opacity;\n options;\n outType;\n pathRotation;\n position;\n randomIndexData;\n retina;\n roll;\n rotation;\n shape;\n shapeClose;\n shapeData;\n sides;\n size;\n slow;\n spawning;\n strokeColor;\n strokeOpacity;\n strokeWidth;\n unbreakable;\n velocity;\n zIndexFactor;\n _cachedOpacityData = {\n fillOpacity: _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultOpacity,\n opacity: _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultOpacity,\n strokeOpacity: _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultOpacity\n };\n _cachedPosition = _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.origin;\n _cachedRotateData = {\n sin: 0,\n cos: 0\n };\n _cachedTransform = {\n a: 1,\n b: 0,\n c: 0,\n d: 1\n };\n _engine;\n constructor(engine, container){\n this.container = container;\n this._engine = engine;\n }\n destroy(override) {\n if (this.unbreakable || this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.bubble.inRange = false;\n this.slow.inRange = false;\n const container = this.container, shapeDrawer = this.shape ? container.particles.shapeDrawers.get(this.shape) : undefined;\n shapeDrawer?.particleDestroy?.(this);\n for (const plugin of container.particleDestroyedPlugins){\n plugin.particleDestroyed?.(this, override);\n }\n for (const updater of container.particles.updaters){\n updater.particleDestroyed?.(this, override);\n }\n this._engine.dispatchEvent(_Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_5__.EventType.particleDestroyed, {\n container: this.container,\n data: {\n particle: this\n }\n });\n }\n draw(delta) {\n const container = this.container, canvas = container.canvas;\n canvas.drawParticlePlugins(this, delta);\n canvas.drawParticle(this, delta);\n }\n getAngle() {\n return this.rotation + (this.pathRotation ? this.velocity.angle : _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultAngle);\n }\n getFillColor() {\n return this._getRollColor(this.bubble.color ?? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_1__.getHslFromAnimation)(this.fillColor));\n }\n getMass() {\n return this.getRadius() ** _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.squareExp * Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.half;\n }\n getOpacity() {\n const zIndexOptions = this.options.zIndex, zIndexFactor = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.zIndexFactorOffset - this.zIndexFactor, zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate, opacity = this.bubble.opacity ?? (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(this.opacity?.value ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultOpacity), fillOpacity = this.fillOpacity ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultOpacity, strokeOpacity = this.strokeOpacity ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultOpacity;\n this._cachedOpacityData.fillOpacity = opacity * fillOpacity * zOpacityFactor;\n this._cachedOpacityData.opacity = opacity * zOpacityFactor;\n this._cachedOpacityData.strokeOpacity = opacity * strokeOpacity * zOpacityFactor;\n return this._cachedOpacityData;\n }\n getPosition() {\n this._cachedPosition.x = this.position.x + this.offset.x;\n this._cachedPosition.y = this.position.y + this.offset.y;\n this._cachedPosition.z = this.position.z;\n return this._cachedPosition;\n }\n getRadius() {\n return this.bubble.radius ?? this.size.value;\n }\n getRotateData() {\n const angle = this.getAngle();\n this._cachedRotateData.sin = Math.sin(angle);\n this._cachedRotateData.cos = Math.cos(angle);\n return this._cachedRotateData;\n }\n getStrokeColor() {\n return this._getRollColor(this.bubble.color ?? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_1__.getHslFromAnimation)(this.strokeColor));\n }\n getTransformData(externalTransform) {\n const rotateData = this.getRotateData(), rotating = this.isRotating;\n this._cachedTransform.a = rotateData.cos * (externalTransform.a ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultTransform.a);\n this._cachedTransform.b = rotating ? rotateData.sin * (externalTransform.b ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.identity) : externalTransform.b ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultTransform.b;\n this._cachedTransform.c = rotating ? -rotateData.sin * (externalTransform.c ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.identity) : externalTransform.c ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultTransform.c;\n this._cachedTransform.d = rotateData.cos * (externalTransform.d ?? _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultTransform.d);\n return this._cachedTransform;\n }\n init(id, position, overrideOptions, group) {\n const container = this.container;\n this.id = id;\n this.group = group;\n this.effectClose = true;\n this.shapeClose = true;\n this.pathRotation = false;\n this.lastPathTime = 0;\n this.destroyed = false;\n this.unbreakable = false;\n this.isRotating = false;\n this.rotation = 0;\n this.misplaced = false;\n this.retina = {\n maxDistance: {}\n };\n this.outType = _Enums_Types_ParticleOutType_js__WEBPACK_IMPORTED_MODULE_8__.ParticleOutType.normal;\n this.ignoresResizeRatio = true;\n const pxRatio = container.retina.pixelRatio, mainOptions = container.actualOptions, particlesOptions = (0,_Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_9__.loadParticlesOptions)(this._engine, container, mainOptions.particles), reduceDuplicates = particlesOptions.reduceDuplicates, effectType = particlesOptions.effect.type, shapeType = particlesOptions.shape.type;\n this.effect = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.itemFromSingleOrMultiple)(effectType, this.id, reduceDuplicates);\n this.shape = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.itemFromSingleOrMultiple)(shapeType, this.id, reduceDuplicates);\n const effectOptions = particlesOptions.effect, shapeOptions = particlesOptions.shape;\n if (overrideOptions) {\n if (overrideOptions.effect?.type) {\n const overrideEffectType = overrideOptions.effect.type, effect = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.itemFromSingleOrMultiple)(overrideEffectType, this.id, reduceDuplicates);\n if (effect) {\n this.effect = effect;\n effectOptions.load(overrideOptions.effect);\n }\n }\n if (overrideOptions.shape?.type) {\n const overrideShapeType = overrideOptions.shape.type, shape = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.itemFromSingleOrMultiple)(overrideShapeType, this.id, reduceDuplicates);\n if (shape) {\n this.shape = shape;\n shapeOptions.load(overrideOptions.shape);\n }\n }\n }\n if (this.effect === _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.randomColorValue) {\n const availableEffects = [\n ...this.container.particles.effectDrawers.keys()\n ];\n this.effect = availableEffects[Math.floor((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRandom)() * availableEffects.length)];\n }\n if (this.shape === _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.randomColorValue) {\n const availableShapes = [\n ...this.container.particles.shapeDrawers.keys()\n ];\n this.shape = availableShapes[Math.floor((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRandom)() * availableShapes.length)];\n }\n this.effectData = this.effect ? loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates) : undefined;\n this.shapeData = this.shape ? loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates) : undefined;\n particlesOptions.load(overrideOptions);\n const effectData = this.effectData;\n if (effectData) {\n particlesOptions.load(effectData.particles);\n }\n const shapeData = this.shapeData;\n if (shapeData) {\n particlesOptions.load(shapeData.particles);\n }\n this.effectClose = effectData?.close ?? particlesOptions.effect.close;\n this.shapeClose = shapeData?.close ?? particlesOptions.shape.close;\n this.options = particlesOptions;\n container.retina.initParticle(this);\n this.size = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.initParticleNumericAnimationValue)(this.options.size, pxRatio);\n this.bubble = {\n inRange: false\n };\n this.slow = {\n inRange: false,\n factor: 1\n };\n this._initPosition(position);\n this.initialVelocity = this._calculateVelocity();\n this.velocity = this.initialVelocity.copy();\n const particles = container.particles;\n particles.setLastZIndex(this.position.z);\n this.zIndexFactor = this.position.z / container.zLayers;\n this.sides = 24;\n let effectDrawer, shapeDrawer;\n if (this.effect) {\n effectDrawer = container.particles.effectDrawers.get(this.effect);\n }\n if (effectDrawer?.loadEffect) {\n effectDrawer.loadEffect(this);\n }\n if (this.shape) {\n shapeDrawer = container.particles.shapeDrawers.get(this.shape);\n }\n if (shapeDrawer?.loadShape) {\n shapeDrawer.loadShape(this);\n }\n const sideCountFunc = shapeDrawer?.getSidesCount;\n if (sideCountFunc) {\n this.sides = sideCountFunc(this);\n }\n this.spawning = false;\n for (const updater of particles.updaters){\n updater.init(this);\n }\n effectDrawer?.particleInit?.(container, this);\n shapeDrawer?.particleInit?.(container, this);\n for (const plugin of container.particleCreatedPlugins){\n plugin.particleCreated?.(this);\n }\n }\n isInsideCanvas() {\n const radius = this.getRadius(), canvasSize = this.container.canvas.size, position = this.position;\n return position.x >= -radius && position.y >= -radius && position.y <= canvasSize.height + radius && position.x <= canvasSize.width + radius;\n }\n isShowingBack() {\n if (!this.roll) {\n return false;\n }\n const angle = this.roll.angle;\n if (this.roll.horizontal && this.roll.vertical) {\n const normalizedAngle = angle % _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.doublePI, adjustedAngle = normalizedAngle < _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultAngle ? normalizedAngle + _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.doublePI : normalizedAngle;\n return adjustedAngle >= Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.half && adjustedAngle < Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.triple * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.half;\n }\n if (this.roll.horizontal) {\n const normalizedAngle = (angle + Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.half) % (Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.double), adjustedAngle = normalizedAngle < _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultAngle ? normalizedAngle + Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.double : normalizedAngle;\n return adjustedAngle >= Math.PI && adjustedAngle < Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.double;\n }\n if (this.roll.vertical) {\n const normalizedAngle = angle % (Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.double), adjustedAngle = normalizedAngle < _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultAngle ? normalizedAngle + Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.double : normalizedAngle;\n return adjustedAngle >= Math.PI && adjustedAngle < Math.PI * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.double;\n }\n return false;\n }\n isVisible() {\n return !this.destroyed && !this.spawning && this.isInsideCanvas();\n }\n reset() {\n for (const updater of this.container.particles.updaters){\n updater.reset?.(this);\n }\n }\n _calcPosition = (position, zIndex)=>{\n let tryCount = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.defaultRetryCount, posVec = position ? _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create(position.x, position.y, zIndex) : undefined;\n const container = this.container, plugins = container.particlePositionPlugins, outModes = this.options.move.outModes, radius = this.getRadius(), canvasSize = container.canvas.size, abortController = new AbortController(), { signal } = abortController;\n while(!signal.aborted){\n for (const plugin of plugins){\n const pluginPos = plugin.particlePosition?.(posVec, this);\n if (pluginPos) {\n return _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create(pluginPos.x, pluginPos.y, zIndex);\n }\n }\n const exactPosition = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.calcExactPositionOrRandomFromSize)({\n size: canvasSize,\n position: posVec\n }), pos = _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create(exactPosition.x, exactPosition.y, zIndex);\n this._fixHorizontal(pos, radius, outModes.left ?? outModes.default);\n this._fixHorizontal(pos, radius, outModes.right ?? outModes.default);\n this._fixVertical(pos, radius, outModes.top ?? outModes.default);\n this._fixVertical(pos, radius, outModes.bottom ?? outModes.default);\n let isValidPosition = true;\n for (const plugin of container.particles.checkParticlePositionPlugins){\n isValidPosition = plugin.checkParticlePosition?.(this, pos, tryCount) ?? true;\n if (!isValidPosition) {\n break;\n }\n }\n if (isValidPosition) {\n return pos;\n }\n tryCount += _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.tryCountIncrement;\n posVec = undefined;\n }\n return posVec;\n };\n _calculateVelocity = ()=>{\n const baseVelocity = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getParticleBaseVelocity)(this.direction), res = baseVelocity.copy(), moveOptions = this.options.move;\n if (moveOptions.direction === _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__.MoveDirection.inside || moveOptions.direction === _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__.MoveDirection.outside) {\n return res;\n }\n const rad = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.degToRad)((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(moveOptions.angle.value)), radOffset = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.degToRad)((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(moveOptions.angle.offset)), range = {\n left: radOffset - rad * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.half,\n right: radOffset + rad * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.half\n };\n if (!moveOptions.straight) {\n res.angle += (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.randomInRangeValue)((0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.setRangeValue)(range.left, range.right));\n }\n if (moveOptions.random && typeof moveOptions.speed === \"number\") {\n res.length *= (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRandom)();\n }\n return res;\n };\n _fixHorizontal = (pos, radius, outMode)=>{\n fixOutMode({\n outMode,\n checkModes: [\n _Enums_Modes_OutMode_js__WEBPACK_IMPORTED_MODULE_7__.OutMode.bounce\n ],\n coord: pos.x,\n maxCoord: this.container.canvas.size.width,\n setCb: (value)=>pos.x += value,\n radius\n });\n };\n _fixVertical = (pos, radius, outMode)=>{\n fixOutMode({\n outMode,\n checkModes: [\n _Enums_Modes_OutMode_js__WEBPACK_IMPORTED_MODULE_7__.OutMode.bounce\n ],\n coord: pos.y,\n maxCoord: this.container.canvas.size.height,\n setCb: (value)=>pos.y += value,\n radius\n });\n };\n _getRollColor = (color)=>{\n if (!color || !this.roll || !this.backColor && !this.roll.alter) {\n return color;\n }\n if (!this.isShowingBack()) {\n return color;\n }\n if (this.backColor) {\n return this.backColor;\n }\n if (this.roll.alter) {\n return (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_1__.alterHsl)(color, this.roll.alter.type, this.roll.alter.value);\n }\n return color;\n };\n _initPosition = (position)=>{\n const container = this.container, zIndexValue = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRangeValue)(this.options.zIndex.value), initialPosition = this._calcPosition(position, (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.clamp)(zIndexValue, _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_4__.minZ, container.zLayers));\n if (!initialPosition) {\n throw new Error(\"a valid position cannot be found for particle\");\n }\n this.position = initialPosition;\n this.initialPosition = this.position.copy();\n const canvasSize = container.canvas.size;\n this.moveCenter = {\n ...(0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_3__.getPosition)(this.options.move.center, canvasSize),\n radius: this.options.move.center.radius,\n mode: this.options.move.center.mode\n };\n this.direction = (0,_Utils_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.getParticleDirectionAngle)(this.options.move.direction, this.position, this.moveCenter);\n switch(this.options.move.direction){\n case _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__.MoveDirection.inside:\n this.outType = _Enums_Types_ParticleOutType_js__WEBPACK_IMPORTED_MODULE_8__.ParticleOutType.inside;\n break;\n case _Enums_Directions_MoveDirection_js__WEBPACK_IMPORTED_MODULE_6__.MoveDirection.outside:\n this.outType = _Enums_Types_ParticleOutType_js__WEBPACK_IMPORTED_MODULE_8__.ParticleOutType.outside;\n break;\n default:\n break;\n }\n this.offset = _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector.origin;\n };\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../engine/dist/browser/Core/Particle.js?\n}");
47
47
 
48
48
  /***/ },
49
49
 
@@ -53,7 +53,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
53
53
  \***************************************************/
54
54
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
55
55
 
56
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Particles: () => (/* binding */ Particles)\n/* harmony export */ });\n/* harmony import */ var _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils/Constants.js */ \"../../engine/dist/browser/Core/Utils/Constants.js\");\n/* harmony import */ var _Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Enums/Types/EventType.js */ \"../../engine/dist/browser/Enums/Types/EventType.js\");\n/* harmony import */ var _Enums_Modes_LimitMode_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Enums/Modes/LimitMode.js */ \"../../engine/dist/browser/Enums/Modes/LimitMode.js\");\n/* harmony import */ var _Particle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Particle.js */ \"../../engine/dist/browser/Core/Particle.js\");\n/* harmony import */ var _Utils_SpatialHashGrid_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Utils/SpatialHashGrid.js */ \"../../engine/dist/browser/Core/Utils/SpatialHashGrid.js\");\n/* harmony import */ var _Utils_LogUtils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Utils/LogUtils.js */ \"../../engine/dist/browser/Utils/LogUtils.js\");\n/* harmony import */ var _Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Utils/OptionsUtils.js */ \"../../engine/dist/browser/Utils/OptionsUtils.js\");\n\n\n\n\n\n\n\nclass Particles {\n availablePathGenerators;\n checkParticlePositionPlugins;\n effectDrawers;\n grid;\n movers;\n pathGenerators;\n shapeDrawers;\n updaters;\n _array;\n _container;\n _engine;\n _groupLimits;\n _limit;\n _maxZIndex;\n _minZIndex;\n _needsSort;\n _nextId;\n _particleResetPlugins;\n _particleUpdatePlugins;\n _pool;\n _postParticleUpdatePlugins;\n _postUpdatePlugins;\n _resizeFactor;\n _updatePlugins;\n _zArray;\n constructor(engine, container){\n this._engine = engine;\n this._container = container;\n this._nextId = 0;\n this._array = [];\n this._zArray = [];\n this._pool = [];\n this._limit = 0;\n this._groupLimits = new Map();\n this._needsSort = false;\n this._minZIndex = 0;\n this._maxZIndex = 0;\n this.grid = new _Utils_SpatialHashGrid_js__WEBPACK_IMPORTED_MODULE_4__.SpatialHashGrid(_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.spatialHashGridCellSize);\n this.effectDrawers = new Map();\n this.movers = [];\n this.availablePathGenerators = new Map();\n this.pathGenerators = new Map();\n this.shapeDrawers = new Map();\n this.updaters = [];\n this.checkParticlePositionPlugins = [];\n this._particleResetPlugins = [];\n this._particleUpdatePlugins = [];\n this._postUpdatePlugins = [];\n this._postParticleUpdatePlugins = [];\n this._updatePlugins = [];\n }\n get count() {\n return this._array.length;\n }\n addParticle(position, overrideOptions, group, initializer) {\n const limitMode = this._container.actualOptions.particles.number.limit.mode, limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit, currentCount = this.count;\n if (limit > _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minLimit) {\n switch(limitMode){\n case _Enums_Modes_LimitMode_js__WEBPACK_IMPORTED_MODULE_2__.LimitMode.delete:\n {\n const countToRemove = currentCount + _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.countOffset - limit;\n if (countToRemove > _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minCount) {\n this.removeQuantity(countToRemove);\n }\n break;\n }\n case _Enums_Modes_LimitMode_js__WEBPACK_IMPORTED_MODULE_2__.LimitMode.wait:\n if (currentCount >= limit) {\n return;\n }\n break;\n default:\n break;\n }\n }\n try {\n const particle = this._pool.pop() ?? new _Particle_js__WEBPACK_IMPORTED_MODULE_3__.Particle(this._engine, this._container);\n particle.init(this._nextId, position, overrideOptions, group);\n let canAdd = true;\n if (initializer) {\n canAdd = initializer(particle);\n }\n if (!canAdd) {\n this._pool.push(particle);\n return;\n }\n this._array.push(particle);\n this._zArray.push(particle);\n this._nextId++;\n this._engine.dispatchEvent(_Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_1__.EventType.particleAdded, {\n container: this._container,\n data: {\n particle\n }\n });\n return particle;\n } catch (e) {\n (0,_Utils_LogUtils_js__WEBPACK_IMPORTED_MODULE_5__.getLogger)().warning(`error adding particle: ${e}`);\n }\n return undefined;\n }\n clear() {\n this._array = [];\n this._zArray = [];\n }\n destroy() {\n const container = this._container;\n for (const [, effectDrawer] of this.effectDrawers){\n effectDrawer.destroy?.(container);\n }\n for (const [, shapeDrawer] of this.shapeDrawers){\n shapeDrawer.destroy?.(container);\n }\n this._array = [];\n this._pool.length = 0;\n this._zArray = [];\n this.effectDrawers = new Map();\n this.movers = [];\n this.availablePathGenerators = new Map();\n this.pathGenerators = new Map();\n this.shapeDrawers = new Map();\n this.updaters = [];\n this.checkParticlePositionPlugins = [];\n this._particleResetPlugins = [];\n this._particleUpdatePlugins = [];\n this._postUpdatePlugins = [];\n this._postParticleUpdatePlugins = [];\n this._updatePlugins = [];\n }\n drawParticles(delta) {\n for (const particle of this._zArray){\n particle.draw(delta);\n }\n }\n filter(condition) {\n return this._array.filter(condition);\n }\n find(condition) {\n return this._array.find(condition);\n }\n get(index) {\n return this._array[index];\n }\n async init() {\n const container = this._container, options = container.actualOptions;\n this._minZIndex = 0;\n this._maxZIndex = 0;\n this._needsSort = false;\n this.checkParticlePositionPlugins = [];\n this._updatePlugins = [];\n this._particleUpdatePlugins = [];\n this._postUpdatePlugins = [];\n this._particleResetPlugins = [];\n this._postParticleUpdatePlugins = [];\n this.grid = new _Utils_SpatialHashGrid_js__WEBPACK_IMPORTED_MODULE_4__.SpatialHashGrid(_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.spatialHashGridCellSize * container.retina.pixelRatio);\n for (const plugin of container.plugins){\n if (plugin.redrawInit) {\n await plugin.redrawInit();\n }\n if (plugin.checkParticlePosition) {\n this.checkParticlePositionPlugins.push(plugin);\n }\n if (plugin.update) {\n this._updatePlugins.push(plugin);\n }\n if (plugin.particleUpdate) {\n this._particleUpdatePlugins.push(plugin);\n }\n if (plugin.postUpdate) {\n this._postUpdatePlugins.push(plugin);\n }\n if (plugin.particleReset) {\n this._particleResetPlugins.push(plugin);\n }\n if (plugin.postParticleUpdate) {\n this._postParticleUpdatePlugins.push(plugin);\n }\n }\n await this.initPlugins();\n for (const drawer of this.effectDrawers.values()){\n await drawer.init?.(container);\n }\n for (const drawer of this.shapeDrawers.values()){\n await drawer.init?.(container);\n }\n let handled = false;\n for (const plugin of container.plugins){\n handled = plugin.particlesInitialization?.() ?? handled;\n if (handled) {\n break;\n }\n }\n if (!handled) {\n const particlesOptions = options.particles, groups = particlesOptions.groups;\n for(const group in groups){\n const groupOptions = groups[group];\n if (!groupOptions) {\n continue;\n }\n for(let i = this.count, j = 0; j < groupOptions.number.value && i < particlesOptions.number.value; i++, j++){\n this.addParticle(undefined, groupOptions, group);\n }\n }\n for(let i = this.count; i < particlesOptions.number.value; i++){\n this.addParticle();\n }\n }\n }\n async initPlugins() {\n const container = this._container;\n this.effectDrawers = await this._engine.getEffectDrawers(container, true);\n this.movers = await this._engine.getMovers(container, true);\n this.availablePathGenerators = await this._engine.getPathGenerators(container, true);\n this.pathGenerators = new Map();\n this.shapeDrawers = await this._engine.getShapeDrawers(container, true);\n this.updaters = await this._engine.getUpdaters(container, true);\n for (const pathGenerator of this.pathGenerators.values()){\n pathGenerator.init();\n }\n }\n push(nb, position, overrideOptions, group) {\n for(let i = 0; i < nb; i++){\n this.addParticle(position, overrideOptions, group);\n }\n }\n async redraw() {\n this.clear();\n await this.init();\n this._container.canvas.drawParticles({\n value: 0,\n factor: 0\n });\n }\n remove(particle, group, override) {\n this.removeAt(this._array.indexOf(particle), undefined, group, override);\n }\n removeAt(index, quantity = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultRemoveQuantity, group, override) {\n if (index < _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minIndex || index > this.count) {\n return;\n }\n let deleted = 0;\n for(let i = index; deleted < quantity && i < this.count; i++){\n if (this._removeParticle(i, group, override)) {\n i--;\n deleted++;\n }\n }\n }\n removeQuantity(quantity, group) {\n this.removeAt(_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minIndex, quantity, group);\n }\n setDensity() {\n const options = this._container.actualOptions, groups = options.particles.groups;\n let pluginsCount = 0;\n for (const plugin of this._container.plugins){\n if (plugin.particlesDensityCount) {\n pluginsCount += plugin.particlesDensityCount();\n }\n }\n for(const group in groups){\n const groupData = groups[group];\n if (!groupData) {\n continue;\n }\n const groupDataOptions = (0,_Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_6__.loadParticlesOptions)(this._engine, this._container, groupData);\n this._applyDensity(groupDataOptions, pluginsCount, group);\n }\n this._applyDensity(options.particles, pluginsCount);\n }\n setLastZIndex(zIndex) {\n this._needsSort ||= zIndex >= this._maxZIndex || zIndex > this._minZIndex && zIndex < this._maxZIndex;\n }\n setResizeFactor(factor) {\n this._resizeFactor = factor;\n }\n update(delta) {\n const particlesToDelete = new Set();\n this.grid.clear();\n for (const pathGenerator of this.pathGenerators.values()){\n pathGenerator.update();\n }\n for (const plugin of this._updatePlugins){\n plugin.update?.(delta);\n }\n const resizeFactor = this._resizeFactor;\n for (const particle of this._array){\n if (resizeFactor && !particle.ignoresResizeRatio) {\n particle.position.x *= resizeFactor.width;\n particle.position.y *= resizeFactor.height;\n particle.initialPosition.x *= resizeFactor.width;\n particle.initialPosition.y *= resizeFactor.height;\n }\n particle.ignoresResizeRatio = false;\n for (const plugin of this._particleResetPlugins){\n plugin.particleReset?.(particle);\n }\n for (const plugin of this._particleUpdatePlugins){\n if (particle.destroyed) {\n break;\n }\n plugin.particleUpdate?.(particle, delta);\n }\n for (const mover of this.movers){\n if (mover.isEnabled(particle)) {\n mover.move(particle, delta);\n }\n }\n if (particle.destroyed) {\n particlesToDelete.add(particle);\n continue;\n }\n this.grid.insert(particle);\n }\n if (particlesToDelete.size) {\n const checkDelete = (p)=>!particlesToDelete.has(p);\n this._array = this.filter(checkDelete);\n this._zArray = this._zArray.filter(checkDelete);\n for (const particle of particlesToDelete){\n this._engine.dispatchEvent(_Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_1__.EventType.particleRemoved, {\n container: this._container,\n data: {\n particle\n }\n });\n }\n this._addToPool(...particlesToDelete);\n }\n for (const plugin of this._postUpdatePlugins){\n plugin.postUpdate?.(delta);\n }\n for (const particle of this._array){\n for (const updater of this.updaters){\n updater.update(particle, delta);\n }\n if (!particle.destroyed && !particle.spawning) {\n for (const plugin of this._postParticleUpdatePlugins){\n plugin.postParticleUpdate?.(particle, delta);\n }\n }\n }\n delete this._resizeFactor;\n if (this._needsSort) {\n const zArray = this._zArray;\n zArray.sort((a, b)=>b.position.z - a.position.z || a.id - b.id);\n const firstItem = zArray[_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minIndex], lastItem = zArray[zArray.length - _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.lengthOffset];\n if (!firstItem || !lastItem) {\n return;\n }\n this._maxZIndex = firstItem.position.z;\n this._minZIndex = lastItem.position.z;\n this._needsSort = false;\n }\n }\n _addToPool = (...particles)=>{\n this._pool.push(...particles);\n };\n _applyDensity = (options, pluginsCount, group, groupOptions)=>{\n const numberOptions = options.number;\n if (!numberOptions.density.enable) {\n if (group === undefined) {\n this._limit = numberOptions.limit.value;\n } else if (groupOptions?.number.limit.value ?? numberOptions.limit.value) {\n this._groupLimits.set(group, groupOptions?.number.limit.value ?? numberOptions.limit.value);\n }\n return;\n }\n const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + pluginsCount, particlesCount = Math.min(this.count, this.filter((t)=>t.group === group).length);\n if (group === undefined) {\n this._limit = numberOptions.limit.value * densityFactor;\n } else {\n this._groupLimits.set(group, numberOptions.limit.value * densityFactor);\n }\n if (particlesCount < particlesNumber) {\n this.push(Math.abs(particlesNumber - particlesCount), undefined, options, group);\n } else if (particlesCount > particlesNumber) {\n this.removeQuantity(particlesCount - particlesNumber, group);\n }\n };\n _initDensityFactor = (densityOptions)=>{\n const container = this._container;\n if (!container.canvas.element || !densityOptions.enable) {\n return _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultDensityFactor;\n }\n const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;\n return canvas.width * canvas.height / (densityOptions.height * densityOptions.width * pxRatio ** _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.squareExp);\n };\n _removeParticle = (index, group, override)=>{\n const particle = this._array[index];\n if (!particle) {\n return false;\n }\n if (particle.group !== group) {\n return false;\n }\n const zIdx = this._zArray.indexOf(particle);\n this._array.splice(index, _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.deleteCount);\n this._zArray.splice(zIdx, _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.deleteCount);\n particle.destroy(override);\n this._engine.dispatchEvent(_Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_1__.EventType.particleRemoved, {\n container: this._container,\n data: {\n particle\n }\n });\n this._addToPool(particle);\n return true;\n };\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../engine/dist/browser/Core/Particles.js?\n}");
56
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Particles: () => (/* binding */ Particles)\n/* harmony export */ });\n/* harmony import */ var _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils/Constants.js */ \"../../engine/dist/browser/Core/Utils/Constants.js\");\n/* harmony import */ var _Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Enums/Types/EventType.js */ \"../../engine/dist/browser/Enums/Types/EventType.js\");\n/* harmony import */ var _Enums_Modes_LimitMode_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Enums/Modes/LimitMode.js */ \"../../engine/dist/browser/Enums/Modes/LimitMode.js\");\n/* harmony import */ var _Particle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Particle.js */ \"../../engine/dist/browser/Core/Particle.js\");\n/* harmony import */ var _Utils_SpatialHashGrid_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Utils/SpatialHashGrid.js */ \"../../engine/dist/browser/Core/Utils/SpatialHashGrid.js\");\n/* harmony import */ var _Utils_LogUtils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Utils/LogUtils.js */ \"../../engine/dist/browser/Utils/LogUtils.js\");\n/* harmony import */ var _Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Utils/OptionsUtils.js */ \"../../engine/dist/browser/Utils/OptionsUtils.js\");\n\n\n\n\n\n\n\nclass Particles {\n checkParticlePositionPlugins;\n effectDrawers;\n grid;\n shapeDrawers;\n updaters;\n _array;\n _container;\n _engine;\n _groupLimits;\n _limit;\n _maxZIndex;\n _minZIndex;\n _needsSort;\n _nextId;\n _particleResetPlugins;\n _particleUpdatePlugins;\n _pool;\n _postParticleUpdatePlugins;\n _postUpdatePlugins;\n _resizeFactor;\n _updatePlugins;\n _zArray;\n constructor(engine, container){\n this._engine = engine;\n this._container = container;\n this._nextId = 0;\n this._array = [];\n this._zArray = [];\n this._pool = [];\n this._limit = 0;\n this._groupLimits = new Map();\n this._needsSort = false;\n this._minZIndex = 0;\n this._maxZIndex = 0;\n this.grid = new _Utils_SpatialHashGrid_js__WEBPACK_IMPORTED_MODULE_4__.SpatialHashGrid(_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.spatialHashGridCellSize);\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this.updaters = [];\n this.checkParticlePositionPlugins = [];\n this._particleResetPlugins = [];\n this._particleUpdatePlugins = [];\n this._postUpdatePlugins = [];\n this._postParticleUpdatePlugins = [];\n this._updatePlugins = [];\n }\n get count() {\n return this._array.length;\n }\n addParticle(position, overrideOptions, group, initializer) {\n const limitMode = this._container.actualOptions.particles.number.limit.mode, limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit, currentCount = this.count;\n if (limit > _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minLimit) {\n switch(limitMode){\n case _Enums_Modes_LimitMode_js__WEBPACK_IMPORTED_MODULE_2__.LimitMode.delete:\n {\n const countToRemove = currentCount + _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.countOffset - limit;\n if (countToRemove > _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minCount) {\n this.removeQuantity(countToRemove);\n }\n break;\n }\n case _Enums_Modes_LimitMode_js__WEBPACK_IMPORTED_MODULE_2__.LimitMode.wait:\n if (currentCount >= limit) {\n return;\n }\n break;\n default:\n break;\n }\n }\n try {\n const particle = this._pool.pop() ?? new _Particle_js__WEBPACK_IMPORTED_MODULE_3__.Particle(this._engine, this._container);\n particle.init(this._nextId, position, overrideOptions, group);\n let canAdd = true;\n if (initializer) {\n canAdd = initializer(particle);\n }\n if (!canAdd) {\n this._pool.push(particle);\n return;\n }\n this._array.push(particle);\n this._zArray.push(particle);\n this._nextId++;\n this._engine.dispatchEvent(_Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_1__.EventType.particleAdded, {\n container: this._container,\n data: {\n particle\n }\n });\n return particle;\n } catch (e) {\n (0,_Utils_LogUtils_js__WEBPACK_IMPORTED_MODULE_5__.getLogger)().warning(`error adding particle: ${e}`);\n }\n return undefined;\n }\n clear() {\n this._array = [];\n this._zArray = [];\n }\n destroy() {\n const container = this._container;\n for (const [, effectDrawer] of this.effectDrawers){\n effectDrawer.destroy?.(container);\n }\n for (const [, shapeDrawer] of this.shapeDrawers){\n shapeDrawer.destroy?.(container);\n }\n this._array = [];\n this._pool.length = 0;\n this._zArray = [];\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this.updaters = [];\n this.checkParticlePositionPlugins = [];\n this._particleResetPlugins = [];\n this._particleUpdatePlugins = [];\n this._postUpdatePlugins = [];\n this._postParticleUpdatePlugins = [];\n this._updatePlugins = [];\n }\n drawParticles(delta) {\n for (const particle of this._zArray){\n particle.draw(delta);\n }\n }\n filter(condition) {\n return this._array.filter(condition);\n }\n find(condition) {\n return this._array.find(condition);\n }\n get(index) {\n return this._array[index];\n }\n async init() {\n const container = this._container, options = container.actualOptions;\n this._minZIndex = 0;\n this._maxZIndex = 0;\n this._needsSort = false;\n this.checkParticlePositionPlugins = [];\n this._updatePlugins = [];\n this._particleUpdatePlugins = [];\n this._postUpdatePlugins = [];\n this._particleResetPlugins = [];\n this._postParticleUpdatePlugins = [];\n this.grid = new _Utils_SpatialHashGrid_js__WEBPACK_IMPORTED_MODULE_4__.SpatialHashGrid(_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.spatialHashGridCellSize * container.retina.pixelRatio);\n for (const plugin of container.plugins){\n if (plugin.redrawInit) {\n await plugin.redrawInit();\n }\n if (plugin.checkParticlePosition) {\n this.checkParticlePositionPlugins.push(plugin);\n }\n if (plugin.update) {\n this._updatePlugins.push(plugin);\n }\n if (plugin.particleUpdate) {\n this._particleUpdatePlugins.push(plugin);\n }\n if (plugin.postUpdate) {\n this._postUpdatePlugins.push(plugin);\n }\n if (plugin.particleReset) {\n this._particleResetPlugins.push(plugin);\n }\n if (plugin.postParticleUpdate) {\n this._postParticleUpdatePlugins.push(plugin);\n }\n }\n await this.initPlugins();\n for (const drawer of this.effectDrawers.values()){\n await drawer.init?.(container);\n }\n for (const drawer of this.shapeDrawers.values()){\n await drawer.init?.(container);\n }\n let handled = false;\n for (const plugin of container.plugins){\n handled = plugin.particlesInitialization?.() ?? handled;\n if (handled) {\n break;\n }\n }\n if (!handled) {\n const particlesOptions = options.particles, groups = particlesOptions.groups;\n for(const group in groups){\n const groupOptions = groups[group];\n if (!groupOptions) {\n continue;\n }\n for(let i = this.count, j = 0; j < groupOptions.number.value && i < particlesOptions.number.value; i++, j++){\n this.addParticle(undefined, groupOptions, group);\n }\n }\n for(let i = this.count; i < particlesOptions.number.value; i++){\n this.addParticle();\n }\n }\n }\n async initPlugins() {\n const container = this._container;\n this.effectDrawers = await this._engine.getEffectDrawers(container, true);\n this.shapeDrawers = await this._engine.getShapeDrawers(container, true);\n this.updaters = await this._engine.getUpdaters(container, true);\n }\n push(nb, position, overrideOptions, group) {\n for(let i = 0; i < nb; i++){\n this.addParticle(position, overrideOptions, group);\n }\n }\n async redraw() {\n this.clear();\n await this.init();\n this._container.canvas.drawParticles({\n value: 0,\n factor: 0\n });\n }\n remove(particle, group, override) {\n this.removeAt(this._array.indexOf(particle), undefined, group, override);\n }\n removeAt(index, quantity = _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultRemoveQuantity, group, override) {\n if (index < _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minIndex || index > this.count) {\n return;\n }\n let deleted = 0;\n for(let i = index; deleted < quantity && i < this.count; i++){\n if (this._removeParticle(i, group, override)) {\n i--;\n deleted++;\n }\n }\n }\n removeQuantity(quantity, group) {\n this.removeAt(_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minIndex, quantity, group);\n }\n setDensity() {\n const options = this._container.actualOptions, groups = options.particles.groups;\n let pluginsCount = 0;\n for (const plugin of this._container.plugins){\n if (plugin.particlesDensityCount) {\n pluginsCount += plugin.particlesDensityCount();\n }\n }\n for(const group in groups){\n const groupData = groups[group];\n if (!groupData) {\n continue;\n }\n const groupDataOptions = (0,_Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_6__.loadParticlesOptions)(this._engine, this._container, groupData);\n this._applyDensity(groupDataOptions, pluginsCount, group);\n }\n this._applyDensity(options.particles, pluginsCount);\n }\n setLastZIndex(zIndex) {\n this._needsSort ||= zIndex >= this._maxZIndex || zIndex > this._minZIndex && zIndex < this._maxZIndex;\n }\n setResizeFactor(factor) {\n this._resizeFactor = factor;\n }\n update(delta) {\n const particlesToDelete = new Set();\n this.grid.clear();\n for (const plugin of this._updatePlugins){\n plugin.update?.(delta);\n }\n const resizeFactor = this._resizeFactor;\n for (const particle of this._array){\n if (resizeFactor && !particle.ignoresResizeRatio) {\n particle.position.x *= resizeFactor.width;\n particle.position.y *= resizeFactor.height;\n particle.initialPosition.x *= resizeFactor.width;\n particle.initialPosition.y *= resizeFactor.height;\n }\n particle.ignoresResizeRatio = false;\n for (const plugin of this._particleResetPlugins){\n plugin.particleReset?.(particle);\n }\n for (const plugin of this._particleUpdatePlugins){\n if (particle.destroyed) {\n break;\n }\n plugin.particleUpdate?.(particle, delta);\n }\n if (particle.destroyed) {\n particlesToDelete.add(particle);\n continue;\n }\n this.grid.insert(particle);\n }\n if (particlesToDelete.size) {\n const checkDelete = (p)=>!particlesToDelete.has(p);\n this._array = this.filter(checkDelete);\n this._zArray = this._zArray.filter(checkDelete);\n for (const particle of particlesToDelete){\n this._engine.dispatchEvent(_Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_1__.EventType.particleRemoved, {\n container: this._container,\n data: {\n particle\n }\n });\n }\n this._addToPool(...particlesToDelete);\n }\n for (const plugin of this._postUpdatePlugins){\n plugin.postUpdate?.(delta);\n }\n for (const particle of this._array){\n for (const updater of this.updaters){\n updater.update(particle, delta);\n }\n if (!particle.destroyed && !particle.spawning) {\n for (const plugin of this._postParticleUpdatePlugins){\n plugin.postParticleUpdate?.(particle, delta);\n }\n }\n }\n delete this._resizeFactor;\n if (this._needsSort) {\n const zArray = this._zArray;\n zArray.sort((a, b)=>b.position.z - a.position.z || a.id - b.id);\n const firstItem = zArray[_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minIndex], lastItem = zArray[zArray.length - _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.lengthOffset];\n if (!firstItem || !lastItem) {\n return;\n }\n this._maxZIndex = firstItem.position.z;\n this._minZIndex = lastItem.position.z;\n this._needsSort = false;\n }\n }\n _addToPool = (...particles)=>{\n this._pool.push(...particles);\n };\n _applyDensity = (options, pluginsCount, group, groupOptions)=>{\n const numberOptions = options.number;\n if (!numberOptions.density.enable) {\n if (group === undefined) {\n this._limit = numberOptions.limit.value;\n } else if (groupOptions?.number.limit.value ?? numberOptions.limit.value) {\n this._groupLimits.set(group, groupOptions?.number.limit.value ?? numberOptions.limit.value);\n }\n return;\n }\n const densityFactor = this._initDensityFactor(numberOptions.density), optParticlesNumber = numberOptions.value, optParticlesLimit = numberOptions.limit.value > _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.minLimit ? numberOptions.limit.value : optParticlesNumber, particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + pluginsCount, particlesCount = Math.min(this.count, this.filter((t)=>t.group === group).length);\n if (group === undefined) {\n this._limit = numberOptions.limit.value * densityFactor;\n } else {\n this._groupLimits.set(group, numberOptions.limit.value * densityFactor);\n }\n if (particlesCount < particlesNumber) {\n this.push(Math.abs(particlesNumber - particlesCount), undefined, options, group);\n } else if (particlesCount > particlesNumber) {\n this.removeQuantity(particlesCount - particlesNumber, group);\n }\n };\n _initDensityFactor = (densityOptions)=>{\n const container = this._container;\n if (!container.canvas.element || !densityOptions.enable) {\n return _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.defaultDensityFactor;\n }\n const canvas = container.canvas.element, pxRatio = container.retina.pixelRatio;\n return canvas.width * canvas.height / (densityOptions.height * densityOptions.width * pxRatio ** _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.squareExp);\n };\n _removeParticle = (index, group, override)=>{\n const particle = this._array[index];\n if (!particle) {\n return false;\n }\n if (particle.group !== group) {\n return false;\n }\n const zIdx = this._zArray.indexOf(particle);\n this._array.splice(index, _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.deleteCount);\n this._zArray.splice(zIdx, _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.deleteCount);\n particle.destroy(override);\n this._engine.dispatchEvent(_Enums_Types_EventType_js__WEBPACK_IMPORTED_MODULE_1__.EventType.particleRemoved, {\n container: this._container,\n data: {\n particle\n }\n });\n this._addToPool(particle);\n return true;\n };\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../engine/dist/browser/Core/Particles.js?\n}");
57
57
 
58
58
  /***/ },
59
59
 
@@ -158,6 +158,13 @@ const defaultMinOpacity = 0, defaultMinSize = 0, speedFactor = 3, defaultPjsOpti
158
158
  },
159
159
  },
160
160
  particles: {
161
+ attract: {
162
+ enable: fixedOptions.particles.move.attract.enable,
163
+ rotate: {
164
+ x: fixedOptions.particles.move.attract.rotateX,
165
+ y: fixedOptions.particles.move.attract.rotateY,
166
+ },
167
+ },
161
168
  collisions: {
162
169
  enable: fixedOptions.particles.move.bounce,
163
170
  },
@@ -234,13 +241,6 @@ const defaultMinOpacity = 0, defaultMinSize = 0, speedFactor = 3, defaultPjsOpti
234
241
  random: fixedOptions.particles.move.random,
235
242
  straight: fixedOptions.particles.move.straight,
236
243
  outModes: fixedOptions.particles.move.out_mode,
237
- attract: {
238
- enable: fixedOptions.particles.move.attract.enable,
239
- rotate: {
240
- x: fixedOptions.particles.move.attract.rotateX,
241
- y: fixedOptions.particles.move.attract.rotateY,
242
- },
243
- },
244
244
  },
245
245
  },
246
246
  resize: {
package/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { MBParticles } from "./marcbruederlin/Particles.js";
2
2
  import { initParticlesJS } from "./VincentGarreau/particles.js";
3
3
  const initPjs = async (engine) => {
4
- engine.checkVersion("4.0.0-alpha.25");
4
+ engine.checkVersion("4.0.0-alpha.27");
5
5
  await engine.register(async (e) => {
6
6
  const [{ loadFull }, { loadResponsivePlugin },] = await Promise.all([
7
7
  import("tsparticles"),
@@ -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
- * v4.0.0-alpha.25
7
+ * v4.0.0-alpha.27
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -23,7 +23,7 @@
23
23
  \*************************************/
24
24
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25
25
 
26
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadFull: () => (/* binding */ loadFull)\n/* harmony export */ });\nasync function loadFull(engine) {\n engine.checkVersion(\"4.0.0-alpha.25\");\n await engine.register(async (e)=>{\n const [{ loadDestroyUpdater }, { loadRollUpdater }, { loadTiltUpdater }, { loadTwinkleUpdater }, { loadWobbleUpdater }, { loadTextShape }, { loadExternalTrailInteraction }, { loadAbsorbersPlugin }, { loadEmittersPlugin }, { loadEmittersShapeCircle }, { loadEmittersShapeSquare }, { loadSlim }] = await Promise.all([\n __webpack_require__.e(/*! import() */ \"updaters_destroy_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-destroy */ \"../../updaters/destroy/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"updaters_roll_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-roll */ \"../../updaters/roll/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"updaters_tilt_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-tilt */ \"../../updaters/tilt/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"updaters_twinkle_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-twinkle */ \"../../updaters/twinkle/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"updaters_wobble_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-wobble */ \"../../updaters/wobble/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"shapes_text_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/shape-text */ \"../../shapes/text/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"interactions_external_trail_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/interaction-external-trail */ \"../../interactions/external/trail/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"plugins_absorbers_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-absorbers */ \"../../plugins/absorbers/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"plugins_emitters_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-emitters */ \"../../plugins/emitters/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"plugins_emittersShapes_circle_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-emitters-shape-circle */ \"../../plugins/emittersShapes/circle/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"plugins_emittersShapes_square_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-emitters-shape-square */ \"../../plugins/emittersShapes/square/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"slim_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/slim */ \"../slim/dist/browser/index.js\"))\n ]);\n await loadSlim(e);\n await Promise.all([\n loadDestroyUpdater(e),\n loadRollUpdater(e),\n loadTiltUpdater(e),\n loadTwinkleUpdater(e),\n loadWobbleUpdater(e),\n loadTextShape(e),\n loadExternalTrailInteraction(e),\n loadAbsorbersPlugin(e),\n loadEmittersPlugin(e)\n ]);\n await Promise.all([\n loadEmittersShapeCircle(e),\n loadEmittersShapeSquare(e)\n ]);\n });\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../full/dist/browser/index.js?\n}");
26
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadFull: () => (/* binding */ loadFull)\n/* harmony export */ });\nasync function loadFull(engine) {\n engine.checkVersion(\"4.0.0-alpha.27\");\n await engine.register(async (e)=>{\n const [{ loadDestroyUpdater }, { loadRollUpdater }, { loadTiltUpdater }, { loadTwinkleUpdater }, { loadWobbleUpdater }, { loadTextShape }, { loadExternalTrailInteraction }, { loadAbsorbersPlugin }, { loadEmittersPlugin }, { loadEmittersShapeCircle }, { loadEmittersShapeSquare }, { loadSlim }] = await Promise.all([\n __webpack_require__.e(/*! import() */ \"updaters_destroy_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-destroy */ \"../../updaters/destroy/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"updaters_roll_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-roll */ \"../../updaters/roll/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"updaters_tilt_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-tilt */ \"../../updaters/tilt/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"updaters_twinkle_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-twinkle */ \"../../updaters/twinkle/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"updaters_wobble_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/updater-wobble */ \"../../updaters/wobble/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"shapes_text_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/shape-text */ \"../../shapes/text/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"interactions_external_trail_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/interaction-external-trail */ \"../../interactions/external/trail/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"plugins_absorbers_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-absorbers */ \"../../plugins/absorbers/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"plugins_emitters_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-emitters */ \"../../plugins/emitters/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"plugins_emittersShapes_circle_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-emitters-shape-circle */ \"../../plugins/emittersShapes/circle/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"plugins_emittersShapes_square_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-emitters-shape-square */ \"../../plugins/emittersShapes/square/dist/browser/index.js\")),\n __webpack_require__.e(/*! import() */ \"slim_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/slim */ \"../slim/dist/browser/index.js\"))\n ]);\n await loadSlim(e);\n await Promise.all([\n loadDestroyUpdater(e),\n loadRollUpdater(e),\n loadTiltUpdater(e),\n loadTwinkleUpdater(e),\n loadWobbleUpdater(e),\n loadTextShape(e),\n loadExternalTrailInteraction(e),\n loadAbsorbersPlugin(e),\n loadEmittersPlugin(e)\n ]);\n await Promise.all([\n loadEmittersShapeCircle(e),\n loadEmittersShapeSquare(e)\n ]);\n });\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../full/dist/browser/index.js?\n}");
27
27
 
28
28
  /***/ }
29
29
 
@@ -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
- * v4.0.0-alpha.25
7
+ * v4.0.0-alpha.27
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -33,7 +33,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
33
33
  \*****************************************************************/
34
34
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
35
35
 
36
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clickAttract: () => (/* binding */ clickAttract),\n/* harmony export */ hoverAttract: () => (/* binding */ hoverAttract)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nconst minFactor = 1, minRadius = 0;\nfunction processAttract(engine, container, position, attractRadius, area, queryCb) {\n const attractOptions = container.actualOptions.interactivity?.modes.attract;\n if (!attractOptions) {\n return;\n }\n const query = container.particles.grid.query(area, queryCb);\n for (const particle of query){\n const { dx, dy, distance } = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getDistances)(particle.position, position), velocity = attractOptions.speed * attractOptions.factor, attractFactor = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.clamp)(engine.getEasing(attractOptions.easing)(_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.identity - distance / attractRadius) * velocity, minFactor, attractOptions.maxSpeed), normVec = _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Vector.create(!distance ? velocity : dx / distance * attractFactor, !distance ? velocity : dy / distance * attractFactor);\n particle.position.subFrom(normVec);\n }\n}\nfunction clickAttract(engine, container, interactivityData, enabledCb) {\n container.attract ??= {\n particles: []\n };\n const { attract } = container;\n if (!attract.finish) {\n attract.count ??= 0;\n attract.count++;\n if (attract.count === container.particles.count) {\n attract.finish = true;\n }\n }\n if (attract.clicking) {\n const mousePos = interactivityData.mouse.clickPosition, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(engine, container, mousePos, attractRadius, new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(mousePos.x, mousePos.y, attractRadius), (p)=>enabledCb(p));\n } else if (attract.clicking === false) {\n attract.particles = [];\n }\n}\nfunction hoverAttract(engine, container, interactivityData, enabledCb) {\n const mousePos = interactivityData.mouse.position, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(engine, container, mousePos, attractRadius, new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(mousePos.x, mousePos.y, attractRadius), (p)=>enabledCb(p));\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../interactions/external/attract/dist/browser/Utils.js?\n}");
36
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clickAttract: () => (/* binding */ clickAttract),\n/* harmony export */ hoverAttract: () => (/* binding */ hoverAttract)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nconst minFactor = 1, minRadius = 0, updateVector = _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Vector.origin;\nfunction processAttract(engine, container, position, attractRadius, area, queryCb) {\n const attractOptions = container.actualOptions.interactivity?.modes.attract;\n if (!attractOptions) {\n return;\n }\n const query = container.particles.grid.query(area, queryCb);\n for (const particle of query){\n const { dx, dy, distance } = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getDistances)(particle.position, position), velocity = attractOptions.speed * attractOptions.factor, attractFactor = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.clamp)(engine.getEasing(attractOptions.easing)(_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.identity - distance / attractRadius) * velocity, minFactor, attractOptions.maxSpeed);\n updateVector.x = !distance ? velocity : dx / distance * attractFactor;\n updateVector.y = !distance ? velocity : dy / distance * attractFactor;\n particle.position.subFrom(updateVector);\n }\n}\nfunction clickAttract(engine, container, interactivityData, enabledCb) {\n container.attract ??= {\n particles: []\n };\n const { attract } = container;\n if (!attract.finish) {\n attract.count ??= 0;\n attract.count++;\n if (attract.count === container.particles.count) {\n attract.finish = true;\n }\n }\n if (attract.clicking) {\n const mousePos = interactivityData.mouse.clickPosition, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(engine, container, mousePos, attractRadius, new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(mousePos.x, mousePos.y, attractRadius), (p)=>enabledCb(p));\n } else if (attract.clicking === false) {\n attract.particles = [];\n }\n}\nfunction hoverAttract(engine, container, interactivityData, enabledCb) {\n const mousePos = interactivityData.mouse.position, attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(engine, container, mousePos, attractRadius, new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(mousePos.x, mousePos.y, attractRadius), (p)=>enabledCb(p));\n}\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../interactions/external/attract/dist/browser/Utils.js?\n}");
37
37
 
38
38
  /***/ },
39
39
 
@@ -123,7 +123,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
123
123
  \*********************************************************/
124
124
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
125
125
 
126
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DivEvent: () => (/* reexport safe */ _Options_Classes_Events_DivEvent_js__WEBPACK_IMPORTED_MODULE_8__.DivEvent),\n/* harmony export */ DivType: () => (/* reexport safe */ _Enums_DivType_js__WEBPACK_IMPORTED_MODULE_4__.DivType),\n/* harmony export */ ExternalInteractorBase: () => (/* reexport safe */ _BaseClasses_ExternalInteractorBase_js__WEBPACK_IMPORTED_MODULE_1__.ExternalInteractorBase),\n/* harmony export */ InteractivityDetect: () => (/* reexport safe */ _Enums_InteractivityDetect_js__WEBPACK_IMPORTED_MODULE_5__.InteractivityDetect),\n/* harmony export */ InteractorType: () => (/* reexport safe */ _Enums_InteractorType_js__WEBPACK_IMPORTED_MODULE_6__.InteractorType),\n/* harmony export */ Modes: () => (/* reexport safe */ _Options_Classes_Modes_Modes_js__WEBPACK_IMPORTED_MODULE_9__.Modes),\n/* harmony export */ ParticlesInteractorBase: () => (/* reexport safe */ _BaseClasses_ParticlesInteractorBase_js__WEBPACK_IMPORTED_MODULE_2__.ParticlesInteractorBase),\n/* harmony export */ clickEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.clickEvent),\n/* harmony export */ divMode: () => (/* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_7__.divMode),\n/* harmony export */ divModeExecute: () => (/* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_7__.divModeExecute),\n/* harmony export */ ensureInteractivityPluginLoaded: () => (/* binding */ ensureInteractivityPluginLoaded),\n/* harmony export */ isDivModeEnabled: () => (/* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_7__.isDivModeEnabled),\n/* harmony export */ loadInteractivityPlugin: () => (/* binding */ loadInteractivityPlugin),\n/* harmony export */ mouseDownEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseDownEvent),\n/* harmony export */ mouseLeaveEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseLeaveEvent),\n/* harmony export */ mouseMoveEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseMoveEvent),\n/* harmony export */ mouseOutEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseOutEvent),\n/* harmony export */ mouseUpEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseUpEvent),\n/* harmony export */ singleDivModeExecute: () => (/* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_7__.singleDivModeExecute),\n/* harmony export */ touchCancelEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.touchCancelEvent),\n/* harmony export */ touchEndEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.touchEndEvent),\n/* harmony export */ touchMoveEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.touchMoveEvent),\n/* harmony export */ touchStartEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.touchStartEvent)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n/* harmony import */ var _BaseClasses_ExternalInteractorBase_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BaseClasses/ExternalInteractorBase.js */ \"../../plugins/interactivity/dist/browser/BaseClasses/ExternalInteractorBase.js\");\n/* harmony import */ var _BaseClasses_ParticlesInteractorBase_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BaseClasses/ParticlesInteractorBase.js */ \"../../plugins/interactivity/dist/browser/BaseClasses/ParticlesInteractorBase.js\");\n/* harmony import */ var _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./InteractivityConstants.js */ \"../../plugins/interactivity/dist/browser/InteractivityConstants.js\");\n/* harmony import */ var _Enums_DivType_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Enums/DivType.js */ \"../../plugins/interactivity/dist/browser/Enums/DivType.js\");\n/* harmony import */ var _Enums_InteractivityDetect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Enums/InteractivityDetect.js */ \"../../plugins/interactivity/dist/browser/Enums/InteractivityDetect.js\");\n/* harmony import */ var _Enums_InteractorType_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Enums/InteractorType.js */ \"../../plugins/interactivity/dist/browser/Enums/InteractorType.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils.js */ \"../../plugins/interactivity/dist/browser/utils.js\");\n/* harmony import */ var _Options_Classes_Events_DivEvent_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Options/Classes/Events/DivEvent.js */ \"../../plugins/interactivity/dist/browser/Options/Classes/Events/DivEvent.js\");\n/* harmony import */ var _Options_Classes_Modes_Modes_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Options/Classes/Modes/Modes.js */ \"../../plugins/interactivity/dist/browser/Options/Classes/Modes/Modes.js\");\n\nasync function loadInteractivityPlugin(engine) {\n engine.checkVersion(\"4.0.0-alpha.25\");\n await engine.register(async (e)=>{\n const interactivityEngine = e, { InteractivityPlugin } = await __webpack_require__.e(/*! import() */ \"plugins_interactivity_dist_browser_InteractivityPlugin_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./InteractivityPlugin.js */ \"../../plugins/interactivity/dist/browser/InteractivityPlugin.js\"));\n interactivityEngine.addPlugin(new InteractivityPlugin(interactivityEngine));\n interactivityEngine.initializers.interactors ??= new Map();\n interactivityEngine.interactors ??= new Map();\n interactivityEngine.addInteractor = (name, interactorInitializer)=>{\n interactivityEngine.initializers.interactors ??= new Map();\n interactivityEngine.initializers.interactors.set(name, interactorInitializer);\n };\n interactivityEngine.getInteractors = async (container, force = false)=>{\n interactivityEngine.interactors ??= new Map();\n interactivityEngine.initializers.interactors ??= new Map();\n return (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getItemsFromInitializer)(container, interactivityEngine.interactors, interactivityEngine.initializers.interactors, force);\n };\n interactivityEngine.setOnClickHandler = (callback)=>{\n const { items } = interactivityEngine;\n if (!items.length) {\n throw new Error(\"Click handlers can only be set after calling tsParticles.load()\");\n }\n items.forEach((item)=>{\n const interactivityContainer = item;\n interactivityContainer.addClickHandler?.(callback);\n });\n };\n });\n}\nfunction ensureInteractivityPluginLoaded(e) {\n if (!e.addInteractor) {\n throw new Error(\"tsParticles Interactivity Plugin is not loaded\");\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../plugins/interactivity/dist/browser/index.js?\n}");
126
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DivEvent: () => (/* reexport safe */ _Options_Classes_Events_DivEvent_js__WEBPACK_IMPORTED_MODULE_8__.DivEvent),\n/* harmony export */ DivType: () => (/* reexport safe */ _Enums_DivType_js__WEBPACK_IMPORTED_MODULE_4__.DivType),\n/* harmony export */ ExternalInteractorBase: () => (/* reexport safe */ _BaseClasses_ExternalInteractorBase_js__WEBPACK_IMPORTED_MODULE_1__.ExternalInteractorBase),\n/* harmony export */ InteractivityDetect: () => (/* reexport safe */ _Enums_InteractivityDetect_js__WEBPACK_IMPORTED_MODULE_5__.InteractivityDetect),\n/* harmony export */ InteractorType: () => (/* reexport safe */ _Enums_InteractorType_js__WEBPACK_IMPORTED_MODULE_6__.InteractorType),\n/* harmony export */ Modes: () => (/* reexport safe */ _Options_Classes_Modes_Modes_js__WEBPACK_IMPORTED_MODULE_9__.Modes),\n/* harmony export */ ParticlesInteractorBase: () => (/* reexport safe */ _BaseClasses_ParticlesInteractorBase_js__WEBPACK_IMPORTED_MODULE_2__.ParticlesInteractorBase),\n/* harmony export */ clickEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.clickEvent),\n/* harmony export */ divMode: () => (/* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_7__.divMode),\n/* harmony export */ divModeExecute: () => (/* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_7__.divModeExecute),\n/* harmony export */ ensureInteractivityPluginLoaded: () => (/* binding */ ensureInteractivityPluginLoaded),\n/* harmony export */ isDivModeEnabled: () => (/* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_7__.isDivModeEnabled),\n/* harmony export */ loadInteractivityPlugin: () => (/* binding */ loadInteractivityPlugin),\n/* harmony export */ mouseDownEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseDownEvent),\n/* harmony export */ mouseLeaveEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseLeaveEvent),\n/* harmony export */ mouseMoveEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseMoveEvent),\n/* harmony export */ mouseOutEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseOutEvent),\n/* harmony export */ mouseUpEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.mouseUpEvent),\n/* harmony export */ singleDivModeExecute: () => (/* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_7__.singleDivModeExecute),\n/* harmony export */ touchCancelEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.touchCancelEvent),\n/* harmony export */ touchEndEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.touchEndEvent),\n/* harmony export */ touchMoveEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.touchMoveEvent),\n/* harmony export */ touchStartEvent: () => (/* reexport safe */ _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__.touchStartEvent)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n/* harmony import */ var _BaseClasses_ExternalInteractorBase_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BaseClasses/ExternalInteractorBase.js */ \"../../plugins/interactivity/dist/browser/BaseClasses/ExternalInteractorBase.js\");\n/* harmony import */ var _BaseClasses_ParticlesInteractorBase_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BaseClasses/ParticlesInteractorBase.js */ \"../../plugins/interactivity/dist/browser/BaseClasses/ParticlesInteractorBase.js\");\n/* harmony import */ var _InteractivityConstants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./InteractivityConstants.js */ \"../../plugins/interactivity/dist/browser/InteractivityConstants.js\");\n/* harmony import */ var _Enums_DivType_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Enums/DivType.js */ \"../../plugins/interactivity/dist/browser/Enums/DivType.js\");\n/* harmony import */ var _Enums_InteractivityDetect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Enums/InteractivityDetect.js */ \"../../plugins/interactivity/dist/browser/Enums/InteractivityDetect.js\");\n/* harmony import */ var _Enums_InteractorType_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Enums/InteractorType.js */ \"../../plugins/interactivity/dist/browser/Enums/InteractorType.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils.js */ \"../../plugins/interactivity/dist/browser/utils.js\");\n/* harmony import */ var _Options_Classes_Events_DivEvent_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./Options/Classes/Events/DivEvent.js */ \"../../plugins/interactivity/dist/browser/Options/Classes/Events/DivEvent.js\");\n/* harmony import */ var _Options_Classes_Modes_Modes_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Options/Classes/Modes/Modes.js */ \"../../plugins/interactivity/dist/browser/Options/Classes/Modes/Modes.js\");\n\nasync function loadInteractivityPlugin(engine) {\n engine.checkVersion(\"4.0.0-alpha.27\");\n await engine.register(async (e)=>{\n const interactivityEngine = e, { InteractivityPlugin } = await __webpack_require__.e(/*! import() */ \"plugins_interactivity_dist_browser_InteractivityPlugin_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./InteractivityPlugin.js */ \"../../plugins/interactivity/dist/browser/InteractivityPlugin.js\"));\n interactivityEngine.addPlugin(new InteractivityPlugin(interactivityEngine));\n interactivityEngine.initializers.interactors ??= new Map();\n interactivityEngine.interactors ??= new Map();\n interactivityEngine.addInteractor = (name, interactorInitializer)=>{\n interactivityEngine.initializers.interactors ??= new Map();\n interactivityEngine.initializers.interactors.set(name, interactorInitializer);\n };\n interactivityEngine.getInteractors = async (container, force = false)=>{\n interactivityEngine.interactors ??= new Map();\n interactivityEngine.initializers.interactors ??= new Map();\n return (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getItemsFromInitializer)(container, interactivityEngine.interactors, interactivityEngine.initializers.interactors, force);\n };\n interactivityEngine.setOnClickHandler = (callback)=>{\n const { items } = interactivityEngine;\n if (!items.length) {\n throw new Error(\"Click handlers can only be set after calling tsParticles.load()\");\n }\n items.forEach((item)=>{\n const interactivityContainer = item;\n interactivityContainer.addClickHandler?.(callback);\n });\n };\n });\n}\nfunction ensureInteractivityPluginLoaded(e) {\n if (!e.addInteractor) {\n throw new Error(\"tsParticles Interactivity Plugin is not loaded\");\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../plugins/interactivity/dist/browser/index.js?\n}");
127
127
 
128
128
  /***/ },
129
129
 
@@ -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
- * v4.0.0-alpha.25
7
+ * v4.0.0-alpha.27
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -33,7 +33,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
33
33
  \*****************************************************************/
34
34
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
35
35
 
36
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Attract: () => (/* reexport safe */ _Options_Classes_Attract_js__WEBPACK_IMPORTED_MODULE_0__.Attract),\n/* harmony export */ loadExternalAttractInteraction: () => (/* binding */ loadExternalAttractInteraction)\n/* harmony export */ });\n/* harmony import */ var _Options_Classes_Attract_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Options/Classes/Attract.js */ \"../../interactions/external/attract/dist/browser/Options/Classes/Attract.js\");\nasync function loadExternalAttractInteraction(engine) {\n engine.checkVersion(\"4.0.0-alpha.25\");\n await engine.register(async (e)=>{\n const { ensureInteractivityPluginLoaded } = await __webpack_require__.e(/*! import() */ \"plugins_interactivity_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-interactivity */ \"../../plugins/interactivity/dist/browser/index.js\"));\n ensureInteractivityPluginLoaded(e);\n e.addInteractor?.(\"externalAttract\", async (container)=>{\n const { Attractor } = await __webpack_require__.e(/*! import() */ \"interactions_external_attract_dist_browser_Attractor_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Attractor.js */ \"../../interactions/external/attract/dist/browser/Attractor.js\"));\n return new Attractor(e, container);\n });\n });\n}\n\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../interactions/external/attract/dist/browser/index.js?\n}");
36
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Attract: () => (/* reexport safe */ _Options_Classes_Attract_js__WEBPACK_IMPORTED_MODULE_0__.Attract),\n/* harmony export */ loadExternalAttractInteraction: () => (/* binding */ loadExternalAttractInteraction)\n/* harmony export */ });\n/* harmony import */ var _Options_Classes_Attract_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Options/Classes/Attract.js */ \"../../interactions/external/attract/dist/browser/Options/Classes/Attract.js\");\nasync function loadExternalAttractInteraction(engine) {\n engine.checkVersion(\"4.0.0-alpha.27\");\n await engine.register(async (e)=>{\n const { ensureInteractivityPluginLoaded } = await __webpack_require__.e(/*! import() */ \"plugins_interactivity_dist_browser_index_js\").then(__webpack_require__.bind(__webpack_require__, /*! @tsparticles/plugin-interactivity */ \"../../plugins/interactivity/dist/browser/index.js\"));\n ensureInteractivityPluginLoaded(e);\n e.addInteractor?.(\"externalAttract\", async (container)=>{\n const { Attractor } = await __webpack_require__.e(/*! import() */ \"interactions_external_attract_dist_browser_Attractor_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Attractor.js */ \"../../interactions/external/attract/dist/browser/Attractor.js\"));\n return new Attractor(e, container);\n });\n });\n}\n\n\n\n//# sourceURL=webpack://@tsparticles/pjs/../../interactions/external/attract/dist/browser/index.js?\n}");
37
37
 
38
38
  /***/ }
39
39