From fffb8af7c481882f47baafca65a39cd25ff0bae6 Mon Sep 17 00:00:00 2001 From: BFlat Date: Wed, 27 Jul 2022 00:08:00 +0100 Subject: [PATCH] framer motion animation --- packages/fakeyou/package.json | 1 + packages/fakeyou/src/App.tsx | 18 +- packages/fakeyou/src/data/animation.ts | 25 + .../v2/view/about/about_page/AboutPage.tsx | 526 +++++++++--------- .../tts/tts_model_list/TtsModelListFc.tsx | 213 ++++--- yarn.lock | 114 ++++ 6 files changed, 519 insertions(+), 378 deletions(-) diff --git a/packages/fakeyou/package.json b/packages/fakeyou/package.json index 5eb9ef1a6c..71d453758d 100644 --- a/packages/fakeyou/package.json +++ b/packages/fakeyou/package.json @@ -26,6 +26,7 @@ "bulma": "^0.9.0", "craco": "^0.0.3", "date-fns": "^2.22.1", + "framer-motion": "^6.5.1", "howler": "^2.2.0", "i18next": "^21.6.11", "js-cookie": "^3.0.1", diff --git a/packages/fakeyou/src/App.tsx b/packages/fakeyou/src/App.tsx index 510b489f5c..fdaadae127 100644 --- a/packages/fakeyou/src/App.tsx +++ b/packages/fakeyou/src/App.tsx @@ -169,20 +169,20 @@ class App extends React.Component { componentWillMount() { // Handle redesign - console.log('componentWillMount', 'useRefresh?', USE_REFRESH); + console.log("componentWillMount", "useRefresh?", USE_REFRESH); if (USE_REFRESH) { // Redesign-specific CSS - // NB(echelon): Despite the branches here, scss is all combined together at compile time - // in staging and production (not development). To handle those environments, styles are - // additionally applied based on the root "fakeyou-refresh" class, which may have changed + // NB(echelon): Despite the branches here, scss is all combined together at compile time + // in staging and production (not development). To handle those environments, styles are + // additionally applied based on the root "fakeyou-refresh" class, which may have changed // some of the specificity rules of Bootstrap. require("./AppNew.scss"); } else { // Old design CSS // NB(echelon): Despite the branches here, scss is all combined together at compile time - // in staging and production (not development). To handle those environments, styles are - // additionally applied based on the root "fakeyou-old" class, which may have changed some + // in staging and production (not development). To handle those environments, styles are + // additionally applied based on the root "fakeyou-old" class, which may have changed some // of the specificity rules of Bulma. require("./AppOld.scss"); require("./v2/view/_css/footer.scss"); @@ -542,7 +542,11 @@ class App extends React.Component { let mainClassNames = USE_REFRESH ? "bg-gradient" : ""; let particlesBg = <>; if (USE_REFRESH) { - particlesBg = <> + particlesBg = ( + <> + + + ); } return ( diff --git a/packages/fakeyou/src/data/animation.ts b/packages/fakeyou/src/data/animation.ts index 2fc7888d08..45e8f036ed 100644 --- a/packages/fakeyou/src/data/animation.ts +++ b/packages/fakeyou/src/data/animation.ts @@ -8,3 +8,28 @@ export const duration = "400"; export const pricing1 = "0"; export const pricing2 = "100"; export const pricing3 = "200"; + +export const container = { + visible: { + opacity: 1, + transition: { + staggerChildren: 0.05, + }, + }, + hidden: { opacity: 0 }, +}; + +export const item = { + visible: { opacity: 1, y: 0 }, + hidden: { opacity: 0, y: 50 }, +}; + +export const image = { + visible: { opacity: 1, x: 0, transition: { delay: 0.1 } }, + hidden: { opacity: 0, x: 100 }, +}; + +export const panel = { + visible: { opacity: 1, y: 0, transition: { delay: 0.25 } }, + hidden: { opacity: 0, y: 50 }, +}; diff --git a/packages/fakeyou/src/v2/view/about/about_page/AboutPage.tsx b/packages/fakeyou/src/v2/view/about/about_page/AboutPage.tsx index 460deff9fc..89ceda41e0 100644 --- a/packages/fakeyou/src/v2/view/about/about_page/AboutPage.tsx +++ b/packages/fakeyou/src/v2/view/about/about_page/AboutPage.tsx @@ -1,8 +1,8 @@ import React from "react"; import { Link } from "react-router-dom"; -import { distance, delay, delay2, duration } from "../../../../data/animation"; +import { container, item, image, panel } from "../../../../data/animation"; +import { motion } from "framer-motion"; import { USE_REFRESH } from "../../../../Refresh"; -const Fade = require("react-reveal/Fade"); interface Props {} @@ -272,291 +272,289 @@ function AboutPage(props: Props) { } return ( -
+
- - FakeYou Kitsune Mascot! - +
- -
-
-

- A Glimpse of the Future -

-
-
-

- We're building FakeYou as just one component of a broad set - of production and creative tooling. -

-
+
+
+ + A Glimpse of the Future +
- +
+ + We're building FakeYou as just one component of a broad set of + production and creative tooling. + +
+
-
- -
-

About FakeYou

-
+ +
+

About FakeYou

+
+

+ Your brain was already capable of imagining things spoken in other + people's voices. This is a demonstration of how far computers have + caught up. One day computers will be able to bring all of the rich + and vivid imagery of your hopes and dreams to life. There's never + been a better time throughout all history to be a creative than + now. +

+
+

Technology disclosure

- Your brain was already capable of imagining things spoken in - other people's voices. This is a demonstration of how far - computers have caught up. One day computers will be able to - bring all of the rich and vivid imagery of your hopes and dreams - to life. There's never been a better time throughout all history - to be a creative than now. + + We'll be happy to remove any of the voices featured here for + any reason. See our terms page for + more info. + +

+
+

+ ”Deep fakes” are kind of like Photoshop when it + first came out. They're impressive, maybe a little bit scary, + but they're about to become the new norm. People will become + accustomed to the technology, and the results will be used + mostly for creative good, unlocking previously costly and + unattainable high production values for individual creators. + It's our belief that the next Hollywood will be you. +

+
+

+ The technology to clone voices is already out in the open, and + the voices here are built by a community of contributors. We're + not the only website doing this, and plenty of people are + producing these same results on their own at home, independent + of our work. You can see thousands of examples on YouTube and + social media. +

+
+

+ Even if the United States chooses to ban this technology, + institutions in China, Japan, Canada, and other countries all + over the world are rapidly conducting and publishing research on + this topic. People everywhere have access to this easy-to-use + technology. State actors probably have even more sophisiticated + versions available. +

+
+

+ As an interesting point, most if not all of the voices produced + by this website are actually + Linda Johnson with a little bit layered on top.

-
-

Technology disclosure

-

- - We'll be happy to remove any of the voices featured here for - any reason. See our terms page for - more info. - -

-
-

- ”Deep fakes” are kind of like Photoshop when it - first came out. They're impressive, maybe a little bit scary, - but they're about to become the new norm. People will become - accustomed to the technology, and the results will be used - mostly for creative good, unlocking previously costly and - unattainable high production values for individual creators. - It's our belief that the next Hollywood will be you. -

-
-

- The technology to clone voices is already out in the open, and - the voices here are built by a community of contributors. - We're not the only website doing this, and plenty of people - are producing these same results on their own at home, - independent of our work. You can see thousands of examples on - YouTube and social media. -

-
-

- Even if the United States chooses to ban this technology, - institutions in China, Japan, Canada, and other countries all - over the world are rapidly conducting and publishing research - on this topic. People everywhere have access to this - easy-to-use technology. State actors probably have even more - sophisiticated versions available. -

-
-

- As an interesting point, most if not all of the voices - produced by this website are actually - Linda Johnson with a little bit layered on top. -

-

- - NVIDIA makes these tools publicly available for you to make - your own voice models - - . Check it out! -

-
-
-

FakeYou was previously Vocodes

-

- FakeYou.com was previously known as{" "} - https://vo.codes, but has been rebranded to - better reflect its purpose and direction. (Not many people - know what a vocoder is anyway, so it didn't make - sense to keep the name.) -

-
-
-

Thanks

-

- Thanks to the following individuals (in no particular order) - for help with data gathering and annotation, Discord - moderation, ML advice, etc. -

-
-

- Vegito1089, Shin, Ashurath, MakaveliGH, Blutarch Mann, Yahia, - Tim Squid, Seuneramet, Matt, Seth, CookiePPP,{" "} - - @r9y9 - - , BFlat, Raisin. -

+

+ + NVIDIA makes these tools publicly available for you to make + your own voice models + + . Check it out! +

+
+
+

FakeYou was previously Vocodes

+

+ FakeYou.com was previously known as{" "} + https://vo.codes, but has been rebranded to + better reflect its purpose and direction. (Not many people know + what a vocoder is anyway, so it didn't make sense to + keep the name.) +

+
+
+

Thanks

+

+ Thanks to the following individuals (in no particular order) for + help with data gathering and annotation, Discord moderation, ML + advice, etc. +

+
+

+ Vegito1089, Shin, Ashurath, MakaveliGH, Blutarch Mann, Yahia, + Tim Squid, Seuneramet, Matt, Seth, CookiePPP,{" "} + + @r9y9 + + , BFlat, Raisin. +

-
+
-

- The following papers, models, and resources were used: -
-
- - Tacotron2 - {" "} - (BSD-3 license),{" "} - - glow-tts - {" "} - (MIT license), {/* MIT */} - - MelGAN - {" "} - (BSD-3 license), {/* BSD3 */} - - Multi-band MelGAN - {" "} - (paper),{" "} - - HiFi-GAN - {" "} - (paper),{" "} - - Wav2Lip - {" "} - (MIT license), {/* Non-commercial */} - - CMUDict - {" "} - (BSD-2 license),{" "} - - LJSpeech - {" "} - (public domain),{" "} - - VCTK - {" "} - (CC BY 4.0). -

+

+ The following papers, models, and resources were used:
-

- Videos are generated by the amazing Wav2Lip system{" "} - - (paper) - - , by Prajwal{" "} - - (@prajwalkr14) - - , K R and Mukhopadhyay, Rudrabha and Namboodiri, Vinay P. and - Jawahar, C.V. -

-
-
-

Contact

-

- Reach out to "echelon" on{" "} - - Twitter - -  and Hacker News. Say hi. -

+
+ + Tacotron2 + {" "} + (BSD-3 license),{" "} + + glow-tts + {" "} + (MIT license), {/* MIT */} + + MelGAN + {" "} + (BSD-3 license), {/* BSD3 */} + + Multi-band MelGAN + {" "} + (paper),{" "} + + HiFi-GAN + {" "} + (paper),{" "} + + Wav2Lip + {" "} + (MIT license), {/* Non-commercial */} + + CMUDict + {" "} + (BSD-2 license),{" "} + + LJSpeech + {" "} + (public domain),{" "} + + VCTK + {" "} + (CC BY 4.0). +

+
+

+ Videos are generated by the amazing Wav2Lip system{" "} + + (paper) + + , by Prajwal{" "} + + (@prajwalkr14) + + , K R and Mukhopadhyay, Rudrabha and Namboodiri, Vinay P. and + Jawahar, C.V. +

+
+
+

Contact

+

+ Reach out to "echelon" on{" "} + + Twitter + +  and Hacker News. Say hi. +

-

- The Storyteller Company (registered as Learning Machines, LLC) -

-
-
-

Built With

-
-
- models are written in pytorch -
-
- core server components are written in Rust -
-
- the cluster scales with k8s -
+

+ The Storyteller Company (registered as Learning Machines, LLC) +

+
+
+

Built With

+
+
+ models are written in pytorch +
+
+ core server components are written in Rust +
+
+ the cluster scales with k8s
- -
-
+
+
+ ); } diff --git a/packages/fakeyou/src/v2/view/tts/tts_model_list/TtsModelListFc.tsx b/packages/fakeyou/src/v2/view/tts/tts_model_list/TtsModelListFc.tsx index 24f2033f5d..dec3a701e8 100644 --- a/packages/fakeyou/src/v2/view/tts/tts_model_list/TtsModelListFc.tsx +++ b/packages/fakeyou/src/v2/view/tts/tts_model_list/TtsModelListFc.tsx @@ -36,7 +36,6 @@ import { t } from "i18next"; import { Trans } from "react-i18next"; import { TwitchTtsNotice } from "./notices/TwitchTtsNotice"; import { PleaseFollowNotice } from "./notices/PleaseFollowNotice"; -import { distance, delay, delay2, duration } from "../../../../data/animation"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faTrash, @@ -44,8 +43,8 @@ import { faVolumeUp, } from "@fortawesome/free-solid-svg-icons"; import { USE_REFRESH } from "../../../../Refresh"; - -const Fade = require("react-reveal/Fade"); +import { motion } from "framer-motion"; +import { container, item, image, panel } from "../../../../data/animation"; export interface EnqueueJobResponsePayload { success: boolean; @@ -434,7 +433,7 @@ function TtsModelListFc(props: Props) { } return ( -
+ {pleaseFollowNotice} {languageNotice} @@ -447,123 +446,123 @@ function TtsModelListFc(props: Props) {
- - FakeYou Mascot - +
- -
-

- Text to Speech -

-

- - Use FakeYou's deepfake tech to say stuff with your favorite - characters. - -

-
-
+
+ + Text to Speech + + + + Use FakeYou's deepfake tech to say stuff with your favorite + characters. + + +
- -
- {signUpButton} - - - -
-
+ + {signUpButton} + + + +
-
- -
- -

- - Create TTS -

-
-
-
- + +
+ +

+ + Create TTS +

+
+
+ + - + - {directViewLink} + {directViewLink} -
- -
+
+ +
- {maybeError} + {maybeError} -
- - -
- -
+
+ + +
+
- -
+
+
-
+ ); } diff --git a/yarn.lock b/yarn.lock index ea916dd665..fa573aac7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1143,6 +1143,18 @@ dependencies: postcss-value-parser "^4.2.0" +"@emotion/is-prop-valid@^0.8.2": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + dependencies: + "@emotion/memoize" "0.7.4" + +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + "@eslint/eslintrc@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" @@ -2128,6 +2140,59 @@ npmlog "^4.1.2" write-file-atomic "^3.0.3" +"@motionone/animation@^10.12.0": + version "10.13.1" + resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.13.1.tgz#ebacb50df4b7eb4957cf398c221ae10852f28520" + integrity sha512-dxQ+1wWxL6iFHDy1uv6hhcPjIdOg36eDT56jN4LI7Z5HZRyLpq8x1t7JFQclo/IEIb+6Bk4atmyinGFdXVECuA== + dependencies: + "@motionone/easing" "^10.13.1" + "@motionone/types" "^10.13.0" + "@motionone/utils" "^10.13.1" + tslib "^2.3.1" + +"@motionone/dom@10.12.0": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.12.0.tgz#ae30827fd53219efca4e1150a5ff2165c28351ed" + integrity sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw== + dependencies: + "@motionone/animation" "^10.12.0" + "@motionone/generators" "^10.12.0" + "@motionone/types" "^10.12.0" + "@motionone/utils" "^10.12.0" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@motionone/easing@^10.13.1": + version "10.13.1" + resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.13.1.tgz#7927b7fe96135989e37c2cda957e4101a4b85aa8" + integrity sha512-INEsInHHDHVgx0dp5qlXi1lMXBqYicgLMMSn3zfGzaIvcaEbI1Uz8BoyNV4BiclTupG7RYIh+T6BU83ZcEe74g== + dependencies: + "@motionone/utils" "^10.13.1" + tslib "^2.3.1" + +"@motionone/generators@^10.12.0": + version "10.13.1" + resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.13.1.tgz#d4989d887b864e0aefbbec63eed35ce298a73773" + integrity sha512-+HK5u2YcNJCckTTqfOLgSVcrWv2z1dVwrSZEMVJuAh0EnWEWGDJRvMBoPc0cFf/osbkA2Rq9bH2+vP0Ex/D8uw== + dependencies: + "@motionone/types" "^10.13.0" + "@motionone/utils" "^10.13.1" + tslib "^2.3.1" + +"@motionone/types@^10.12.0", "@motionone/types@^10.13.0": + version "10.13.0" + resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.13.0.tgz#b22c549931ebd88ed5528158b5d611dc9dbb3756" + integrity sha512-qegk4qg8U1N9ZwAJ187BG3TkZz1k9LP/pvNtCSlqdq/PMUDKlCFG4ZnjJ481P0IOH/vIw1OzIbKIuyg0A3rk9g== + +"@motionone/utils@^10.12.0", "@motionone/utils@^10.13.1": + version "10.13.1" + resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.13.1.tgz#14919dfcda36b54b184fff690bc0125d554f60cd" + integrity sha512-TjDPTIppaf3ofBXQv4ZzAketJgN0sclALXfZ6mfrkjJkOy83mLls9744F+6S+VKCpBmvbZcBY4PQfrfhAfeMtA== + dependencies: + "@motionone/types" "^10.13.0" + hey-listen "^1.0.8" + tslib "^2.3.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -6884,6 +6949,27 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +framer-motion@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.5.1.tgz#802448a16a6eb764124bf36d8cbdfa6dd6b931a7" + integrity sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw== + dependencies: + "@motionone/dom" "10.12.0" + framesync "6.0.1" + hey-listen "^1.0.8" + popmotion "11.0.3" + style-value-types "5.0.0" + tslib "^2.1.0" + optionalDependencies: + "@emotion/is-prop-valid" "^0.8.2" + +framesync@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20" + integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA== + dependencies: + tslib "^2.1.0" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -7378,6 +7464,11 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hey-listen@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" + integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== + history@^4.9.0: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" @@ -10642,6 +10733,16 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +popmotion@11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9" + integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA== + dependencies: + framesync "6.0.1" + hey-listen "^1.0.8" + style-value-types "5.0.0" + tslib "^2.1.0" + portfinder@^1.0.28: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" @@ -13007,6 +13108,14 @@ style-loader@^3.3.1: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== +style-value-types@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad" + integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA== + dependencies: + hey-listen "^1.0.8" + tslib "^2.1.0" + stylehacks@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.2.tgz#fa10e5181c6e8dc0bddb4a3fb372e9ac42bba2ad" @@ -13487,6 +13596,11 @@ tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.1.0, tslib@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tsparticles-engine@^2.0.6, tsparticles-engine@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/tsparticles-engine/-/tsparticles-engine-2.1.3.tgz#d8922cf7811c40e5e9b87b18f9cc86043af8e900"