@tsparticles/all 3.2.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1071) hide show
  1. package/1038.min.js +2 -0
  2. package/1038.min.js.LICENSE.txt +1 -0
  3. package/1043.min.js +2 -0
  4. package/1043.min.js.LICENSE.txt +1 -0
  5. package/1054.min.js +2 -0
  6. package/1054.min.js.LICENSE.txt +1 -0
  7. package/118.min.js +2 -0
  8. package/118.min.js.LICENSE.txt +1 -0
  9. package/1199.min.js +2 -0
  10. package/1199.min.js.LICENSE.txt +1 -0
  11. package/1235.min.js +2 -0
  12. package/1235.min.js.LICENSE.txt +1 -0
  13. package/1290.min.js +2 -0
  14. package/1290.min.js.LICENSE.txt +1 -0
  15. package/1313.min.js +2 -0
  16. package/1313.min.js.LICENSE.txt +1 -0
  17. package/1340.min.js +2 -0
  18. package/1340.min.js.LICENSE.txt +1 -0
  19. package/1444.min.js +2 -0
  20. package/1444.min.js.LICENSE.txt +1 -0
  21. package/1460.min.js +2 -0
  22. package/1460.min.js.LICENSE.txt +1 -0
  23. package/1475.min.js +2 -0
  24. package/1475.min.js.LICENSE.txt +1 -0
  25. package/152.min.js +2 -0
  26. package/152.min.js.LICENSE.txt +1 -0
  27. package/1612.min.js +2 -0
  28. package/1612.min.js.LICENSE.txt +1 -0
  29. package/168.min.js +2 -0
  30. package/168.min.js.LICENSE.txt +1 -0
  31. package/1817.min.js +2 -0
  32. package/1817.min.js.LICENSE.txt +1 -0
  33. package/1854.min.js +2 -0
  34. package/1854.min.js.LICENSE.txt +1 -0
  35. package/1862.min.js +2 -0
  36. package/1862.min.js.LICENSE.txt +1 -0
  37. package/1992.min.js +2 -0
  38. package/1992.min.js.LICENSE.txt +1 -0
  39. package/1996.min.js +2 -0
  40. package/1996.min.js.LICENSE.txt +1 -0
  41. package/2031.min.js +2 -0
  42. package/2031.min.js.LICENSE.txt +1 -0
  43. package/2043.min.js +2 -0
  44. package/2043.min.js.LICENSE.txt +1 -0
  45. package/2101.min.js +2 -0
  46. package/2101.min.js.LICENSE.txt +1 -0
  47. package/211.min.js +2 -0
  48. package/211.min.js.LICENSE.txt +1 -0
  49. package/2112.min.js +2 -0
  50. package/2112.min.js.LICENSE.txt +1 -0
  51. package/2134.min.js +2 -0
  52. package/2134.min.js.LICENSE.txt +1 -0
  53. package/2136.min.js +2 -0
  54. package/2136.min.js.LICENSE.txt +1 -0
  55. package/2157.min.js +2 -0
  56. package/2157.min.js.LICENSE.txt +1 -0
  57. package/2260.min.js +2 -0
  58. package/2260.min.js.LICENSE.txt +1 -0
  59. package/2283.min.js +2 -0
  60. package/2283.min.js.LICENSE.txt +1 -0
  61. package/2284.min.js +2 -0
  62. package/2284.min.js.LICENSE.txt +1 -0
  63. package/2370.min.js +2 -0
  64. package/2370.min.js.LICENSE.txt +1 -0
  65. package/2402.min.js +2 -0
  66. package/2402.min.js.LICENSE.txt +1 -0
  67. package/2415.min.js +2 -0
  68. package/2415.min.js.LICENSE.txt +1 -0
  69. package/243.min.js +2 -0
  70. package/243.min.js.LICENSE.txt +1 -0
  71. package/2497.min.js +2 -0
  72. package/2497.min.js.LICENSE.txt +1 -0
  73. package/250.min.js +2 -0
  74. package/250.min.js.LICENSE.txt +1 -0
  75. package/2505.min.js +2 -0
  76. package/2505.min.js.LICENSE.txt +1 -0
  77. package/2551.min.js +2 -0
  78. package/2551.min.js.LICENSE.txt +1 -0
  79. package/2602.min.js +2 -0
  80. package/2602.min.js.LICENSE.txt +1 -0
  81. package/2645.min.js +2 -0
  82. package/2645.min.js.LICENSE.txt +1 -0
  83. package/2676.min.js +2 -0
  84. package/2676.min.js.LICENSE.txt +1 -0
  85. package/2694.min.js +2 -0
  86. package/2694.min.js.LICENSE.txt +1 -0
  87. package/286.min.js +2 -0
  88. package/286.min.js.LICENSE.txt +1 -0
  89. package/2926.min.js +2 -0
  90. package/2926.min.js.LICENSE.txt +1 -0
  91. package/3107.min.js +2 -0
  92. package/3107.min.js.LICENSE.txt +1 -0
  93. package/3127.min.js +2 -0
  94. package/3127.min.js.LICENSE.txt +1 -0
  95. package/3237.min.js +2 -0
  96. package/3237.min.js.LICENSE.txt +1 -0
  97. package/3245.min.js +2 -0
  98. package/3245.min.js.LICENSE.txt +1 -0
  99. package/3267.min.js +2 -0
  100. package/3267.min.js.LICENSE.txt +1 -0
  101. package/3292.min.js +2 -0
  102. package/3292.min.js.LICENSE.txt +1 -0
  103. package/335.min.js +2 -0
  104. package/335.min.js.LICENSE.txt +1 -0
  105. package/3371.min.js +2 -0
  106. package/3371.min.js.LICENSE.txt +1 -0
  107. package/3416.min.js +2 -0
  108. package/3416.min.js.LICENSE.txt +1 -0
  109. package/3433.min.js +2 -0
  110. package/3433.min.js.LICENSE.txt +1 -0
  111. package/3438.min.js +2 -0
  112. package/3438.min.js.LICENSE.txt +1 -0
  113. package/344.min.js +2 -0
  114. package/344.min.js.LICENSE.txt +1 -0
  115. package/3454.min.js +2 -0
  116. package/3454.min.js.LICENSE.txt +1 -0
  117. package/3476.min.js +2 -0
  118. package/3476.min.js.LICENSE.txt +1 -0
  119. package/3506.min.js +2 -0
  120. package/3506.min.js.LICENSE.txt +1 -0
  121. package/3523.min.js +2 -0
  122. package/3523.min.js.LICENSE.txt +1 -0
  123. package/3537.min.js +2 -0
  124. package/3537.min.js.LICENSE.txt +1 -0
  125. package/357.min.js +2 -0
  126. package/357.min.js.LICENSE.txt +1 -0
  127. package/3622.min.js +2 -0
  128. package/3622.min.js.LICENSE.txt +1 -0
  129. package/3632.min.js +2 -0
  130. package/3632.min.js.LICENSE.txt +1 -0
  131. package/3695.min.js +2 -0
  132. package/3695.min.js.LICENSE.txt +1 -0
  133. package/372.min.js +2 -0
  134. package/372.min.js.LICENSE.txt +1 -0
  135. package/3801.min.js +2 -0
  136. package/3801.min.js.LICENSE.txt +1 -0
  137. package/3890.min.js +2 -0
  138. package/3890.min.js.LICENSE.txt +1 -0
  139. package/3905.min.js +2 -0
  140. package/3905.min.js.LICENSE.txt +1 -0
  141. package/401.min.js +2 -0
  142. package/401.min.js.LICENSE.txt +1 -0
  143. package/4036.min.js +2 -0
  144. package/4036.min.js.LICENSE.txt +1 -0
  145. package/4055.min.js +2 -0
  146. package/4055.min.js.LICENSE.txt +1 -0
  147. package/4154.min.js +2 -0
  148. package/4154.min.js.LICENSE.txt +1 -0
  149. package/4157.min.js +2 -0
  150. package/4157.min.js.LICENSE.txt +1 -0
  151. package/4159.min.js +2 -0
  152. package/4159.min.js.LICENSE.txt +1 -0
  153. package/4191.min.js +2 -0
  154. package/4191.min.js.LICENSE.txt +1 -0
  155. package/4264.min.js +2 -0
  156. package/4264.min.js.LICENSE.txt +1 -0
  157. package/4289.min.js +2 -0
  158. package/4289.min.js.LICENSE.txt +1 -0
  159. package/4292.min.js +2 -0
  160. package/4292.min.js.LICENSE.txt +1 -0
  161. package/4302.min.js +2 -0
  162. package/4302.min.js.LICENSE.txt +1 -0
  163. package/4315.min.js +2 -0
  164. package/4315.min.js.LICENSE.txt +1 -0
  165. package/435.min.js +2 -0
  166. package/435.min.js.LICENSE.txt +1 -0
  167. package/439.min.js +2 -0
  168. package/439.min.js.LICENSE.txt +1 -0
  169. package/4432.min.js +2 -0
  170. package/4432.min.js.LICENSE.txt +1 -0
  171. package/449.min.js +2 -0
  172. package/449.min.js.LICENSE.txt +1 -0
  173. package/4512.min.js +2 -0
  174. package/4512.min.js.LICENSE.txt +1 -0
  175. package/4546.min.js +2 -0
  176. package/4546.min.js.LICENSE.txt +1 -0
  177. package/4571.min.js +2 -0
  178. package/4571.min.js.LICENSE.txt +1 -0
  179. package/4584.min.js +2 -0
  180. package/4584.min.js.LICENSE.txt +1 -0
  181. package/461.min.js +2 -0
  182. package/461.min.js.LICENSE.txt +1 -0
  183. package/4673.min.js +2 -0
  184. package/4673.min.js.LICENSE.txt +1 -0
  185. package/4847.min.js +2 -0
  186. package/4847.min.js.LICENSE.txt +1 -0
  187. package/489.min.js +2 -0
  188. package/489.min.js.LICENSE.txt +1 -0
  189. package/4893.min.js +2 -0
  190. package/4893.min.js.LICENSE.txt +1 -0
  191. package/4910.min.js +2 -0
  192. package/4910.min.js.LICENSE.txt +1 -0
  193. package/4924.min.js +2 -0
  194. package/4924.min.js.LICENSE.txt +1 -0
  195. package/5015.min.js +2 -0
  196. package/5015.min.js.LICENSE.txt +1 -0
  197. package/5037.min.js +2 -0
  198. package/5037.min.js.LICENSE.txt +1 -0
  199. package/5076.min.js +2 -0
  200. package/5076.min.js.LICENSE.txt +1 -0
  201. package/5163.min.js +2 -0
  202. package/5163.min.js.LICENSE.txt +1 -0
  203. package/518.min.js +2 -0
  204. package/518.min.js.LICENSE.txt +1 -0
  205. package/5189.min.js +2 -0
  206. package/5189.min.js.LICENSE.txt +1 -0
  207. package/5192.min.js +2 -0
  208. package/5192.min.js.LICENSE.txt +1 -0
  209. package/5201.min.js +2 -0
  210. package/5201.min.js.LICENSE.txt +1 -0
  211. package/5239.min.js +2 -0
  212. package/5239.min.js.LICENSE.txt +1 -0
  213. package/5369.min.js +2 -0
  214. package/5369.min.js.LICENSE.txt +1 -0
  215. package/5400.min.js +2 -0
  216. package/5400.min.js.LICENSE.txt +1 -0
  217. package/5414.min.js +2 -0
  218. package/5414.min.js.LICENSE.txt +1 -0
  219. package/5434.min.js +2 -0
  220. package/5434.min.js.LICENSE.txt +1 -0
  221. package/5530.min.js +2 -0
  222. package/5530.min.js.LICENSE.txt +1 -0
  223. package/5535.min.js +2 -0
  224. package/5535.min.js.LICENSE.txt +1 -0
  225. package/561.min.js +2 -0
  226. package/561.min.js.LICENSE.txt +1 -0
  227. package/5662.min.js +2 -0
  228. package/5662.min.js.LICENSE.txt +1 -0
  229. package/5775.min.js +2 -0
  230. package/5775.min.js.LICENSE.txt +1 -0
  231. package/5800.min.js +2 -0
  232. package/5800.min.js.LICENSE.txt +1 -0
  233. package/5808.min.js +2 -0
  234. package/5808.min.js.LICENSE.txt +1 -0
  235. package/585.min.js +2 -0
  236. package/585.min.js.LICENSE.txt +1 -0
  237. package/5955.min.js +2 -0
  238. package/5955.min.js.LICENSE.txt +1 -0
  239. package/5969.min.js +2 -0
  240. package/5969.min.js.LICENSE.txt +1 -0
  241. package/6119.min.js +2 -0
  242. package/6119.min.js.LICENSE.txt +1 -0
  243. package/6136.min.js +2 -0
  244. package/6136.min.js.LICENSE.txt +1 -0
  245. package/6294.min.js +2 -0
  246. package/6294.min.js.LICENSE.txt +1 -0
  247. package/6378.min.js +2 -0
  248. package/6378.min.js.LICENSE.txt +1 -0
  249. package/6436.min.js +2 -0
  250. package/6436.min.js.LICENSE.txt +1 -0
  251. package/6493.min.js +2 -0
  252. package/6493.min.js.LICENSE.txt +1 -0
  253. package/6510.min.js +2 -0
  254. package/6510.min.js.LICENSE.txt +1 -0
  255. package/6520.min.js +2 -0
  256. package/6520.min.js.LICENSE.txt +1 -0
  257. package/6521.min.js +2 -0
  258. package/6521.min.js.LICENSE.txt +1 -0
  259. package/66.min.js +2 -0
  260. package/66.min.js.LICENSE.txt +1 -0
  261. package/6732.min.js +2 -0
  262. package/6732.min.js.LICENSE.txt +1 -0
  263. package/6735.min.js +2 -0
  264. package/6735.min.js.LICENSE.txt +1 -0
  265. package/6787.min.js +2 -0
  266. package/6787.min.js.LICENSE.txt +1 -0
  267. package/6832.min.js +2 -0
  268. package/6832.min.js.LICENSE.txt +1 -0
  269. package/6851.min.js +2 -0
  270. package/6851.min.js.LICENSE.txt +1 -0
  271. package/6922.min.js +2 -0
  272. package/6922.min.js.LICENSE.txt +1 -0
  273. package/6947.min.js +2 -0
  274. package/6947.min.js.LICENSE.txt +1 -0
  275. package/6964.min.js +2 -0
  276. package/6964.min.js.LICENSE.txt +1 -0
  277. package/6974.min.js +2 -0
  278. package/6974.min.js.LICENSE.txt +1 -0
  279. package/6979.min.js +2 -0
  280. package/6979.min.js.LICENSE.txt +1 -0
  281. package/6981.min.js +2 -0
  282. package/6981.min.js.LICENSE.txt +1 -0
  283. package/705.min.js +2 -0
  284. package/705.min.js.LICENSE.txt +1 -0
  285. package/707.min.js +2 -0
  286. package/707.min.js.LICENSE.txt +1 -0
  287. package/7087.min.js +2 -0
  288. package/7087.min.js.LICENSE.txt +1 -0
  289. package/7167.min.js +2 -0
  290. package/7167.min.js.LICENSE.txt +1 -0
  291. package/7306.min.js +2 -0
  292. package/7306.min.js.LICENSE.txt +1 -0
  293. package/7311.min.js +2 -0
  294. package/7311.min.js.LICENSE.txt +1 -0
  295. package/7373.min.js +2 -0
  296. package/7373.min.js.LICENSE.txt +1 -0
  297. package/7528.min.js +2 -0
  298. package/7528.min.js.LICENSE.txt +1 -0
  299. package/7664.min.js +2 -0
  300. package/7664.min.js.LICENSE.txt +1 -0
  301. package/7774.min.js +2 -0
  302. package/7774.min.js.LICENSE.txt +1 -0
  303. package/7929.min.js +2 -0
  304. package/7929.min.js.LICENSE.txt +1 -0
  305. package/7947.min.js +2 -0
  306. package/7947.min.js.LICENSE.txt +1 -0
  307. package/800.min.js +2 -0
  308. package/800.min.js.LICENSE.txt +1 -0
  309. package/8062.min.js +2 -0
  310. package/8062.min.js.LICENSE.txt +1 -0
  311. package/8114.min.js +2 -0
  312. package/8114.min.js.LICENSE.txt +1 -0
  313. package/8125.min.js +2 -0
  314. package/8125.min.js.LICENSE.txt +1 -0
  315. package/814.min.js +2 -0
  316. package/814.min.js.LICENSE.txt +1 -0
  317. package/8155.min.js +2 -0
  318. package/8155.min.js.LICENSE.txt +1 -0
  319. package/817.min.js +2 -0
  320. package/817.min.js.LICENSE.txt +1 -0
  321. package/8194.min.js +2 -0
  322. package/8194.min.js.LICENSE.txt +1 -0
  323. package/823.min.js +2 -0
  324. package/823.min.js.LICENSE.txt +1 -0
  325. package/83.min.js +2 -0
  326. package/83.min.js.LICENSE.txt +1 -0
  327. package/8338.min.js +2 -0
  328. package/8338.min.js.LICENSE.txt +1 -0
  329. package/8433.min.js +2 -0
  330. package/8433.min.js.LICENSE.txt +1 -0
  331. package/8469.min.js +2 -0
  332. package/8469.min.js.LICENSE.txt +1 -0
  333. package/8558.min.js +2 -0
  334. package/8558.min.js.LICENSE.txt +1 -0
  335. package/8612.min.js +2 -0
  336. package/8612.min.js.LICENSE.txt +1 -0
  337. package/8656.min.js +2 -0
  338. package/8656.min.js.LICENSE.txt +1 -0
  339. package/8670.min.js +2 -0
  340. package/8670.min.js.LICENSE.txt +1 -0
  341. package/8695.min.js +2 -0
  342. package/8695.min.js.LICENSE.txt +1 -0
  343. package/8746.min.js +2 -0
  344. package/8746.min.js.LICENSE.txt +1 -0
  345. package/8764.min.js +2 -0
  346. package/8764.min.js.LICENSE.txt +1 -0
  347. package/8814.min.js +2 -0
  348. package/8814.min.js.LICENSE.txt +1 -0
  349. package/8824.min.js +2 -0
  350. package/8824.min.js.LICENSE.txt +1 -0
  351. package/8920.min.js +2 -0
  352. package/8920.min.js.LICENSE.txt +1 -0
  353. package/8934.min.js +2 -0
  354. package/8934.min.js.LICENSE.txt +1 -0
  355. package/9151.min.js +2 -0
  356. package/9151.min.js.LICENSE.txt +1 -0
  357. package/9231.min.js +2 -0
  358. package/9231.min.js.LICENSE.txt +1 -0
  359. package/94.min.js +2 -0
  360. package/94.min.js.LICENSE.txt +1 -0
  361. package/9487.min.js +2 -0
  362. package/9487.min.js.LICENSE.txt +1 -0
  363. package/9512.min.js +2 -0
  364. package/9512.min.js.LICENSE.txt +1 -0
  365. package/9555.min.js +2 -0
  366. package/9555.min.js.LICENSE.txt +1 -0
  367. package/9581.min.js +2 -0
  368. package/9581.min.js.LICENSE.txt +1 -0
  369. package/9587.min.js +2 -0
  370. package/9587.min.js.LICENSE.txt +1 -0
  371. package/9613.min.js +2 -0
  372. package/9613.min.js.LICENSE.txt +1 -0
  373. package/9630.min.js +2 -0
  374. package/9630.min.js.LICENSE.txt +1 -0
  375. package/986.min.js +2 -0
  376. package/986.min.js.LICENSE.txt +1 -0
  377. package/9892.min.js +2 -0
  378. package/9892.min.js.LICENSE.txt +1 -0
  379. package/9946.min.js +2 -0
  380. package/9946.min.js.LICENSE.txt +1 -0
  381. package/9969.min.js +2 -0
  382. package/9969.min.js.LICENSE.txt +1 -0
  383. package/9989.min.js +2 -0
  384. package/9989.min.js.LICENSE.txt +1 -0
  385. package/basic_dist_browser_index_js.js +1 -1
  386. package/cjs/index.js +1 -24
  387. package/effects_bubble_dist_browser_BubbleDrawer_js.js +2 -2
  388. package/effects_bubble_dist_browser_index_js.js +1 -1
  389. package/effects_trail_dist_browser_TrailDrawer_js.js +2 -2
  390. package/effects_trail_dist_browser_index_js.js +1 -1
  391. package/engine_dist_browser_Core_Container_js.js +15 -5
  392. package/full_dist_browser_index_js.js +1 -1
  393. package/interactions_external_attract_dist_browser_Attractor_js.js +12 -2
  394. package/interactions_external_attract_dist_browser_index_js.js +1 -1
  395. package/interactions_external_bounce_dist_browser_Bouncer_js.js +12 -2
  396. package/interactions_external_bounce_dist_browser_index_js.js +1 -1
  397. package/interactions_external_bubble_dist_browser_Bubbler_js.js +2 -2
  398. package/interactions_external_bubble_dist_browser_index_js.js +1 -1
  399. package/interactions_external_connect_dist_browser_Connector_js.js +2 -2
  400. package/interactions_external_connect_dist_browser_index_js.js +1 -1
  401. package/interactions_external_grab_dist_browser_Grabber_js.js +2 -2
  402. package/interactions_external_grab_dist_browser_index_js.js +1 -1
  403. package/interactions_external_particle_dist_browser_InteractivityParticleMaker_js.js +2 -2
  404. package/interactions_external_particle_dist_browser_index_js.js +1 -1
  405. package/interactions_external_pause_dist_browser_Pauser_js.js +2 -2
  406. package/interactions_external_pause_dist_browser_index_js.js +1 -1
  407. package/interactions_external_pop_dist_browser_Popper_js.js +2 -2
  408. package/interactions_external_pop_dist_browser_index_js.js +1 -1
  409. package/interactions_external_push_dist_browser_Pusher_js.js +2 -2
  410. package/interactions_external_push_dist_browser_index_js.js +1 -1
  411. package/interactions_external_remove_dist_browser_Remover_js.js +2 -2
  412. package/interactions_external_remove_dist_browser_index_js.js +1 -1
  413. package/interactions_external_repulse_dist_browser_Repulser_js.js +2 -2
  414. package/interactions_external_repulse_dist_browser_index_js.js +1 -1
  415. package/interactions_external_slow_dist_browser_Slower_js.js +2 -2
  416. package/interactions_external_slow_dist_browser_index_js.js +1 -1
  417. package/interactions_external_trail_dist_browser_TrailMaker_js.js +2 -2
  418. package/interactions_external_trail_dist_browser_index_js.js +1 -1
  419. package/interactions_light_dist_browser_ExternalLighter_js.js +2 -2
  420. package/interactions_light_dist_browser_ParticlesLighter_js.js +2 -2
  421. package/interactions_light_dist_browser_index_js.js +1 -1
  422. package/interactions_particles_attract_dist_browser_Attractor_js.js +2 -2
  423. package/interactions_particles_attract_dist_browser_index_js.js +1 -1
  424. package/interactions_particles_collisions_dist_browser_Collider_js.js +33 -3
  425. package/interactions_particles_collisions_dist_browser_index_js.js +1 -1
  426. package/interactions_particles_links_dist_browser_LinkInstance_js.js +2 -2
  427. package/interactions_particles_links_dist_browser_Linker_js.js +12 -2
  428. package/interactions_particles_links_dist_browser_LinksPlugin_js.js +1 -1
  429. package/interactions_particles_links_dist_browser_index_js.js +1 -1
  430. package/interactions_particles_links_dist_browser_interaction_js.js +1 -1
  431. package/interactions_particles_links_dist_browser_plugin_js.js +1 -1
  432. package/interactions_particles_repulse_dist_browser_Repulser_js.js +2 -2
  433. package/interactions_particles_repulse_dist_browser_index_js.js +1 -1
  434. package/move_base_dist_browser_BaseMover_js.js +12 -2
  435. package/move_base_dist_browser_index_js.js +1 -1
  436. package/move_parallax_dist_browser_ParallaxMover_js.js +2 -2
  437. package/move_parallax_dist_browser_index_js.js +1 -1
  438. package/package.json +48 -48
  439. package/paths_curlNoise_dist_browser_CurlNoiseGenerator_js.js +2 -2
  440. package/paths_curlNoise_dist_browser_index_js.js +1 -1
  441. package/paths_curves_dist_browser_CurvesPathGenerator_js.js +12 -2
  442. package/paths_curves_dist_browser_index_js.js +1 -1
  443. package/paths_perlinNoise_dist_browser_PerlinNoiseGenerator_js.js +2 -2
  444. package/paths_perlinNoise_dist_browser_index_js.js +1 -1
  445. package/paths_polygon_dist_browser_PolygonPathGenerator_js.js +2 -2
  446. package/paths_polygon_dist_browser_index_js.js +1 -1
  447. package/paths_simplexNoise_dist_browser_SimplexNoiseGenerator_js.js +2 -2
  448. package/paths_simplexNoise_dist_browser_index_js.js +1 -1
  449. package/paths_svg_dist_browser_SVGPathGenerator_js.js +2 -2
  450. package/paths_svg_dist_browser_index_js.js +1 -1
  451. package/paths_zigzag_dist_browser_ZigZagPathGenerator_js.js +2 -2
  452. package/paths_zigzag_dist_browser_index_js.js +1 -1
  453. package/pjs_dist_browser_index_js.js +1 -1
  454. package/plugins_absorbers_dist_browser_AbsorberInstance_js.js +2 -2
  455. package/plugins_absorbers_dist_browser_AbsorbersPlugin_js.js +1 -1
  456. package/plugins_absorbers_dist_browser_Absorbers_js.js +2 -2
  457. package/plugins_absorbers_dist_browser_index_js.js +1 -1
  458. package/plugins_canvasMask_dist_browser_CanvasMaskInstance_js.js +3 -3
  459. package/plugins_canvasMask_dist_browser_CanvasMaskPlugin_js.js +1 -1
  460. package/plugins_canvasMask_dist_browser_index_js.js +1 -1
  461. package/plugins_easings_back_dist_browser_index_js.js +1 -1
  462. package/plugins_easings_circ_dist_browser_index_js.js +1 -1
  463. package/plugins_easings_cubic_dist_browser_index_js.js +1 -1
  464. package/plugins_easings_expo_dist_browser_index_js.js +1 -1
  465. package/plugins_easings_linear_dist_browser_index_js.js +1 -1
  466. package/plugins_easings_quad_dist_browser_index_js.js +1 -1
  467. package/plugins_easings_quart_dist_browser_index_js.js +1 -1
  468. package/plugins_easings_quint_dist_browser_index_js.js +1 -1
  469. package/plugins_easings_sine_dist_browser_index_js.js +1 -1
  470. package/plugins_emittersShapes_canvas_dist_browser_EmittersCanvasShapeGenerator_js.js +2 -2
  471. package/plugins_emittersShapes_canvas_dist_browser_index_js.js +1 -1
  472. package/plugins_emittersShapes_circle_dist_browser_EmittersCircleShapeGenerator_js.js +2 -2
  473. package/plugins_emittersShapes_circle_dist_browser_index_js.js +1 -1
  474. package/plugins_emittersShapes_path_dist_browser_EmittersPathShapeGenerator_js.js +2 -2
  475. package/plugins_emittersShapes_path_dist_browser_index_js.js +1 -1
  476. package/plugins_emittersShapes_polygon_dist_browser_EmittersPolygonShapeGenerator_js.js +2 -2
  477. package/plugins_emittersShapes_polygon_dist_browser_index_js.js +1 -1
  478. package/plugins_emittersShapes_square_dist_browser_EmittersSquareShapeGenerator_js.js +2 -2
  479. package/plugins_emittersShapes_square_dist_browser_index_js.js +1 -1
  480. package/plugins_emitters_dist_browser_EmitterInstance_js.js +2 -2
  481. package/plugins_emitters_dist_browser_EmittersPlugin_js.js +1 -1
  482. package/plugins_emitters_dist_browser_Emitters_js.js +2 -2
  483. package/plugins_emitters_dist_browser_ShapeManager_js.js +1 -1
  484. package/plugins_emitters_dist_browser_index_js.js +1 -1
  485. package/plugins_exports_image_dist_browser_ExportImageInstance_js.js +1 -1
  486. package/plugins_exports_image_dist_browser_ExportImagePlugin_js.js +1 -1
  487. package/plugins_exports_image_dist_browser_index_js.js +1 -1
  488. package/plugins_exports_json_dist_browser_ExportJSONInstance_js.js +1 -1
  489. package/plugins_exports_json_dist_browser_ExportJSONPlugin_js.js +1 -1
  490. package/plugins_exports_json_dist_browser_index_js.js +1 -1
  491. package/plugins_exports_video_dist_browser_ExportVideoInstance_js.js +1 -1
  492. package/plugins_exports_video_dist_browser_ExportVideoPlugin_js.js +1 -1
  493. package/plugins_exports_video_dist_browser_index_js.js +1 -1
  494. package/plugins_hsvColor_dist_browser_HsvColorManager_js.js +1 -1
  495. package/plugins_hsvColor_dist_browser_index_js.js +1 -1
  496. package/plugins_infection_dist_browser_InfectionInstance_js.js +1 -1
  497. package/plugins_infection_dist_browser_InfectionPlugin_js.js +1 -1
  498. package/plugins_infection_dist_browser_ParticlesInfecter_js.js +2 -2
  499. package/plugins_infection_dist_browser_index_js.js +1 -1
  500. package/plugins_motion_dist_browser_MotionInstance_js.js +1 -1
  501. package/plugins_motion_dist_browser_MotionPlugin_js.js +1 -1
  502. package/plugins_motion_dist_browser_index_js.js +1 -1
  503. package/plugins_poisson_dist_browser_PoissonDiscPlugin_js.js +1 -1
  504. package/plugins_poisson_dist_browser_PoissonInstance_js.js +1 -1
  505. package/plugins_poisson_dist_browser_index_js.js +1 -1
  506. package/plugins_polygonMask_dist_browser_PolygonMaskInstance_js.js +12 -2
  507. package/plugins_polygonMask_dist_browser_PolygonMaskPlugin_js.js +1 -1
  508. package/plugins_polygonMask_dist_browser_index_js.js +1 -1
  509. package/plugins_sounds_dist_browser_SoundsInstance_js.js +1 -1
  510. package/plugins_sounds_dist_browser_SoundsPlugin_js.js +1 -1
  511. package/plugins_sounds_dist_browser_index_js.js +1 -1
  512. package/report.html +1 -1
  513. package/shapes_arrow_dist_browser_ArrowDrawer_js.js +12 -2
  514. package/shapes_arrow_dist_browser_index_js.js +1 -1
  515. package/shapes_cards_dist_browser_ClubDrawer_js.js +12 -2
  516. package/shapes_cards_dist_browser_DiamondDrawer_js.js +12 -2
  517. package/shapes_cards_dist_browser_HeartDrawer_js.js +12 -2
  518. package/shapes_cards_dist_browser_SpadeDrawer_js.js +12 -2
  519. package/shapes_cards_dist_browser_index_js.js +1 -1
  520. package/shapes_circle_dist_browser_CircleDrawer_js.js +12 -2
  521. package/shapes_circle_dist_browser_index_js.js +1 -1
  522. package/shapes_cog_dist_browser_CogDrawer_js.js +12 -2
  523. package/shapes_cog_dist_browser_index_js.js +1 -1
  524. package/shapes_emoji_dist_browser_EmojiDrawer_js.js +12 -2
  525. package/shapes_emoji_dist_browser_index_js.js +1 -1
  526. package/shapes_heart_dist_browser_HeartDrawer_js.js +12 -2
  527. package/shapes_heart_dist_browser_index_js.js +1 -1
  528. package/shapes_image_dist_browser_GifUtils_Utils_js.js +1 -1
  529. package/shapes_image_dist_browser_ImageDrawer_js.js +2 -2
  530. package/shapes_image_dist_browser_ImagePreloader_js.js +1 -1
  531. package/shapes_image_dist_browser_index_js.js +2 -2
  532. package/shapes_line_dist_browser_LineDrawer_js.js +12 -2
  533. package/shapes_line_dist_browser_index_js.js +1 -1
  534. package/shapes_path_dist_browser_PathDrawer_js.js +12 -2
  535. package/shapes_path_dist_browser_index_js.js +1 -1
  536. package/shapes_polygon_dist_browser_PolygonDrawer_js.js +12 -2
  537. package/shapes_polygon_dist_browser_TriangleDrawer_js.js +12 -2
  538. package/shapes_polygon_dist_browser_index_js.js +1 -1
  539. package/shapes_rounded-polygon_dist_browser_RoundedPolygonDrawer_js.js +12 -2
  540. package/shapes_rounded-polygon_dist_browser_index_js.js +1 -1
  541. package/shapes_rounded-rect_dist_browser_RoundedRectDrawer_js.js +12 -2
  542. package/shapes_rounded-rect_dist_browser_index_js.js +1 -1
  543. package/shapes_spiral_dist_browser_SpiralDrawer_js.js +12 -2
  544. package/shapes_spiral_dist_browser_index_js.js +1 -1
  545. package/shapes_square_dist_browser_SquareDrawer_js.js +12 -2
  546. package/shapes_square_dist_browser_index_js.js +1 -1
  547. package/shapes_star_dist_browser_StarDrawer_js.js +12 -2
  548. package/shapes_star_dist_browser_index_js.js +1 -1
  549. package/shapes_text_dist_browser_index_js.js +12 -2
  550. package/slim_dist_browser_index_js.js +1 -1
  551. package/tsparticles.all.bundle.js +4 -4
  552. package/tsparticles.all.bundle.min.js +1 -1
  553. package/tsparticles.all.bundle.min.js.LICENSE.txt +1 -1
  554. package/tsparticles.all.js +1 -1
  555. package/tsparticles.all.min.js +1 -1
  556. package/tsparticles.all.min.js.LICENSE.txt +1 -1
  557. package/updaters_color_dist_browser_ColorUpdater_js.js +2 -2
  558. package/updaters_color_dist_browser_index_js.js +1 -1
  559. package/updaters_destroy_dist_browser_DestroyUpdater_js.js +3 -3
  560. package/updaters_destroy_dist_browser_index_js.js +1 -1
  561. package/updaters_gradient_dist_browser_GradientUpdater_js.js +12 -2
  562. package/updaters_gradient_dist_browser_index_js.js +1 -1
  563. package/updaters_life_dist_browser_LifeUpdater_js.js +12 -2
  564. package/updaters_life_dist_browser_index_js.js +1 -1
  565. package/updaters_opacity_dist_browser_OpacityUpdater_js.js +2 -2
  566. package/updaters_opacity_dist_browser_index_js.js +1 -1
  567. package/updaters_orbit_dist_browser_OrbitUpdater_js.js +2 -2
  568. package/updaters_orbit_dist_browser_index_js.js +1 -1
  569. package/updaters_outModes_dist_browser_OutOfCanvasUpdater_js.js +52 -2
  570. package/updaters_outModes_dist_browser_index_js.js +1 -1
  571. package/updaters_roll_dist_browser_RollUpdater_js.js +12 -2
  572. package/updaters_roll_dist_browser_index_js.js +1 -1
  573. package/updaters_rotate_dist_browser_RotateUpdater_js.js +2 -2
  574. package/updaters_rotate_dist_browser_index_js.js +1 -1
  575. package/updaters_size_dist_browser_SizeUpdater_js.js +2 -2
  576. package/updaters_size_dist_browser_index_js.js +1 -1
  577. package/updaters_strokeColor_dist_browser_StrokeColorUpdater_js.js +2 -2
  578. package/updaters_strokeColor_dist_browser_index_js.js +1 -1
  579. package/updaters_tilt_dist_browser_TiltUpdater_js.js +2 -2
  580. package/updaters_tilt_dist_browser_index_js.js +1 -1
  581. package/updaters_twinkle_dist_browser_TwinkleUpdater_js.js +1 -1
  582. package/updaters_twinkle_dist_browser_index_js.js +1 -1
  583. package/updaters_wobble_dist_browser_WobbleUpdater_js.js +12 -2
  584. package/updaters_wobble_dist_browser_index_js.js +1 -1
  585. package/utils_simplexNoise_dist_browser_index_js.js +1 -1
  586. package/1011.min.js +0 -2
  587. package/1011.min.js.LICENSE.txt +0 -1
  588. package/1030.min.js +0 -2
  589. package/1030.min.js.LICENSE.txt +0 -1
  590. package/1122.min.js +0 -2
  591. package/1122.min.js.LICENSE.txt +0 -1
  592. package/1147.min.js +0 -2
  593. package/1147.min.js.LICENSE.txt +0 -1
  594. package/1163.min.js +0 -2
  595. package/1163.min.js.LICENSE.txt +0 -1
  596. package/1188.min.js +0 -2
  597. package/1188.min.js.LICENSE.txt +0 -1
  598. package/1196.min.js +0 -2
  599. package/1196.min.js.LICENSE.txt +0 -1
  600. package/1264.min.js +0 -2
  601. package/1264.min.js.LICENSE.txt +0 -1
  602. package/1299.min.js +0 -2
  603. package/1299.min.js.LICENSE.txt +0 -1
  604. package/1308.min.js +0 -2
  605. package/1308.min.js.LICENSE.txt +0 -1
  606. package/1317.min.js +0 -2
  607. package/1317.min.js.LICENSE.txt +0 -1
  608. package/1332.min.js +0 -2
  609. package/1332.min.js.LICENSE.txt +0 -1
  610. package/1364.min.js +0 -2
  611. package/1364.min.js.LICENSE.txt +0 -1
  612. package/1472.min.js +0 -2
  613. package/1472.min.js.LICENSE.txt +0 -1
  614. package/1490.min.js +0 -2
  615. package/1490.min.js.LICENSE.txt +0 -1
  616. package/1492.min.js +0 -2
  617. package/1492.min.js.LICENSE.txt +0 -1
  618. package/1513.min.js +0 -2
  619. package/1513.min.js.LICENSE.txt +0 -1
  620. package/1539.min.js +0 -2
  621. package/1539.min.js.LICENSE.txt +0 -1
  622. package/1705.min.js +0 -2
  623. package/1705.min.js.LICENSE.txt +0 -1
  624. package/1708.min.js +0 -2
  625. package/1708.min.js.LICENSE.txt +0 -1
  626. package/1769.min.js +0 -2
  627. package/1769.min.js.LICENSE.txt +0 -1
  628. package/1808.min.js +0 -2
  629. package/1808.min.js.LICENSE.txt +0 -1
  630. package/1810.min.js +0 -2
  631. package/1810.min.js.LICENSE.txt +0 -1
  632. package/1831.min.js +0 -2
  633. package/1831.min.js.LICENSE.txt +0 -1
  634. package/1912.min.js +0 -2
  635. package/1912.min.js.LICENSE.txt +0 -1
  636. package/1916.min.js +0 -2
  637. package/1916.min.js.LICENSE.txt +0 -1
  638. package/1952.min.js +0 -2
  639. package/1952.min.js.LICENSE.txt +0 -1
  640. package/196.min.js +0 -2
  641. package/196.min.js.LICENSE.txt +0 -1
  642. package/197.min.js +0 -2
  643. package/197.min.js.LICENSE.txt +0 -1
  644. package/1982.min.js +0 -2
  645. package/1982.min.js.LICENSE.txt +0 -1
  646. package/208.min.js +0 -2
  647. package/208.min.js.LICENSE.txt +0 -1
  648. package/2081.min.js +0 -2
  649. package/2081.min.js.LICENSE.txt +0 -1
  650. package/2121.min.js +0 -2
  651. package/2121.min.js.LICENSE.txt +0 -1
  652. package/2124.min.js +0 -2
  653. package/2124.min.js.LICENSE.txt +0 -1
  654. package/2173.min.js +0 -2
  655. package/2173.min.js.LICENSE.txt +0 -1
  656. package/2200.min.js +0 -2
  657. package/2200.min.js.LICENSE.txt +0 -1
  658. package/2227.min.js +0 -2
  659. package/2227.min.js.LICENSE.txt +0 -1
  660. package/2281.min.js +0 -2
  661. package/2281.min.js.LICENSE.txt +0 -1
  662. package/231.min.js +0 -2
  663. package/231.min.js.LICENSE.txt +0 -1
  664. package/2397.min.js +0 -2
  665. package/2397.min.js.LICENSE.txt +0 -1
  666. package/2407.min.js +0 -2
  667. package/2407.min.js.LICENSE.txt +0 -1
  668. package/2486.min.js +0 -2
  669. package/2486.min.js.LICENSE.txt +0 -1
  670. package/255.min.js +0 -2
  671. package/255.min.js.LICENSE.txt +0 -1
  672. package/256.min.js +0 -2
  673. package/256.min.js.LICENSE.txt +0 -1
  674. package/2580.min.js +0 -2
  675. package/2580.min.js.LICENSE.txt +0 -1
  676. package/2628.min.js +0 -2
  677. package/2628.min.js.LICENSE.txt +0 -1
  678. package/2720.min.js +0 -2
  679. package/2720.min.js.LICENSE.txt +0 -1
  680. package/2765.min.js +0 -2
  681. package/2765.min.js.LICENSE.txt +0 -1
  682. package/2870.min.js +0 -2
  683. package/2870.min.js.LICENSE.txt +0 -1
  684. package/2890.min.js +0 -2
  685. package/2890.min.js.LICENSE.txt +0 -1
  686. package/2899.min.js +0 -2
  687. package/2899.min.js.LICENSE.txt +0 -1
  688. package/290.min.js +0 -2
  689. package/290.min.js.LICENSE.txt +0 -1
  690. package/294.min.js +0 -2
  691. package/294.min.js.LICENSE.txt +0 -1
  692. package/2946.min.js +0 -2
  693. package/2946.min.js.LICENSE.txt +0 -1
  694. package/3054.min.js +0 -2
  695. package/3054.min.js.LICENSE.txt +0 -1
  696. package/3134.min.js +0 -2
  697. package/3134.min.js.LICENSE.txt +0 -1
  698. package/3141.min.js +0 -2
  699. package/3141.min.js.LICENSE.txt +0 -1
  700. package/3196.min.js +0 -2
  701. package/3196.min.js.LICENSE.txt +0 -1
  702. package/3255.min.js +0 -2
  703. package/3255.min.js.LICENSE.txt +0 -1
  704. package/3261.min.js +0 -2
  705. package/3261.min.js.LICENSE.txt +0 -1
  706. package/3411.min.js +0 -2
  707. package/3411.min.js.LICENSE.txt +0 -1
  708. package/3457.min.js +0 -2
  709. package/3457.min.js.LICENSE.txt +0 -1
  710. package/3468.min.js +0 -2
  711. package/3468.min.js.LICENSE.txt +0 -1
  712. package/3473.min.js +0 -2
  713. package/3473.min.js.LICENSE.txt +0 -1
  714. package/3486.min.js +0 -2
  715. package/3486.min.js.LICENSE.txt +0 -1
  716. package/3517.min.js +0 -2
  717. package/3517.min.js.LICENSE.txt +0 -1
  718. package/3597.min.js +0 -2
  719. package/3597.min.js.LICENSE.txt +0 -1
  720. package/3610.min.js +0 -2
  721. package/3610.min.js.LICENSE.txt +0 -1
  722. package/3629.min.js +0 -2
  723. package/3629.min.js.LICENSE.txt +0 -1
  724. package/3648.min.js +0 -2
  725. package/3648.min.js.LICENSE.txt +0 -1
  726. package/3685.min.js +0 -2
  727. package/3685.min.js.LICENSE.txt +0 -1
  728. package/3699.min.js +0 -2
  729. package/3699.min.js.LICENSE.txt +0 -1
  730. package/3705.min.js +0 -2
  731. package/3705.min.js.LICENSE.txt +0 -1
  732. package/3733.min.js +0 -2
  733. package/3733.min.js.LICENSE.txt +0 -1
  734. package/3817.min.js +0 -2
  735. package/3817.min.js.LICENSE.txt +0 -1
  736. package/3837.min.js +0 -2
  737. package/3837.min.js.LICENSE.txt +0 -1
  738. package/384.min.js +0 -2
  739. package/384.min.js.LICENSE.txt +0 -1
  740. package/3862.min.js +0 -2
  741. package/3862.min.js.LICENSE.txt +0 -1
  742. package/3869.min.js +0 -2
  743. package/3869.min.js.LICENSE.txt +0 -1
  744. package/3904.min.js +0 -2
  745. package/3904.min.js.LICENSE.txt +0 -1
  746. package/4011.min.js +0 -2
  747. package/4011.min.js.LICENSE.txt +0 -1
  748. package/4037.min.js +0 -2
  749. package/4037.min.js.LICENSE.txt +0 -1
  750. package/4043.min.js +0 -2
  751. package/4043.min.js.LICENSE.txt +0 -1
  752. package/409.min.js +0 -2
  753. package/409.min.js.LICENSE.txt +0 -1
  754. package/4098.min.js +0 -2
  755. package/4098.min.js.LICENSE.txt +0 -1
  756. package/4116.min.js +0 -2
  757. package/4116.min.js.LICENSE.txt +0 -1
  758. package/4122.min.js +0 -2
  759. package/4122.min.js.LICENSE.txt +0 -1
  760. package/4127.min.js +0 -2
  761. package/4127.min.js.LICENSE.txt +0 -1
  762. package/4176.min.js +0 -2
  763. package/4176.min.js.LICENSE.txt +0 -1
  764. package/4245.min.js +0 -2
  765. package/4245.min.js.LICENSE.txt +0 -1
  766. package/4271.min.js +0 -2
  767. package/4271.min.js.LICENSE.txt +0 -1
  768. package/4314.min.js +0 -2
  769. package/4314.min.js.LICENSE.txt +0 -1
  770. package/4328.min.js +0 -2
  771. package/4328.min.js.LICENSE.txt +0 -1
  772. package/4342.min.js +0 -2
  773. package/4342.min.js.LICENSE.txt +0 -1
  774. package/4380.min.js +0 -2
  775. package/4380.min.js.LICENSE.txt +0 -1
  776. package/4396.min.js +0 -2
  777. package/4396.min.js.LICENSE.txt +0 -1
  778. package/4438.min.js +0 -2
  779. package/4438.min.js.LICENSE.txt +0 -1
  780. package/4515.min.js +0 -2
  781. package/4515.min.js.LICENSE.txt +0 -1
  782. package/4522.min.js +0 -2
  783. package/4522.min.js.LICENSE.txt +0 -1
  784. package/4547.min.js +0 -2
  785. package/4547.min.js.LICENSE.txt +0 -1
  786. package/4595.min.js +0 -2
  787. package/4595.min.js.LICENSE.txt +0 -1
  788. package/4662.min.js +0 -2
  789. package/4662.min.js.LICENSE.txt +0 -1
  790. package/4687.min.js +0 -2
  791. package/4687.min.js.LICENSE.txt +0 -1
  792. package/4717.min.js +0 -2
  793. package/4717.min.js.LICENSE.txt +0 -1
  794. package/4732.min.js +0 -2
  795. package/4732.min.js.LICENSE.txt +0 -1
  796. package/4737.min.js +0 -2
  797. package/4737.min.js.LICENSE.txt +0 -1
  798. package/4744.min.js +0 -2
  799. package/4744.min.js.LICENSE.txt +0 -1
  800. package/4766.min.js +0 -2
  801. package/4766.min.js.LICENSE.txt +0 -1
  802. package/4794.min.js +0 -2
  803. package/4794.min.js.LICENSE.txt +0 -1
  804. package/482.min.js +0 -2
  805. package/482.min.js.LICENSE.txt +0 -1
  806. package/485.min.js +0 -2
  807. package/485.min.js.LICENSE.txt +0 -1
  808. package/4866.min.js +0 -2
  809. package/4866.min.js.LICENSE.txt +0 -1
  810. package/4922.min.js +0 -2
  811. package/4922.min.js.LICENSE.txt +0 -1
  812. package/4973.min.js +0 -2
  813. package/4973.min.js.LICENSE.txt +0 -1
  814. package/4994.min.js +0 -2
  815. package/4994.min.js.LICENSE.txt +0 -1
  816. package/5010.min.js +0 -2
  817. package/5010.min.js.LICENSE.txt +0 -1
  818. package/5034.min.js +0 -2
  819. package/5034.min.js.LICENSE.txt +0 -1
  820. package/5075.min.js +0 -2
  821. package/5075.min.js.LICENSE.txt +0 -1
  822. package/5092.min.js +0 -2
  823. package/5092.min.js.LICENSE.txt +0 -1
  824. package/5120.min.js +0 -2
  825. package/5120.min.js.LICENSE.txt +0 -1
  826. package/5171.min.js +0 -2
  827. package/5171.min.js.LICENSE.txt +0 -1
  828. package/5243.min.js +0 -2
  829. package/5243.min.js.LICENSE.txt +0 -1
  830. package/5245.min.js +0 -2
  831. package/5245.min.js.LICENSE.txt +0 -1
  832. package/5250.min.js +0 -2
  833. package/5250.min.js.LICENSE.txt +0 -1
  834. package/5274.min.js +0 -2
  835. package/5274.min.js.LICENSE.txt +0 -1
  836. package/5308.min.js +0 -2
  837. package/5308.min.js.LICENSE.txt +0 -1
  838. package/5329.min.js +0 -2
  839. package/5329.min.js.LICENSE.txt +0 -1
  840. package/533.min.js +0 -2
  841. package/533.min.js.LICENSE.txt +0 -1
  842. package/5337.min.js +0 -2
  843. package/5337.min.js.LICENSE.txt +0 -1
  844. package/5437.min.js +0 -2
  845. package/5437.min.js.LICENSE.txt +0 -1
  846. package/5444.min.js +0 -2
  847. package/5444.min.js.LICENSE.txt +0 -1
  848. package/548.min.js +0 -2
  849. package/548.min.js.LICENSE.txt +0 -1
  850. package/5523.min.js +0 -2
  851. package/5523.min.js.LICENSE.txt +0 -1
  852. package/5534.min.js +0 -2
  853. package/5534.min.js.LICENSE.txt +0 -1
  854. package/5537.min.js +0 -2
  855. package/5537.min.js.LICENSE.txt +0 -1
  856. package/5582.min.js +0 -2
  857. package/5582.min.js.LICENSE.txt +0 -1
  858. package/560.min.js +0 -2
  859. package/560.min.js.LICENSE.txt +0 -1
  860. package/5647.min.js +0 -2
  861. package/5647.min.js.LICENSE.txt +0 -1
  862. package/5683.min.js +0 -2
  863. package/5683.min.js.LICENSE.txt +0 -1
  864. package/571.min.js +0 -2
  865. package/571.min.js.LICENSE.txt +0 -1
  866. package/5715.min.js +0 -2
  867. package/5715.min.js.LICENSE.txt +0 -1
  868. package/5742.min.js +0 -2
  869. package/5742.min.js.LICENSE.txt +0 -1
  870. package/5754.min.js +0 -2
  871. package/5754.min.js.LICENSE.txt +0 -1
  872. package/5819.min.js +0 -2
  873. package/5819.min.js.LICENSE.txt +0 -1
  874. package/5841.min.js +0 -2
  875. package/5841.min.js.LICENSE.txt +0 -1
  876. package/5852.min.js +0 -2
  877. package/5852.min.js.LICENSE.txt +0 -1
  878. package/599.min.js +0 -2
  879. package/599.min.js.LICENSE.txt +0 -1
  880. package/6004.min.js +0 -2
  881. package/6004.min.js.LICENSE.txt +0 -1
  882. package/6067.min.js +0 -2
  883. package/6067.min.js.LICENSE.txt +0 -1
  884. package/6072.min.js +0 -2
  885. package/6072.min.js.LICENSE.txt +0 -1
  886. package/6132.min.js +0 -2
  887. package/6132.min.js.LICENSE.txt +0 -1
  888. package/6152.min.js +0 -2
  889. package/6152.min.js.LICENSE.txt +0 -1
  890. package/6540.min.js +0 -2
  891. package/6540.min.js.LICENSE.txt +0 -1
  892. package/655.min.js +0 -2
  893. package/655.min.js.LICENSE.txt +0 -1
  894. package/6551.min.js +0 -2
  895. package/6551.min.js.LICENSE.txt +0 -1
  896. package/6634.min.js +0 -2
  897. package/6634.min.js.LICENSE.txt +0 -1
  898. package/675.min.js +0 -2
  899. package/675.min.js.LICENSE.txt +0 -1
  900. package/6763.min.js +0 -2
  901. package/6763.min.js.LICENSE.txt +0 -1
  902. package/6772.min.js +0 -2
  903. package/6772.min.js.LICENSE.txt +0 -1
  904. package/6803.min.js +0 -2
  905. package/6803.min.js.LICENSE.txt +0 -1
  906. package/69.min.js +0 -2
  907. package/69.min.js.LICENSE.txt +0 -1
  908. package/7002.min.js +0 -2
  909. package/7002.min.js.LICENSE.txt +0 -1
  910. package/7031.min.js +0 -2
  911. package/7031.min.js.LICENSE.txt +0 -1
  912. package/7049.min.js +0 -2
  913. package/7049.min.js.LICENSE.txt +0 -1
  914. package/7077.min.js +0 -2
  915. package/7077.min.js.LICENSE.txt +0 -1
  916. package/7103.min.js +0 -2
  917. package/7103.min.js.LICENSE.txt +0 -1
  918. package/7108.min.js +0 -2
  919. package/7108.min.js.LICENSE.txt +0 -1
  920. package/7139.min.js +0 -2
  921. package/7139.min.js.LICENSE.txt +0 -1
  922. package/7331.min.js +0 -2
  923. package/7331.min.js.LICENSE.txt +0 -1
  924. package/7441.min.js +0 -2
  925. package/7441.min.js.LICENSE.txt +0 -1
  926. package/7500.min.js +0 -2
  927. package/7500.min.js.LICENSE.txt +0 -1
  928. package/7517.min.js +0 -2
  929. package/7517.min.js.LICENSE.txt +0 -1
  930. package/7687.min.js +0 -2
  931. package/7687.min.js.LICENSE.txt +0 -1
  932. package/7697.min.js +0 -2
  933. package/7697.min.js.LICENSE.txt +0 -1
  934. package/7704.min.js +0 -2
  935. package/7704.min.js.LICENSE.txt +0 -1
  936. package/7725.min.js +0 -2
  937. package/7725.min.js.LICENSE.txt +0 -1
  938. package/7757.min.js +0 -2
  939. package/7757.min.js.LICENSE.txt +0 -1
  940. package/7769.min.js +0 -2
  941. package/7769.min.js.LICENSE.txt +0 -1
  942. package/7794.min.js +0 -2
  943. package/7794.min.js.LICENSE.txt +0 -1
  944. package/7835.min.js +0 -2
  945. package/7835.min.js.LICENSE.txt +0 -1
  946. package/7859.min.js +0 -2
  947. package/7859.min.js.LICENSE.txt +0 -1
  948. package/7886.min.js +0 -2
  949. package/7886.min.js.LICENSE.txt +0 -1
  950. package/7890.min.js +0 -2
  951. package/7890.min.js.LICENSE.txt +0 -1
  952. package/7900.min.js +0 -2
  953. package/7900.min.js.LICENSE.txt +0 -1
  954. package/7919.min.js +0 -2
  955. package/7919.min.js.LICENSE.txt +0 -1
  956. package/8000.min.js +0 -2
  957. package/8000.min.js.LICENSE.txt +0 -1
  958. package/801.min.js +0 -2
  959. package/801.min.js.LICENSE.txt +0 -1
  960. package/8060.min.js +0 -2
  961. package/8060.min.js.LICENSE.txt +0 -1
  962. package/8088.min.js +0 -2
  963. package/8088.min.js.LICENSE.txt +0 -1
  964. package/8127.min.js +0 -2
  965. package/8127.min.js.LICENSE.txt +0 -1
  966. package/8158.min.js +0 -2
  967. package/8158.min.js.LICENSE.txt +0 -1
  968. package/8179.min.js +0 -2
  969. package/8179.min.js.LICENSE.txt +0 -1
  970. package/8346.min.js +0 -2
  971. package/8346.min.js.LICENSE.txt +0 -1
  972. package/8361.min.js +0 -2
  973. package/8361.min.js.LICENSE.txt +0 -1
  974. package/8445.min.js +0 -2
  975. package/8445.min.js.LICENSE.txt +0 -1
  976. package/861.min.js +0 -2
  977. package/861.min.js.LICENSE.txt +0 -1
  978. package/8638.min.js +0 -2
  979. package/8638.min.js.LICENSE.txt +0 -1
  980. package/8739.min.js +0 -2
  981. package/8739.min.js.LICENSE.txt +0 -1
  982. package/8852.min.js +0 -2
  983. package/8852.min.js.LICENSE.txt +0 -1
  984. package/8883.min.js +0 -2
  985. package/8883.min.js.LICENSE.txt +0 -1
  986. package/889.min.js +0 -2
  987. package/889.min.js.LICENSE.txt +0 -1
  988. package/9033.min.js +0 -2
  989. package/9033.min.js.LICENSE.txt +0 -1
  990. package/9062.min.js +0 -2
  991. package/9062.min.js.LICENSE.txt +0 -1
  992. package/9087.min.js +0 -2
  993. package/9087.min.js.LICENSE.txt +0 -1
  994. package/9121.min.js +0 -2
  995. package/9121.min.js.LICENSE.txt +0 -1
  996. package/9126.min.js +0 -2
  997. package/9126.min.js.LICENSE.txt +0 -1
  998. package/9133.min.js +0 -2
  999. package/9133.min.js.LICENSE.txt +0 -1
  1000. package/9251.min.js +0 -2
  1001. package/9251.min.js.LICENSE.txt +0 -1
  1002. package/9257.min.js +0 -2
  1003. package/9257.min.js.LICENSE.txt +0 -1
  1004. package/9331.min.js +0 -2
  1005. package/9331.min.js.LICENSE.txt +0 -1
  1006. package/9376.min.js +0 -2
  1007. package/9376.min.js.LICENSE.txt +0 -1
  1008. package/9392.min.js +0 -2
  1009. package/9392.min.js.LICENSE.txt +0 -1
  1010. package/9431.min.js +0 -2
  1011. package/9431.min.js.LICENSE.txt +0 -1
  1012. package/95.min.js +0 -2
  1013. package/95.min.js.LICENSE.txt +0 -1
  1014. package/952.min.js +0 -2
  1015. package/952.min.js.LICENSE.txt +0 -1
  1016. package/9530.min.js +0 -2
  1017. package/9530.min.js.LICENSE.txt +0 -1
  1018. package/9532.min.js +0 -2
  1019. package/9532.min.js.LICENSE.txt +0 -1
  1020. package/9588.min.js +0 -2
  1021. package/9588.min.js.LICENSE.txt +0 -1
  1022. package/9674.min.js +0 -2
  1023. package/9674.min.js.LICENSE.txt +0 -1
  1024. package/9803.min.js +0 -2
  1025. package/9803.min.js.LICENSE.txt +0 -1
  1026. package/9806.min.js +0 -2
  1027. package/9806.min.js.LICENSE.txt +0 -1
  1028. package/9836.min.js +0 -2
  1029. package/9836.min.js.LICENSE.txt +0 -1
  1030. package/9845.min.js +0 -2
  1031. package/9845.min.js.LICENSE.txt +0 -1
  1032. package/9921.min.js +0 -2
  1033. package/9921.min.js.LICENSE.txt +0 -1
  1034. package/9937.min.js +0 -2
  1035. package/9937.min.js.LICENSE.txt +0 -1
  1036. package/9979.min.js +0 -2
  1037. package/9979.min.js.LICENSE.txt +0 -1
  1038. package/engine_dist_browser_Core_Particle_js.js +0 -30
  1039. package/interactions_external_attract_dist_browser_Utils_js.js +0 -30
  1040. package/interactions_external_bounce_dist_browser_Utils_js.js +0 -30
  1041. package/interactions_particles_collisions_dist_browser_Absorb_js.js +0 -30
  1042. package/interactions_particles_collisions_dist_browser_Bounce_js.js +0 -30
  1043. package/interactions_particles_collisions_dist_browser_Destroy_js.js +0 -40
  1044. package/interactions_particles_links_dist_browser_CircleWarp_js.js +0 -30
  1045. package/move_base_dist_browser_Utils_js.js +0 -30
  1046. package/paths_curves_dist_browser_Curves_js.js +0 -30
  1047. package/plugins_polygonMask_dist_browser_utils_js.js +0 -30
  1048. package/shapes_arrow_dist_browser_Utils_js.js +0 -30
  1049. package/shapes_cards_dist_browser_Utils_js.js +0 -30
  1050. package/shapes_circle_dist_browser_Utils_js.js +0 -30
  1051. package/shapes_cog_dist_browser_Utils_js.js +0 -30
  1052. package/shapes_emoji_dist_browser_Utils_js.js +0 -30
  1053. package/shapes_heart_dist_browser_Utils_js.js +0 -30
  1054. package/shapes_line_dist_browser_Utils_js.js +0 -30
  1055. package/shapes_path_dist_browser_Utils_js.js +0 -30
  1056. package/shapes_polygon_dist_browser_Utils_js.js +0 -30
  1057. package/shapes_rounded-polygon_dist_browser_Utils_js.js +0 -30
  1058. package/shapes_rounded-rect_dist_browser_Utils_js.js +0 -30
  1059. package/shapes_spiral_dist_browser_Utils_js.js +0 -30
  1060. package/shapes_square_dist_browser_Utils_js.js +0 -30
  1061. package/shapes_star_dist_browser_Utils_js.js +0 -30
  1062. package/shapes_text_dist_browser_Utils_js.js +0 -30
  1063. package/updaters_gradient_dist_browser_Utils_js.js +0 -30
  1064. package/updaters_life_dist_browser_Utils_js.js +0 -30
  1065. package/updaters_outModes_dist_browser_BounceOutMode_js.js +0 -30
  1066. package/updaters_outModes_dist_browser_DestroyOutMode_js.js +0 -30
  1067. package/updaters_outModes_dist_browser_NoneOutMode_js.js +0 -30
  1068. package/updaters_outModes_dist_browser_OutOutMode_js.js +0 -30
  1069. package/updaters_outModes_dist_browser_Utils_js.js +0 -30
  1070. package/updaters_roll_dist_browser_Utils_js.js +0 -30
  1071. package/updaters_wobble_dist_browser_Utils_js.js +0 -30
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.2.2
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.2.2
7
+ * v3.3.0
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 */ TrailDrawer: () => (/* binding */ TrailDrawer)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nconst double = 2,\n minTrailLength = 2,\n trailLengthOffset = 1,\n noItems = 0,\n half = 0.5,\n minWidth = -1,\n defaultLength = 10,\n defaultAlpha = 1;\nclass TrailDrawer {\n async draw(data) {\n const {\n context,\n radius,\n particle\n } = data,\n diameter = radius * double,\n pxRatio = particle.container.retina.pixelRatio,\n currentPos = particle.getPosition();\n if (!particle.trail || !particle.trailLength) {\n return;\n }\n const pathLength = particle.trailLength + radius;\n particle.trail.push({\n color: context.fillStyle ?? context.strokeStyle,\n position: {\n x: currentPos.x,\n y: currentPos.y\n }\n });\n if (particle.trail.length < minTrailLength) {\n return;\n }\n while (particle.trail.length > pathLength) {\n particle.trail.shift();\n }\n const trailLength = Math.min(particle.trail.length, pathLength),\n offsetPos = {\n x: currentPos.x,\n y: currentPos.y\n },\n canvasSize = {\n width: particle.container.canvas.size.width + diameter,\n height: particle.container.canvas.size.height + diameter\n };\n let lastPos = particle.trail[trailLength - trailLengthOffset].position;\n const defaultTransform = {\n a: 1,\n b: 0,\n c: 0,\n d: 1\n };\n context.setTransform(defaultTransform.a, defaultTransform.b, defaultTransform.c, defaultTransform.d, currentPos.x, currentPos.y);\n for (let i = trailLength; i > noItems; i--) {\n const step = particle.trail[i - trailLengthOffset],\n position = step.position;\n context.beginPath();\n context.moveTo(lastPos.x - offsetPos.x, lastPos.y - offsetPos.y);\n const warp = {\n x: (lastPos.x + canvasSize.width) % canvasSize.width,\n y: (lastPos.y + canvasSize.height) % canvasSize.height\n };\n if (Math.abs(lastPos.x - position.x) > canvasSize.width * half || Math.abs(lastPos.y - position.y) > canvasSize.height * half) {\n lastPos = position;\n continue;\n }\n context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width * half ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height * half ? warp.y : position.y) - offsetPos.y);\n const width = Math.max(i / trailLength * diameter, pxRatio, particle.trailMinWidth ?? minWidth),\n oldAlpha = context.globalAlpha;\n context.globalAlpha = particle.trailFade ? i / trailLength : defaultAlpha;\n context.lineWidth = particle.trailMaxWidth ? Math.min(width, particle.trailMaxWidth) : width;\n context.strokeStyle = step.color;\n context.stroke();\n context.globalAlpha = oldAlpha;\n lastPos = position;\n }\n const {\n transformData\n } = data;\n context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, currentPos.x, currentPos.y);\n await Promise.resolve();\n }\n async particleInit(container, particle) {\n particle.trail = [];\n const effectData = particle.effectData;\n particle.trailFade = effectData?.fade ?? true;\n particle.trailLength = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData?.length ?? defaultLength) * container.retina.pixelRatio;\n particle.trailMaxWidth = effectData?.maxWidth ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData.maxWidth) * container.retina.pixelRatio : undefined;\n particle.trailMinWidth = effectData?.minWidth ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData.minWidth) * container.retina.pixelRatio : undefined;\n await Promise.resolve();\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../effects/trail/dist/browser/TrailDrawer.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TrailDrawer: () => (/* binding */ TrailDrawer)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nconst double = 2,\n minTrailLength = 2,\n trailLengthOffset = 1,\n noItems = 0,\n half = 0.5,\n minWidth = -1,\n defaultLength = 10,\n defaultAlpha = 1;\nclass TrailDrawer {\n draw(data) {\n const {\n context,\n radius,\n particle\n } = data,\n diameter = radius * double,\n pxRatio = particle.container.retina.pixelRatio,\n currentPos = particle.getPosition();\n if (!particle.trail || !particle.trailLength) {\n return;\n }\n const pathLength = particle.trailLength + radius;\n particle.trail.push({\n color: context.fillStyle ?? context.strokeStyle,\n position: {\n x: currentPos.x,\n y: currentPos.y\n }\n });\n if (particle.trail.length < minTrailLength) {\n return;\n }\n while (particle.trail.length > pathLength) {\n particle.trail.shift();\n }\n const trailLength = Math.min(particle.trail.length, pathLength),\n offsetPos = {\n x: currentPos.x,\n y: currentPos.y\n },\n canvasSize = {\n width: particle.container.canvas.size.width + diameter,\n height: particle.container.canvas.size.height + diameter\n };\n let lastPos = particle.trail[trailLength - trailLengthOffset].position;\n const defaultTransform = {\n a: 1,\n b: 0,\n c: 0,\n d: 1\n };\n context.setTransform(defaultTransform.a, defaultTransform.b, defaultTransform.c, defaultTransform.d, currentPos.x, currentPos.y);\n for (let i = trailLength; i > noItems; i--) {\n const step = particle.trail[i - trailLengthOffset],\n position = step.position;\n context.beginPath();\n context.moveTo(lastPos.x - offsetPos.x, lastPos.y - offsetPos.y);\n const warp = {\n x: (lastPos.x + canvasSize.width) % canvasSize.width,\n y: (lastPos.y + canvasSize.height) % canvasSize.height\n };\n if (Math.abs(lastPos.x - position.x) > canvasSize.width * half || Math.abs(lastPos.y - position.y) > canvasSize.height * half) {\n lastPos = position;\n continue;\n }\n context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width * half ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height * half ? warp.y : position.y) - offsetPos.y);\n const width = Math.max(i / trailLength * diameter, pxRatio, particle.trailMinWidth ?? minWidth),\n oldAlpha = context.globalAlpha;\n context.globalAlpha = particle.trailFade ? i / trailLength : defaultAlpha;\n context.lineWidth = particle.trailMaxWidth ? Math.min(width, particle.trailMaxWidth) : width;\n context.strokeStyle = step.color;\n context.stroke();\n context.globalAlpha = oldAlpha;\n lastPos = position;\n }\n const {\n transformData\n } = data;\n context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, currentPos.x, currentPos.y);\n }\n particleInit(container, particle) {\n particle.trail = [];\n const effectData = particle.effectData;\n particle.trailFade = effectData?.fade ?? true;\n particle.trailLength = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData?.length ?? defaultLength) * container.retina.pixelRatio;\n particle.trailMaxWidth = effectData?.maxWidth ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData.maxWidth) * container.retina.pixelRatio : undefined;\n particle.trailMinWidth = effectData?.minWidth ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData.minWidth) * container.retina.pixelRatio : undefined;\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../effects/trail/dist/browser/TrailDrawer.js?");
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
- * v3.2.2
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.2.2
7
+ * v3.3.0
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_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Utils/ColorUtils.js */ \"../../engine/dist/browser/Utils/ColorUtils.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\n\n\n\nfunction setTransformValue(factor, newFactor, key) {\n const newValue = newFactor[key],\n defaultValue = 1;\n if (newValue !== undefined) {\n factor[key] = (factor[key] ?? defaultValue) * newValue;\n }\n}\nfunction setStyle(canvas, style, important = false) {\n if (!style) {\n return;\n }\n const element = canvas;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n for (const key in style) {\n const value = style[key];\n if (!value) {\n continue;\n }\n elementStyle.setProperty(key, value, important ? \"important\" : \"\");\n }\n}\nclass Canvas {\n constructor(container) {\n this.container = container;\n this._applyPostDrawUpdaters = particle => {\n for (const updater of this._postDrawUpdaters) {\n updater.afterDraw?.(particle);\n }\n };\n this._applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform) => {\n for (const updater of this._preDrawUpdaters) {\n if (updater.getColorStyles) {\n const {\n fill,\n stroke\n } = 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 this._applyResizePlugins = () => {\n for (const plugin of this._resizePlugins) {\n plugin.resize?.();\n }\n };\n this._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_2__.rangeColorToHsl)(plugin.particleFillColor(particle));\n }\n if (!sColor && plugin.particleStrokeColor) {\n sColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.rangeColorToHsl)(plugin.particleStrokeColor(particle));\n }\n if (fColor && sColor) {\n break;\n }\n }\n return [fColor, sColor];\n };\n this._initCover = async () => {\n const options = this.container.actualOptions,\n cover = options.backgroundMask.cover,\n color = cover.color;\n if (color) {\n const coverRgb = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.rangeColorToRgb)(color);\n if (coverRgb) {\n const coverColor = {\n ...coverRgb,\n a: cover.opacity\n };\n this._coverColorStyle = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromRgb)(coverColor, coverColor.a);\n }\n } else {\n await new Promise((resolve, reject) => {\n if (!cover.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._coverImage = {\n image: img,\n opacity: cover.opacity\n };\n resolve();\n });\n img.addEventListener(\"error\", evt => {\n reject(evt.error);\n });\n img.src = cover.image;\n });\n }\n };\n this._initStyle = () => {\n const element = this.element,\n options = this.container.actualOptions;\n if (!element) {\n return;\n }\n if (this._fullScreen) {\n this._originalStyle = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.deepExtend)({}, element.style);\n this._setFullScreenStyle();\n } else {\n this._resetOriginalStyle();\n }\n for (const key in options.style) {\n if (!key || !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 this._initTrail = async () => {\n const options = this.container.actualOptions,\n trail = options.particles.move.trail,\n trailFill = trail.fill;\n if (!trail.enable) {\n return;\n }\n const factorNumerator = 1,\n opacity = factorNumerator / trail.length;\n if (trailFill.color) {\n const fillColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.rangeColorToRgb)(trailFill.color);\n if (!fillColor) {\n return;\n }\n this._trailFill = {\n color: {\n ...fillColor\n },\n opacity\n };\n } else {\n await new Promise((resolve, reject) => {\n if (!trailFill.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._trailFill = {\n image: img,\n opacity\n };\n resolve();\n });\n img.addEventListener(\"error\", evt => {\n reject(evt.error);\n });\n img.src = trailFill.image;\n });\n }\n };\n this._paintBase = baseColor => {\n this.draw(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.paintBase)(ctx, this.size, baseColor));\n };\n this._paintImage = (image, opacity) => {\n this.draw(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.paintImage)(ctx, this.size, image, opacity));\n };\n this._repairStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n this._safeMutationObserver(observer => observer.disconnect());\n this._initStyle();\n this.initBackground();\n this._safeMutationObserver(observer => observer.observe(element, {\n attributes: true\n }));\n };\n this._resetOriginalStyle = () => {\n const element = this.element,\n originalStyle = this._originalStyle;\n if (!(element && originalStyle)) {\n return;\n }\n setStyle(element, originalStyle);\n };\n this._safeMutationObserver = callback => {\n if (!this._mutationObserver) {\n return;\n }\n callback(this._mutationObserver);\n };\n this._setFullScreenStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n const radix = 10;\n setStyle(element, {\n position: \"fixed\",\n zIndex: this.container.actualOptions.fullScreen.zIndex.toString(radix),\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\"\n }, true);\n };\n this.size = {\n height: 0,\n width: 0\n };\n this._context = null;\n this._generated = false;\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n get _fullScreen() {\n return this.container.actualOptions.fullScreen.enable;\n }\n clear() {\n const options = this.container.actualOptions,\n trail = options.particles.move.trail,\n trailFill = this._trailFill,\n minimumLength = 0;\n if (options.backgroundMask.enable) {\n this.paint();\n } else if (trail.enable && trail.length > minimumLength && trailFill) {\n if (trailFill.color) {\n this._paintBase((0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromRgb)(trailFill.color, trailFill.opacity));\n } else if (trailFill.image) {\n this._paintImage(trailFill.image, trailFill.opacity);\n }\n } else if (options.clear) {\n this.draw(ctx => {\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size);\n });\n }\n }\n destroy() {\n this.stop();\n if (this._generated) {\n const element = this.element;\n element?.remove();\n } else {\n this._resetOriginalStyle();\n }\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n draw(cb) {\n const ctx = this._context;\n if (!ctx) {\n return;\n }\n return cb(ctx);\n }\n drawAsync(cb) {\n const ctx = this._context;\n if (!ctx) {\n return Promise.resolve(undefined);\n }\n return cb(ctx);\n }\n async drawParticle(particle, delta) {\n if (particle.spawning || particle.destroyed) {\n return;\n }\n const radius = particle.getRadius(),\n minimumSize = 0;\n if (radius <= minimumSize) {\n return;\n }\n const pfColor = particle.getFillColor(),\n psColor = particle.getStrokeColor() ?? pfColor;\n let [fColor, sColor] = this._getPluginParticleColors(particle);\n if (!fColor) {\n fColor = pfColor;\n }\n if (!sColor) {\n sColor = psColor;\n }\n if (!fColor && !sColor) {\n return;\n }\n await this.drawAsync(async ctx => {\n const container = this.container,\n options = container.actualOptions,\n zIndexOptions = particle.options.zIndex,\n zIndexFactorOffset = 1,\n zIndexFactor = zIndexFactorOffset - particle.zIndexFactor,\n zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate,\n defaultOpacity = 1,\n opacity = particle.bubble.opacity ?? particle.opacity?.value ?? defaultOpacity,\n strokeOpacity = particle.strokeOpacity ?? opacity,\n zOpacity = opacity * zOpacityFactor,\n zStrokeOpacity = strokeOpacity * zOpacityFactor,\n transform = {},\n colorStyles = {\n fill: fColor ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromHsl)(fColor, zOpacity) : undefined\n };\n colorStyles.stroke = sColor ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromHsl)(sColor, zStrokeOpacity) : colorStyles.fill;\n this._applyPreDrawUpdaters(ctx, particle, radius, zOpacity, colorStyles, transform);\n await (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawParticle)({\n container,\n context: ctx,\n particle,\n delta,\n colorStyles,\n backgroundMask: options.backgroundMask.enable,\n composite: options.backgroundMask.composite,\n radius: radius * zIndexFactor ** zIndexOptions.sizeRate,\n opacity: zOpacity,\n shadow: particle.options.shadow,\n transform\n });\n this._applyPostDrawUpdaters(particle);\n });\n }\n async drawParticlePlugin(plugin, particle, delta) {\n await this.drawAsync(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawParticlePlugin)(ctx, plugin, particle, delta));\n }\n async drawPlugin(plugin, delta) {\n await this.drawAsync(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawPlugin)(ctx, plugin, delta));\n }\n async init() {\n this._safeMutationObserver(obs => obs.disconnect());\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 await this._initCover();\n try {\n await this._initTrail();\n } catch (e) {\n (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getLogger)().error(e);\n }\n this.initBackground();\n this._safeMutationObserver(obs => {\n if (!this.element) {\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 options = this.container.actualOptions,\n background = options.background,\n element = this.element;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n if (background.color) {\n const color = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.rangeColorToRgb)(background.color);\n elementStyle.backgroundColor = color ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromRgb)(color, 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 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 }\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 this._generated = canvas.dataset && _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.generatedAttribute in canvas.dataset ? canvas.dataset[_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.generatedAttribute] === \"true\" : this._generated;\n this.element = canvas;\n this.element.ariaHidden = \"true\";\n this._originalStyle = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.deepExtend)({}, this.element.style);\n this.size.height = canvas.offsetHeight;\n this.size.width = canvas.offsetWidth;\n this._context = this.element.getContext(\"2d\");\n this._safeMutationObserver(obs => {\n if (!this.element) {\n return;\n }\n obs.observe(this.element, {\n attributes: true\n });\n });\n this.container.retina.init();\n this.initBackground();\n }\n paint() {\n const options = this.container.actualOptions;\n this.draw(ctx => {\n if (options.backgroundMask.enable && options.backgroundMask.cover) {\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size);\n if (this._coverImage) {\n this._paintImage(this._coverImage.image, this._coverImage.opacity);\n } else if (this._coverColorStyle) {\n this._paintBase(this._coverColorStyle);\n } else {\n this._paintBase();\n }\n } else {\n this._paintBase();\n }\n });\n }\n resize() {\n if (!this.element) {\n return false;\n }\n const container = this.container,\n pxRatio = container.retina.pixelRatio,\n size = container.canvas.size,\n newSize = {\n width: this.element.offsetWidth * pxRatio,\n height: this.element.offsetHeight * pxRatio\n };\n if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {\n return false;\n }\n const oldSize = {\n ...size\n };\n this.element.width = size.width = this.element.offsetWidth * pxRatio;\n this.element.height = size.height = this.element.offsetHeight * pxRatio;\n if (this.container.started) {\n container.particles.setResizeFactor({\n width: size.width / oldSize.width,\n height: size.height / oldSize.height\n });\n }\n return true;\n }\n stop() {\n this._safeMutationObserver(obs => obs.disconnect());\n this._mutationObserver = undefined;\n this.draw(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size));\n }\n async windowResize() {\n if (!this.element || !this.resize()) {\n return;\n }\n const container = this.container,\n needsRefresh = container.updateActualOptions();\n await container.particles.setDensity();\n this._applyResizePlugins();\n if (needsRefresh) {\n await container.refresh();\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Canvas.js?");
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_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Utils/ColorUtils.js */ \"../../engine/dist/browser/Utils/ColorUtils.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\n\n\n\nfunction setTransformValue(factor, newFactor, key) {\n const newValue = newFactor[key],\n defaultValue = 1;\n if (newValue !== undefined) {\n factor[key] = (factor[key] ?? defaultValue) * newValue;\n }\n}\nfunction setStyle(canvas, style, important = false) {\n if (!style) {\n return;\n }\n const element = canvas;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n for (const key in style) {\n const value = style[key];\n if (!value) {\n continue;\n }\n elementStyle.setProperty(key, value, important ? \"important\" : \"\");\n }\n}\nclass Canvas {\n constructor(container) {\n this.container = container;\n this._applyPostDrawUpdaters = particle => {\n for (const updater of this._postDrawUpdaters) {\n updater.afterDraw?.(particle);\n }\n };\n this._applyPreDrawUpdaters = (ctx, particle, radius, zOpacity, colorStyles, transform) => {\n for (const updater of this._preDrawUpdaters) {\n if (updater.getColorStyles) {\n const {\n fill,\n stroke\n } = 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 this._applyResizePlugins = () => {\n for (const plugin of this._resizePlugins) {\n plugin.resize?.();\n }\n };\n this._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_2__.rangeColorToHsl)(plugin.particleFillColor(particle));\n }\n if (!sColor && plugin.particleStrokeColor) {\n sColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.rangeColorToHsl)(plugin.particleStrokeColor(particle));\n }\n if (fColor && sColor) {\n break;\n }\n }\n return [fColor, sColor];\n };\n this._initCover = async () => {\n const options = this.container.actualOptions,\n cover = options.backgroundMask.cover,\n color = cover.color;\n if (color) {\n const coverRgb = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.rangeColorToRgb)(color);\n if (coverRgb) {\n const coverColor = {\n ...coverRgb,\n a: cover.opacity\n };\n this._coverColorStyle = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromRgb)(coverColor, coverColor.a);\n }\n } else {\n await new Promise((resolve, reject) => {\n if (!cover.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._coverImage = {\n image: img,\n opacity: cover.opacity\n };\n resolve();\n });\n img.addEventListener(\"error\", evt => {\n reject(evt.error);\n });\n img.src = cover.image;\n });\n }\n };\n this._initStyle = () => {\n const element = this.element,\n options = this.container.actualOptions;\n if (!element) {\n return;\n }\n if (this._fullScreen) {\n this._originalStyle = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.deepExtend)({}, element.style);\n this._setFullScreenStyle();\n } else {\n this._resetOriginalStyle();\n }\n for (const key in options.style) {\n if (!key || !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 this._initTrail = async () => {\n const options = this.container.actualOptions,\n trail = options.particles.move.trail,\n trailFill = trail.fill;\n if (!trail.enable) {\n return;\n }\n const factorNumerator = 1,\n opacity = factorNumerator / trail.length;\n if (trailFill.color) {\n const fillColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.rangeColorToRgb)(trailFill.color);\n if (!fillColor) {\n return;\n }\n this._trailFill = {\n color: {\n ...fillColor\n },\n opacity\n };\n } else {\n await new Promise((resolve, reject) => {\n if (!trailFill.image) {\n return;\n }\n const img = document.createElement(\"img\");\n img.addEventListener(\"load\", () => {\n this._trailFill = {\n image: img,\n opacity\n };\n resolve();\n });\n img.addEventListener(\"error\", evt => {\n reject(evt.error);\n });\n img.src = trailFill.image;\n });\n }\n };\n this._paintBase = baseColor => {\n this.draw(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.paintBase)(ctx, this.size, baseColor));\n };\n this._paintImage = (image, opacity) => {\n this.draw(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.paintImage)(ctx, this.size, image, opacity));\n };\n this._repairStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n this._safeMutationObserver(observer => observer.disconnect());\n this._initStyle();\n this.initBackground();\n this._safeMutationObserver(observer => observer.observe(element, {\n attributes: true\n }));\n };\n this._resetOriginalStyle = () => {\n const element = this.element,\n originalStyle = this._originalStyle;\n if (!(element && originalStyle)) {\n return;\n }\n setStyle(element, originalStyle);\n };\n this._safeMutationObserver = callback => {\n if (!this._mutationObserver) {\n return;\n }\n callback(this._mutationObserver);\n };\n this._setFullScreenStyle = () => {\n const element = this.element;\n if (!element) {\n return;\n }\n const radix = 10;\n setStyle(element, {\n position: \"fixed\",\n zIndex: this.container.actualOptions.fullScreen.zIndex.toString(radix),\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\"\n }, true);\n };\n this.size = {\n height: 0,\n width: 0\n };\n this._context = null;\n this._generated = false;\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n get _fullScreen() {\n return this.container.actualOptions.fullScreen.enable;\n }\n clear() {\n const options = this.container.actualOptions,\n trail = options.particles.move.trail,\n trailFill = this._trailFill,\n minimumLength = 0;\n if (options.backgroundMask.enable) {\n this.paint();\n } else if (trail.enable && trail.length > minimumLength && trailFill) {\n if (trailFill.color) {\n this._paintBase((0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromRgb)(trailFill.color, trailFill.opacity));\n } else if (trailFill.image) {\n this._paintImage(trailFill.image, trailFill.opacity);\n }\n } else if (options.clear) {\n this.draw(ctx => {\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size);\n });\n }\n }\n destroy() {\n this.stop();\n if (this._generated) {\n const element = this.element;\n element?.remove();\n } else {\n this._resetOriginalStyle();\n }\n this._preDrawUpdaters = [];\n this._postDrawUpdaters = [];\n this._resizePlugins = [];\n this._colorPlugins = [];\n }\n draw(cb) {\n const ctx = this._context;\n if (!ctx) {\n return;\n }\n return cb(ctx);\n }\n drawAsync(cb) {\n const ctx = this._context;\n if (!ctx) {\n return undefined;\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 minimumSize = 0;\n if (radius <= minimumSize) {\n return;\n }\n const pfColor = particle.getFillColor(),\n psColor = particle.getStrokeColor() ?? pfColor;\n let [fColor, sColor] = this._getPluginParticleColors(particle);\n if (!fColor) {\n fColor = pfColor;\n }\n if (!sColor) {\n sColor = psColor;\n }\n if (!fColor && !sColor) {\n return;\n }\n this.draw(ctx => {\n const container = this.container,\n options = container.actualOptions,\n zIndexOptions = particle.options.zIndex,\n zIndexFactorOffset = 1,\n zIndexFactor = zIndexFactorOffset - particle.zIndexFactor,\n zOpacityFactor = zIndexFactor ** zIndexOptions.opacityRate,\n defaultOpacity = 1,\n opacity = particle.bubble.opacity ?? particle.opacity?.value ?? defaultOpacity,\n strokeOpacity = particle.strokeOpacity ?? opacity,\n zOpacity = opacity * zOpacityFactor,\n zStrokeOpacity = strokeOpacity * zOpacityFactor,\n transform = {},\n colorStyles = {\n fill: fColor ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromHsl)(fColor, zOpacity) : undefined\n };\n colorStyles.stroke = sColor ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromHsl)(sColor, zStrokeOpacity) : colorStyles.fill;\n this._applyPreDrawUpdaters(ctx, particle, radius, zOpacity, colorStyles, transform);\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawParticle)({\n container,\n context: ctx,\n particle,\n delta,\n colorStyles,\n backgroundMask: options.backgroundMask.enable,\n composite: options.backgroundMask.composite,\n radius: radius * zIndexFactor ** zIndexOptions.sizeRate,\n opacity: zOpacity,\n shadow: particle.options.shadow,\n transform\n });\n this._applyPostDrawUpdaters(particle);\n });\n }\n drawParticlePlugin(plugin, particle, delta) {\n this.draw(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawParticlePlugin)(ctx, plugin, particle, delta));\n }\n drawPlugin(plugin, delta) {\n this.draw(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.drawPlugin)(ctx, plugin, delta));\n }\n async init() {\n this._safeMutationObserver(obs => obs.disconnect());\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 await this._initCover();\n try {\n await this._initTrail();\n } catch (e) {\n (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getLogger)().error(e);\n }\n this.initBackground();\n this._safeMutationObserver(obs => {\n if (!this.element) {\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 options = this.container.actualOptions,\n background = options.background,\n element = this.element;\n if (!element) {\n return;\n }\n const elementStyle = element.style;\n if (!elementStyle) {\n return;\n }\n if (background.color) {\n const color = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.rangeColorToRgb)(background.color);\n elementStyle.backgroundColor = color ? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_2__.getStyleFromRgb)(color, 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 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 }\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 this._generated = canvas.dataset && _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.generatedAttribute in canvas.dataset ? canvas.dataset[_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.generatedAttribute] === \"true\" : this._generated;\n this.element = canvas;\n this.element.ariaHidden = \"true\";\n this._originalStyle = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.deepExtend)({}, this.element.style);\n this.size.height = canvas.offsetHeight;\n this.size.width = canvas.offsetWidth;\n this._context = this.element.getContext(\"2d\");\n this._safeMutationObserver(obs => {\n if (!this.element) {\n return;\n }\n obs.observe(this.element, {\n attributes: true\n });\n });\n this.container.retina.init();\n this.initBackground();\n }\n paint() {\n const options = this.container.actualOptions;\n this.draw(ctx => {\n if (options.backgroundMask.enable && options.backgroundMask.cover) {\n (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size);\n if (this._coverImage) {\n this._paintImage(this._coverImage.image, this._coverImage.opacity);\n } else if (this._coverColorStyle) {\n this._paintBase(this._coverColorStyle);\n } else {\n this._paintBase();\n }\n } else {\n this._paintBase();\n }\n });\n }\n resize() {\n if (!this.element) {\n return false;\n }\n const container = this.container,\n pxRatio = container.retina.pixelRatio,\n size = container.canvas.size,\n newSize = {\n width: this.element.offsetWidth * pxRatio,\n height: this.element.offsetHeight * pxRatio\n };\n if (newSize.height === size.height && newSize.width === size.width && newSize.height === this.element.height && newSize.width === this.element.width) {\n return false;\n }\n const oldSize = {\n ...size\n };\n this.element.width = size.width = this.element.offsetWidth * pxRatio;\n this.element.height = size.height = this.element.offsetHeight * pxRatio;\n if (this.container.started) {\n container.particles.setResizeFactor({\n width: size.width / oldSize.width,\n height: size.height / oldSize.height\n });\n }\n return true;\n }\n stop() {\n this._safeMutationObserver(obs => obs.disconnect());\n this._mutationObserver = undefined;\n this.draw(ctx => (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_0__.clear)(ctx, this.size));\n }\n async windowResize() {\n if (!this.element || !this.resize()) {\n return;\n }\n const container = this.container,\n needsRefresh = container.updateActualOptions();\n container.particles.setDensity();\n this._applyResizePlugins();\n if (needsRefresh) {\n await container.refresh();\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Canvas.js?");
27
27
 
28
28
  /***/ }),
29
29
 
@@ -33,7 +33,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
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 */ Container: () => (/* binding */ Container)\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 _Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.js\");\n/* harmony import */ var _Canvas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Canvas.js */ \"../../engine/dist/browser/Core/Canvas.js\");\n/* harmony import */ var _Utils_EventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Utils/EventListeners.js */ \"../../engine/dist/browser/Core/Utils/EventListeners.js\");\n/* harmony import */ var _Options_Classes_Options_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Options/Classes/Options.js */ \"../../engine/dist/browser/Options/Classes/Options.js\");\n/* harmony import */ var _Particles_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Particles.js */ \"../../engine/dist/browser/Core/Particles.js\");\n/* harmony import */ var _Retina_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Retina.js */ \"../../engine/dist/browser/Core/Retina.js\");\n/* harmony import */ var _Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Utils/NumberUtils.js */ \"../../engine/dist/browser/Utils/NumberUtils.js\");\n/* harmony import */ var _Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Utils/OptionsUtils.js */ \"../../engine/dist/browser/Utils/OptionsUtils.js\");\n\n\n\n\n\n\n\n\n\nfunction guardCheck(container) {\n return container && !container.destroyed;\n}\nconst defaultFps = 60;\nfunction initDelta(value, fpsLimit = defaultFps, smooth = false) {\n return {\n value,\n factor: smooth ? defaultFps / fpsLimit : defaultFps * value / _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds\n };\n}\nfunction loadContainerOptions(engine, container, ...sourceOptionsArr) {\n const options = new _Options_Classes_Options_js__WEBPACK_IMPORTED_MODULE_4__.Options(engine, container);\n (0,_Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_8__.loadOptions)(options, ...sourceOptionsArr);\n return options;\n}\nclass Container {\n constructor(engine, id, sourceOptions) {\n this._intersectionManager = entries => {\n if (!guardCheck(this) || !this.actualOptions.pauseOnOutsideViewport) {\n return;\n }\n for (const entry of entries) {\n if (entry.target !== this.interactivity.element) {\n continue;\n }\n if (entry.isIntersecting) {\n void this.play();\n } else {\n this.pause();\n }\n }\n };\n this._nextFrame = async timestamp => {\n try {\n if (!this._smooth && this._lastFrameTime !== undefined && timestamp < this._lastFrameTime + _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.fpsLimit) {\n this.draw(false);\n return;\n }\n this._lastFrameTime ??= timestamp;\n const delta = initDelta(timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);\n this.addLifeTime(delta.value);\n this._lastFrameTime = timestamp;\n if (delta.value > _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds) {\n this.draw(false);\n return;\n }\n await this.particles.draw(delta);\n if (!this.alive()) {\n this.destroy();\n return;\n }\n if (this.animationStatus) {\n this.draw(false);\n }\n } catch (e) {\n (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getLogger)().error(`${_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.errorPrefix} in animation loop`, e);\n }\n };\n this._engine = engine;\n this.id = Symbol(id);\n this.fpsLimit = 120;\n this._smooth = false;\n this._delay = 0;\n this._duration = 0;\n this._lifeTime = 0;\n this._firstStart = true;\n this.started = false;\n this.destroyed = false;\n this._paused = true;\n this._lastFrameTime = 0;\n this.zLayers = 100;\n this.pageHidden = false;\n this._sourceOptions = sourceOptions;\n this._initialSourceOptions = sourceOptions;\n this.retina = new _Retina_js__WEBPACK_IMPORTED_MODULE_6__.Retina(this);\n this.canvas = new _Canvas_js__WEBPACK_IMPORTED_MODULE_2__.Canvas(this);\n this.particles = new _Particles_js__WEBPACK_IMPORTED_MODULE_5__.Particles(this._engine, this);\n this.pathGenerators = new Map();\n this.interactivity = {\n mouse: {\n clicking: false,\n inside: false\n }\n };\n this.plugins = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this);\n this._eventListeners = new _Utils_EventListeners_js__WEBPACK_IMPORTED_MODULE_3__.EventListeners(this);\n this._intersectionObserver = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.safeIntersectionObserver)(entries => this._intersectionManager(entries));\n this._engine.dispatchEvent(\"containerBuilt\", {\n container: this\n });\n }\n get animationStatus() {\n return !this._paused && !this.pageHidden && guardCheck(this);\n }\n get options() {\n return this._options;\n }\n get sourceOptions() {\n return this._sourceOptions;\n }\n addClickHandler(callback) {\n if (!guardCheck(this)) {\n return;\n }\n const el = this.interactivity.element;\n if (!el) {\n return;\n }\n const clickOrTouchHandler = (e, pos, radius) => {\n if (!guardCheck(this)) {\n return;\n }\n const pxRatio = this.retina.pixelRatio,\n posRetina = {\n x: pos.x * pxRatio,\n y: pos.y * pxRatio\n },\n particles = this.particles.quadTree.queryCircle(posRetina, radius * pxRatio);\n callback(e, particles);\n };\n const clickHandler = e => {\n if (!guardCheck(this)) {\n return;\n }\n const mouseEvent = e,\n pos = {\n x: mouseEvent.offsetX || mouseEvent.clientX,\n y: mouseEvent.offsetY || mouseEvent.clientY\n },\n radius = 1;\n clickOrTouchHandler(e, pos, radius);\n };\n const touchStartHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = true;\n touchMoved = false;\n };\n const touchMoveHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touchMoved = true;\n };\n const touchEndHandler = e => {\n if (!guardCheck(this)) {\n return;\n }\n if (touched && !touchMoved) {\n const touchEvent = e;\n const lengthOffset = 1;\n let lastTouch = touchEvent.touches[touchEvent.touches.length - lengthOffset];\n if (!lastTouch) {\n lastTouch = touchEvent.changedTouches[touchEvent.changedTouches.length - lengthOffset];\n if (!lastTouch) {\n return;\n }\n }\n const element = this.canvas.element,\n canvasRect = element ? element.getBoundingClientRect() : undefined,\n minCoordinate = 0,\n pos = {\n x: lastTouch.clientX - (canvasRect ? canvasRect.left : minCoordinate),\n y: lastTouch.clientY - (canvasRect ? canvasRect.top : minCoordinate)\n };\n clickOrTouchHandler(e, pos, Math.max(lastTouch.radiusX, lastTouch.radiusY));\n }\n touched = false;\n touchMoved = false;\n };\n const touchCancelHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = false;\n touchMoved = false;\n };\n let touched = false,\n touchMoved = false;\n el.addEventListener(\"click\", clickHandler);\n el.addEventListener(\"touchstart\", touchStartHandler);\n el.addEventListener(\"touchmove\", touchMoveHandler);\n el.addEventListener(\"touchend\", touchEndHandler);\n el.addEventListener(\"touchcancel\", touchCancelHandler);\n }\n addLifeTime(value) {\n this._lifeTime += value;\n }\n addPath(key, generator, override = false) {\n if (!guardCheck(this) || !override && this.pathGenerators.has(key)) {\n return false;\n }\n this.pathGenerators.set(key, generator);\n return true;\n }\n alive() {\n return !this._duration || this._lifeTime <= this._duration;\n }\n destroy() {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n this.particles.destroy();\n this.canvas.destroy();\n for (const [, effectDrawer] of this.effectDrawers) {\n effectDrawer.destroy?.(this);\n }\n for (const [, shapeDrawer] of this.shapeDrawers) {\n shapeDrawer.destroy?.(this);\n }\n for (const key of this.effectDrawers.keys()) {\n this.effectDrawers.delete(key);\n }\n for (const key of this.shapeDrawers.keys()) {\n this.shapeDrawers.delete(key);\n }\n this._engine.clearPlugins(this);\n this.destroyed = true;\n const mainArr = this._engine.dom(),\n idx = mainArr.findIndex(t => t === this),\n minIndex = 0;\n if (idx >= minIndex) {\n const deleteCount = 1;\n mainArr.splice(idx, deleteCount);\n }\n this._engine.dispatchEvent(\"containerDestroyed\", {\n container: this\n });\n }\n draw(force) {\n if (!guardCheck(this)) {\n return;\n }\n let refreshTime = force;\n const frame = async timestamp => {\n if (refreshTime) {\n this._lastFrameTime = undefined;\n refreshTime = false;\n }\n await this._nextFrame(timestamp);\n };\n this._drawAnimationFrame = requestAnimationFrame(timestamp => void frame(timestamp));\n }\n async export(type, options = {}) {\n for (const [, plugin] of this.plugins) {\n if (!plugin.export) {\n continue;\n }\n const res = await plugin.export(type, options);\n if (!res.supported) {\n continue;\n }\n return res.blob;\n }\n (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getLogger)().error(`${_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.errorPrefix} - Export plugin with type ${type} not found`);\n }\n handleClickMode(mode) {\n if (!guardCheck(this)) {\n return;\n }\n this.particles.handleClickMode(mode);\n for (const [, plugin] of this.plugins) {\n plugin.handleClickMode?.(mode);\n }\n }\n async init() {\n if (!guardCheck(this)) {\n return;\n }\n const effects = this._engine.getSupportedEffects();\n for (const type of effects) {\n const drawer = this._engine.getEffectDrawer(type);\n if (drawer) {\n this.effectDrawers.set(type, drawer);\n }\n }\n const shapes = this._engine.getSupportedShapes();\n for (const type of shapes) {\n const drawer = this._engine.getShapeDrawer(type);\n if (drawer) {\n this.shapeDrawers.set(type, drawer);\n }\n }\n await this.particles.initPlugins();\n this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n const availablePlugins = await this._engine.getAvailablePlugins(this);\n for (const [id, plugin] of availablePlugins) {\n this.plugins.set(id, plugin);\n }\n this.retina.init();\n await this.canvas.init();\n this.updateActualOptions();\n this.canvas.initBackground();\n this.canvas.resize();\n this.zLayers = this.actualOptions.zLayers;\n this._duration = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_7__.getRangeValue)(this.actualOptions.duration) * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds;\n this._delay = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_7__.getRangeValue)(this.actualOptions.delay) * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds;\n this._lifeTime = 0;\n const defaultFpsLimit = 120,\n minFpsLimit = 0;\n this.fpsLimit = this.actualOptions.fpsLimit > minFpsLimit ? this.actualOptions.fpsLimit : defaultFpsLimit;\n this._smooth = this.actualOptions.smooth;\n for (const [, drawer] of this.effectDrawers) {\n await drawer.init?.(this);\n }\n for (const [, drawer] of this.shapeDrawers) {\n await drawer.init?.(this);\n }\n for (const [, plugin] of this.plugins) {\n await plugin.init?.();\n }\n this._engine.dispatchEvent(\"containerInit\", {\n container: this\n });\n await this.particles.init();\n await this.particles.setDensity();\n for (const [, plugin] of this.plugins) {\n plugin.particlesSetup?.();\n }\n this._engine.dispatchEvent(\"particlesSetup\", {\n container: this\n });\n }\n async loadTheme(name) {\n if (!guardCheck(this)) {\n return;\n }\n this._currentTheme = name;\n await this.refresh();\n }\n pause() {\n if (!guardCheck(this)) {\n return;\n }\n if (this._drawAnimationFrame !== undefined) {\n cancelAnimationFrame(this._drawAnimationFrame);\n delete this._drawAnimationFrame;\n }\n if (this._paused) {\n return;\n }\n for (const [, plugin] of this.plugins) {\n plugin.pause?.();\n }\n if (!this.pageHidden) {\n this._paused = true;\n }\n this._engine.dispatchEvent(\"containerPaused\", {\n container: this\n });\n }\n play(force) {\n if (!guardCheck(this)) {\n return;\n }\n const needsUpdate = this._paused || force;\n if (this._firstStart && !this.actualOptions.autoPlay) {\n this._firstStart = false;\n return;\n }\n if (this._paused) {\n this._paused = false;\n }\n if (needsUpdate) {\n for (const [, plugin] of this.plugins) {\n if (plugin.play) {\n plugin.play();\n }\n }\n }\n this._engine.dispatchEvent(\"containerPlay\", {\n container: this\n });\n this.draw(needsUpdate ?? false);\n }\n async refresh() {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n return this.start();\n }\n async reset() {\n if (!guardCheck(this)) {\n return;\n }\n this._initialSourceOptions = undefined;\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n return this.refresh();\n }\n async start() {\n if (!guardCheck(this) || this.started) {\n return;\n }\n await this.init();\n this.started = true;\n await new Promise(resolve => {\n const start = async () => {\n this._eventListeners.addListeners();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.observe(this.interactivity.element);\n }\n for (const [, plugin] of this.plugins) {\n await plugin.start?.();\n }\n this._engine.dispatchEvent(\"containerStarted\", {\n container: this\n });\n this.play();\n resolve();\n };\n this._delayTimeout = setTimeout(() => void start(), this._delay);\n });\n }\n stop() {\n if (!guardCheck(this) || !this.started) {\n return;\n }\n if (this._delayTimeout) {\n clearTimeout(this._delayTimeout);\n delete this._delayTimeout;\n }\n this._firstStart = true;\n this.started = false;\n this._eventListeners.removeListeners();\n this.pause();\n this.particles.clear();\n this.canvas.stop();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.unobserve(this.interactivity.element);\n }\n for (const [, plugin] of this.plugins) {\n plugin.stop?.();\n }\n for (const key of this.plugins.keys()) {\n this.plugins.delete(key);\n }\n this._sourceOptions = this._options;\n this._engine.dispatchEvent(\"containerStopped\", {\n container: this\n });\n }\n updateActualOptions() {\n this.actualOptions.responsive = [];\n const newMaxWidth = this.actualOptions.setResponsive(this.canvas.size.width, this.retina.pixelRatio, this._options);\n this.actualOptions.setTheme(this._currentTheme);\n if (this._responsiveMaxWidth === newMaxWidth) {\n return false;\n }\n this._responsiveMaxWidth = newMaxWidth;\n return true;\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Container.js?");
36
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Container: () => (/* binding */ Container)\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 _Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.js\");\n/* harmony import */ var _Canvas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Canvas.js */ \"../../engine/dist/browser/Core/Canvas.js\");\n/* harmony import */ var _Utils_EventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Utils/EventListeners.js */ \"../../engine/dist/browser/Core/Utils/EventListeners.js\");\n/* harmony import */ var _Options_Classes_Options_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Options/Classes/Options.js */ \"../../engine/dist/browser/Options/Classes/Options.js\");\n/* harmony import */ var _Particles_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Particles.js */ \"../../engine/dist/browser/Core/Particles.js\");\n/* harmony import */ var _Retina_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Retina.js */ \"../../engine/dist/browser/Core/Retina.js\");\n/* harmony import */ var _Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Utils/NumberUtils.js */ \"../../engine/dist/browser/Utils/NumberUtils.js\");\n/* harmony import */ var _Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Utils/OptionsUtils.js */ \"../../engine/dist/browser/Utils/OptionsUtils.js\");\n\n\n\n\n\n\n\n\n\nfunction guardCheck(container) {\n return container && !container.destroyed;\n}\nconst defaultFps = 60;\nfunction initDelta(value, fpsLimit = defaultFps, smooth = false) {\n return {\n value,\n factor: smooth ? defaultFps / fpsLimit : defaultFps * value / _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds\n };\n}\nfunction loadContainerOptions(engine, container, ...sourceOptionsArr) {\n const options = new _Options_Classes_Options_js__WEBPACK_IMPORTED_MODULE_4__.Options(engine, container);\n (0,_Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_8__.loadOptions)(options, ...sourceOptionsArr);\n return options;\n}\nclass Container {\n constructor(engine, id, sourceOptions) {\n this._intersectionManager = entries => {\n if (!guardCheck(this) || !this.actualOptions.pauseOnOutsideViewport) {\n return;\n }\n for (const entry of entries) {\n if (entry.target !== this.interactivity.element) {\n continue;\n }\n if (entry.isIntersecting) {\n void this.play();\n } else {\n this.pause();\n }\n }\n };\n this._nextFrame = timestamp => {\n try {\n if (!this._smooth && this._lastFrameTime !== undefined && timestamp < this._lastFrameTime + _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.fpsLimit) {\n this.draw(false);\n return;\n }\n this._lastFrameTime ??= timestamp;\n const delta = initDelta(timestamp - this._lastFrameTime, this.fpsLimit, this._smooth);\n this.addLifeTime(delta.value);\n this._lastFrameTime = timestamp;\n if (delta.value > _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds) {\n this.draw(false);\n return;\n }\n this.particles.draw(delta);\n if (!this.alive()) {\n this.destroy();\n return;\n }\n if (this.animationStatus) {\n this.draw(false);\n }\n } catch (e) {\n (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getLogger)().error(`${_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.errorPrefix} in animation loop`, e);\n }\n };\n this._engine = engine;\n this.id = Symbol(id);\n this.fpsLimit = 120;\n this._smooth = false;\n this._delay = 0;\n this._duration = 0;\n this._lifeTime = 0;\n this._firstStart = true;\n this.started = false;\n this.destroyed = false;\n this._paused = true;\n this._lastFrameTime = 0;\n this.zLayers = 100;\n this.pageHidden = false;\n this._sourceOptions = sourceOptions;\n this._initialSourceOptions = sourceOptions;\n this.retina = new _Retina_js__WEBPACK_IMPORTED_MODULE_6__.Retina(this);\n this.canvas = new _Canvas_js__WEBPACK_IMPORTED_MODULE_2__.Canvas(this);\n this.particles = new _Particles_js__WEBPACK_IMPORTED_MODULE_5__.Particles(this._engine, this);\n this.pathGenerators = new Map();\n this.interactivity = {\n mouse: {\n clicking: false,\n inside: false\n }\n };\n this.plugins = new Map();\n this.effectDrawers = new Map();\n this.shapeDrawers = new Map();\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this);\n this._eventListeners = new _Utils_EventListeners_js__WEBPACK_IMPORTED_MODULE_3__.EventListeners(this);\n this._intersectionObserver = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.safeIntersectionObserver)(entries => this._intersectionManager(entries));\n this._engine.dispatchEvent(\"containerBuilt\", {\n container: this\n });\n }\n get animationStatus() {\n return !this._paused && !this.pageHidden && guardCheck(this);\n }\n get options() {\n return this._options;\n }\n get sourceOptions() {\n return this._sourceOptions;\n }\n addClickHandler(callback) {\n if (!guardCheck(this)) {\n return;\n }\n const el = this.interactivity.element;\n if (!el) {\n return;\n }\n const clickOrTouchHandler = (e, pos, radius) => {\n if (!guardCheck(this)) {\n return;\n }\n const pxRatio = this.retina.pixelRatio,\n posRetina = {\n x: pos.x * pxRatio,\n y: pos.y * pxRatio\n },\n particles = this.particles.quadTree.queryCircle(posRetina, radius * pxRatio);\n callback(e, particles);\n };\n const clickHandler = e => {\n if (!guardCheck(this)) {\n return;\n }\n const mouseEvent = e,\n pos = {\n x: mouseEvent.offsetX || mouseEvent.clientX,\n y: mouseEvent.offsetY || mouseEvent.clientY\n },\n radius = 1;\n clickOrTouchHandler(e, pos, radius);\n };\n const touchStartHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = true;\n touchMoved = false;\n };\n const touchMoveHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touchMoved = true;\n };\n const touchEndHandler = e => {\n if (!guardCheck(this)) {\n return;\n }\n if (touched && !touchMoved) {\n const touchEvent = e;\n const lengthOffset = 1;\n let lastTouch = touchEvent.touches[touchEvent.touches.length - lengthOffset];\n if (!lastTouch) {\n lastTouch = touchEvent.changedTouches[touchEvent.changedTouches.length - lengthOffset];\n if (!lastTouch) {\n return;\n }\n }\n const element = this.canvas.element,\n canvasRect = element ? element.getBoundingClientRect() : undefined,\n minCoordinate = 0,\n pos = {\n x: lastTouch.clientX - (canvasRect ? canvasRect.left : minCoordinate),\n y: lastTouch.clientY - (canvasRect ? canvasRect.top : minCoordinate)\n };\n clickOrTouchHandler(e, pos, Math.max(lastTouch.radiusX, lastTouch.radiusY));\n }\n touched = false;\n touchMoved = false;\n };\n const touchCancelHandler = () => {\n if (!guardCheck(this)) {\n return;\n }\n touched = false;\n touchMoved = false;\n };\n let touched = false,\n touchMoved = false;\n el.addEventListener(\"click\", clickHandler);\n el.addEventListener(\"touchstart\", touchStartHandler);\n el.addEventListener(\"touchmove\", touchMoveHandler);\n el.addEventListener(\"touchend\", touchEndHandler);\n el.addEventListener(\"touchcancel\", touchCancelHandler);\n }\n addLifeTime(value) {\n this._lifeTime += value;\n }\n addPath(key, generator, override = false) {\n if (!guardCheck(this) || !override && this.pathGenerators.has(key)) {\n return false;\n }\n this.pathGenerators.set(key, generator);\n return true;\n }\n alive() {\n return !this._duration || this._lifeTime <= this._duration;\n }\n destroy() {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n this.particles.destroy();\n this.canvas.destroy();\n for (const [, effectDrawer] of this.effectDrawers) {\n effectDrawer.destroy?.(this);\n }\n for (const [, shapeDrawer] of this.shapeDrawers) {\n shapeDrawer.destroy?.(this);\n }\n for (const key of this.effectDrawers.keys()) {\n this.effectDrawers.delete(key);\n }\n for (const key of this.shapeDrawers.keys()) {\n this.shapeDrawers.delete(key);\n }\n this._engine.clearPlugins(this);\n this.destroyed = true;\n const mainArr = this._engine.dom(),\n idx = mainArr.findIndex(t => t === this),\n minIndex = 0;\n if (idx >= minIndex) {\n const deleteCount = 1;\n mainArr.splice(idx, deleteCount);\n }\n this._engine.dispatchEvent(\"containerDestroyed\", {\n container: this\n });\n }\n draw(force) {\n if (!guardCheck(this)) {\n return;\n }\n let refreshTime = force;\n const frame = timestamp => {\n if (refreshTime) {\n this._lastFrameTime = undefined;\n refreshTime = false;\n }\n this._nextFrame(timestamp);\n };\n this._drawAnimationFrame = requestAnimationFrame(timestamp => frame(timestamp));\n }\n async export(type, options = {}) {\n for (const [, plugin] of this.plugins) {\n if (!plugin.export) {\n continue;\n }\n const res = await plugin.export(type, options);\n if (!res.supported) {\n continue;\n }\n return res.blob;\n }\n (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getLogger)().error(`${_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.errorPrefix} - Export plugin with type ${type} not found`);\n }\n handleClickMode(mode) {\n if (!guardCheck(this)) {\n return;\n }\n this.particles.handleClickMode(mode);\n for (const [, plugin] of this.plugins) {\n plugin.handleClickMode?.(mode);\n }\n }\n async init() {\n if (!guardCheck(this)) {\n return;\n }\n const effects = this._engine.getSupportedEffects();\n for (const type of effects) {\n const drawer = this._engine.getEffectDrawer(type);\n if (drawer) {\n this.effectDrawers.set(type, drawer);\n }\n }\n const shapes = this._engine.getSupportedShapes();\n for (const type of shapes) {\n const drawer = this._engine.getShapeDrawer(type);\n if (drawer) {\n this.shapeDrawers.set(type, drawer);\n }\n }\n await this.particles.initPlugins();\n this._options = loadContainerOptions(this._engine, this, this._initialSourceOptions, this.sourceOptions);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n const availablePlugins = await this._engine.getAvailablePlugins(this);\n for (const [id, plugin] of availablePlugins) {\n this.plugins.set(id, plugin);\n }\n this.retina.init();\n await this.canvas.init();\n this.updateActualOptions();\n this.canvas.initBackground();\n this.canvas.resize();\n this.zLayers = this.actualOptions.zLayers;\n this._duration = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_7__.getRangeValue)(this.actualOptions.duration) * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds;\n this._delay = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_7__.getRangeValue)(this.actualOptions.delay) * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds;\n this._lifeTime = 0;\n const defaultFpsLimit = 120,\n minFpsLimit = 0;\n this.fpsLimit = this.actualOptions.fpsLimit > minFpsLimit ? this.actualOptions.fpsLimit : defaultFpsLimit;\n this._smooth = this.actualOptions.smooth;\n for (const [, drawer] of this.effectDrawers) {\n await drawer.init?.(this);\n }\n for (const [, drawer] of this.shapeDrawers) {\n await drawer.init?.(this);\n }\n for (const [, plugin] of this.plugins) {\n await plugin.init?.();\n }\n this._engine.dispatchEvent(\"containerInit\", {\n container: this\n });\n await this.particles.init();\n this.particles.setDensity();\n for (const [, plugin] of this.plugins) {\n plugin.particlesSetup?.();\n }\n this._engine.dispatchEvent(\"particlesSetup\", {\n container: this\n });\n }\n async loadTheme(name) {\n if (!guardCheck(this)) {\n return;\n }\n this._currentTheme = name;\n await this.refresh();\n }\n pause() {\n if (!guardCheck(this)) {\n return;\n }\n if (this._drawAnimationFrame !== undefined) {\n cancelAnimationFrame(this._drawAnimationFrame);\n delete this._drawAnimationFrame;\n }\n if (this._paused) {\n return;\n }\n for (const [, plugin] of this.plugins) {\n plugin.pause?.();\n }\n if (!this.pageHidden) {\n this._paused = true;\n }\n this._engine.dispatchEvent(\"containerPaused\", {\n container: this\n });\n }\n play(force) {\n if (!guardCheck(this)) {\n return;\n }\n const needsUpdate = this._paused || force;\n if (this._firstStart && !this.actualOptions.autoPlay) {\n this._firstStart = false;\n return;\n }\n if (this._paused) {\n this._paused = false;\n }\n if (needsUpdate) {\n for (const [, plugin] of this.plugins) {\n if (plugin.play) {\n plugin.play();\n }\n }\n }\n this._engine.dispatchEvent(\"containerPlay\", {\n container: this\n });\n this.draw(needsUpdate ?? false);\n }\n async refresh() {\n if (!guardCheck(this)) {\n return;\n }\n this.stop();\n return this.start();\n }\n async reset() {\n if (!guardCheck(this)) {\n return;\n }\n this._initialSourceOptions = undefined;\n this._options = loadContainerOptions(this._engine, this);\n this.actualOptions = loadContainerOptions(this._engine, this, this._options);\n return this.refresh();\n }\n async start() {\n if (!guardCheck(this) || this.started) {\n return;\n }\n await this.init();\n this.started = true;\n await new Promise(resolve => {\n const start = async () => {\n this._eventListeners.addListeners();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.observe(this.interactivity.element);\n }\n for (const [, plugin] of this.plugins) {\n await plugin.start?.();\n }\n this._engine.dispatchEvent(\"containerStarted\", {\n container: this\n });\n this.play();\n resolve();\n };\n this._delayTimeout = setTimeout(() => void start(), this._delay);\n });\n }\n stop() {\n if (!guardCheck(this) || !this.started) {\n return;\n }\n if (this._delayTimeout) {\n clearTimeout(this._delayTimeout);\n delete this._delayTimeout;\n }\n this._firstStart = true;\n this.started = false;\n this._eventListeners.removeListeners();\n this.pause();\n this.particles.clear();\n this.canvas.stop();\n if (this.interactivity.element instanceof HTMLElement && this._intersectionObserver) {\n this._intersectionObserver.unobserve(this.interactivity.element);\n }\n for (const [, plugin] of this.plugins) {\n plugin.stop?.();\n }\n for (const key of this.plugins.keys()) {\n this.plugins.delete(key);\n }\n this._sourceOptions = this._options;\n this._engine.dispatchEvent(\"containerStopped\", {\n container: this\n });\n }\n updateActualOptions() {\n this.actualOptions.responsive = [];\n const newMaxWidth = this.actualOptions.setResponsive(this.canvas.size.width, this.retina.pixelRatio, this._options);\n this.actualOptions.setTheme(this._currentTheme);\n if (this._responsiveMaxWidth === newMaxWidth) {\n return false;\n }\n this._responsiveMaxWidth = newMaxWidth;\n return true;\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Container.js?");
37
+
38
+ /***/ }),
39
+
40
+ /***/ "../../engine/dist/browser/Core/Particle.js":
41
+ /*!**************************************************!*\
42
+ !*** ../../engine/dist/browser/Core/Particle.js ***!
43
+ \**************************************************/
44
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
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_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils/NumberUtils.js */ \"../../engine/dist/browser/Utils/NumberUtils.js\");\n/* harmony import */ var _Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.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_ColorUtils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Utils/ColorUtils.js */ \"../../engine/dist/browser/Utils/ColorUtils.js\");\n/* harmony import */ var _Options_Classes_Interactivity_Interactivity_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Options/Classes/Interactivity/Interactivity.js */ \"../../engine/dist/browser/Options/Classes/Interactivity/Interactivity.js\");\n/* harmony import */ var _Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Utils/CanvasUtils.js */ \"../../engine/dist/browser/Utils/CanvasUtils.js\");\n/* harmony import */ var _Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Utils/OptionsUtils.js */ \"../../engine/dist/browser/Utils/OptionsUtils.js\");\n\n\n\n\n\n\n\n\nconst defaultRetryCount = 0,\n double = 2,\n half = 0.5,\n squareExp = 2;\nfunction loadEffectData(effect, effectOptions, id, reduceDuplicates) {\n const effectData = effectOptions.options[effect];\n if (!effectData) {\n return;\n }\n return (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.deepExtend)({\n close: effectOptions.close,\n fill: effectOptions.fill\n }, (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.itemFromSingleOrMultiple)(effectData, id, reduceDuplicates));\n}\nfunction loadShapeData(shape, shapeOptions, id, reduceDuplicates) {\n const shapeData = shapeOptions.options[shape];\n if (!shapeData) {\n return;\n }\n return (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.deepExtend)({\n close: shapeOptions.close,\n fill: shapeOptions.fill\n }, (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.itemFromSingleOrMultiple)(shapeData, id, reduceDuplicates));\n}\nfunction fixOutMode(data) {\n if (!(0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.isInArray)(data.outMode, data.checkModes)) {\n return;\n }\n const diameter = data.radius * 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 constructor(engine, container) {\n this.container = container;\n this._calcPosition = (container, position, zIndex, tryCount = defaultRetryCount) => {\n for (const [, plugin] of container.plugins) {\n const pluginPos = plugin.particlePosition !== undefined ? plugin.particlePosition(position, this) : undefined;\n if (pluginPos) {\n return _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create(pluginPos.x, pluginPos.y, zIndex);\n }\n }\n const canvasSize = container.canvas.size,\n exactPosition = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.calcExactPositionOrRandomFromSize)({\n size: canvasSize,\n position: position\n }),\n pos = _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector3d.create(exactPosition.x, exactPosition.y, zIndex),\n radius = this.getRadius(),\n outModes = this.options.move.outModes,\n fixHorizontal = outMode => {\n fixOutMode({\n outMode,\n checkModes: [\"bounce\"],\n coord: pos.x,\n maxCoord: container.canvas.size.width,\n setCb: value => pos.x += value,\n radius\n });\n },\n fixVertical = outMode => {\n fixOutMode({\n outMode,\n checkModes: [\"bounce\"],\n coord: pos.y,\n maxCoord: container.canvas.size.height,\n setCb: value => pos.y += value,\n radius\n });\n };\n fixHorizontal(outModes.left ?? outModes.default);\n fixHorizontal(outModes.right ?? outModes.default);\n fixVertical(outModes.top ?? outModes.default);\n fixVertical(outModes.bottom ?? outModes.default);\n if (this._checkOverlap(pos, tryCount)) {\n const increment = 1;\n return this._calcPosition(container, undefined, zIndex, tryCount + increment);\n }\n return pos;\n };\n this._calculateVelocity = () => {\n const baseVelocity = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.getParticleBaseVelocity)(this.direction),\n res = baseVelocity.copy(),\n moveOptions = this.options.move;\n if (moveOptions.direction === \"inside\" || moveOptions.direction === \"outside\") {\n return res;\n }\n const rad = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.degToRad)((0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.getRangeValue)(moveOptions.angle.value)),\n radOffset = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.degToRad)((0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.getRangeValue)(moveOptions.angle.offset)),\n range = {\n left: radOffset - rad * half,\n right: radOffset + rad * half\n };\n if (!moveOptions.straight) {\n res.angle += (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.randomInRange)((0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.setRangeValue)(range.left, range.right));\n }\n if (moveOptions.random && typeof moveOptions.speed === \"number\") {\n res.length *= (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.getRandom)();\n }\n return res;\n };\n this._checkOverlap = (pos, tryCount = defaultRetryCount) => {\n const collisionsOptions = this.options.collisions,\n radius = this.getRadius();\n if (!collisionsOptions.enable) {\n return false;\n }\n const overlapOptions = collisionsOptions.overlap;\n if (overlapOptions.enable) {\n return false;\n }\n const retries = overlapOptions.retries,\n minRetries = 0;\n if (retries >= minRetries && tryCount > retries) {\n throw new Error(`${_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.errorPrefix} particle is overlapping and can't be placed`);\n }\n return !!this.container.particles.find(particle => (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.getDistance)(pos, particle.position) < radius + particle.getRadius());\n };\n this._getRollColor = color => {\n if (!color || !this.roll || !this.backColor && !this.roll.alter) {\n return color;\n }\n const rollFactor = 1,\n none = 0,\n backFactor = this.roll.horizontal && this.roll.vertical ? double * rollFactor : rollFactor,\n backSum = this.roll.horizontal ? Math.PI * half : none,\n rolled = Math.floor(((this.roll.angle ?? none) + backSum) / (Math.PI / backFactor)) % double;\n if (!rolled) {\n return color;\n }\n if (this.backColor) {\n return this.backColor;\n }\n if (this.roll.alter) {\n return (0,_Utils_CanvasUtils_js__WEBPACK_IMPORTED_MODULE_6__.alterHsl)(color, this.roll.alter.type, this.roll.alter.value);\n }\n return color;\n };\n this._initPosition = position => {\n const container = this.container,\n zIndexValue = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.getRangeValue)(this.options.zIndex.value),\n minZ = 0;\n this.position = this._calcPosition(container, position, (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.clamp)(zIndexValue, minZ, container.zLayers));\n this.initialPosition = this.position.copy();\n const canvasSize = container.canvas.size,\n defaultRadius = 0;\n this.moveCenter = {\n ...(0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.getPosition)(this.options.move.center, canvasSize),\n radius: this.options.move.center.radius ?? defaultRadius,\n mode: this.options.move.center.mode ?? \"percent\"\n };\n this.direction = (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.getParticleDirectionAngle)(this.options.move.direction, this.position, this.moveCenter);\n switch (this.options.move.direction) {\n case \"inside\":\n this.outType = \"inside\";\n break;\n case \"outside\":\n this.outType = \"outside\";\n break;\n }\n this.offset = _Utils_Vectors_js__WEBPACK_IMPORTED_MODULE_0__.Vector.origin;\n };\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,\n pathGenerator = this.pathGenerator,\n shapeDrawer = container.shapeDrawers.get(this.shape);\n shapeDrawer?.particleDestroy?.(this);\n for (const [, plugin] of container.plugins) {\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(\"particleDestroyed\", {\n container: this.container,\n data: {\n particle: this\n }\n });\n }\n draw(delta) {\n const container = this.container,\n canvas = container.canvas;\n for (const [, plugin] of container.plugins) {\n canvas.drawParticlePlugin(plugin, this, delta);\n }\n canvas.drawParticle(this, delta);\n }\n getFillColor() {\n return this._getRollColor(this.bubble.color ?? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_4__.getHslFromAnimation)(this.color));\n }\n getMass() {\n return this.getRadius() ** squareExp * Math.PI * half;\n }\n getPosition() {\n return {\n x: this.position.x + this.offset.x,\n y: this.position.y + this.offset.y,\n z: this.position.z\n };\n }\n getRadius() {\n return this.bubble.radius ?? this.size.value;\n }\n getStrokeColor() {\n return this._getRollColor(this.bubble.color ?? (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_4__.getHslFromAnimation)(this.strokeColor));\n }\n init(id, position, overrideOptions, group) {\n const container = this.container,\n engine = this._engine;\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.rotation = 0;\n this.misplaced = false;\n this.retina = {\n maxDistance: {}\n };\n this.outType = \"normal\";\n this.ignoresResizeRatio = true;\n const pxRatio = container.retina.pixelRatio,\n mainOptions = container.actualOptions,\n particlesOptions = (0,_Utils_OptionsUtils_js__WEBPACK_IMPORTED_MODULE_7__.loadParticlesOptions)(this._engine, container, mainOptions.particles),\n effectType = particlesOptions.effect.type,\n shapeType = particlesOptions.shape.type,\n {\n reduceDuplicates\n } = particlesOptions;\n this.effect = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.itemFromSingleOrMultiple)(effectType, this.id, reduceDuplicates);\n this.shape = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.itemFromSingleOrMultiple)(shapeType, this.id, reduceDuplicates);\n const effectOptions = particlesOptions.effect,\n shapeOptions = particlesOptions.shape;\n if (overrideOptions) {\n if (overrideOptions.effect?.type) {\n const overrideEffectType = overrideOptions.effect.type,\n effect = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.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,\n shape = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.itemFromSingleOrMultiple)(overrideShapeType, this.id, reduceDuplicates);\n if (shape) {\n this.shape = shape;\n shapeOptions.load(overrideOptions.shape);\n }\n }\n }\n this.effectData = loadEffectData(this.effect, effectOptions, this.id, reduceDuplicates);\n this.shapeData = loadShapeData(this.shape, shapeOptions, this.id, reduceDuplicates);\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 const interactivity = new _Options_Classes_Interactivity_Interactivity_js__WEBPACK_IMPORTED_MODULE_5__.Interactivity(engine, container);\n interactivity.load(container.actualOptions.interactivity);\n interactivity.load(particlesOptions.interactivity);\n this.interactivity = interactivity;\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_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.getRangeValue)(pathOptions.delay.value) * _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_3__.millisecondsToSeconds;\n if (pathOptions.generator) {\n this.pathGenerator = this._engine.getPathGenerator(pathOptions.generator);\n if (this.pathGenerator && container.addPath(pathOptions.generator, this.pathGenerator)) {\n this.pathGenerator.init(container);\n }\n }\n container.retina.initParticle(this);\n this.size = (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_2__.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 decayOffset = 1;\n this.moveDecay = decayOffset - (0,_Utils_NumberUtils_js__WEBPACK_IMPORTED_MODULE_1__.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 = container.effectDrawers.get(this.effect);\n if (!effectDrawer) {\n effectDrawer = this._engine.getEffectDrawer(this.effect);\n if (effectDrawer) {\n container.effectDrawers.set(this.effect, effectDrawer);\n }\n }\n if (effectDrawer?.loadEffect) {\n effectDrawer.loadEffect(this);\n }\n let shapeDrawer = container.shapeDrawers.get(this.shape);\n if (!shapeDrawer) {\n shapeDrawer = this._engine.getShapeDrawer(this.shape);\n if (shapeDrawer) {\n container.shapeDrawers.set(this.shape, shapeDrawer);\n }\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 this.shadowColor = (0,_Utils_ColorUtils_js__WEBPACK_IMPORTED_MODULE_4__.rangeColorToRgb)(this.options.shadow.color);\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.plugins) {\n plugin.particleCreated?.(this);\n }\n }\n isInsideCanvas() {\n const radius = this.getRadius(),\n canvasSize = this.container.canvas.size,\n position = this.position;\n return position.x >= -radius && position.y >= -radius && position.y <= canvasSize.height + radius && position.x <= canvasSize.width + radius;\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}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Particle.js?");
37
47
 
38
48
  /***/ }),
39
49
 
@@ -43,7 +53,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
43
53
  \***************************************************/
44
54
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
45
55
 
46
- 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_Utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.js\");\n/* harmony import */ var _Utils_InteractionManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Utils/InteractionManager.js */ \"../../engine/dist/browser/Core/Utils/InteractionManager.js\");\n/* harmony import */ var _Utils_Point_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Utils/Point.js */ \"../../engine/dist/browser/Core/Utils/Point.js\");\n/* harmony import */ var _Utils_QuadTree_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Utils/QuadTree.js */ \"../../engine/dist/browser/Core/Utils/QuadTree.js\");\n/* harmony import */ var _Utils_Ranges_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Utils/Ranges.js */ \"../../engine/dist/browser/Core/Utils/Ranges.js\");\n/* harmony import */ var _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Utils/Constants.js */ \"../../engine/dist/browser/Core/Utils/Constants.js\");\n\n\n\n\n\n\nconst qTreeCapacity = 4,\n squareExp = 2,\n defaultRemoveQuantity = 1;\nconst qTreeRectangle = canvasSize => {\n const {\n height,\n width\n } = canvasSize,\n posOffset = -0.25,\n sizeFactor = 1.5;\n return new _Utils_Ranges_js__WEBPACK_IMPORTED_MODULE_4__.Rectangle(posOffset * width, posOffset * height, sizeFactor * width, sizeFactor * height);\n};\nclass Particles {\n constructor(engine, container) {\n this._addToPool = (...particles) => {\n for (const particle of particles) {\n this._pool.push(particle);\n }\n };\n this._applyDensity = async (options, manualCount, group) => {\n const numberOptions = options.number;\n if (!options.number.density?.enable) {\n if (group === undefined) {\n this._limit = numberOptions.limit.value;\n } else if (numberOptions.limit) {\n this._groupLimits.set(group, numberOptions.limit.value);\n }\n return;\n }\n const densityFactor = this._initDensityFactor(numberOptions.density),\n optParticlesNumber = numberOptions.value,\n minLimit = 0,\n optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber,\n particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount,\n 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 await this.push(Math.abs(particlesNumber - particlesCount), undefined, options, group);\n } else if (particlesCount > particlesNumber) {\n this.removeQuantity(particlesCount - particlesNumber, group);\n }\n };\n this._initDensityFactor = densityOptions => {\n const container = this._container,\n defaultFactor = 1;\n if (!container.canvas.element || !densityOptions.enable) {\n return defaultFactor;\n }\n const canvas = container.canvas.element,\n pxRatio = container.retina.pixelRatio;\n return canvas.width * canvas.height / (densityOptions.height * densityOptions.width * pxRatio ** squareExp);\n };\n this._pushParticle = async (position, overrideOptions, group, initializer) => {\n try {\n let particle = this._pool.pop();\n if (!particle) {\n const {\n Particle\n } = await __webpack_require__.e(/*! import() */ \"engine_dist_browser_Core_Particle_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Particle.js */ \"../../engine/dist/browser/Core/Particle.js\"));\n particle = new Particle(this._engine, this._container);\n }\n await particle.init(this._nextId, position, overrideOptions, group);\n let canAdd = true;\n if (initializer) {\n canAdd = initializer(particle);\n }\n if (!canAdd) {\n return;\n }\n this._array.push(particle);\n this._zArray.push(particle);\n this._nextId++;\n this._engine.dispatchEvent(\"particleAdded\", {\n container: this._container,\n data: {\n particle\n }\n });\n return particle;\n } catch (e) {\n (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_0__.getLogger)().warning(`${_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_5__.errorPrefix} adding particle: ${e}`);\n }\n };\n this._removeParticle = (index, group, override) => {\n const particle = this._array[index];\n if (!particle || particle.group !== group) {\n return false;\n }\n const zIdx = this._zArray.indexOf(particle),\n deleteCount = 1;\n this._array.splice(index, deleteCount);\n this._zArray.splice(zIdx, deleteCount);\n particle.destroy(override);\n this._engine.dispatchEvent(\"particleRemoved\", {\n container: this._container,\n data: {\n particle\n }\n });\n this._addToPool(particle);\n return true;\n };\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._lastZIndex = 0;\n this._interactionManager = new _Utils_InteractionManager_js__WEBPACK_IMPORTED_MODULE_1__.InteractionManager(engine, container);\n this._pluginsInitialized = false;\n const canvasSize = container.canvas.size;\n this.quadTree = new _Utils_QuadTree_js__WEBPACK_IMPORTED_MODULE_3__.QuadTree(qTreeRectangle(canvasSize), qTreeCapacity);\n this.movers = [];\n this.updaters = [];\n }\n get count() {\n return this._array.length;\n }\n async addManualParticles() {\n const container = this._container,\n options = container.actualOptions;\n for (const particle of options.manualParticles) {\n await this.addParticle(particle.position ? (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_0__.getPosition)(particle.position, container.canvas.size) : undefined, particle.options);\n }\n }\n async addParticle(position, overrideOptions, group, initializer) {\n const limitOptions = this._container.actualOptions.particles.number.limit,\n limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit,\n currentCount = this.count,\n minLimit = 0;\n if (limit > minLimit) {\n if (limitOptions.mode === \"delete\") {\n const countOffset = 1,\n minCount = 0,\n countToRemove = currentCount + countOffset - limit;\n if (countToRemove > minCount) {\n this.removeQuantity(countToRemove);\n }\n } else if (limitOptions.mode === \"wait\") {\n if (currentCount >= limit) {\n return;\n }\n }\n }\n return await this._pushParticle(position, overrideOptions, group, initializer);\n }\n clear() {\n this._array = [];\n this._zArray = [];\n this._pluginsInitialized = false;\n }\n destroy() {\n this._array = [];\n this._zArray = [];\n this.movers = [];\n this.updaters = [];\n }\n async draw(delta) {\n const container = this._container,\n canvas = container.canvas;\n canvas.clear();\n await this.update(delta);\n for (const [, plugin] of container.plugins) {\n await canvas.drawPlugin(plugin, delta);\n }\n for (const p of this._zArray) {\n await p.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 handleClickMode(mode) {\n this._interactionManager.handleClickMode(mode);\n }\n async init() {\n const container = this._container,\n options = container.actualOptions;\n this._lastZIndex = 0;\n this._needsSort = false;\n await this.initPlugins();\n let handled = false;\n for (const [, plugin] of container.plugins) {\n if (plugin.particlesInitialization !== undefined) {\n handled = plugin.particlesInitialization();\n }\n if (handled) {\n break;\n }\n }\n await this.addManualParticles();\n if (!handled) {\n const particlesOptions = options.particles,\n groups = particlesOptions.groups;\n for (const group in groups) {\n const groupOptions = groups[group];\n for (let i = this.count, j = 0; j < groupOptions.number?.value && i < particlesOptions.number.value; i++, j++) {\n await this.addParticle(undefined, groupOptions, group);\n }\n }\n for (let i = this.count; i < particlesOptions.number.value; i++) {\n await this.addParticle();\n }\n }\n }\n async initPlugins() {\n if (this._pluginsInitialized) {\n return;\n }\n const container = this._container;\n this.movers = await this._engine.getMovers(container, true);\n this.updaters = await this._engine.getUpdaters(container, true);\n await this._interactionManager.init();\n for (const [, pathGenerator] of container.pathGenerators) {\n await pathGenerator.init(container);\n }\n }\n async push(nb, mouse, overrideOptions, group) {\n for (let i = 0; i < nb; i++) {\n await this.addParticle(mouse?.position, overrideOptions, group);\n }\n }\n async redraw() {\n this.clear();\n await this.init();\n await this.draw({\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 = defaultRemoveQuantity, group, override) {\n const minIndex = 0;\n if (index < 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 deleted++;\n }\n }\n }\n removeQuantity(quantity, group) {\n const defaultIndex = 0;\n this.removeAt(defaultIndex, quantity, group);\n }\n async setDensity() {\n const options = this._container.actualOptions,\n groups = options.particles.groups,\n manualCount = 0;\n for (const group in groups) {\n await this._applyDensity(groups[group], manualCount, group);\n }\n await this._applyDensity(options.particles, options.manualParticles.length);\n }\n setLastZIndex(zIndex) {\n this._lastZIndex = zIndex;\n this._needsSort = this._needsSort || this._lastZIndex < zIndex;\n }\n setResizeFactor(factor) {\n this._resizeFactor = factor;\n }\n async update(delta) {\n const container = this._container,\n particlesToDelete = new Set();\n this.quadTree = new _Utils_QuadTree_js__WEBPACK_IMPORTED_MODULE_3__.QuadTree(qTreeRectangle(container.canvas.size), qTreeCapacity);\n for (const [, pathGenerator] of container.pathGenerators) {\n pathGenerator.update();\n }\n for (const [, plugin] of container.plugins) {\n await 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 this._interactionManager.reset(particle);\n for (const [, plugin] of this._container.plugins) {\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 await mover.move(particle, delta);\n }\n }\n if (particle.destroyed) {\n particlesToDelete.add(particle);\n continue;\n }\n this.quadTree.insert(new _Utils_Point_js__WEBPACK_IMPORTED_MODULE_2__.Point(particle.getPosition(), 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(\"particleRemoved\", {\n container: this._container,\n data: {\n particle\n }\n });\n }\n this._addToPool(...particlesToDelete);\n }\n await this._interactionManager.externalInteract(delta);\n for (const particle of this._array) {\n for (const updater of this.updaters) {\n await updater.update(particle, delta);\n }\n if (!particle.destroyed && !particle.spawning) {\n await this._interactionManager.particlesInteract(particle, delta);\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 lengthOffset = 1;\n this._lastZIndex = zArray[zArray.length - lengthOffset].position.z;\n this._needsSort = false;\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Particles.js?");
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_Utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils/Utils.js */ \"../../engine/dist/browser/Utils/Utils.js\");\n/* harmony import */ var _Utils_InteractionManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Utils/InteractionManager.js */ \"../../engine/dist/browser/Core/Utils/InteractionManager.js\");\n/* harmony import */ var _Particle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Particle.js */ \"../../engine/dist/browser/Core/Particle.js\");\n/* harmony import */ var _Utils_Point_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Utils/Point.js */ \"../../engine/dist/browser/Core/Utils/Point.js\");\n/* harmony import */ var _Utils_QuadTree_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Utils/QuadTree.js */ \"../../engine/dist/browser/Core/Utils/QuadTree.js\");\n/* harmony import */ var _Utils_Ranges_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Utils/Ranges.js */ \"../../engine/dist/browser/Core/Utils/Ranges.js\");\n/* harmony import */ var _Utils_Constants_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Utils/Constants.js */ \"../../engine/dist/browser/Core/Utils/Constants.js\");\n\n\n\n\n\n\n\nconst qTreeCapacity = 4,\n squareExp = 2,\n defaultRemoveQuantity = 1;\nconst qTreeRectangle = canvasSize => {\n const {\n height,\n width\n } = canvasSize,\n posOffset = -0.25,\n sizeFactor = 1.5;\n return new _Utils_Ranges_js__WEBPACK_IMPORTED_MODULE_5__.Rectangle(posOffset * width, posOffset * height, sizeFactor * width, sizeFactor * height);\n};\nclass Particles {\n constructor(engine, container) {\n this._addToPool = (...particles) => {\n for (const particle of particles) {\n this._pool.push(particle);\n }\n };\n this._applyDensity = (options, manualCount, group) => {\n const numberOptions = options.number;\n if (!options.number.density?.enable) {\n if (group === undefined) {\n this._limit = numberOptions.limit.value;\n } else if (numberOptions.limit) {\n this._groupLimits.set(group, numberOptions.limit.value);\n }\n return;\n }\n const densityFactor = this._initDensityFactor(numberOptions.density),\n optParticlesNumber = numberOptions.value,\n minLimit = 0,\n optParticlesLimit = numberOptions.limit.value > minLimit ? numberOptions.limit.value : optParticlesNumber,\n particlesNumber = Math.min(optParticlesNumber, optParticlesLimit) * densityFactor + manualCount,\n 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 this._initDensityFactor = densityOptions => {\n const container = this._container,\n defaultFactor = 1;\n if (!container.canvas.element || !densityOptions.enable) {\n return defaultFactor;\n }\n const canvas = container.canvas.element,\n pxRatio = container.retina.pixelRatio;\n return canvas.width * canvas.height / (densityOptions.height * densityOptions.width * pxRatio ** squareExp);\n };\n this._pushParticle = (position, overrideOptions, group, initializer) => {\n try {\n let particle = this._pool.pop();\n if (!particle) {\n particle = new _Particle_js__WEBPACK_IMPORTED_MODULE_2__.Particle(this._engine, this._container);\n }\n particle.init(this._nextId, position, overrideOptions, group);\n let canAdd = true;\n if (initializer) {\n canAdd = initializer(particle);\n }\n if (!canAdd) {\n return;\n }\n this._array.push(particle);\n this._zArray.push(particle);\n this._nextId++;\n this._engine.dispatchEvent(\"particleAdded\", {\n container: this._container,\n data: {\n particle\n }\n });\n return particle;\n } catch (e) {\n (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_0__.getLogger)().warning(`${_Utils_Constants_js__WEBPACK_IMPORTED_MODULE_6__.errorPrefix} adding particle: ${e}`);\n }\n };\n this._removeParticle = (index, group, override) => {\n const particle = this._array[index];\n if (!particle || particle.group !== group) {\n return false;\n }\n const zIdx = this._zArray.indexOf(particle),\n deleteCount = 1;\n this._array.splice(index, deleteCount);\n this._zArray.splice(zIdx, deleteCount);\n particle.destroy(override);\n this._engine.dispatchEvent(\"particleRemoved\", {\n container: this._container,\n data: {\n particle\n }\n });\n this._addToPool(particle);\n return true;\n };\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._lastZIndex = 0;\n this._interactionManager = new _Utils_InteractionManager_js__WEBPACK_IMPORTED_MODULE_1__.InteractionManager(engine, container);\n this._pluginsInitialized = false;\n const canvasSize = container.canvas.size;\n this.quadTree = new _Utils_QuadTree_js__WEBPACK_IMPORTED_MODULE_4__.QuadTree(qTreeRectangle(canvasSize), qTreeCapacity);\n this.movers = [];\n this.updaters = [];\n }\n get count() {\n return this._array.length;\n }\n addManualParticles() {\n const container = this._container,\n options = container.actualOptions;\n for (const particle of options.manualParticles) {\n this.addParticle(particle.position ? (0,_Utils_Utils_js__WEBPACK_IMPORTED_MODULE_0__.getPosition)(particle.position, container.canvas.size) : undefined, particle.options);\n }\n }\n addParticle(position, overrideOptions, group, initializer) {\n const limitOptions = this._container.actualOptions.particles.number.limit,\n limit = group === undefined ? this._limit : this._groupLimits.get(group) ?? this._limit,\n currentCount = this.count,\n minLimit = 0;\n if (limit > minLimit) {\n if (limitOptions.mode === \"delete\") {\n const countOffset = 1,\n minCount = 0,\n countToRemove = currentCount + countOffset - limit;\n if (countToRemove > minCount) {\n this.removeQuantity(countToRemove);\n }\n } else if (limitOptions.mode === \"wait\") {\n if (currentCount >= limit) {\n return;\n }\n }\n }\n return this._pushParticle(position, overrideOptions, group, initializer);\n }\n clear() {\n this._array = [];\n this._zArray = [];\n this._pluginsInitialized = false;\n }\n destroy() {\n this._array = [];\n this._zArray = [];\n this.movers = [];\n this.updaters = [];\n }\n draw(delta) {\n const container = this._container,\n canvas = container.canvas;\n canvas.clear();\n this.update(delta);\n for (const [, plugin] of container.plugins) {\n canvas.drawPlugin(plugin, delta);\n }\n for (const p of this._zArray) {\n p.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 handleClickMode(mode) {\n this._interactionManager.handleClickMode(mode);\n }\n async init() {\n const container = this._container,\n options = container.actualOptions;\n this._lastZIndex = 0;\n this._needsSort = false;\n await this.initPlugins();\n let handled = false;\n for (const [, plugin] of container.plugins) {\n if (plugin.particlesInitialization !== undefined) {\n handled = plugin.particlesInitialization();\n }\n if (handled) {\n break;\n }\n }\n this.addManualParticles();\n if (!handled) {\n const particlesOptions = options.particles,\n groups = particlesOptions.groups;\n for (const group in groups) {\n const groupOptions = groups[group];\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 if (this._pluginsInitialized) {\n return;\n }\n const container = this._container;\n this.movers = await this._engine.getMovers(container, true);\n this.updaters = await this._engine.getUpdaters(container, true);\n await this._interactionManager.init();\n for (const [, pathGenerator] of container.pathGenerators) {\n pathGenerator.init(container);\n }\n }\n push(nb, mouse, overrideOptions, group) {\n for (let i = 0; i < nb; i++) {\n this.addParticle(mouse?.position, overrideOptions, group);\n }\n }\n async redraw() {\n this.clear();\n await this.init();\n this.draw({\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 = defaultRemoveQuantity, group, override) {\n const minIndex = 0;\n if (index < 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 deleted++;\n }\n }\n }\n removeQuantity(quantity, group) {\n const defaultIndex = 0;\n this.removeAt(defaultIndex, quantity, group);\n }\n setDensity() {\n const options = this._container.actualOptions,\n groups = options.particles.groups,\n manualCount = 0;\n for (const group in groups) {\n this._applyDensity(groups[group], manualCount, group);\n }\n this._applyDensity(options.particles, options.manualParticles.length);\n }\n setLastZIndex(zIndex) {\n this._lastZIndex = zIndex;\n this._needsSort = this._needsSort || this._lastZIndex < zIndex;\n }\n setResizeFactor(factor) {\n this._resizeFactor = factor;\n }\n update(delta) {\n const container = this._container,\n particlesToDelete = new Set();\n this.quadTree = new _Utils_QuadTree_js__WEBPACK_IMPORTED_MODULE_4__.QuadTree(qTreeRectangle(container.canvas.size), qTreeCapacity);\n for (const [, pathGenerator] of container.pathGenerators) {\n pathGenerator.update();\n }\n for (const [, plugin] of container.plugins) {\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 this._interactionManager.reset(particle);\n for (const [, plugin] of this._container.plugins) {\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.quadTree.insert(new _Utils_Point_js__WEBPACK_IMPORTED_MODULE_3__.Point(particle.getPosition(), 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(\"particleRemoved\", {\n container: this._container,\n data: {\n particle\n }\n });\n }\n this._addToPool(...particlesToDelete);\n }\n this._interactionManager.externalInteract(delta);\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 this._interactionManager.particlesInteract(particle, delta);\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 lengthOffset = 1;\n this._lastZIndex = zArray[zArray.length - lengthOffset].position.z;\n this._needsSort = false;\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Particles.js?");
47
57
 
48
58
  /***/ }),
49
59
 
@@ -73,7 +83,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
73
83
  \******************************************************************/
74
84
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
75
85
 
76
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ InteractionManager: () => (/* binding */ InteractionManager)\n/* harmony export */ });\nclass InteractionManager {\n constructor(engine, container) {\n this.container = container;\n this._engine = engine;\n this._interactors = [];\n this._externalInteractors = [];\n this._particleInteractors = [];\n }\n async externalInteract(delta) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n await interactor.interact(delta);\n }\n }\n }\n handleClickMode(mode) {\n for (const interactor of this._externalInteractors) {\n interactor.handleClickMode?.(mode);\n }\n }\n async init() {\n this._interactors = await this._engine.getInteractors(this.container, true);\n this._externalInteractors = [];\n this._particleInteractors = [];\n for (const interactor of this._interactors) {\n switch (interactor.type) {\n case \"external\":\n this._externalInteractors.push(interactor);\n break;\n case \"particles\":\n this._particleInteractors.push(interactor);\n break;\n }\n interactor.init();\n }\n }\n async particlesInteract(particle, delta) {\n for (const interactor of this._externalInteractors) {\n interactor.clear(particle, delta);\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n await interactor.interact(particle, delta);\n }\n }\n }\n reset(particle) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.reset(particle);\n }\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.reset(particle);\n }\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Utils/InteractionManager.js?");
86
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ InteractionManager: () => (/* binding */ InteractionManager)\n/* harmony export */ });\nclass InteractionManager {\n constructor(engine, container) {\n this.container = container;\n this._engine = engine;\n this._interactors = [];\n this._externalInteractors = [];\n this._particleInteractors = [];\n }\n externalInteract(delta) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.interact(delta);\n }\n }\n }\n handleClickMode(mode) {\n for (const interactor of this._externalInteractors) {\n interactor.handleClickMode?.(mode);\n }\n }\n async init() {\n this._interactors = await this._engine.getInteractors(this.container, true);\n this._externalInteractors = [];\n this._particleInteractors = [];\n for (const interactor of this._interactors) {\n switch (interactor.type) {\n case \"external\":\n this._externalInteractors.push(interactor);\n break;\n case \"particles\":\n this._particleInteractors.push(interactor);\n break;\n }\n interactor.init();\n }\n }\n particlesInteract(particle, delta) {\n for (const interactor of this._externalInteractors) {\n interactor.clear(particle, delta);\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.interact(particle, delta);\n }\n }\n }\n reset(particle) {\n for (const interactor of this._externalInteractors) {\n if (interactor.isEnabled()) {\n interactor.reset(particle);\n }\n }\n for (const interactor of this._particleInteractors) {\n if (interactor.isEnabled(particle)) {\n interactor.reset(particle);\n }\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../engine/dist/browser/Core/Utils/InteractionManager.js?");
77
87
 
78
88
  /***/ }),
79
89
 
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.2.2
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.2.2
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -23,7 +23,17 @@
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 */ Attractor: () => (/* binding */ Attractor)\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 _Options_Classes_Attract_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Options/Classes/Attract.js */ \"../../interactions/external/attract/dist/browser/Options/Classes/Attract.js\");\n\n\nconst attractMode = \"attract\";\nclass Attractor extends _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._engine = engine;\n if (!container.attract) {\n container.attract = {\n particles: []\n };\n }\n this.handleClickMode = mode => {\n const options = this.container.actualOptions,\n attract = options.interactivity.modes.attract;\n if (!attract || mode !== attractMode) {\n return;\n }\n if (!container.attract) {\n container.attract = {\n particles: []\n };\n }\n container.attract.clicking = true;\n container.attract.count = 0;\n for (const particle of container.attract.particles) {\n if (!this.isEnabled(particle)) {\n continue;\n }\n particle.velocity.setTo(particle.initialVelocity);\n }\n container.attract.particles = [];\n container.attract.finish = false;\n setTimeout(() => {\n if (container.destroyed) {\n return;\n }\n if (!container.attract) {\n container.attract = {\n particles: []\n };\n }\n container.attract.clicking = false;\n }, attract.duration * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds);\n };\n }\n clear() {}\n init() {\n const container = this.container,\n attract = container.actualOptions.interactivity.modes.attract;\n if (!attract) {\n return;\n }\n container.retina.attractModeDistance = attract.distance * container.retina.pixelRatio;\n }\n async interact() {\n const container = this.container,\n options = container.actualOptions,\n mouseMoveStatus = container.interactivity.status === _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.mouseMoveEvent,\n events = options.interactivity.events,\n {\n enable: hoverEnabled,\n mode: hoverMode\n } = events.onHover,\n {\n enable: clickEnabled,\n mode: clickMode\n } = events.onClick;\n if (mouseMoveStatus && hoverEnabled && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(attractMode, hoverMode)) {\n const {\n hoverAttract\n } = await __webpack_require__.e(/*! import() */ \"interactions_external_attract_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../interactions/external/attract/dist/browser/Utils.js\"));\n hoverAttract(this.container, p => this.isEnabled(p));\n } else if (clickEnabled && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(attractMode, clickMode)) {\n const {\n clickAttract\n } = await __webpack_require__.e(/*! import() */ \"interactions_external_attract_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../interactions/external/attract/dist/browser/Utils.js\"));\n clickAttract(this.container, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container,\n options = container.actualOptions,\n mouse = container.interactivity.mouse,\n events = (particle?.interactivity ?? options.interactivity).events;\n if ((!mouse.position || !events.onHover.enable) && (!mouse.clickPosition || !events.onClick.enable)) {\n return false;\n }\n const hoverMode = events.onHover.mode,\n clickMode = events.onClick.mode;\n return (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(attractMode, hoverMode) || (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(attractMode, clickMode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.attract) {\n options.attract = new _Options_Classes_Attract_js__WEBPACK_IMPORTED_MODULE_1__.Attract();\n }\n for (const source of sources) {\n options.attract.load(source?.attract);\n }\n }\n reset() {}\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../interactions/external/attract/dist/browser/Attractor.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Attractor: () => (/* binding */ Attractor)\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 _Utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Utils.js */ \"../../interactions/external/attract/dist/browser/Utils.js\");\n/* harmony import */ var _Options_Classes_Attract_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Options/Classes/Attract.js */ \"../../interactions/external/attract/dist/browser/Options/Classes/Attract.js\");\n\n\n\nconst attractMode = \"attract\";\nclass Attractor extends _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.ExternalInteractorBase {\n constructor(engine, container) {\n super(container);\n this._engine = engine;\n if (!container.attract) {\n container.attract = {\n particles: []\n };\n }\n this.handleClickMode = mode => {\n const options = this.container.actualOptions,\n attract = options.interactivity.modes.attract;\n if (!attract || mode !== attractMode) {\n return;\n }\n if (!container.attract) {\n container.attract = {\n particles: []\n };\n }\n container.attract.clicking = true;\n container.attract.count = 0;\n for (const particle of container.attract.particles) {\n if (!this.isEnabled(particle)) {\n continue;\n }\n particle.velocity.setTo(particle.initialVelocity);\n }\n container.attract.particles = [];\n container.attract.finish = false;\n setTimeout(() => {\n if (container.destroyed) {\n return;\n }\n if (!container.attract) {\n container.attract = {\n particles: []\n };\n }\n container.attract.clicking = false;\n }, attract.duration * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds);\n };\n }\n clear() {}\n init() {\n const container = this.container,\n attract = container.actualOptions.interactivity.modes.attract;\n if (!attract) {\n return;\n }\n container.retina.attractModeDistance = attract.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container,\n options = container.actualOptions,\n mouseMoveStatus = container.interactivity.status === _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.mouseMoveEvent,\n events = options.interactivity.events,\n {\n enable: hoverEnabled,\n mode: hoverMode\n } = events.onHover,\n {\n enable: clickEnabled,\n mode: clickMode\n } = events.onClick;\n if (mouseMoveStatus && hoverEnabled && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(attractMode, hoverMode)) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.hoverAttract)(this.container, p => this.isEnabled(p));\n } else if (clickEnabled && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(attractMode, clickMode)) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.clickAttract)(this.container, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container,\n options = container.actualOptions,\n mouse = container.interactivity.mouse,\n events = (particle?.interactivity ?? options.interactivity).events;\n if ((!mouse.position || !events.onHover.enable) && (!mouse.clickPosition || !events.onClick.enable)) {\n return false;\n }\n const hoverMode = events.onHover.mode,\n clickMode = events.onClick.mode;\n return (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(attractMode, hoverMode) || (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(attractMode, clickMode);\n }\n loadModeOptions(options, ...sources) {\n if (!options.attract) {\n options.attract = new _Options_Classes_Attract_js__WEBPACK_IMPORTED_MODULE_2__.Attract();\n }\n for (const source of sources) {\n options.attract.load(source?.attract);\n }\n }\n reset() {}\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../interactions/external/attract/dist/browser/Attractor.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../interactions/external/attract/dist/browser/Utils.js":
31
+ /*!*****************************************************************!*\
32
+ !*** ../../interactions/external/attract/dist/browser/Utils.js ***!
33
+ \*****************************************************************/
34
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
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,\n identity = 1,\n minRadius = 0;\nfunction processAttract(container, position, attractRadius, area, queryCb) {\n const attractOptions = container.actualOptions.interactivity.modes.attract;\n if (!attractOptions) {\n return;\n }\n const query = container.particles.quadTree.query(area, queryCb);\n for (const particle of query) {\n const {\n dx,\n dy,\n distance\n } = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getDistances)(particle.position, position),\n velocity = attractOptions.speed * attractOptions.factor,\n attractFactor = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.clamp)((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getEasing)(attractOptions.easing)(identity - distance / attractRadius) * velocity, minFactor, attractOptions.maxSpeed),\n 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(container, enabledCb) {\n if (!container.attract) {\n container.attract = {\n particles: []\n };\n }\n const {\n attract\n } = container;\n if (!attract.finish) {\n if (!attract.count) {\n attract.count = 0;\n }\n attract.count++;\n if (attract.count === container.particles.count) {\n attract.finish = true;\n }\n }\n if (attract.clicking) {\n const mousePos = container.interactivity.mouse.clickPosition,\n attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(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(container, enabledCb) {\n const mousePos = container.interactivity.mouse.position,\n attractRadius = container.retina.attractModeDistance;\n if (!attractRadius || attractRadius < minRadius || !mousePos) {\n return;\n }\n processAttract(container, mousePos, attractRadius, new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(mousePos.x, mousePos.y, attractRadius), p => enabledCb(p));\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../interactions/external/attract/dist/browser/Utils.js?");
27
37
 
28
38
  /***/ })
29
39
 
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.2.2
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.2.2
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -23,7 +23,17 @@
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 */ Bouncer: () => (/* binding */ Bouncer)\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 _Options_Classes_Bounce_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Options/Classes/Bounce.js */ \"../../interactions/external/bounce/dist/browser/Options/Classes/Bounce.js\");\n\n\nconst bounceMode = \"bounce\";\nclass Bouncer extends _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {}\n init() {\n const container = this.container,\n bounce = container.actualOptions.interactivity.modes.bounce;\n if (!bounce) {\n return;\n }\n container.retina.bounceModeDistance = bounce.distance * container.retina.pixelRatio;\n }\n async interact() {\n const container = this.container,\n options = container.actualOptions,\n events = options.interactivity.events,\n mouseMoveStatus = container.interactivity.status === _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.mouseMoveEvent,\n hoverEnabled = events.onHover.enable,\n hoverMode = events.onHover.mode,\n divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(bounceMode, hoverMode)) {\n const {\n mouseBounce\n } = await __webpack_require__.e(/*! import() */ \"interactions_external_bounce_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../interactions/external/bounce/dist/browser/Utils.js\"));\n mouseBounce(this.container, p => this.isEnabled(p));\n } else {\n const {\n divBounce\n } = await __webpack_require__.e(/*! import() */ \"interactions_external_bounce_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../interactions/external/bounce/dist/browser/Utils.js\"));\n divBounce(this.container, divs, bounceMode, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container,\n options = container.actualOptions,\n mouse = container.interactivity.mouse,\n events = (particle?.interactivity ?? options.interactivity).events,\n divs = events.onDiv;\n return !!mouse.position && events.onHover.enable && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(bounceMode, events.onHover.mode) || (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isDivModeEnabled)(bounceMode, divs);\n }\n loadModeOptions(options, ...sources) {\n if (!options.bounce) {\n options.bounce = new _Options_Classes_Bounce_js__WEBPACK_IMPORTED_MODULE_1__.Bounce();\n }\n for (const source of sources) {\n options.bounce.load(source?.bounce);\n }\n }\n reset() {}\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../interactions/external/bounce/dist/browser/Bouncer.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Bouncer: () => (/* binding */ Bouncer)\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 _Utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Utils.js */ \"../../interactions/external/bounce/dist/browser/Utils.js\");\n/* harmony import */ var _Options_Classes_Bounce_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Options/Classes/Bounce.js */ \"../../interactions/external/bounce/dist/browser/Options/Classes/Bounce.js\");\n\n\n\nconst bounceMode = \"bounce\";\nclass Bouncer extends _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.ExternalInteractorBase {\n constructor(container) {\n super(container);\n }\n clear() {}\n init() {\n const container = this.container,\n bounce = container.actualOptions.interactivity.modes.bounce;\n if (!bounce) {\n return;\n }\n container.retina.bounceModeDistance = bounce.distance * container.retina.pixelRatio;\n }\n interact() {\n const container = this.container,\n options = container.actualOptions,\n events = options.interactivity.events,\n mouseMoveStatus = container.interactivity.status === _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.mouseMoveEvent,\n hoverEnabled = events.onHover.enable,\n hoverMode = events.onHover.mode,\n divs = events.onDiv;\n if (mouseMoveStatus && hoverEnabled && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(bounceMode, hoverMode)) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.mouseBounce)(this.container, p => this.isEnabled(p));\n } else {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.divBounce)(this.container, divs, bounceMode, p => this.isEnabled(p));\n }\n }\n isEnabled(particle) {\n const container = this.container,\n options = container.actualOptions,\n mouse = container.interactivity.mouse,\n events = (particle?.interactivity ?? options.interactivity).events,\n divs = events.onDiv;\n return !!mouse.position && events.onHover.enable && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(bounceMode, events.onHover.mode) || (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isDivModeEnabled)(bounceMode, divs);\n }\n loadModeOptions(options, ...sources) {\n if (!options.bounce) {\n options.bounce = new _Options_Classes_Bounce_js__WEBPACK_IMPORTED_MODULE_2__.Bounce();\n }\n for (const source of sources) {\n options.bounce.load(source?.bounce);\n }\n }\n reset() {}\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../interactions/external/bounce/dist/browser/Bouncer.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../interactions/external/bounce/dist/browser/Utils.js":
31
+ /*!****************************************************************!*\
32
+ !*** ../../interactions/external/bounce/dist/browser/Utils.js ***!
33
+ \****************************************************************/
34
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
35
+
36
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ divBounce: () => (/* binding */ divBounce),\n/* harmony export */ mouseBounce: () => (/* binding */ mouseBounce)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nconst squareExp = 2,\n half = 0.5,\n halfPI = Math.PI * half,\n double = 2,\n toleranceFactor = 10,\n minRadius = 0;\nfunction processBounce(container, position, radius, area, enabledCb) {\n const query = container.particles.quadTree.query(area, enabledCb);\n for (const particle of query) {\n if (area instanceof _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.circleBounce)((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.circleBounceDataFromParticle)(particle), {\n position,\n radius,\n mass: radius ** squareExp * halfPI,\n velocity: _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Vector.origin,\n factor: _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Vector.origin\n });\n } else if (area instanceof _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Rectangle) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.rectBounce)(particle, (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.calculateBounds)(position, radius));\n }\n }\n}\nfunction singleSelectorBounce(container, selector, div, bounceCb) {\n const query = document.querySelectorAll(selector);\n if (!query.length) {\n return;\n }\n query.forEach(item => {\n const elem = item,\n pxRatio = container.retina.pixelRatio,\n pos = {\n x: (elem.offsetLeft + elem.offsetWidth * half) * pxRatio,\n y: (elem.offsetTop + elem.offsetHeight * half) * pxRatio\n },\n radius = elem.offsetWidth * half * pxRatio,\n tolerance = toleranceFactor * pxRatio,\n area = div.type === \"circle\" ? new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(pos.x, pos.y, radius + tolerance) : new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Rectangle(elem.offsetLeft * pxRatio - tolerance, elem.offsetTop * pxRatio - tolerance, elem.offsetWidth * pxRatio + tolerance * double, elem.offsetHeight * pxRatio + tolerance * double);\n bounceCb(pos, radius, area);\n });\n}\nfunction divBounce(container, divs, bounceMode, enabledCb) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.divModeExecute)(bounceMode, divs, (selector, div) => singleSelectorBounce(container, selector, div, (pos, radius, area) => processBounce(container, pos, radius, area, enabledCb)));\n}\nfunction mouseBounce(container, enabledCb) {\n const pxRatio = container.retina.pixelRatio,\n tolerance = toleranceFactor * pxRatio,\n mousePos = container.interactivity.mouse.position,\n radius = container.retina.bounceModeDistance;\n if (!radius || radius < minRadius || !mousePos) {\n return;\n }\n processBounce(container, mousePos, radius, new _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Circle(mousePos.x, mousePos.y, radius + tolerance), enabledCb);\n}\n\n//# sourceURL=webpack://@tsparticles/all/../../interactions/external/bounce/dist/browser/Utils.js?");
27
37
 
28
38
  /***/ })
29
39
 
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.2.2
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*