@tsparticles/confetti 3.2.1 → 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 (317) hide show
  1. package/2043.min.js +2 -0
  2. package/2043.min.js.LICENSE.txt +1 -0
  3. package/2112.min.js +2 -0
  4. package/2112.min.js.LICENSE.txt +1 -0
  5. package/2136.min.js +2 -0
  6. package/2136.min.js.LICENSE.txt +1 -0
  7. package/2284.min.js +2 -0
  8. package/2284.min.js.LICENSE.txt +1 -0
  9. package/2370.min.js +2 -0
  10. package/2370.min.js.LICENSE.txt +1 -0
  11. package/2497.min.js +2 -0
  12. package/2497.min.js.LICENSE.txt +1 -0
  13. package/286.min.js +2 -0
  14. package/286.min.js.LICENSE.txt +1 -0
  15. package/3237.min.js +2 -0
  16. package/3237.min.js.LICENSE.txt +1 -0
  17. package/335.min.js +2 -0
  18. package/335.min.js.LICENSE.txt +1 -0
  19. package/3416.min.js +2 -0
  20. package/3416.min.js.LICENSE.txt +1 -0
  21. package/344.min.js +2 -0
  22. package/344.min.js.LICENSE.txt +1 -0
  23. package/357.min.js +2 -0
  24. package/357.min.js.LICENSE.txt +1 -0
  25. package/3622.min.js +2 -0
  26. package/3622.min.js.LICENSE.txt +1 -0
  27. package/3632.min.js +2 -0
  28. package/3632.min.js.LICENSE.txt +1 -0
  29. package/3695.min.js +2 -0
  30. package/3695.min.js.LICENSE.txt +1 -0
  31. package/401.min.js +2 -0
  32. package/401.min.js.LICENSE.txt +1 -0
  33. package/4036.min.js +2 -0
  34. package/4036.min.js.LICENSE.txt +1 -0
  35. package/4154.min.js +2 -0
  36. package/4154.min.js.LICENSE.txt +1 -0
  37. package/4264.min.js +2 -0
  38. package/4264.min.js.LICENSE.txt +1 -0
  39. package/4302.min.js +2 -0
  40. package/4302.min.js.LICENSE.txt +1 -0
  41. package/439.min.js +2 -0
  42. package/439.min.js.LICENSE.txt +1 -0
  43. package/449.min.js +2 -0
  44. package/449.min.js.LICENSE.txt +1 -0
  45. package/4512.min.js +2 -0
  46. package/4512.min.js.LICENSE.txt +1 -0
  47. package/4924.min.js +2 -0
  48. package/4924.min.js.LICENSE.txt +1 -0
  49. package/5201.min.js +2 -0
  50. package/5201.min.js.LICENSE.txt +1 -0
  51. package/5369.min.js +2 -0
  52. package/5369.min.js.LICENSE.txt +1 -0
  53. package/561.min.js +2 -0
  54. package/561.min.js.LICENSE.txt +1 -0
  55. package/5775.min.js +2 -0
  56. package/5775.min.js.LICENSE.txt +1 -0
  57. package/5808.min.js +2 -0
  58. package/5808.min.js.LICENSE.txt +1 -0
  59. package/5814.min.js +2 -0
  60. package/5814.min.js.LICENSE.txt +1 -0
  61. package/6119.min.js +2 -0
  62. package/6119.min.js.LICENSE.txt +1 -0
  63. package/6493.min.js +2 -0
  64. package/6493.min.js.LICENSE.txt +1 -0
  65. package/6520.min.js +2 -0
  66. package/6520.min.js.LICENSE.txt +1 -0
  67. package/66.min.js +2 -0
  68. package/66.min.js.LICENSE.txt +1 -0
  69. package/6732.min.js +2 -0
  70. package/6732.min.js.LICENSE.txt +1 -0
  71. package/6735.min.js +2 -0
  72. package/6735.min.js.LICENSE.txt +1 -0
  73. package/6974.min.js +2 -0
  74. package/6974.min.js.LICENSE.txt +1 -0
  75. package/705.min.js +2 -0
  76. package/705.min.js.LICENSE.txt +1 -0
  77. package/7306.min.js +2 -0
  78. package/7306.min.js.LICENSE.txt +1 -0
  79. package/7528.min.js +2 -0
  80. package/7528.min.js.LICENSE.txt +1 -0
  81. package/7774.min.js +2 -0
  82. package/7774.min.js.LICENSE.txt +1 -0
  83. package/8125.min.js +2 -0
  84. package/8125.min.js.LICENSE.txt +1 -0
  85. package/{3733.min.js → 8155.min.js} +2 -2
  86. package/8155.min.js.LICENSE.txt +1 -0
  87. package/823.min.js +2 -0
  88. package/823.min.js.LICENSE.txt +1 -0
  89. package/8469.min.js +2 -0
  90. package/8469.min.js.LICENSE.txt +1 -0
  91. package/{4595.min.js → 8656.min.js} +2 -2
  92. package/8656.min.js.LICENSE.txt +1 -0
  93. package/8746.min.js +2 -0
  94. package/8746.min.js.LICENSE.txt +1 -0
  95. package/9151.min.js +2 -0
  96. package/9151.min.js.LICENSE.txt +1 -0
  97. package/94.min.js +2 -0
  98. package/94.min.js.LICENSE.txt +1 -0
  99. package/9487.min.js +2 -0
  100. package/9487.min.js.LICENSE.txt +1 -0
  101. package/{5742.min.js → 9581.min.js} +2 -2
  102. package/9581.min.js.LICENSE.txt +1 -0
  103. package/9946.min.js +2 -0
  104. package/9946.min.js.LICENSE.txt +1 -0
  105. package/basic_dist_browser_index_js.js +1 -1
  106. package/cjs/confetti.js +1 -24
  107. package/engine_dist_browser_Core_Container_js.js +17 -7
  108. package/move_base_dist_browser_BaseMover_js.js +12 -2
  109. package/move_base_dist_browser_index_js.js +1 -1
  110. package/package.json +17 -17
  111. package/plugins_emitters_dist_browser_EmitterInstance_js.js +2 -2
  112. package/plugins_emitters_dist_browser_EmittersPlugin_js.js +1 -1
  113. package/plugins_emitters_dist_browser_Emitters_js.js +2 -2
  114. package/plugins_emitters_dist_browser_ShapeManager_js.js +1 -1
  115. package/plugins_emitters_dist_browser_index_js.js +1 -1
  116. package/plugins_motion_dist_browser_MotionInstance_js.js +1 -1
  117. package/plugins_motion_dist_browser_MotionPlugin_js.js +1 -1
  118. package/plugins_motion_dist_browser_index_js.js +1 -1
  119. package/report.html +1 -1
  120. package/shapes_cards_dist_browser_ClubDrawer_js.js +12 -2
  121. package/shapes_cards_dist_browser_DiamondDrawer_js.js +12 -2
  122. package/shapes_cards_dist_browser_HeartDrawer_js.js +12 -2
  123. package/shapes_cards_dist_browser_SpadeDrawer_js.js +12 -2
  124. package/shapes_cards_dist_browser_index_js.js +1 -1
  125. package/shapes_circle_dist_browser_CircleDrawer_js.js +12 -2
  126. package/shapes_circle_dist_browser_index_js.js +1 -1
  127. package/shapes_emoji_dist_browser_EmojiDrawer_js.js +12 -2
  128. package/shapes_emoji_dist_browser_index_js.js +1 -1
  129. package/shapes_heart_dist_browser_HeartDrawer_js.js +12 -2
  130. package/shapes_heart_dist_browser_index_js.js +1 -1
  131. package/shapes_image_dist_browser_GifUtils_Utils_js.js +1 -1
  132. package/shapes_image_dist_browser_ImageDrawer_js.js +2 -2
  133. package/shapes_image_dist_browser_ImagePreloader_js.js +1 -1
  134. package/shapes_image_dist_browser_index_js.js +2 -2
  135. package/shapes_polygon_dist_browser_PolygonDrawer_js.js +12 -2
  136. package/shapes_polygon_dist_browser_TriangleDrawer_js.js +12 -2
  137. package/shapes_polygon_dist_browser_index_js.js +1 -1
  138. package/shapes_square_dist_browser_SquareDrawer_js.js +12 -2
  139. package/shapes_square_dist_browser_index_js.js +1 -1
  140. package/shapes_star_dist_browser_StarDrawer_js.js +12 -2
  141. package/shapes_star_dist_browser_index_js.js +1 -1
  142. package/tsparticles.confetti.bundle.js +33 -53
  143. package/tsparticles.confetti.bundle.min.js +1 -1
  144. package/tsparticles.confetti.bundle.min.js.LICENSE.txt +1 -1
  145. package/tsparticles.confetti.js +1 -1
  146. package/tsparticles.confetti.min.js +1 -1
  147. package/tsparticles.confetti.min.js.LICENSE.txt +1 -1
  148. package/updaters_color_dist_browser_ColorUpdater_js.js +2 -2
  149. package/updaters_color_dist_browser_index_js.js +1 -1
  150. package/updaters_life_dist_browser_LifeUpdater_js.js +12 -2
  151. package/updaters_life_dist_browser_index_js.js +1 -1
  152. package/updaters_opacity_dist_browser_OpacityUpdater_js.js +2 -2
  153. package/updaters_opacity_dist_browser_index_js.js +1 -1
  154. package/updaters_outModes_dist_browser_OutOfCanvasUpdater_js.js +52 -2
  155. package/updaters_outModes_dist_browser_index_js.js +1 -1
  156. package/updaters_roll_dist_browser_RollUpdater_js.js +12 -2
  157. package/updaters_roll_dist_browser_index_js.js +1 -1
  158. package/updaters_rotate_dist_browser_RotateUpdater_js.js +2 -2
  159. package/updaters_rotate_dist_browser_index_js.js +1 -1
  160. package/updaters_size_dist_browser_SizeUpdater_js.js +2 -2
  161. package/updaters_size_dist_browser_index_js.js +1 -1
  162. package/updaters_tilt_dist_browser_TiltUpdater_js.js +2 -2
  163. package/updaters_tilt_dist_browser_index_js.js +1 -1
  164. package/updaters_wobble_dist_browser_WobbleUpdater_js.js +12 -2
  165. package/updaters_wobble_dist_browser_index_js.js +1 -1
  166. package/1308.min.js +0 -2
  167. package/1308.min.js.LICENSE.txt +0 -1
  168. package/1472.min.js +0 -2
  169. package/1472.min.js.LICENSE.txt +0 -1
  170. package/1513.min.js +0 -2
  171. package/1513.min.js.LICENSE.txt +0 -1
  172. package/1705.min.js +0 -2
  173. package/1705.min.js.LICENSE.txt +0 -1
  174. package/1810.min.js +0 -2
  175. package/1810.min.js.LICENSE.txt +0 -1
  176. package/196.min.js +0 -2
  177. package/196.min.js.LICENSE.txt +0 -1
  178. package/2124.min.js +0 -2
  179. package/2124.min.js.LICENSE.txt +0 -1
  180. package/2173.min.js +0 -2
  181. package/2173.min.js.LICENSE.txt +0 -1
  182. package/2580.min.js +0 -2
  183. package/2580.min.js.LICENSE.txt +0 -1
  184. package/2720.min.js +0 -2
  185. package/2720.min.js.LICENSE.txt +0 -1
  186. package/2765.min.js +0 -2
  187. package/2765.min.js.LICENSE.txt +0 -1
  188. package/3141.min.js +0 -2
  189. package/3141.min.js.LICENSE.txt +0 -1
  190. package/3261.min.js +0 -2
  191. package/3261.min.js.LICENSE.txt +0 -1
  192. package/3473.min.js +0 -2
  193. package/3473.min.js.LICENSE.txt +0 -1
  194. package/3610.min.js +0 -2
  195. package/3610.min.js.LICENSE.txt +0 -1
  196. package/3629.min.js +0 -2
  197. package/3629.min.js.LICENSE.txt +0 -1
  198. package/3648.min.js +0 -2
  199. package/3648.min.js.LICENSE.txt +0 -1
  200. package/3733.min.js.LICENSE.txt +0 -1
  201. package/3862.min.js +0 -2
  202. package/3862.min.js.LICENSE.txt +0 -1
  203. package/3869.min.js +0 -2
  204. package/3869.min.js.LICENSE.txt +0 -1
  205. package/409.min.js +0 -2
  206. package/409.min.js.LICENSE.txt +0 -1
  207. package/4245.min.js +0 -2
  208. package/4245.min.js.LICENSE.txt +0 -1
  209. package/4328.min.js +0 -2
  210. package/4328.min.js.LICENSE.txt +0 -1
  211. package/4396.min.js +0 -2
  212. package/4396.min.js.LICENSE.txt +0 -1
  213. package/4547.min.js +0 -2
  214. package/4547.min.js.LICENSE.txt +0 -1
  215. package/4595.min.js.LICENSE.txt +0 -1
  216. package/4794.min.js +0 -2
  217. package/4794.min.js.LICENSE.txt +0 -1
  218. package/482.min.js +0 -2
  219. package/482.min.js.LICENSE.txt +0 -1
  220. package/4866.min.js +0 -2
  221. package/4866.min.js.LICENSE.txt +0 -1
  222. package/4973.min.js +0 -2
  223. package/4973.min.js.LICENSE.txt +0 -1
  224. package/4994.min.js +0 -2
  225. package/4994.min.js.LICENSE.txt +0 -1
  226. package/5092.min.js +0 -2
  227. package/5092.min.js.LICENSE.txt +0 -1
  228. package/5120.min.js +0 -2
  229. package/5120.min.js.LICENSE.txt +0 -1
  230. package/5245.min.js +0 -2
  231. package/5245.min.js.LICENSE.txt +0 -1
  232. package/5308.min.js +0 -2
  233. package/5308.min.js.LICENSE.txt +0 -1
  234. package/5329.min.js +0 -2
  235. package/5329.min.js.LICENSE.txt +0 -1
  236. package/5437.min.js +0 -2
  237. package/5437.min.js.LICENSE.txt +0 -1
  238. package/5444.min.js +0 -2
  239. package/5444.min.js.LICENSE.txt +0 -1
  240. package/5534.min.js +0 -2
  241. package/5534.min.js.LICENSE.txt +0 -1
  242. package/560.min.js +0 -2
  243. package/560.min.js.LICENSE.txt +0 -1
  244. package/5647.min.js +0 -2
  245. package/5647.min.js.LICENSE.txt +0 -1
  246. package/571.min.js +0 -2
  247. package/571.min.js.LICENSE.txt +0 -1
  248. package/5742.min.js.LICENSE.txt +0 -1
  249. package/6004.min.js +0 -2
  250. package/6004.min.js.LICENSE.txt +0 -1
  251. package/6132.min.js +0 -2
  252. package/6132.min.js.LICENSE.txt +0 -1
  253. package/6551.min.js +0 -2
  254. package/6551.min.js.LICENSE.txt +0 -1
  255. package/6772.min.js +0 -2
  256. package/6772.min.js.LICENSE.txt +0 -1
  257. package/7031.min.js +0 -2
  258. package/7031.min.js.LICENSE.txt +0 -1
  259. package/7049.min.js +0 -2
  260. package/7049.min.js.LICENSE.txt +0 -1
  261. package/7108.min.js +0 -2
  262. package/7108.min.js.LICENSE.txt +0 -1
  263. package/7331.min.js +0 -2
  264. package/7331.min.js.LICENSE.txt +0 -1
  265. package/7517.min.js +0 -2
  266. package/7517.min.js.LICENSE.txt +0 -1
  267. package/7687.min.js +0 -2
  268. package/7687.min.js.LICENSE.txt +0 -1
  269. package/7725.min.js +0 -2
  270. package/7725.min.js.LICENSE.txt +0 -1
  271. package/7757.min.js +0 -2
  272. package/7757.min.js.LICENSE.txt +0 -1
  273. package/7835.min.js +0 -2
  274. package/7835.min.js.LICENSE.txt +0 -1
  275. package/7859.min.js +0 -2
  276. package/7859.min.js.LICENSE.txt +0 -1
  277. package/7886.min.js +0 -2
  278. package/7886.min.js.LICENSE.txt +0 -1
  279. package/7890.min.js +0 -2
  280. package/7890.min.js.LICENSE.txt +0 -1
  281. package/8060.min.js +0 -2
  282. package/8060.min.js.LICENSE.txt +0 -1
  283. package/9062.min.js +0 -2
  284. package/9062.min.js.LICENSE.txt +0 -1
  285. package/9126.min.js +0 -2
  286. package/9126.min.js.LICENSE.txt +0 -1
  287. package/9331.min.js +0 -2
  288. package/9331.min.js.LICENSE.txt +0 -1
  289. package/9376.min.js +0 -2
  290. package/9376.min.js.LICENSE.txt +0 -1
  291. package/95.min.js +0 -2
  292. package/95.min.js.LICENSE.txt +0 -1
  293. package/9530.min.js +0 -2
  294. package/9530.min.js.LICENSE.txt +0 -1
  295. package/9532.min.js +0 -2
  296. package/9532.min.js.LICENSE.txt +0 -1
  297. package/9836.min.js +0 -2
  298. package/9836.min.js.LICENSE.txt +0 -1
  299. package/9921.min.js +0 -2
  300. package/9921.min.js.LICENSE.txt +0 -1
  301. package/engine_dist_browser_Core_Particle_js.js +0 -30
  302. package/move_base_dist_browser_Utils_js.js +0 -30
  303. package/shapes_cards_dist_browser_Utils_js.js +0 -30
  304. package/shapes_circle_dist_browser_Utils_js.js +0 -30
  305. package/shapes_emoji_dist_browser_Utils_js.js +0 -30
  306. package/shapes_heart_dist_browser_Utils_js.js +0 -30
  307. package/shapes_polygon_dist_browser_Utils_js.js +0 -30
  308. package/shapes_square_dist_browser_Utils_js.js +0 -30
  309. package/shapes_star_dist_browser_Utils_js.js +0 -30
  310. package/updaters_life_dist_browser_Utils_js.js +0 -30
  311. package/updaters_outModes_dist_browser_BounceOutMode_js.js +0 -30
  312. package/updaters_outModes_dist_browser_DestroyOutMode_js.js +0 -30
  313. package/updaters_outModes_dist_browser_NoneOutMode_js.js +0 -30
  314. package/updaters_outModes_dist_browser_OutOutMode_js.js +0 -30
  315. package/updaters_outModes_dist_browser_Utils_js.js +0 -30
  316. package/updaters_roll_dist_browser_Utils_js.js +0 -30
  317. 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.1
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 */ BaseMover: () => (/* binding */ BaseMover)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nconst diffFactor = 2,\n defaultSizeFactor = 1,\n defaultDeltaFactor = 1;\nclass BaseMover {\n async init(particle) {\n const options = particle.options,\n gravityOptions = options.move.gravity;\n particle.gravity = {\n enable: gravityOptions.enable,\n acceleration: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(gravityOptions.acceleration),\n inverse: gravityOptions.inverse\n };\n const {\n initSpin\n } = await __webpack_require__.e(/*! import() */ \"move_base_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../move/base/dist/browser/Utils.js\"));\n initSpin(particle);\n await Promise.resolve();\n }\n isEnabled(particle) {\n return !particle.destroyed && particle.options.move.enable;\n }\n async move(particle, delta) {\n const particleOptions = particle.options,\n moveOptions = particleOptions.move;\n if (!moveOptions.enable) {\n return;\n }\n const container = particle.container,\n pxRatio = container.retina.pixelRatio;\n particle.retina.moveSpeed ??= (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(moveOptions.speed) * pxRatio;\n particle.retina.moveDrift ??= (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(particle.options.move.drift) * pxRatio;\n const {\n getProximitySpeedFactor\n } = await __webpack_require__.e(/*! import() */ \"move_base_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../move/base/dist/browser/Utils.js\")),\n slowFactor = getProximitySpeedFactor(particle),\n baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor,\n moveDrift = particle.retina.moveDrift,\n maxSize = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMax)(particleOptions.size.value) * pxRatio,\n sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor,\n deltaFactor = delta.factor || defaultDeltaFactor,\n moveSpeed = baseSpeed * sizeFactor * slowFactor * deltaFactor / diffFactor,\n maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;\n if (moveOptions.spin.enable) {\n const {\n spin\n } = await __webpack_require__.e(/*! import() */ \"move_base_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../move/base/dist/browser/Utils.js\"));\n spin(particle, moveSpeed);\n } else {\n const {\n move\n } = await __webpack_require__.e(/*! import() */ \"move_base_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../move/base/dist/browser/Utils.js\"));\n await move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta);\n }\n const {\n applyDistance\n } = await __webpack_require__.e(/*! import() */ \"move_base_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../move/base/dist/browser/Utils.js\"));\n applyDistance(particle);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../move/base/dist/browser/BaseMover.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BaseMover: () => (/* binding */ BaseMover)\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 */ \"../../move/base/dist/browser/Utils.js\");\n\n\nconst diffFactor = 2,\n defaultSizeFactor = 1,\n defaultDeltaFactor = 1;\nclass BaseMover {\n init(particle) {\n const options = particle.options,\n gravityOptions = options.move.gravity;\n particle.gravity = {\n enable: gravityOptions.enable,\n acceleration: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(gravityOptions.acceleration),\n inverse: gravityOptions.inverse\n };\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.initSpin)(particle);\n }\n isEnabled(particle) {\n return !particle.destroyed && particle.options.move.enable;\n }\n move(particle, delta) {\n const particleOptions = particle.options,\n moveOptions = particleOptions.move;\n if (!moveOptions.enable) {\n return;\n }\n const container = particle.container,\n pxRatio = container.retina.pixelRatio;\n particle.retina.moveSpeed ??= (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(moveOptions.speed) * pxRatio;\n particle.retina.moveDrift ??= (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(particle.options.move.drift) * pxRatio;\n const slowFactor = (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.getProximitySpeedFactor)(particle),\n baseSpeed = particle.retina.moveSpeed * container.retina.reduceFactor,\n moveDrift = particle.retina.moveDrift,\n maxSize = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMax)(particleOptions.size.value) * pxRatio,\n sizeFactor = moveOptions.size ? particle.getRadius() / maxSize : defaultSizeFactor,\n deltaFactor = delta.factor || defaultDeltaFactor,\n moveSpeed = baseSpeed * sizeFactor * slowFactor * deltaFactor / diffFactor,\n maxSpeed = particle.retina.maxSpeed ?? container.retina.maxSpeed;\n if (moveOptions.spin.enable) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.spin)(particle, moveSpeed);\n } else {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.move)(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta);\n }\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.applyDistance)(particle);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../move/base/dist/browser/BaseMover.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../move/base/dist/browser/Utils.js":
31
+ /*!*********************************************!*\
32
+ !*** ../../move/base/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 */ applyDistance: () => (/* binding */ applyDistance),\n/* harmony export */ applyPath: () => (/* binding */ applyPath),\n/* harmony export */ getProximitySpeedFactor: () => (/* binding */ getProximitySpeedFactor),\n/* harmony export */ initSpin: () => (/* binding */ initSpin),\n/* harmony export */ move: () => (/* binding */ move),\n/* harmony export */ spin: () => (/* binding */ spin)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nconst half = 0.5,\n minVelocity = 0,\n identity = 1,\n moveSpeedFactor = 60,\n minSpinRadius = 0,\n spinFactor = 0.01;\nfunction applyDistance(particle) {\n const initialPosition = particle.initialPosition,\n {\n dx,\n dy\n } = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getDistances)(initialPosition, particle.position),\n dxFixed = Math.abs(dx),\n dyFixed = Math.abs(dy),\n {\n maxDistance\n } = particle.retina,\n hDistance = maxDistance.horizontal,\n vDistance = maxDistance.vertical;\n if (!hDistance && !vDistance) {\n return;\n }\n const hasHDistance = (hDistance && dxFixed >= hDistance) ?? false,\n hasVDistance = (vDistance && dyFixed >= vDistance) ?? false;\n if ((hasHDistance || hasVDistance) && !particle.misplaced) {\n particle.misplaced = !!hDistance && dxFixed > hDistance || !!vDistance && dyFixed > vDistance;\n if (hDistance) {\n particle.velocity.x = particle.velocity.y * half - particle.velocity.x;\n }\n if (vDistance) {\n particle.velocity.y = particle.velocity.x * half - particle.velocity.y;\n }\n } else if ((!hDistance || dxFixed < hDistance) && (!vDistance || dyFixed < vDistance) && particle.misplaced) {\n particle.misplaced = false;\n } else if (particle.misplaced) {\n const pos = particle.position,\n vel = particle.velocity;\n if (hDistance && (pos.x < initialPosition.x && vel.x < minVelocity || pos.x > initialPosition.x && vel.x > minVelocity)) {\n vel.x *= -(0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRandom)();\n }\n if (vDistance && (pos.y < initialPosition.y && vel.y < minVelocity || pos.y > initialPosition.y && vel.y > minVelocity)) {\n vel.y *= -(0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRandom)();\n }\n }\n}\nfunction move(particle, moveOptions, moveSpeed, maxSpeed, moveDrift, delta) {\n applyPath(particle, delta);\n const gravityOptions = particle.gravity,\n gravityFactor = gravityOptions?.enable && gravityOptions.inverse ? -identity : identity;\n if (moveDrift && moveSpeed) {\n particle.velocity.x += moveDrift * delta.factor / (moveSpeedFactor * moveSpeed);\n }\n if (gravityOptions?.enable && moveSpeed) {\n particle.velocity.y += gravityFactor * (gravityOptions.acceleration * delta.factor) / (moveSpeedFactor * moveSpeed);\n }\n const decay = particle.moveDecay;\n particle.velocity.multTo(decay);\n const velocity = particle.velocity.mult(moveSpeed);\n if (gravityOptions?.enable && maxSpeed > minVelocity && (!gravityOptions.inverse && velocity.y >= minVelocity && velocity.y >= maxSpeed || gravityOptions.inverse && velocity.y <= minVelocity && velocity.y <= -maxSpeed)) {\n velocity.y = gravityFactor * maxSpeed;\n if (moveSpeed) {\n particle.velocity.y = velocity.y / moveSpeed;\n }\n }\n const zIndexOptions = particle.options.zIndex,\n zVelocityFactor = (identity - particle.zIndexFactor) ** zIndexOptions.velocityRate;\n velocity.multTo(zVelocityFactor);\n const {\n position\n } = particle;\n position.addTo(velocity);\n if (moveOptions.vibrate) {\n position.x += Math.sin(position.x * Math.cos(position.y));\n position.y += Math.cos(position.y * Math.sin(position.x));\n }\n}\nfunction spin(particle, moveSpeed) {\n const container = particle.container;\n if (!particle.spin) {\n return;\n }\n const updateFunc = {\n x: particle.spin.direction === \"clockwise\" ? Math.cos : Math.sin,\n y: particle.spin.direction === \"clockwise\" ? Math.sin : Math.cos\n };\n particle.position.x = particle.spin.center.x + particle.spin.radius * updateFunc.x(particle.spin.angle);\n particle.position.y = particle.spin.center.y + particle.spin.radius * updateFunc.y(particle.spin.angle);\n particle.spin.radius += particle.spin.acceleration;\n const maxCanvasSize = Math.max(container.canvas.size.width, container.canvas.size.height),\n halfMaxSize = maxCanvasSize * half;\n if (particle.spin.radius > halfMaxSize) {\n particle.spin.radius = halfMaxSize;\n particle.spin.acceleration *= -identity;\n } else if (particle.spin.radius < minSpinRadius) {\n particle.spin.radius = minSpinRadius;\n particle.spin.acceleration *= -identity;\n }\n particle.spin.angle += moveSpeed * spinFactor * (identity - particle.spin.radius / maxCanvasSize);\n}\nfunction applyPath(particle, delta) {\n const particlesOptions = particle.options,\n pathOptions = particlesOptions.move.path,\n pathEnabled = pathOptions.enable;\n if (!pathEnabled) {\n return;\n }\n if (particle.lastPathTime <= particle.pathDelay) {\n particle.lastPathTime += delta.value;\n return;\n }\n const path = particle.pathGenerator?.generate(particle, delta);\n if (path) {\n particle.velocity.addTo(path);\n }\n if (pathOptions.clamp) {\n particle.velocity.x = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.clamp)(particle.velocity.x, -identity, identity);\n particle.velocity.y = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.clamp)(particle.velocity.y, -identity, identity);\n }\n particle.lastPathTime -= particle.pathDelay;\n}\nfunction getProximitySpeedFactor(particle) {\n return particle.slow.inRange ? particle.slow.factor : identity;\n}\nfunction initSpin(particle) {\n const container = particle.container,\n options = particle.options,\n spinOptions = options.move.spin;\n if (!spinOptions.enable) {\n return;\n }\n const spinPos = spinOptions.position ?? {\n x: 50,\n y: 50\n },\n spinFactor = 0.01,\n spinCenter = {\n x: spinPos.x * spinFactor * container.canvas.size.width,\n y: spinPos.y * spinFactor * container.canvas.size.height\n },\n pos = particle.getPosition(),\n distance = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getDistance)(pos, spinCenter),\n spinAcceleration = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(spinOptions.acceleration);\n particle.retina.spinAcceleration = spinAcceleration * container.retina.pixelRatio;\n const minVelocity = 0;\n particle.spin = {\n center: spinCenter,\n direction: particle.velocity.x >= minVelocity ? \"clockwise\" : \"counter-clockwise\",\n angle: particle.velocity.angle,\n radius: distance,\n acceleration: particle.retina.spinAcceleration\n };\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../move/base/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.1
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/confetti",
3
- "version": "3.2.1",
3
+ "version": "3.3.0",
4
4
  "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.",
5
5
  "homepage": "https://particles.js.org",
6
6
  "repository": {
@@ -99,22 +99,22 @@
99
99
  "./package.json": "./package.json"
100
100
  },
101
101
  "dependencies": {
102
- "@tsparticles/basic": "^3.2.1",
103
- "@tsparticles/engine": "^3.2.1",
104
- "@tsparticles/plugin-emitters": "^3.2.1",
105
- "@tsparticles/plugin-motion": "^3.2.1",
106
- "@tsparticles/shape-cards": "^3.2.1",
107
- "@tsparticles/shape-emoji": "^3.2.1",
108
- "@tsparticles/shape-heart": "^3.2.1",
109
- "@tsparticles/shape-image": "^3.2.1",
110
- "@tsparticles/shape-polygon": "^3.2.1",
111
- "@tsparticles/shape-square": "^3.2.1",
112
- "@tsparticles/shape-star": "^3.2.1",
113
- "@tsparticles/updater-life": "^3.2.1",
114
- "@tsparticles/updater-roll": "^3.2.1",
115
- "@tsparticles/updater-rotate": "^3.2.1",
116
- "@tsparticles/updater-tilt": "^3.2.1",
117
- "@tsparticles/updater-wobble": "^3.2.1"
102
+ "@tsparticles/basic": "^3.3.0",
103
+ "@tsparticles/engine": "^3.3.0",
104
+ "@tsparticles/plugin-emitters": "^3.3.0",
105
+ "@tsparticles/plugin-motion": "^3.3.0",
106
+ "@tsparticles/shape-cards": "^3.3.0",
107
+ "@tsparticles/shape-emoji": "^3.3.0",
108
+ "@tsparticles/shape-heart": "^3.3.0",
109
+ "@tsparticles/shape-image": "^3.3.0",
110
+ "@tsparticles/shape-polygon": "^3.3.0",
111
+ "@tsparticles/shape-square": "^3.3.0",
112
+ "@tsparticles/shape-star": "^3.3.0",
113
+ "@tsparticles/updater-life": "^3.3.0",
114
+ "@tsparticles/updater-roll": "^3.3.0",
115
+ "@tsparticles/updater-rotate": "^3.3.0",
116
+ "@tsparticles/updater-tilt": "^3.3.0",
117
+ "@tsparticles/updater-wobble": "^3.3.0"
118
118
  },
119
119
  "publishConfig": {
120
120
  "access": "public"
@@ -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.1
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 */ EmitterInstance: () => (/* binding */ EmitterInstance)\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_Emitter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Options/Classes/Emitter.js */ \"../../plugins/emitters/dist/browser/Options/Classes/Emitter.js\");\n/* harmony import */ var _Options_Classes_EmitterSize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Options/Classes/EmitterSize.js */ \"../../plugins/emitters/dist/browser/Options/Classes/EmitterSize.js\");\n\n\n\nconst half = 0.5,\n defaultLifeDelay = 0,\n minLifeCount = 0,\n defaultSpawnDelay = 0,\n defaultEmitDelay = 0,\n defaultLifeCount = -1,\n defaultColorAnimationFactor = 1;\nfunction setParticlesOptionsColor(particlesOptions, color) {\n if (particlesOptions.color) {\n particlesOptions.color.value = color;\n } else {\n particlesOptions.color = {\n value: color\n };\n }\n}\nclass EmitterInstance {\n constructor(engine, emitters, container, options, position) {\n this.emitters = emitters;\n this.container = container;\n this._destroy = () => {\n this._mutationObserver?.disconnect();\n this._mutationObserver = undefined;\n this._resizeObserver?.disconnect();\n this._resizeObserver = undefined;\n this.emitters.removeEmitter(this);\n this._engine.dispatchEvent(\"emitterDestroyed\", {\n container: this.container,\n data: {\n emitter: this\n }\n });\n };\n this._prepareToDie = () => {\n if (this._paused) {\n return;\n }\n const duration = this.options.life?.duration !== undefined ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.life.duration) : undefined,\n minDuration = 0,\n minLifeCount = 0;\n if (this.container.retina.reduceFactor && (this._lifeCount > minLifeCount || this._immortal) && duration !== undefined && duration > minDuration) {\n this._duration = duration * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds;\n }\n };\n this._setColorAnimation = (animation, initValue, maxValue, factor = defaultColorAnimationFactor) => {\n const container = this.container;\n if (!animation.enable) {\n return initValue;\n }\n const colorOffset = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.randomInRange)(animation.offset),\n delay = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.rate.delay),\n emitFactor = delay * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / container.retina.reduceFactor,\n defaultColorSpeed = 0,\n colorSpeed = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(animation.speed ?? defaultColorSpeed);\n return (initValue + colorSpeed * container.fpsLimit / emitFactor + colorOffset * factor) % maxValue;\n };\n this._engine = engine;\n this._currentDuration = 0;\n this._currentEmitDelay = 0;\n this._currentSpawnDelay = 0;\n this._initialPosition = position;\n if (options instanceof _Options_Classes_Emitter_js__WEBPACK_IMPORTED_MODULE_1__.Emitter) {\n this.options = options;\n } else {\n this.options = new _Options_Classes_Emitter_js__WEBPACK_IMPORTED_MODULE_1__.Emitter();\n this.options.load(options);\n }\n this._spawnDelay = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.life.delay ?? defaultLifeDelay) * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.container.retina.reduceFactor;\n this.position = this._initialPosition ?? this._calcPosition();\n this.name = this.options.name;\n this.fill = this.options.fill;\n this._firstSpawn = !this.options.life.wait;\n this._startParticlesAdded = false;\n let particlesOptions = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.deepExtend)({}, this.options.particles);\n particlesOptions ??= {};\n particlesOptions.move ??= {};\n particlesOptions.move.direction ??= this.options.direction;\n if (this.options.spawnColor) {\n this.spawnColor = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.rangeColorToHsl)(this.options.spawnColor);\n }\n this._paused = !this.options.autoPlay;\n this._particlesOptions = particlesOptions;\n this._size = this._calcSize();\n this.size = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getSize)(this._size, this.container.canvas.size);\n this._lifeCount = this.options.life.count ?? defaultLifeCount;\n this._immortal = this._lifeCount <= minLifeCount;\n if (this.options.domId) {\n const element = document.getElementById(this.options.domId);\n if (element) {\n this._mutationObserver = new MutationObserver(() => {\n this.resize();\n });\n this._resizeObserver = new ResizeObserver(() => {\n this.resize();\n });\n this._mutationObserver.observe(element, {\n attributes: true,\n attributeFilter: [\"style\", \"width\", \"height\"]\n });\n this._resizeObserver.observe(element);\n }\n }\n const shapeOptions = this.options.shape,\n shapeGenerator = this._engine.emitterShapeManager?.getShapeGenerator(shapeOptions.type);\n if (shapeGenerator) {\n this._shape = shapeGenerator.generate(this.position, this.size, this.fill, shapeOptions.options);\n }\n this._engine.dispatchEvent(\"emitterCreated\", {\n container,\n data: {\n emitter: this\n }\n });\n this.play();\n }\n externalPause() {\n this._paused = true;\n this.pause();\n }\n externalPlay() {\n this._paused = false;\n this.play();\n }\n async init() {\n await this._shape?.init();\n }\n pause() {\n if (this._paused) {\n return;\n }\n delete this._emitDelay;\n }\n play() {\n if (this._paused) {\n return;\n }\n if (!(this.container.retina.reduceFactor && (this._lifeCount > minLifeCount || this._immortal || !this.options.life.count) && (this._firstSpawn || this._currentSpawnDelay >= (this._spawnDelay ?? defaultSpawnDelay)))) {\n return;\n }\n if (this._emitDelay === undefined) {\n const delay = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.rate.delay);\n this._emitDelay = delay * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.container.retina.reduceFactor;\n }\n if (this._lifeCount > minLifeCount || this._immortal) {\n this._prepareToDie();\n }\n }\n resize() {\n const initialPosition = this._initialPosition;\n this.position = initialPosition && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isPointInside)(initialPosition, this.container.canvas.size, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Vector.origin) ? initialPosition : this._calcPosition();\n this._size = this._calcSize();\n this.size = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getSize)(this._size, this.container.canvas.size);\n this._shape?.resize(this.position, this.size);\n }\n async update(delta) {\n if (this._paused) {\n return;\n }\n if (this._firstSpawn) {\n this._firstSpawn = false;\n this._currentSpawnDelay = this._spawnDelay ?? defaultSpawnDelay;\n this._currentEmitDelay = this._emitDelay ?? defaultEmitDelay;\n }\n if (!this._startParticlesAdded) {\n this._startParticlesAdded = true;\n await this._emitParticles(this.options.startCount);\n }\n if (this._duration !== undefined) {\n this._currentDuration += delta.value;\n if (this._currentDuration >= this._duration) {\n this.pause();\n if (this._spawnDelay !== undefined) {\n delete this._spawnDelay;\n }\n if (!this._immortal) {\n this._lifeCount--;\n }\n if (this._lifeCount > minLifeCount || this._immortal) {\n this.position = this._calcPosition();\n this._shape?.resize(this.position, this.size);\n this._spawnDelay = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.life.delay ?? defaultLifeDelay) * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.container.retina.reduceFactor;\n } else {\n this._destroy();\n }\n this._currentDuration -= this._duration;\n delete this._duration;\n }\n }\n if (this._spawnDelay !== undefined) {\n this._currentSpawnDelay += delta.value;\n if (this._currentSpawnDelay >= this._spawnDelay) {\n this._engine.dispatchEvent(\"emitterPlay\", {\n container: this.container\n });\n this.play();\n this._currentSpawnDelay -= this._currentSpawnDelay;\n delete this._spawnDelay;\n }\n }\n if (this._emitDelay !== undefined) {\n this._currentEmitDelay += delta.value;\n if (this._currentEmitDelay >= this._emitDelay) {\n await this._emit();\n this._currentEmitDelay -= this._emitDelay;\n }\n }\n }\n _calcPosition() {\n if (this.options.domId) {\n const element = document.getElementById(this.options.domId);\n if (element) {\n const elRect = element.getBoundingClientRect(),\n pxRatio = this.container.retina.pixelRatio;\n return {\n x: (elRect.x + elRect.width * half) * pxRatio,\n y: (elRect.y + elRect.height * half) * pxRatio\n };\n }\n }\n return (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.calcPositionOrRandomFromSizeRanged)({\n size: this.container.canvas.size,\n position: this.options.position\n });\n }\n _calcSize() {\n const container = this.container;\n if (this.options.domId) {\n const element = document.getElementById(this.options.domId);\n if (element) {\n const elRect = element.getBoundingClientRect();\n return {\n width: elRect.width * container.retina.pixelRatio,\n height: elRect.height * container.retina.pixelRatio,\n mode: \"precise\"\n };\n }\n }\n return this.options.size ?? (() => {\n const size = new _Options_Classes_EmitterSize_js__WEBPACK_IMPORTED_MODULE_2__.EmitterSize();\n size.load({\n height: 0,\n mode: \"percent\",\n width: 0\n });\n return size;\n })();\n }\n async _emit() {\n if (this._paused) {\n return;\n }\n const quantity = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.rate.quantity);\n await this._emitParticles(quantity);\n }\n async _emitParticles(quantity) {\n const singleParticlesOptions = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.itemFromSingleOrMultiple)(this._particlesOptions);\n for (let i = 0; i < quantity; i++) {\n const particlesOptions = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.deepExtend)({}, singleParticlesOptions);\n if (this.spawnColor) {\n const hslAnimation = this.options.spawnColor?.animation;\n if (hslAnimation) {\n const maxValues = {\n h: 360,\n s: 100,\n l: 100\n },\n colorFactor = 3.6;\n this.spawnColor.h = this._setColorAnimation(hslAnimation.h, this.spawnColor.h, maxValues.h, colorFactor);\n this.spawnColor.s = this._setColorAnimation(hslAnimation.s, this.spawnColor.s, maxValues.s);\n this.spawnColor.l = this._setColorAnimation(hslAnimation.l, this.spawnColor.l, maxValues.l);\n }\n setParticlesOptionsColor(particlesOptions, this.spawnColor);\n }\n const shapeOptions = this.options.shape;\n let position = this.position;\n if (this._shape) {\n const shapePosData = await this._shape.randomPosition();\n if (shapePosData) {\n position = shapePosData.position;\n const replaceData = shapeOptions.replace;\n if (replaceData.color && shapePosData.color) {\n setParticlesOptionsColor(particlesOptions, shapePosData.color);\n }\n if (replaceData.opacity) {\n if (particlesOptions.opacity) {\n particlesOptions.opacity.value = shapePosData.opacity;\n } else {\n particlesOptions.opacity = {\n value: shapePosData.opacity\n };\n }\n }\n } else {\n position = null;\n }\n }\n if (position) {\n await this.container.particles.addParticle(position, particlesOptions);\n }\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../plugins/emitters/dist/browser/EmitterInstance.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EmitterInstance: () => (/* binding */ EmitterInstance)\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_Emitter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Options/Classes/Emitter.js */ \"../../plugins/emitters/dist/browser/Options/Classes/Emitter.js\");\n/* harmony import */ var _Options_Classes_EmitterSize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Options/Classes/EmitterSize.js */ \"../../plugins/emitters/dist/browser/Options/Classes/EmitterSize.js\");\n\n\n\nconst half = 0.5,\n defaultLifeDelay = 0,\n minLifeCount = 0,\n defaultSpawnDelay = 0,\n defaultEmitDelay = 0,\n defaultLifeCount = -1,\n defaultColorAnimationFactor = 1;\nfunction setParticlesOptionsColor(particlesOptions, color) {\n if (particlesOptions.color) {\n particlesOptions.color.value = color;\n } else {\n particlesOptions.color = {\n value: color\n };\n }\n}\nclass EmitterInstance {\n constructor(engine, emitters, container, options, position) {\n this.emitters = emitters;\n this.container = container;\n this._destroy = () => {\n this._mutationObserver?.disconnect();\n this._mutationObserver = undefined;\n this._resizeObserver?.disconnect();\n this._resizeObserver = undefined;\n this.emitters.removeEmitter(this);\n this._engine.dispatchEvent(\"emitterDestroyed\", {\n container: this.container,\n data: {\n emitter: this\n }\n });\n };\n this._prepareToDie = () => {\n if (this._paused) {\n return;\n }\n const duration = this.options.life?.duration !== undefined ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.life.duration) : undefined,\n minDuration = 0,\n minLifeCount = 0;\n if (this.container.retina.reduceFactor && (this._lifeCount > minLifeCount || this._immortal) && duration !== undefined && duration > minDuration) {\n this._duration = duration * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds;\n }\n };\n this._setColorAnimation = (animation, initValue, maxValue, factor = defaultColorAnimationFactor) => {\n const container = this.container;\n if (!animation.enable) {\n return initValue;\n }\n const colorOffset = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.randomInRange)(animation.offset),\n delay = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.rate.delay),\n emitFactor = delay * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / container.retina.reduceFactor,\n defaultColorSpeed = 0,\n colorSpeed = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(animation.speed ?? defaultColorSpeed);\n return (initValue + colorSpeed * container.fpsLimit / emitFactor + colorOffset * factor) % maxValue;\n };\n this._engine = engine;\n this._currentDuration = 0;\n this._currentEmitDelay = 0;\n this._currentSpawnDelay = 0;\n this._initialPosition = position;\n if (options instanceof _Options_Classes_Emitter_js__WEBPACK_IMPORTED_MODULE_1__.Emitter) {\n this.options = options;\n } else {\n this.options = new _Options_Classes_Emitter_js__WEBPACK_IMPORTED_MODULE_1__.Emitter();\n this.options.load(options);\n }\n this._spawnDelay = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.life.delay ?? defaultLifeDelay) * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.container.retina.reduceFactor;\n this.position = this._initialPosition ?? this._calcPosition();\n this.name = this.options.name;\n this.fill = this.options.fill;\n this._firstSpawn = !this.options.life.wait;\n this._startParticlesAdded = false;\n let particlesOptions = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.deepExtend)({}, this.options.particles);\n particlesOptions ??= {};\n particlesOptions.move ??= {};\n particlesOptions.move.direction ??= this.options.direction;\n if (this.options.spawnColor) {\n this.spawnColor = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.rangeColorToHsl)(this.options.spawnColor);\n }\n this._paused = !this.options.autoPlay;\n this._particlesOptions = particlesOptions;\n this._size = this._calcSize();\n this.size = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getSize)(this._size, this.container.canvas.size);\n this._lifeCount = this.options.life.count ?? defaultLifeCount;\n this._immortal = this._lifeCount <= minLifeCount;\n if (this.options.domId) {\n const element = document.getElementById(this.options.domId);\n if (element) {\n this._mutationObserver = new MutationObserver(() => {\n this.resize();\n });\n this._resizeObserver = new ResizeObserver(() => {\n this.resize();\n });\n this._mutationObserver.observe(element, {\n attributes: true,\n attributeFilter: [\"style\", \"width\", \"height\"]\n });\n this._resizeObserver.observe(element);\n }\n }\n const shapeOptions = this.options.shape,\n shapeGenerator = this._engine.emitterShapeManager?.getShapeGenerator(shapeOptions.type);\n if (shapeGenerator) {\n this._shape = shapeGenerator.generate(this.position, this.size, this.fill, shapeOptions.options);\n }\n this._engine.dispatchEvent(\"emitterCreated\", {\n container,\n data: {\n emitter: this\n }\n });\n this.play();\n }\n externalPause() {\n this._paused = true;\n this.pause();\n }\n externalPlay() {\n this._paused = false;\n this.play();\n }\n async init() {\n await this._shape?.init();\n }\n pause() {\n if (this._paused) {\n return;\n }\n delete this._emitDelay;\n }\n play() {\n if (this._paused) {\n return;\n }\n if (!(this.container.retina.reduceFactor && (this._lifeCount > minLifeCount || this._immortal || !this.options.life.count) && (this._firstSpawn || this._currentSpawnDelay >= (this._spawnDelay ?? defaultSpawnDelay)))) {\n return;\n }\n if (this._emitDelay === undefined) {\n const delay = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.rate.delay);\n this._emitDelay = delay * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.container.retina.reduceFactor;\n }\n if (this._lifeCount > minLifeCount || this._immortal) {\n this._prepareToDie();\n }\n }\n resize() {\n const initialPosition = this._initialPosition;\n this.position = initialPosition && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isPointInside)(initialPosition, this.container.canvas.size, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.Vector.origin) ? initialPosition : this._calcPosition();\n this._size = this._calcSize();\n this.size = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getSize)(this._size, this.container.canvas.size);\n this._shape?.resize(this.position, this.size);\n }\n update(delta) {\n if (this._paused) {\n return;\n }\n if (this._firstSpawn) {\n this._firstSpawn = false;\n this._currentSpawnDelay = this._spawnDelay ?? defaultSpawnDelay;\n this._currentEmitDelay = this._emitDelay ?? defaultEmitDelay;\n }\n if (!this._startParticlesAdded) {\n this._startParticlesAdded = true;\n this._emitParticles(this.options.startCount);\n }\n if (this._duration !== undefined) {\n this._currentDuration += delta.value;\n if (this._currentDuration >= this._duration) {\n this.pause();\n if (this._spawnDelay !== undefined) {\n delete this._spawnDelay;\n }\n if (!this._immortal) {\n this._lifeCount--;\n }\n if (this._lifeCount > minLifeCount || this._immortal) {\n this.position = this._calcPosition();\n this._shape?.resize(this.position, this.size);\n this._spawnDelay = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.life.delay ?? defaultLifeDelay) * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.container.retina.reduceFactor;\n } else {\n this._destroy();\n }\n this._currentDuration -= this._duration;\n delete this._duration;\n }\n }\n if (this._spawnDelay !== undefined) {\n this._currentSpawnDelay += delta.value;\n if (this._currentSpawnDelay >= this._spawnDelay) {\n this._engine.dispatchEvent(\"emitterPlay\", {\n container: this.container\n });\n this.play();\n this._currentSpawnDelay -= this._currentSpawnDelay;\n delete this._spawnDelay;\n }\n }\n if (this._emitDelay !== undefined) {\n this._currentEmitDelay += delta.value;\n if (this._currentEmitDelay >= this._emitDelay) {\n this._emit();\n this._currentEmitDelay -= this._emitDelay;\n }\n }\n }\n _calcPosition() {\n if (this.options.domId) {\n const element = document.getElementById(this.options.domId);\n if (element) {\n const elRect = element.getBoundingClientRect(),\n pxRatio = this.container.retina.pixelRatio;\n return {\n x: (elRect.x + elRect.width * half) * pxRatio,\n y: (elRect.y + elRect.height * half) * pxRatio\n };\n }\n }\n return (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.calcPositionOrRandomFromSizeRanged)({\n size: this.container.canvas.size,\n position: this.options.position\n });\n }\n _calcSize() {\n const container = this.container;\n if (this.options.domId) {\n const element = document.getElementById(this.options.domId);\n if (element) {\n const elRect = element.getBoundingClientRect();\n return {\n width: elRect.width * container.retina.pixelRatio,\n height: elRect.height * container.retina.pixelRatio,\n mode: \"precise\"\n };\n }\n }\n return this.options.size ?? (() => {\n const size = new _Options_Classes_EmitterSize_js__WEBPACK_IMPORTED_MODULE_2__.EmitterSize();\n size.load({\n height: 0,\n mode: \"percent\",\n width: 0\n });\n return size;\n })();\n }\n _emit() {\n if (this._paused) {\n return;\n }\n const quantity = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(this.options.rate.quantity);\n this._emitParticles(quantity);\n }\n _emitParticles(quantity) {\n const singleParticlesOptions = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.itemFromSingleOrMultiple)(this._particlesOptions);\n for (let i = 0; i < quantity; i++) {\n const particlesOptions = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.deepExtend)({}, singleParticlesOptions);\n if (this.spawnColor) {\n const hslAnimation = this.options.spawnColor?.animation;\n if (hslAnimation) {\n const maxValues = {\n h: 360,\n s: 100,\n l: 100\n },\n colorFactor = 3.6;\n this.spawnColor.h = this._setColorAnimation(hslAnimation.h, this.spawnColor.h, maxValues.h, colorFactor);\n this.spawnColor.s = this._setColorAnimation(hslAnimation.s, this.spawnColor.s, maxValues.s);\n this.spawnColor.l = this._setColorAnimation(hslAnimation.l, this.spawnColor.l, maxValues.l);\n }\n setParticlesOptionsColor(particlesOptions, this.spawnColor);\n }\n const shapeOptions = this.options.shape;\n let position = this.position;\n if (this._shape) {\n const shapePosData = this._shape.randomPosition();\n if (shapePosData) {\n position = shapePosData.position;\n const replaceData = shapeOptions.replace;\n if (replaceData.color && shapePosData.color) {\n setParticlesOptionsColor(particlesOptions, shapePosData.color);\n }\n if (replaceData.opacity) {\n if (particlesOptions.opacity) {\n particlesOptions.opacity.value = shapePosData.opacity;\n } else {\n particlesOptions.opacity = {\n value: shapePosData.opacity\n };\n }\n }\n } else {\n position = null;\n }\n }\n if (position) {\n this.container.particles.addParticle(position, particlesOptions);\n }\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../plugins/emitters/dist/browser/EmitterInstance.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.1
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.1
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 */ Emitters: () => (/* binding */ Emitters)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nclass Emitters {\n constructor(engine, container) {\n this.container = container;\n this._engine = engine;\n this.array = [];\n this.emitters = [];\n this.interactivityEmitters = {\n random: {\n count: 1,\n enable: false\n },\n value: []\n };\n const defaultIndex = 0;\n container.getEmitter = idxOrName => idxOrName === undefined || (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNumber)(idxOrName) ? this.array[idxOrName ?? defaultIndex] : this.array.find(t => t.name === idxOrName);\n container.addEmitter = async (options, position) => this.addEmitter(options, position);\n container.removeEmitter = idxOrName => {\n const emitter = container.getEmitter(idxOrName);\n if (emitter) {\n this.removeEmitter(emitter);\n }\n };\n container.playEmitter = idxOrName => {\n const emitter = container.getEmitter(idxOrName);\n if (emitter) {\n emitter.externalPlay();\n }\n };\n container.pauseEmitter = idxOrName => {\n const emitter = container.getEmitter(idxOrName);\n if (emitter) {\n emitter.externalPause();\n }\n };\n }\n async addEmitter(options, position) {\n const {\n Emitter\n } = await Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./Options/Classes/Emitter.js */ \"../../plugins/emitters/dist/browser/Options/Classes/Emitter.js\")),\n {\n EmitterInstance\n } = await __webpack_require__.e(/*! import() */ \"plugins_emitters_dist_browser_EmitterInstance_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./EmitterInstance.js */ \"../../plugins/emitters/dist/browser/EmitterInstance.js\")),\n emitterOptions = new Emitter();\n emitterOptions.load(options);\n const emitter = new EmitterInstance(this._engine, this, this.container, emitterOptions, position);\n await emitter.init();\n this.array.push(emitter);\n return emitter;\n }\n handleClickMode(mode) {\n const emitterOptions = this.emitters,\n modeEmitters = this.interactivityEmitters;\n if (mode !== \"emitter\") {\n return;\n }\n let emittersModeOptions;\n if (modeEmitters && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isArray)(modeEmitters.value)) {\n const minLength = 0;\n if (modeEmitters.value.length > minLength && modeEmitters.random.enable) {\n emittersModeOptions = [];\n const usedIndexes = [];\n for (let i = 0; i < modeEmitters.random.count; i++) {\n const idx = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.arrayRandomIndex)(modeEmitters.value);\n if (usedIndexes.includes(idx) && usedIndexes.length < modeEmitters.value.length) {\n i--;\n continue;\n }\n usedIndexes.push(idx);\n emittersModeOptions.push((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.itemFromArray)(modeEmitters.value, idx));\n }\n } else {\n emittersModeOptions = modeEmitters.value;\n }\n } else {\n emittersModeOptions = modeEmitters?.value;\n }\n const emittersOptions = emittersModeOptions ?? emitterOptions,\n ePosition = this.container.interactivity.mouse.clickPosition;\n void (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.executeOnSingleOrMultiple)(emittersOptions, async emitter => {\n await this.addEmitter(emitter, ePosition);\n });\n }\n async init() {\n this.emitters = this.container.actualOptions.emitters;\n this.interactivityEmitters = this.container.actualOptions.interactivity.modes.emitters;\n if (!this.emitters) {\n return;\n }\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isArray)(this.emitters)) {\n for (const emitterOptions of this.emitters) {\n await this.addEmitter(emitterOptions);\n }\n } else {\n await this.addEmitter(this.emitters);\n }\n }\n pause() {\n for (const emitter of this.array) {\n emitter.pause();\n }\n }\n play() {\n for (const emitter of this.array) {\n emitter.play();\n }\n }\n removeEmitter(emitter) {\n const index = this.array.indexOf(emitter),\n minIndex = 0,\n deleteCount = 1;\n if (index >= minIndex) {\n this.array.splice(index, deleteCount);\n }\n }\n resize() {\n for (const emitter of this.array) {\n emitter.resize();\n }\n }\n stop() {\n this.array = [];\n }\n async update(delta) {\n for (const emitter of this.array) {\n await emitter.update(delta);\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../plugins/emitters/dist/browser/Emitters.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Emitters: () => (/* binding */ Emitters)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nclass Emitters {\n constructor(engine, container) {\n this.container = container;\n this._engine = engine;\n this.array = [];\n this.emitters = [];\n this.interactivityEmitters = {\n random: {\n count: 1,\n enable: false\n },\n value: []\n };\n const defaultIndex = 0;\n container.getEmitter = idxOrName => idxOrName === undefined || (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNumber)(idxOrName) ? this.array[idxOrName ?? defaultIndex] : this.array.find(t => t.name === idxOrName);\n container.addEmitter = async (options, position) => this.addEmitter(options, position);\n container.removeEmitter = idxOrName => {\n const emitter = container.getEmitter(idxOrName);\n if (emitter) {\n this.removeEmitter(emitter);\n }\n };\n container.playEmitter = idxOrName => {\n const emitter = container.getEmitter(idxOrName);\n if (emitter) {\n emitter.externalPlay();\n }\n };\n container.pauseEmitter = idxOrName => {\n const emitter = container.getEmitter(idxOrName);\n if (emitter) {\n emitter.externalPause();\n }\n };\n }\n async addEmitter(options, position) {\n const {\n Emitter\n } = await Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./Options/Classes/Emitter.js */ \"../../plugins/emitters/dist/browser/Options/Classes/Emitter.js\")),\n {\n EmitterInstance\n } = await __webpack_require__.e(/*! import() */ \"plugins_emitters_dist_browser_EmitterInstance_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./EmitterInstance.js */ \"../../plugins/emitters/dist/browser/EmitterInstance.js\")),\n emitterOptions = new Emitter();\n emitterOptions.load(options);\n const emitter = new EmitterInstance(this._engine, this, this.container, emitterOptions, position);\n await emitter.init();\n this.array.push(emitter);\n return emitter;\n }\n handleClickMode(mode) {\n const emitterOptions = this.emitters,\n modeEmitters = this.interactivityEmitters;\n if (mode !== \"emitter\") {\n return;\n }\n let emittersModeOptions;\n if (modeEmitters && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isArray)(modeEmitters.value)) {\n const minLength = 0;\n if (modeEmitters.value.length > minLength && modeEmitters.random.enable) {\n emittersModeOptions = [];\n const usedIndexes = [];\n for (let i = 0; i < modeEmitters.random.count; i++) {\n const idx = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.arrayRandomIndex)(modeEmitters.value);\n if (usedIndexes.includes(idx) && usedIndexes.length < modeEmitters.value.length) {\n i--;\n continue;\n }\n usedIndexes.push(idx);\n emittersModeOptions.push((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.itemFromArray)(modeEmitters.value, idx));\n }\n } else {\n emittersModeOptions = modeEmitters.value;\n }\n } else {\n emittersModeOptions = modeEmitters?.value;\n }\n const emittersOptions = emittersModeOptions ?? emitterOptions,\n ePosition = this.container.interactivity.mouse.clickPosition;\n void (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.executeOnSingleOrMultiple)(emittersOptions, async emitter => {\n await this.addEmitter(emitter, ePosition);\n });\n }\n async init() {\n this.emitters = this.container.actualOptions.emitters;\n this.interactivityEmitters = this.container.actualOptions.interactivity.modes.emitters;\n if (!this.emitters) {\n return;\n }\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isArray)(this.emitters)) {\n for (const emitterOptions of this.emitters) {\n await this.addEmitter(emitterOptions);\n }\n } else {\n await this.addEmitter(this.emitters);\n }\n }\n pause() {\n for (const emitter of this.array) {\n emitter.pause();\n }\n }\n play() {\n for (const emitter of this.array) {\n emitter.play();\n }\n }\n removeEmitter(emitter) {\n const index = this.array.indexOf(emitter),\n minIndex = 0,\n deleteCount = 1;\n if (index >= minIndex) {\n this.array.splice(index, deleteCount);\n }\n }\n resize() {\n for (const emitter of this.array) {\n emitter.resize();\n }\n }\n stop() {\n this.array = [];\n }\n update(delta) {\n for (const emitter of this.array) {\n emitter.update(delta);\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../plugins/emitters/dist/browser/Emitters.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.1
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.1
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.1
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.1
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.1
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*
package/report.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8"/>
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
6
- <title>@tsparticles/confetti [31 Jan 2024 at 09:58]</title>
6
+ <title>@tsparticles/confetti [27 Feb 2024 at 12:24]</title>
7
7
  <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
8
8
 
9
9
  <script>
@@ -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.1
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 */ ClubDrawer: () => (/* binding */ ClubDrawer)\n/* harmony export */ });\nclass ClubDrawer {\n async draw(data) {\n const {\n drawPath,\n paths\n } = await __webpack_require__.e(/*! import() */ \"shapes_cards_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../shapes/cards/dist/browser/Utils.js\"));\n drawPath(data, paths.club);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/dist/browser/ClubDrawer.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ClubDrawer: () => (/* binding */ ClubDrawer)\n/* harmony export */ });\n/* harmony import */ var _Utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils.js */ \"../../shapes/cards/dist/browser/Utils.js\");\n\nclass ClubDrawer {\n draw(data) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_0__.drawPath)(data, _Utils_js__WEBPACK_IMPORTED_MODULE_0__.paths.club);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/dist/browser/ClubDrawer.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../shapes/cards/dist/browser/Utils.js":
31
+ /*!************************************************!*\
32
+ !*** ../../shapes/cards/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 */ drawPath: () => (/* binding */ drawPath),\n/* harmony export */ paths: () => (/* binding */ paths)\n/* harmony export */ });\nfunction drawPath(data, path) {\n if (!path.segments.length || !path.segments[0].values.length) {\n return;\n }\n const {\n context,\n radius\n } = data;\n context.moveTo(path.segments[0].values[0].x * radius, path.segments[0].values[0].y * radius);\n for (const segment of path.segments) {\n context.bezierCurveTo(segment.values[1].x * radius, segment.values[1].y * radius, segment.values[2].x * radius, segment.values[2].y * radius, segment.values[3].x * radius, segment.values[3].y * radius);\n }\n for (let i = path.segments.length - 1; i >= 0; i--) {\n const segment = path.segments[i];\n context.bezierCurveTo(-segment.values[2].x * radius, segment.values[2].y * radius, -segment.values[1].x * radius, segment.values[1].y * radius, -segment.values[0].x * radius, segment.values[0].y * radius);\n }\n}\nconst n = 1.0 / 2;\nconst paths = {\n heart: {\n segments: [{\n values: [{\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: -n / 2\n }]\n }, {\n values: [{\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }]\n }, {\n values: [{\n x: n / 2,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n / 2\n }]\n }]\n },\n diamond: {\n segments: [{\n values: [{\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 3 * n / 4,\n y: 0\n }, {\n x: 3 * n / 4,\n y: 0\n }]\n }, {\n values: [{\n x: 3 * n / 4,\n y: 0\n }, {\n x: 3 * n / 4,\n y: 0\n }, {\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }]\n }]\n },\n club: {\n segments: [{\n values: [{\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }, {\n x: n / 2,\n y: -n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: -n / 2\n }, {\n x: n / 2,\n y: -n / 2\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: 0\n }]\n }, {\n values: [{\n x: n,\n y: 0\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 8\n }]\n }, {\n values: [{\n x: n / 8,\n y: n / 8\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }]\n }, {\n values: [{\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }]\n }]\n },\n spade: {\n segments: [{\n values: [{\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: 0\n }]\n }, {\n values: [{\n x: n,\n y: 0\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 8\n }]\n }, {\n values: [{\n x: n / 8,\n y: n / 8\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }]\n }, {\n values: [{\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }]\n }]\n }\n};\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/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.1
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 */ DiamondDrawer: () => (/* binding */ DiamondDrawer)\n/* harmony export */ });\nclass DiamondDrawer {\n async draw(data) {\n const {\n drawPath,\n paths\n } = await __webpack_require__.e(/*! import() */ \"shapes_cards_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../shapes/cards/dist/browser/Utils.js\"));\n drawPath(data, paths.diamond);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/dist/browser/DiamondDrawer.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DiamondDrawer: () => (/* binding */ DiamondDrawer)\n/* harmony export */ });\n/* harmony import */ var _Utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils.js */ \"../../shapes/cards/dist/browser/Utils.js\");\n\nclass DiamondDrawer {\n draw(data) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_0__.drawPath)(data, _Utils_js__WEBPACK_IMPORTED_MODULE_0__.paths.diamond);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/dist/browser/DiamondDrawer.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../shapes/cards/dist/browser/Utils.js":
31
+ /*!************************************************!*\
32
+ !*** ../../shapes/cards/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 */ drawPath: () => (/* binding */ drawPath),\n/* harmony export */ paths: () => (/* binding */ paths)\n/* harmony export */ });\nfunction drawPath(data, path) {\n if (!path.segments.length || !path.segments[0].values.length) {\n return;\n }\n const {\n context,\n radius\n } = data;\n context.moveTo(path.segments[0].values[0].x * radius, path.segments[0].values[0].y * radius);\n for (const segment of path.segments) {\n context.bezierCurveTo(segment.values[1].x * radius, segment.values[1].y * radius, segment.values[2].x * radius, segment.values[2].y * radius, segment.values[3].x * radius, segment.values[3].y * radius);\n }\n for (let i = path.segments.length - 1; i >= 0; i--) {\n const segment = path.segments[i];\n context.bezierCurveTo(-segment.values[2].x * radius, segment.values[2].y * radius, -segment.values[1].x * radius, segment.values[1].y * radius, -segment.values[0].x * radius, segment.values[0].y * radius);\n }\n}\nconst n = 1.0 / 2;\nconst paths = {\n heart: {\n segments: [{\n values: [{\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: -n / 2\n }]\n }, {\n values: [{\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }]\n }, {\n values: [{\n x: n / 2,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n / 2\n }]\n }]\n },\n diamond: {\n segments: [{\n values: [{\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 3 * n / 4,\n y: 0\n }, {\n x: 3 * n / 4,\n y: 0\n }]\n }, {\n values: [{\n x: 3 * n / 4,\n y: 0\n }, {\n x: 3 * n / 4,\n y: 0\n }, {\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }]\n }]\n },\n club: {\n segments: [{\n values: [{\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }, {\n x: n / 2,\n y: -n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: -n / 2\n }, {\n x: n / 2,\n y: -n / 2\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: 0\n }]\n }, {\n values: [{\n x: n,\n y: 0\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 8\n }]\n }, {\n values: [{\n x: n / 8,\n y: n / 8\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }]\n }, {\n values: [{\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }]\n }]\n },\n spade: {\n segments: [{\n values: [{\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: 0\n }]\n }, {\n values: [{\n x: n,\n y: 0\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 8\n }]\n }, {\n values: [{\n x: n / 8,\n y: n / 8\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }]\n }, {\n values: [{\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }]\n }]\n }\n};\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/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.1
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 */ HeartDrawer: () => (/* binding */ HeartDrawer)\n/* harmony export */ });\nclass HeartDrawer {\n async draw(data) {\n const {\n drawPath,\n paths\n } = await __webpack_require__.e(/*! import() */ \"shapes_cards_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../shapes/cards/dist/browser/Utils.js\"));\n drawPath(data, paths.heart);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/dist/browser/HeartDrawer.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ HeartDrawer: () => (/* binding */ HeartDrawer)\n/* harmony export */ });\n/* harmony import */ var _Utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils.js */ \"../../shapes/cards/dist/browser/Utils.js\");\n\nclass HeartDrawer {\n draw(data) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_0__.drawPath)(data, _Utils_js__WEBPACK_IMPORTED_MODULE_0__.paths.heart);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/dist/browser/HeartDrawer.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../shapes/cards/dist/browser/Utils.js":
31
+ /*!************************************************!*\
32
+ !*** ../../shapes/cards/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 */ drawPath: () => (/* binding */ drawPath),\n/* harmony export */ paths: () => (/* binding */ paths)\n/* harmony export */ });\nfunction drawPath(data, path) {\n if (!path.segments.length || !path.segments[0].values.length) {\n return;\n }\n const {\n context,\n radius\n } = data;\n context.moveTo(path.segments[0].values[0].x * radius, path.segments[0].values[0].y * radius);\n for (const segment of path.segments) {\n context.bezierCurveTo(segment.values[1].x * radius, segment.values[1].y * radius, segment.values[2].x * radius, segment.values[2].y * radius, segment.values[3].x * radius, segment.values[3].y * radius);\n }\n for (let i = path.segments.length - 1; i >= 0; i--) {\n const segment = path.segments[i];\n context.bezierCurveTo(-segment.values[2].x * radius, segment.values[2].y * radius, -segment.values[1].x * radius, segment.values[1].y * radius, -segment.values[0].x * radius, segment.values[0].y * radius);\n }\n}\nconst n = 1.0 / 2;\nconst paths = {\n heart: {\n segments: [{\n values: [{\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: -n / 2\n }]\n }, {\n values: [{\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }]\n }, {\n values: [{\n x: n / 2,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n / 2\n }]\n }]\n },\n diamond: {\n segments: [{\n values: [{\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 3 * n / 4,\n y: 0\n }, {\n x: 3 * n / 4,\n y: 0\n }]\n }, {\n values: [{\n x: 3 * n / 4,\n y: 0\n }, {\n x: 3 * n / 4,\n y: 0\n }, {\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }]\n }]\n },\n club: {\n segments: [{\n values: [{\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }, {\n x: n / 2,\n y: -n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: -n / 2\n }, {\n x: n / 2,\n y: -n / 2\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: 0\n }]\n }, {\n values: [{\n x: n,\n y: 0\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 8\n }]\n }, {\n values: [{\n x: n / 8,\n y: n / 8\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }]\n }, {\n values: [{\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }]\n }]\n },\n spade: {\n segments: [{\n values: [{\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: 0\n }]\n }, {\n values: [{\n x: n,\n y: 0\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 8\n }]\n }, {\n values: [{\n x: n / 8,\n y: n / 8\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }]\n }, {\n values: [{\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }]\n }]\n }\n};\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/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.1
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 */ SpadeDrawer: () => (/* binding */ SpadeDrawer)\n/* harmony export */ });\nclass SpadeDrawer {\n async draw(data) {\n const {\n drawPath,\n paths\n } = await __webpack_require__.e(/*! import() */ \"shapes_cards_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../shapes/cards/dist/browser/Utils.js\"));\n drawPath(data, paths.spade);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/dist/browser/SpadeDrawer.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SpadeDrawer: () => (/* binding */ SpadeDrawer)\n/* harmony export */ });\n/* harmony import */ var _Utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils.js */ \"../../shapes/cards/dist/browser/Utils.js\");\n\nclass SpadeDrawer {\n draw(data) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_0__.drawPath)(data, _Utils_js__WEBPACK_IMPORTED_MODULE_0__.paths.spade);\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/dist/browser/SpadeDrawer.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../shapes/cards/dist/browser/Utils.js":
31
+ /*!************************************************!*\
32
+ !*** ../../shapes/cards/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 */ drawPath: () => (/* binding */ drawPath),\n/* harmony export */ paths: () => (/* binding */ paths)\n/* harmony export */ });\nfunction drawPath(data, path) {\n if (!path.segments.length || !path.segments[0].values.length) {\n return;\n }\n const {\n context,\n radius\n } = data;\n context.moveTo(path.segments[0].values[0].x * radius, path.segments[0].values[0].y * radius);\n for (const segment of path.segments) {\n context.bezierCurveTo(segment.values[1].x * radius, segment.values[1].y * radius, segment.values[2].x * radius, segment.values[2].y * radius, segment.values[3].x * radius, segment.values[3].y * radius);\n }\n for (let i = path.segments.length - 1; i >= 0; i--) {\n const segment = path.segments[i];\n context.bezierCurveTo(-segment.values[2].x * radius, segment.values[2].y * radius, -segment.values[1].x * radius, segment.values[1].y * radius, -segment.values[0].x * radius, segment.values[0].y * radius);\n }\n}\nconst n = 1.0 / 2;\nconst paths = {\n heart: {\n segments: [{\n values: [{\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: -n / 2\n }]\n }, {\n values: [{\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }]\n }, {\n values: [{\n x: n / 2,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n / 2\n }]\n }]\n },\n diamond: {\n segments: [{\n values: [{\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 3 * n / 4,\n y: 0\n }, {\n x: 3 * n / 4,\n y: 0\n }]\n }, {\n values: [{\n x: 3 * n / 4,\n y: 0\n }, {\n x: 3 * n / 4,\n y: 0\n }, {\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }]\n }]\n },\n club: {\n segments: [{\n values: [{\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: n / 2,\n y: -n\n }, {\n x: n / 2,\n y: -n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: -n / 2\n }, {\n x: n / 2,\n y: -n / 2\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: 0\n }]\n }, {\n values: [{\n x: n,\n y: 0\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 8\n }]\n }, {\n values: [{\n x: n / 8,\n y: n / 8\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }]\n }, {\n values: [{\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }]\n }]\n },\n spade: {\n segments: [{\n values: [{\n x: 0,\n y: -n\n }, {\n x: 0,\n y: -n\n }, {\n x: n,\n y: -n / 2\n }, {\n x: n,\n y: 0\n }]\n }, {\n values: [{\n x: n,\n y: 0\n }, {\n x: n,\n y: 0\n }, {\n x: n,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }]\n }, {\n values: [{\n x: n / 2,\n y: n / 2\n }, {\n x: n / 2,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 8,\n y: n / 8\n }]\n }, {\n values: [{\n x: n / 8,\n y: n / 8\n }, {\n x: n / 8,\n y: n / 2\n }, {\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }]\n }, {\n values: [{\n x: n / 2,\n y: n\n }, {\n x: n / 2,\n y: n\n }, {\n x: 0,\n y: n\n }, {\n x: 0,\n y: n\n }]\n }]\n }\n};\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/cards/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.1
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.1
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 */ CircleDrawer: () => (/* binding */ CircleDrawer)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"../../engine/dist/browser/index.js\");\n\nconst sides = 12,\n maxAngle = 360,\n minAngle = 0;\nclass CircleDrawer {\n async draw(data) {\n const {\n drawCircle\n } = await __webpack_require__.e(/*! import() */ \"shapes_circle_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../shapes/circle/dist/browser/Utils.js\"));\n drawCircle(data);\n }\n getSidesCount() {\n return sides;\n }\n async particleInit(container, particle) {\n const shapeData = particle.shapeData,\n angle = shapeData?.angle ?? {\n max: maxAngle,\n min: minAngle\n };\n particle.circleRange = !(0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isObject)(angle) ? {\n min: minAngle,\n max: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.degToRad)(angle)\n } : {\n min: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.degToRad)(angle.min),\n max: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.degToRad)(angle.max)\n };\n await Promise.resolve();\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/circle/dist/browser/CircleDrawer.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CircleDrawer: () => (/* binding */ CircleDrawer)\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 */ \"../../shapes/circle/dist/browser/Utils.js\");\n\n\nconst sides = 12,\n maxAngle = 360,\n minAngle = 0;\nclass CircleDrawer {\n draw(data) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.drawCircle)(data);\n }\n getSidesCount() {\n return sides;\n }\n particleInit(container, particle) {\n const shapeData = particle.shapeData,\n angle = shapeData?.angle ?? {\n max: maxAngle,\n min: minAngle\n };\n particle.circleRange = !(0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isObject)(angle) ? {\n min: minAngle,\n max: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.degToRad)(angle)\n } : {\n min: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.degToRad)(angle.min),\n max: (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.degToRad)(angle.max)\n };\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/circle/dist/browser/CircleDrawer.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../shapes/circle/dist/browser/Utils.js":
31
+ /*!*************************************************!*\
32
+ !*** ../../shapes/circle/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 */ drawCircle: () => (/* binding */ drawCircle)\n/* harmony export */ });\nconst double = 2,\n doublePI = Math.PI * double,\n minAngle = 0,\n origin = {\n x: 0,\n y: 0\n };\nfunction drawCircle(data) {\n const {\n context,\n particle,\n radius\n } = data;\n if (!particle.circleRange) {\n particle.circleRange = {\n min: minAngle,\n max: doublePI\n };\n }\n const circleRange = particle.circleRange;\n context.arc(origin.x, origin.y, radius, circleRange.min, circleRange.max, false);\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/circle/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.1
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.1
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 */ EmojiDrawer: () => (/* binding */ EmojiDrawer)\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 _Constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Constants.js */ \"../../shapes/emoji/dist/browser/Constants.js\");\n\n\nconst defaultFont = '\"Twemoji Mozilla\", Apple Color Emoji, \"Segoe UI Emoji\", \"Noto Color Emoji\", \"EmojiOne Color\"';\nclass EmojiDrawer {\n constructor() {\n this._emojiShapeDict = new Map();\n }\n destroy() {\n for (const [key, emojiData] of this._emojiShapeDict) {\n if (emojiData instanceof ImageBitmap) {\n emojiData?.close();\n this._emojiShapeDict.delete(key);\n }\n }\n }\n async draw(data) {\n const {\n drawEmoji\n } = await __webpack_require__.e(/*! import() */ \"shapes_emoji_dist_browser_Utils_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./Utils.js */ \"../../shapes/emoji/dist/browser/Utils.js\"));\n drawEmoji(data);\n }\n async init(container) {\n const options = container.actualOptions;\n if (!_Constants_js__WEBPACK_IMPORTED_MODULE_1__.validTypes.find(t => (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(t, options.particles.shape.type))) {\n return;\n }\n const promises = [(0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.loadFont)(defaultFont)],\n shapeOptions = _Constants_js__WEBPACK_IMPORTED_MODULE_1__.validTypes.map(t => options.particles.shape.options[t]).find(t => !!t);\n if (shapeOptions) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.executeOnSingleOrMultiple)(shapeOptions, shape => {\n if (shape.font) {\n promises.push((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.loadFont)(shape.font));\n }\n });\n }\n await Promise.all(promises);\n }\n particleDestroy(particle) {\n delete particle.emojiData;\n }\n async particleInit(container, particle) {\n const double = 2,\n shapeData = particle.shapeData;\n if (!shapeData?.value) {\n return;\n }\n const emoji = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.itemFromSingleOrMultiple)(shapeData.value, particle.randomIndexData),\n font = shapeData.font ?? defaultFont;\n if (!emoji) {\n return;\n }\n const key = `${emoji}_${font}`,\n existingData = this._emojiShapeDict.get(key);\n if (existingData) {\n particle.emojiData = existingData;\n return;\n }\n const canvasSize = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMax)(particle.size.value) * double;\n let emojiData;\n const maxSize = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMax)(particle.size.value);\n if (typeof OffscreenCanvas !== \"undefined\") {\n const canvas = new OffscreenCanvas(canvasSize, canvasSize),\n context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(emoji, maxSize, maxSize);\n emojiData = canvas.transferToImageBitmap();\n } else {\n const canvas = document.createElement(\"canvas\");\n canvas.width = canvasSize;\n canvas.height = canvasSize;\n const context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(emoji, maxSize, maxSize);\n emojiData = canvas;\n }\n this._emojiShapeDict.set(key, emojiData);\n particle.emojiData = emojiData;\n await Promise.resolve();\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/emoji/dist/browser/EmojiDrawer.js?");
26
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EmojiDrawer: () => (/* binding */ EmojiDrawer)\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 */ \"../../shapes/emoji/dist/browser/Utils.js\");\n/* harmony import */ var _Constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Constants.js */ \"../../shapes/emoji/dist/browser/Constants.js\");\n\n\n\nconst defaultFont = '\"Twemoji Mozilla\", Apple Color Emoji, \"Segoe UI Emoji\", \"Noto Color Emoji\", \"EmojiOne Color\"';\nclass EmojiDrawer {\n constructor() {\n this._emojiShapeDict = new Map();\n }\n destroy() {\n for (const [key, emojiData] of this._emojiShapeDict) {\n if (emojiData instanceof ImageBitmap) {\n emojiData?.close();\n this._emojiShapeDict.delete(key);\n }\n }\n }\n draw(data) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.drawEmoji)(data);\n }\n async init(container) {\n const options = container.actualOptions;\n if (!_Constants_js__WEBPACK_IMPORTED_MODULE_2__.validTypes.find(t => (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(t, options.particles.shape.type))) {\n return;\n }\n const promises = [(0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.loadFont)(defaultFont)],\n shapeOptions = _Constants_js__WEBPACK_IMPORTED_MODULE_2__.validTypes.map(t => options.particles.shape.options[t]).find(t => !!t);\n if (shapeOptions) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.executeOnSingleOrMultiple)(shapeOptions, shape => {\n if (shape.font) {\n promises.push((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.loadFont)(shape.font));\n }\n });\n }\n await Promise.all(promises);\n }\n particleDestroy(particle) {\n delete particle.emojiData;\n }\n particleInit(container, particle) {\n const double = 2,\n shapeData = particle.shapeData;\n if (!shapeData?.value) {\n return;\n }\n const emoji = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.itemFromSingleOrMultiple)(shapeData.value, particle.randomIndexData),\n font = shapeData.font ?? defaultFont;\n if (!emoji) {\n return;\n }\n const key = `${emoji}_${font}`,\n existingData = this._emojiShapeDict.get(key);\n if (existingData) {\n particle.emojiData = existingData;\n return;\n }\n const canvasSize = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMax)(particle.size.value) * double;\n let emojiData;\n const maxSize = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMax)(particle.size.value);\n if (typeof OffscreenCanvas !== \"undefined\") {\n const canvas = new OffscreenCanvas(canvasSize, canvasSize),\n context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(emoji, maxSize, maxSize);\n emojiData = canvas.transferToImageBitmap();\n } else {\n const canvas = document.createElement(\"canvas\");\n canvas.width = canvasSize;\n canvas.height = canvasSize;\n const context = canvas.getContext(\"2d\");\n if (!context) {\n return;\n }\n context.font = `400 ${maxSize * double}px ${font}`;\n context.textBaseline = \"middle\";\n context.textAlign = \"center\";\n context.fillText(emoji, maxSize, maxSize);\n emojiData = canvas;\n }\n this._emojiShapeDict.set(key, emojiData);\n particle.emojiData = emojiData;\n }\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/emoji/dist/browser/EmojiDrawer.js?");
27
+
28
+ /***/ }),
29
+
30
+ /***/ "../../shapes/emoji/dist/browser/Utils.js":
31
+ /*!************************************************!*\
32
+ !*** ../../shapes/emoji/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 */ drawEmoji: () => (/* binding */ drawEmoji)\n/* harmony export */ });\nfunction drawEmoji(data) {\n const {\n context,\n particle,\n radius,\n opacity\n } = data,\n emojiData = particle.emojiData,\n double = 2,\n diameter = radius * double,\n previousAlpha = context.globalAlpha;\n if (!emojiData) {\n return;\n }\n context.globalAlpha = opacity;\n context.drawImage(emojiData, -radius, -radius, diameter, diameter);\n context.globalAlpha = previousAlpha;\n}\n\n//# sourceURL=webpack://@tsparticles/confetti/../../shapes/emoji/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.1
7
+ * v3.3.0
8
8
  */
9
9
  "use strict";
10
10
  /*