├── .gitignore ├── .gitpod.yml ├── README.md ├── build ├── asset-manifest.json ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json ├── robots.txt └── static │ ├── css │ ├── main.1ea66bba.css │ └── main.1ea66bba.css.map │ └── js │ ├── main.0e2989e0.js │ ├── main.0e2989e0.js.LICENSE.txt │ └── main.0e2989e0.js.map ├── cache └── solidity-files-cache.json ├── config-overrides.js ├── hardhat.config.js ├── index.html ├── package.json ├── postcss.config.js ├── public ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt ├── screenshots ├── 0.gif ├── 1.gif └── 3.gif ├── scripts ├── deploy.js └── seed.js ├── src ├── App.jsx ├── abis │ ├── @openzeppelin │ │ └── contracts │ │ │ ├── access │ │ │ └── Ownable.sol │ │ │ │ ├── Ownable.dbg.json │ │ │ │ └── Ownable.json │ │ │ ├── security │ │ │ └── ReentrancyGuard.sol │ │ │ │ ├── ReentrancyGuard.dbg.json │ │ │ │ └── ReentrancyGuard.json │ │ │ └── utils │ │ │ ├── Context.sol │ │ │ ├── Context.dbg.json │ │ │ └── Context.json │ │ │ ├── Counters.sol │ │ │ ├── Counters.dbg.json │ │ │ └── Counters.json │ │ │ └── math │ │ │ └── SafeMath.sol │ │ │ ├── SafeMath.dbg.json │ │ │ └── SafeMath.json │ ├── build-info │ │ └── 07c767d2c410cb819d9a32ba392f0dd3.json │ ├── contractAddress.json │ └── src │ │ └── contracts │ │ └── PlayToEarn.sol │ │ ├── PlayToEarn.dbg.json │ │ └── PlayToEarn.json ├── components │ ├── Chat.jsx │ ├── ChatButton.jsx │ ├── CreateGame.jsx │ ├── Footer.jsx │ ├── Game.jsx │ ├── GameInfo.jsx │ ├── GameList.jsx │ ├── GameResult.jsx │ ├── Header.jsx │ ├── Hero.jsx │ ├── InvitationList.jsx │ ├── InviteModal.jsx │ └── index.jsx ├── contracts │ └── PlayToEarn.sol ├── index.css ├── index.jsx ├── pages │ ├── GamePlay.jsx │ ├── Home.jsx │ ├── Invitations.jsx │ └── MyGames.jsx ├── services │ ├── blockchain.jsx │ └── chat.jsx └── store │ ├── faker.jsx │ └── index.jsx ├── tailwind.config.js ├── test └── PlayToEarn.test.js ├── txt.txt └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | .env -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | # This configuration file was automatically generated by Gitpod. 2 | # Please adjust to your needs (see https://www.gitpod.io/docs/introduction/learn-gitpod/gitpod-yaml) 3 | # and commit this file to your remote git repository to share the goodness with others. 4 | 5 | # Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart 6 | 7 | tasks: 8 | - init: npm install && npm run build 9 | command: npm run start 10 | 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # How to Build a Web3 Play-To-Earn Money Dapp with React, Solidity, and CometChat 2 | 3 | Access the [Teaching Guide Here](https://docs.google.com/document/d/13bBRyAO0bEwRt776FXbYgWm6-OBFiUu6zTeOgRbXXyI/edit?usp=sharing). 4 | 5 | This example shows How to Build a Web3 Play-To-Earn Dapp with React, Solidity, and CometChat: 6 | 7 | ![Game Play](./screenshots/0.gif) 8 | 9 |
Game Play to Earn
10 | 11 | ![Result and Payout](./screenshots/1.gif) 12 | 13 |
Result and Payout
14 | 15 | ![Play to Earn Live Chat](./screenshots/3.gif) 16 | 17 |
Play to Earn Live
18 | 19 | ## Technology 20 | 21 | This demo uses: 22 | 23 | - Metamask 24 | - Hardhat 25 | - Infuria 26 | - ReactJs 27 | - Tailwind CSS 28 | - Solidity 29 | - EthersJs 30 | - Faucet 31 | 32 | ## Running the demo 33 | 34 | To run the demo follow these steps: 35 | 36 | 1. Clone the project with the code below. 37 | 38 | ```sh 39 | 40 | # Make sure you have the above prerequisites installed already! 41 | git clone https://github.com/Daltonic/P2E PROJECT_NAME 42 | cd PROJECT_NAME # Navigate to the new folder. 43 | yarn install # Installs all the dependencies. 44 | ``` 45 | 46 | 2. Create a CometChat project, copy and paste your key in the spaces below. 47 | 3. Update the `.env` file with the following details. 48 | ```sh 49 | REACT_APP_COMET_CHAT_APP_ID= 50 | REACT_APP_COMET_CHAT_AUTH_KEY= 51 | REACT_APP_COMET_CHAT_REGION= 52 | REACT_APP_RPC_URL= 53 | ``` 54 | 4. Run the app using the following commands. 55 | ```sh 56 | yarn install 57 | yarn hardhat node 58 | yarn hardhat run scripts/deploy.js 59 | ``` 60 | 5. On another terminal, run `yarn start` to launch the project on the browser. 61 | 6. Add some hardhat accounts, connect your wallet and interact with the app. 62 |
63 | 64 | If your confuse about the installation, check out this **TUTORIAL** to see how you should run it. 65 | 66 | 67 | ## Useful links 68 | 69 | - 🏠 [Website](https://dappmentors.org/) 70 | - ⚽ [Metamask](https://metamask.io/) 71 | - 🚀 [CometChat](https://try.cometchat.com/oj0s7hrm5v78) 72 | - 💡 [Hardhat](https://hardhat.org/) 73 | - 📈 [Infuria](https://infura.io/) 74 | - 🔥 [ReactJs](https://reactjs.org/) 75 | - 🐻 [Solidity](https://soliditylang.org/) 76 | - 👀 [EthersJs](https://docs.ethers.io/v5/) 77 | - 🎅 [Faucet](https://www.alchemy.com/faucets) 78 | - ✨ [Live Demo](https://play-to-earn-three.vercel.app/) 79 | -------------------------------------------------------------------------------- /build/asset-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "main.css": "/static/css/main.1ea66bba.css", 4 | "main.js": "/static/js/main.0e2989e0.js", 5 | "index.html": "/index.html", 6 | "main.1ea66bba.css.map": "/static/css/main.1ea66bba.css.map", 7 | "main.0e2989e0.js.map": "/static/js/main.0e2989e0.js.map" 8 | }, 9 | "entrypoints": [ 10 | "static/css/main.1ea66bba.css", 11 | "static/js/main.0e2989e0.js" 12 | ] 13 | } -------------------------------------------------------------------------------- /build/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/build/favicon.ico -------------------------------------------------------------------------------- /build/index.html: -------------------------------------------------------------------------------- 1 | React App
-------------------------------------------------------------------------------- /build/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/build/logo192.png -------------------------------------------------------------------------------- /build/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/build/logo512.png -------------------------------------------------------------------------------- /build/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /build/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /build/static/css/main.1ea66bba.css: -------------------------------------------------------------------------------- 1 | @import url(https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;500;600;700&display=swap);:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error)}.Toastify__toast-container{box-sizing:border-box;color:#fff;padding:4px;position:fixed;-webkit-transform:translateZ(9999);-webkit-transform:translateZ(var(--toastify-z-index));width:320px;width:var(--toastify-toast-width);z-index:9999;z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:1em;top:1em}.Toastify__toast-container--top-center{left:50%;top:1em;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.Toastify__toast-container--top-right{right:1em;top:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{left:0;margin:0;padding:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;-webkit-transform:translateX(0);transform:translateX(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;-webkit-transform:translateX(0);transform:translateX(0)}.Toastify__toast-container--rtl{left:auto;right:0}}.Toastify__toast{border-radius:4px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);box-sizing:border-box;cursor:default;direction:ltr;display:flex;font-family:sans-serif;font-family:var(--toastify-font-family);justify-content:space-between;margin-bottom:1rem;max-height:800px;max-height:var(--toastify-toast-max-height);min-height:64px;min-height:var(--toastify-toast-min-height);overflow:hidden;padding:8px;position:relative;z-index:0}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-body{align-items:center;display:flex;flex:1 1 auto;margin:auto 0;padding:6px}.Toastify__toast-body>div:last-child{flex:1 1;word-break:break-word}.Toastify__toast-icon{-webkit-margin-end:10px;display:flex;flex-shrink:0;margin-inline-end:10px;width:20px}.Toastify--animate{-webkit-animation-duration:.7s;animation-duration:.7s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.Toastify--animate-icon{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media only screen and (max-width:480px){.Toastify__toast{border-radius:0;margin-bottom:0}}.Toastify__toast-theme--dark{background:#121212;background:var(--toastify-color-dark);color:#fff;color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:#fff;background:var(--toastify-color-light);color:#757575;color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:#3498db;background:var(--toastify-color-info);color:#fff;color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:#07bc0c;background:var(--toastify-color-success);color:#fff;color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:#f1c40f;background:var(--toastify-color-warning);color:#fff;color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:#e74c3c;background:var(--toastify-color-error);color:#fff;color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:#bb86fc;background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:#3498db;background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:#07bc0c;background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:#f1c40f;background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:#e74c3c;background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:hsla(0,0%,100%,.7);background:var(--toastify-color-transparent)}.Toastify__close-button{align-self:flex-start;background:transparent;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;transition:.3s ease}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:5px;left:0;opacity:.7;position:absolute;-webkit-transform-origin:left;transform-origin:left;width:100%;z-index:9999;z-index:var(--toastify-z-index)}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{left:auto;right:0;-webkit-transform-origin:right;transform-origin:right}.Toastify__spinner{-webkit-animation:Toastify__spin .65s linear infinite;animation:Toastify__spin .65s linear infinite;border:2px solid #e0e0e0;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:#616161;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}@-webkit-keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}* html{box-sizing:border-box;margin:0;padding:0}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Open Sans,sans-serif} 2 | 3 | /* 4 | ! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com 5 | */*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#9ca3af}input::placeholder,textarea::placeholder{color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}select{color-adjust:exact;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact}[multiple]{color-adjust:initial;background-image:none;background-position:0 0;background-repeat:repeat;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:initial}[type=checkbox],[type=radio]{color-adjust:exact;--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:transparent none repeat 0 0/auto auto padding-box border-box scroll;background:initial;border-color:inherit;border-radius:0;border-width:0;font-size:inherit;line-height:inherit;padding:0}[type=file]:focus{outline:1px auto -webkit-focus-ring-color}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-14{bottom:3.5rem}.left-0{left:0}.right-0{right:0}.top-0{top:0}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.my-10{margin-bottom:2.5rem;margin-top:2.5rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-5{margin-bottom:1.25rem;margin-top:1.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mr-4{margin-right:1rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-12{height:3rem}.h-32{height:8rem}.h-\[48px\]{height:48px}.h-\[4rem\]{height:4rem}.h-\[70px\]{height:70px}.h-\[89vh\]{height:89vh}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[20rem\]{max-height:20rem}.min-h-screen{min-height:100vh}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-3\/5{width:60%}.w-56{width:14rem}.w-\[150px\]{width:150px}.w-full{width:100%}.w-screen{width:100vw}.origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.scale-0,.scale-100{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-6{gap:1.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity))}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0}.border-\[1px\]{border-width:1px}.border-b{border-bottom-width:1px}.border-none{border-style:none}.border-\[\#212D4A\]{--tw-border-opacity:1;border-color:rgb(33 45 74/var(--tw-border-opacity))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.bg-orange-700{--tw-bg-opacity:1;background-color:rgb(194 65 12/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-opacity-50{--tw-bg-opacity:0.5}.object-cover{object-fit:cover}.p-2{padding:.5rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.pt-5{padding-top:1.25rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[12px\]{font-size:12px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.italic{font-style:italic}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.line-through{text-decoration-line:line-through}.placeholder-\[\#3D3857\]::-webkit-input-placeholder{--tw-placeholder-opacity:1;color:rgb(61 56 87/var(--tw-placeholder-opacity))}.placeholder-\[\#3D3857\]::placeholder{--tw-placeholder-opacity:1;color:rgb(61 56 87/var(--tw-placeholder-opacity))}.placeholder-gray-400::-webkit-input-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity))}.placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity))}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-black{--tw-shadow-color:#000;--tw-shadow:var(--tw-shadow-colored)}.shadow-blue-500{--tw-shadow-color:#3b82f6;--tw-shadow:var(--tw-shadow-colored)}.shadow-gray-300{--tw-shadow-color:#d1d5db;--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.filter{-webkit-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.hover\:bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}@media (min-width:640px){.sm\:w-2\/5{width:40%}.sm\:flex-row{flex-direction:row}}@media (min-width:768px){.md\:mt-0{margin-top:0}.md\:w-2\/5{width:40%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:py-2{padding-bottom:.5rem;padding-top:.5rem}}@media (min-width:1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}} 6 | /*# sourceMappingURL=main.1ea66bba.css.map*/ -------------------------------------------------------------------------------- /build/static/css/main.1ea66bba.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"static/css/main.1ea66bba.css","mappings":"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A,IACE,uEPyQF,COvQA,IACE,uEPyQF,COvQA,GACE,qCPyQF,CACF,COtQA,4CACE,IACE,SAAU,CACV,yEPwQF,COtQA,GACE,SAAU,CACV,2EPwQF,CACF,COhRA,oCACE,IACE,SAAU,CACV,yEPwQF,COtQA,GACE,SAAU,CACV,2EPwQF,CACF,COrQA,0CACE,kBA1CA,uHPkTA,COjQA,GACE,SAAU,CACV,6EPmQF,COjQA,IACE,SAAU,CACV,uEPmQF,COjQA,IACE,yEPmQF,COjQA,IACE,qEPmQF,COjQA,GACE,qCPmQF,CACF,CO3RA,kCACE,kBA1CA,uHPkTA,COjQA,GACE,SAAU,CACV,6EPmQF,COjQA,IACE,SAAU,CACV,uEPmQF,COjQA,IACE,yEPmQF,COjQA,IACE,qEPmQF,COjQA,GACE,qCPmQF,CACF,COhQA,2CACE,IACE,SAAU,CACV,uEPkQF,COhQA,GACE,SAAU,CACV,6EPkQF,CACF,CO1QA,mCACE,IACE,SAAU,CACV,uEPkQF,COhQA,GACE,SAAU,CACV,6EPkQF,CACF,CO/PA,wCACE,kBAhFA,uHPkVA,CO3PA,GACE,SAAU,CACV,2EP6PF,CO3PA,IACE,SAAU,CACV,yEP6PF,CO3PA,IACE,uEP6PF,CO3PA,IACE,uEP6PF,CO3PA,GACE,uDP6PF,CACF,COrRA,gCACE,kBAhFA,uHPkVA,CO3PA,GACE,SAAU,CACV,2EP6PF,CO3PA,IACE,SAAU,CACV,yEP6PF,CO3PA,IACE,uEP6PF,CO3PA,IACE,uEP6PF,CO3PA,GACE,uDP6PF,CACF,CO1PA,yCACE,IACE,yEP4PF,CO1PA,QAEE,SAAU,CACV,uEP2PF,COzPA,GACE,SAAU,CACV,6EP2PF,CACF,COvQA,iCACE,IACE,yEP4PF,CO1PA,QAEE,SAAU,CACV,uEP2PF,COzPA,GACE,SAAU,CACV,6EP2PF,CACF,COxPA,0CACE,kBA1HA,uHPqXA,COpPA,GACE,SAAU,CACV,6EPsPF,COpPA,IACE,SAAU,CACV,uEPsPF,COpPA,IACE,yEPsPF,COpPA,IACE,qEPsPF,COpPA,GACE,qCPsPF,CACF,CO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","sources":["../node_modules/react-toastify/scss/_variables.scss","../node_modules/react-toastify/dist/ReactToastify.css","../node_modules/react-toastify/scss/_toastContainer.scss","../node_modules/react-toastify/scss/_toast.scss","../node_modules/react-toastify/scss/_theme.scss","../node_modules/react-toastify/scss/_closeButton.scss","../node_modules/react-toastify/scss/_progressBar.scss","../node_modules/react-toastify/scss/_icons.scss","../node_modules/react-toastify/scss/animations/_bounce.scss","../node_modules/react-toastify/scss/animations/_zoom.scss","../node_modules/react-toastify/scss/animations/_flip.scss","../node_modules/react-toastify/scss/animations/_slide.scss","../node_modules/react-toastify/scss/animations/_spin.scss","index.css"],"sourcesContent":["$rt-namespace: 'Toastify';\n$rt-mobile: 'only screen and (max-width : 480px)' !default;\n\n:root {\n --toastify-color-light: #fff;\n --toastify-color-dark: #121212;\n --toastify-color-info: #3498db;\n --toastify-color-success: #07bc0c;\n --toastify-color-warning: #f1c40f;\n --toastify-color-error: #e74c3c;\n --toastify-color-transparent: rgba(255, 255, 255, 0.7);\n\n --toastify-icon-color-info: var(--toastify-color-info);\n --toastify-icon-color-success: var(--toastify-color-success);\n --toastify-icon-color-warning: var(--toastify-color-warning);\n --toastify-icon-color-error: var(--toastify-color-error);\n\n --toastify-toast-width: 320px;\n --toastify-toast-background: #fff;\n --toastify-toast-min-height: 64px;\n --toastify-toast-max-height: 800px;\n --toastify-font-family: sans-serif;\n --toastify-z-index: 9999;\n\n --toastify-text-color-light: #757575;\n --toastify-text-color-dark: #fff;\n\n //Used only for colored theme\n --toastify-text-color-info: #fff;\n --toastify-text-color-success: #fff;\n --toastify-text-color-warning: #fff;\n --toastify-text-color-error: #fff;\n\n --toastify-spinner-color: #616161;\n --toastify-spinner-color-empty-area: #e0e0e0;\n\n // Used when no type is provided\n --toastify-color-progress-light: linear-gradient(\n to right,\n #4cd964,\n #5ac8fa,\n #007aff,\n #34aadc,\n #5856d6,\n #ff2d55\n );\n // Used when no type is provided\n --toastify-color-progress-dark: #bb86fc;\n --toastify-color-progress-info: var(--toastify-color-info);\n --toastify-color-progress-success: var(--toastify-color-success);\n --toastify-color-progress-warning: var(--toastify-color-warning);\n --toastify-color-progress-error: var(--toastify-color-error);\n}\n",":root {\n --toastify-color-light: #fff;\n --toastify-color-dark: #121212;\n --toastify-color-info: #3498db;\n --toastify-color-success: #07bc0c;\n --toastify-color-warning: #f1c40f;\n --toastify-color-error: #e74c3c;\n --toastify-color-transparent: rgba(255, 255, 255, 0.7);\n --toastify-icon-color-info: var(--toastify-color-info);\n --toastify-icon-color-success: var(--toastify-color-success);\n --toastify-icon-color-warning: var(--toastify-color-warning);\n --toastify-icon-color-error: var(--toastify-color-error);\n --toastify-toast-width: 320px;\n --toastify-toast-background: #fff;\n --toastify-toast-min-height: 64px;\n --toastify-toast-max-height: 800px;\n --toastify-font-family: sans-serif;\n --toastify-z-index: 9999;\n --toastify-text-color-light: #757575;\n --toastify-text-color-dark: #fff;\n --toastify-text-color-info: #fff;\n --toastify-text-color-success: #fff;\n --toastify-text-color-warning: #fff;\n --toastify-text-color-error: #fff;\n --toastify-spinner-color: #616161;\n --toastify-spinner-color-empty-area: #e0e0e0;\n --toastify-color-progress-light: linear-gradient(\n to right,\n #4cd964,\n #5ac8fa,\n #007aff,\n #34aadc,\n #5856d6,\n #ff2d55\n );\n --toastify-color-progress-dark: #bb86fc;\n --toastify-color-progress-info: var(--toastify-color-info);\n --toastify-color-progress-success: var(--toastify-color-success);\n --toastify-color-progress-warning: var(--toastify-color-warning);\n --toastify-color-progress-error: var(--toastify-color-error);\n}\n\n.Toastify__toast-container {\n z-index: var(--toastify-z-index);\n -webkit-transform: translate3d(0, 0, var(--toastify-z-index));\n position: fixed;\n padding: 4px;\n width: var(--toastify-toast-width);\n box-sizing: border-box;\n color: #fff;\n}\n.Toastify__toast-container--top-left {\n top: 1em;\n left: 1em;\n}\n.Toastify__toast-container--top-center {\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n.Toastify__toast-container--top-right {\n top: 1em;\n right: 1em;\n}\n.Toastify__toast-container--bottom-left {\n bottom: 1em;\n left: 1em;\n}\n.Toastify__toast-container--bottom-center {\n bottom: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n.Toastify__toast-container--bottom-right {\n bottom: 1em;\n right: 1em;\n}\n\n@media only screen and (max-width : 480px) {\n .Toastify__toast-container {\n width: 100vw;\n padding: 0;\n left: 0;\n margin: 0;\n }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .Toastify__toast-container--top-right {\n top: 0;\n transform: translateX(0);\n }\n .Toastify__toast-container--bottom-left, .Toastify__toast-container--bottom-center, .Toastify__toast-container--bottom-right {\n bottom: 0;\n transform: translateX(0);\n }\n .Toastify__toast-container--rtl {\n right: 0;\n left: initial;\n }\n}\n.Toastify__toast {\n position: relative;\n min-height: var(--toastify-toast-min-height);\n box-sizing: border-box;\n margin-bottom: 1rem;\n padding: 8px;\n border-radius: 4px;\n box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1), 0 2px 15px 0 rgba(0, 0, 0, 0.05);\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: justify;\n justify-content: space-between;\n max-height: var(--toastify-toast-max-height);\n overflow: hidden;\n font-family: var(--toastify-font-family);\n cursor: default;\n direction: ltr;\n /* webkit only issue #791 */\n z-index: 0;\n}\n.Toastify__toast--rtl {\n direction: rtl;\n}\n.Toastify__toast--close-on-click {\n cursor: pointer;\n}\n.Toastify__toast-body {\n margin: auto 0;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 6px;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n.Toastify__toast-body > div:last-child {\n word-break: break-word;\n -ms-flex: 1;\n flex: 1;\n}\n.Toastify__toast-icon {\n -webkit-margin-end: 10px;\n margin-inline-end: 10px;\n width: 20px;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n display: -ms-flexbox;\n display: flex;\n}\n\n.Toastify--animate {\n animation-fill-mode: both;\n animation-duration: 0.7s;\n}\n\n.Toastify--animate-icon {\n animation-fill-mode: both;\n animation-duration: 0.3s;\n}\n\n@media only screen and (max-width : 480px) {\n .Toastify__toast {\n margin-bottom: 0;\n border-radius: 0;\n }\n}\n.Toastify__toast-theme--dark {\n background: var(--toastify-color-dark);\n color: var(--toastify-text-color-dark);\n}\n.Toastify__toast-theme--light {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n}\n.Toastify__toast-theme--colored.Toastify__toast--default {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n}\n.Toastify__toast-theme--colored.Toastify__toast--info {\n color: var(--toastify-text-color-info);\n background: var(--toastify-color-info);\n}\n.Toastify__toast-theme--colored.Toastify__toast--success {\n color: var(--toastify-text-color-success);\n background: var(--toastify-color-success);\n}\n.Toastify__toast-theme--colored.Toastify__toast--warning {\n color: var(--toastify-text-color-warning);\n background: var(--toastify-color-warning);\n}\n.Toastify__toast-theme--colored.Toastify__toast--error {\n color: var(--toastify-text-color-error);\n background: var(--toastify-color-error);\n}\n\n.Toastify__progress-bar-theme--light {\n background: var(--toastify-color-progress-light);\n}\n.Toastify__progress-bar-theme--dark {\n background: var(--toastify-color-progress-dark);\n}\n.Toastify__progress-bar--info {\n background: var(--toastify-color-progress-info);\n}\n.Toastify__progress-bar--success {\n background: var(--toastify-color-progress-success);\n}\n.Toastify__progress-bar--warning {\n background: var(--toastify-color-progress-warning);\n}\n.Toastify__progress-bar--error {\n background: var(--toastify-color-progress-error);\n}\n.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--success, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--error {\n background: var(--toastify-color-transparent);\n}\n\n.Toastify__close-button {\n color: #fff;\n background: transparent;\n outline: none;\n border: none;\n padding: 0;\n cursor: pointer;\n opacity: 0.7;\n transition: 0.3s ease;\n -ms-flex-item-align: start;\n align-self: flex-start;\n}\n.Toastify__close-button--light {\n color: #000;\n opacity: 0.3;\n}\n.Toastify__close-button > svg {\n fill: currentColor;\n height: 16px;\n width: 14px;\n}\n.Toastify__close-button:hover, .Toastify__close-button:focus {\n opacity: 1;\n}\n\n@keyframes Toastify__trackProgress {\n 0% {\n transform: scaleX(1);\n }\n 100% {\n transform: scaleX(0);\n }\n}\n.Toastify__progress-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 5px;\n z-index: var(--toastify-z-index);\n opacity: 0.7;\n transform-origin: left;\n}\n.Toastify__progress-bar--animated {\n animation: Toastify__trackProgress linear 1 forwards;\n}\n.Toastify__progress-bar--controlled {\n transition: transform 0.2s;\n}\n.Toastify__progress-bar--rtl {\n right: 0;\n left: initial;\n transform-origin: right;\n}\n\n.Toastify__spinner {\n width: 20px;\n height: 20px;\n box-sizing: border-box;\n border: 2px solid;\n border-radius: 100%;\n border-color: var(--toastify-spinner-color-empty-area);\n border-right-color: var(--toastify-spinner-color);\n animation: Toastify__spin 0.65s linear infinite;\n}\n\n@keyframes Toastify__bounceInRight {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n from {\n opacity: 0;\n transform: translate3d(3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(-25px, 0, 0);\n }\n 75% {\n transform: translate3d(10px, 0, 0);\n }\n 90% {\n transform: translate3d(-5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutRight {\n 20% {\n opacity: 1;\n transform: translate3d(-20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(2000px, 0, 0);\n }\n}\n@keyframes Toastify__bounceInLeft {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n 0% {\n opacity: 0;\n transform: translate3d(-3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(25px, 0, 0);\n }\n 75% {\n transform: translate3d(-10px, 0, 0);\n }\n 90% {\n transform: translate3d(5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutLeft {\n 20% {\n opacity: 1;\n transform: translate3d(20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(-2000px, 0, 0);\n }\n}\n@keyframes Toastify__bounceInUp {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n from {\n opacity: 0;\n transform: translate3d(0, 3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n 75% {\n transform: translate3d(0, 10px, 0);\n }\n 90% {\n transform: translate3d(0, -5px, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__bounceOutUp {\n 20% {\n transform: translate3d(0, -10px, 0);\n }\n 40%, 45% {\n opacity: 1;\n transform: translate3d(0, 20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, -2000px, 0);\n }\n}\n@keyframes Toastify__bounceInDown {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n 0% {\n opacity: 0;\n transform: translate3d(0, -3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, 25px, 0);\n }\n 75% {\n transform: translate3d(0, -10px, 0);\n }\n 90% {\n transform: translate3d(0, 5px, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutDown {\n 20% {\n transform: translate3d(0, 10px, 0);\n }\n 40%, 45% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, 2000px, 0);\n }\n}\n.Toastify__bounce-enter--top-left, .Toastify__bounce-enter--bottom-left {\n animation-name: Toastify__bounceInLeft;\n}\n.Toastify__bounce-enter--top-right, .Toastify__bounce-enter--bottom-right {\n animation-name: Toastify__bounceInRight;\n}\n.Toastify__bounce-enter--top-center {\n animation-name: Toastify__bounceInDown;\n}\n.Toastify__bounce-enter--bottom-center {\n animation-name: Toastify__bounceInUp;\n}\n\n.Toastify__bounce-exit--top-left, .Toastify__bounce-exit--bottom-left {\n animation-name: Toastify__bounceOutLeft;\n}\n.Toastify__bounce-exit--top-right, .Toastify__bounce-exit--bottom-right {\n animation-name: Toastify__bounceOutRight;\n}\n.Toastify__bounce-exit--top-center {\n animation-name: Toastify__bounceOutUp;\n}\n.Toastify__bounce-exit--bottom-center {\n animation-name: Toastify__bounceOutDown;\n}\n\n@keyframes Toastify__zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n 50% {\n opacity: 1;\n }\n}\n@keyframes Toastify__zoomOut {\n from {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n to {\n opacity: 0;\n }\n}\n.Toastify__zoom-enter {\n animation-name: Toastify__zoomIn;\n}\n\n.Toastify__zoom-exit {\n animation-name: Toastify__zoomOut;\n}\n\n@keyframes Toastify__flipIn {\n from {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n animation-timing-function: ease-in;\n opacity: 0;\n }\n 40% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n animation-timing-function: ease-in;\n }\n 60% {\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1;\n }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n to {\n transform: perspective(400px);\n }\n}\n@keyframes Toastify__flipOut {\n from {\n transform: perspective(400px);\n }\n 30% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1;\n }\n to {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0;\n }\n}\n.Toastify__flip-enter {\n animation-name: Toastify__flipIn;\n}\n\n.Toastify__flip-exit {\n animation-name: Toastify__flipOut;\n}\n\n@keyframes Toastify__slideInRight {\n from {\n transform: translate3d(110%, 0, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInLeft {\n from {\n transform: translate3d(-110%, 0, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInUp {\n from {\n transform: translate3d(0, 110%, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInDown {\n from {\n transform: translate3d(0, -110%, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideOutRight {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(110%, 0, 0);\n }\n}\n@keyframes Toastify__slideOutLeft {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(-110%, 0, 0);\n }\n}\n@keyframes Toastify__slideOutDown {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(0, 500px, 0);\n }\n}\n@keyframes Toastify__slideOutUp {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(0, -500px, 0);\n }\n}\n.Toastify__slide-enter--top-left, .Toastify__slide-enter--bottom-left {\n animation-name: Toastify__slideInLeft;\n}\n.Toastify__slide-enter--top-right, .Toastify__slide-enter--bottom-right {\n animation-name: Toastify__slideInRight;\n}\n.Toastify__slide-enter--top-center {\n animation-name: Toastify__slideInDown;\n}\n.Toastify__slide-enter--bottom-center {\n animation-name: Toastify__slideInUp;\n}\n\n.Toastify__slide-exit--top-left, .Toastify__slide-exit--bottom-left {\n animation-name: Toastify__slideOutLeft;\n}\n.Toastify__slide-exit--top-right, .Toastify__slide-exit--bottom-right {\n animation-name: Toastify__slideOutRight;\n}\n.Toastify__slide-exit--top-center {\n animation-name: Toastify__slideOutUp;\n}\n.Toastify__slide-exit--bottom-center {\n animation-name: Toastify__slideOutDown;\n}\n\n@keyframes Toastify__spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/*# sourceMappingURL=ReactToastify.css.map */",".#{$rt-namespace}__toast-container {\n z-index: var(--toastify-z-index);\n -webkit-transform: translate3d(0, 0, var(--toastify-z-index));\n position: fixed;\n padding: 4px;\n width: var(--toastify-toast-width);\n box-sizing: border-box;\n color: #fff;\n &--top-left {\n top: 1em;\n left: 1em;\n }\n &--top-center {\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n }\n &--top-right {\n top: 1em;\n right: 1em;\n }\n &--bottom-left {\n bottom: 1em;\n left: 1em;\n }\n &--bottom-center {\n bottom: 1em;\n left: 50%;\n transform: translateX(-50%);\n }\n &--bottom-right {\n bottom: 1em;\n right: 1em;\n }\n}\n\n@media #{$rt-mobile} {\n .#{$rt-namespace}__toast-container {\n width: 100vw;\n padding: 0;\n left: 0;\n margin: 0;\n &--top-left,\n &--top-center,\n &--top-right {\n top: 0;\n transform: translateX(0);\n }\n &--bottom-left,\n &--bottom-center,\n &--bottom-right {\n bottom: 0;\n transform: translateX(0);\n }\n &--rtl {\n right: 0;\n left: initial;\n }\n }\n}\n",".#{$rt-namespace}__toast {\n position: relative;\n min-height: var(--toastify-toast-min-height);\n box-sizing: border-box;\n margin-bottom: 1rem;\n padding: 8px;\n border-radius: 4px;\n box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1), 0 2px 15px 0 rgba(0, 0, 0, 0.05);\n display: flex;\n justify-content: space-between;\n max-height: var(--toastify-toast-max-height);\n overflow: hidden;\n font-family: var(--toastify-font-family);\n cursor: default;\n direction: ltr;\n /* webkit only issue #791 */\n z-index: 0;\n &--rtl {\n direction: rtl;\n }\n &--close-on-click {\n cursor: pointer;\n }\n &-body {\n margin: auto 0;\n flex: 1 1 auto;\n padding: 6px;\n display: flex;\n align-items: center;\n & > div:last-child {\n word-break: break-word;\n flex: 1;\n }\n }\n &-icon {\n margin-inline-end: 10px;\n width: 20px;\n flex-shrink: 0;\n display: flex;\n }\n}\n\n.#{$rt-namespace}--animate {\n animation-fill-mode: both;\n animation-duration: 0.7s;\n}\n\n.#{$rt-namespace}--animate-icon {\n animation-fill-mode: both;\n animation-duration: 0.3s;\n}\n\n@media #{$rt-mobile} {\n .#{$rt-namespace}__toast {\n margin-bottom: 0;\n border-radius: 0;\n }\n}\n",".#{$rt-namespace}__toast {\n &-theme--dark {\n background: var(--toastify-color-dark);\n color: var(--toastify-text-color-dark);\n }\n &-theme--light {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n }\n &-theme--colored#{&}--default {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n }\n &-theme--colored#{&}--info {\n color: var(--toastify-text-color-info);\n background: var(--toastify-color-info);\n }\n &-theme--colored#{&}--success {\n color: var(--toastify-text-color-success);\n background: var(--toastify-color-success);\n }\n &-theme--colored#{&}--warning {\n color: var(--toastify-text-color-warning);\n background: var(--toastify-color-warning);\n }\n &-theme--colored#{&}--error {\n color: var(--toastify-text-color-error);\n background: var(--toastify-color-error);\n }\n}\n\n.#{$rt-namespace}__progress-bar {\n &-theme--light {\n background: var(--toastify-color-progress-light);\n }\n &-theme--dark {\n background: var(--toastify-color-progress-dark);\n }\n &--info {\n background: var(--toastify-color-progress-info);\n }\n &--success {\n background: var(--toastify-color-progress-success);\n }\n &--warning {\n background: var(--toastify-color-progress-warning);\n }\n &--error {\n background: var(--toastify-color-progress-error);\n }\n &-theme--colored#{&}--info,\n &-theme--colored#{&}--success,\n &-theme--colored#{&}--warning,\n &-theme--colored#{&}--error {\n background: var(--toastify-color-transparent);\n }\n}\n",".#{$rt-namespace}__close-button {\n color: #fff;\n background: transparent;\n outline: none;\n border: none;\n padding: 0;\n cursor: pointer;\n opacity: 0.7;\n transition: 0.3s ease;\n align-self: flex-start;\n\n &--light {\n color: #000;\n opacity: 0.3;\n }\n\n & > svg {\n fill: currentColor;\n height: 16px;\n width: 14px;\n }\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n}\n","@keyframes #{$rt-namespace}__trackProgress {\n 0% {\n transform: scaleX(1);\n }\n 100% {\n transform: scaleX(0);\n }\n}\n\n.#{$rt-namespace}__progress-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 5px;\n z-index: var(--toastify-z-index);\n opacity: 0.7;\n transform-origin: left;\n\n &--animated {\n animation: #{$rt-namespace}__trackProgress linear 1 forwards;\n }\n\n &--controlled {\n transition: transform 0.2s;\n }\n\n &--rtl {\n right: 0;\n left: initial;\n transform-origin: right;\n }\n}\n",".#{$rt-namespace}__spinner {\n width: 20px;\n height: 20px;\n box-sizing: border-box;\n border: 2px solid;\n border-radius: 100%;\n border-color: var(--toastify-spinner-color-empty-area);\n border-right-color: var(--toastify-spinner-color);\n animation: #{$rt-namespace}__spin 0.65s linear infinite;\n}\n","@mixin timing-function {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n@keyframes #{$rt-namespace}__bounceInRight {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n from {\n opacity: 0;\n transform: translate3d(3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(-25px, 0, 0);\n }\n 75% {\n transform: translate3d(10px, 0, 0);\n }\n 90% {\n transform: translate3d(-5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutRight {\n 20% {\n opacity: 1;\n transform: translate3d(-20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(2000px, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInLeft {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n 0% {\n opacity: 0;\n transform: translate3d(-3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(25px, 0, 0);\n }\n 75% {\n transform: translate3d(-10px, 0, 0);\n }\n 90% {\n transform: translate3d(5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutLeft {\n 20% {\n opacity: 1;\n transform: translate3d(20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(-2000px, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInUp {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n from {\n opacity: 0;\n transform: translate3d(0, 3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n 75% {\n transform: translate3d(0, 10px, 0);\n }\n 90% {\n transform: translate3d(0, -5px, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutUp {\n 20% {\n transform: translate3d(0, -10px, 0);\n }\n 40%,\n 45% {\n opacity: 1;\n transform: translate3d(0, 20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, -2000px, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInDown {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n 0% {\n opacity: 0;\n transform: translate3d(0, -3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, 25px, 0);\n }\n 75% {\n transform: translate3d(0, -10px, 0);\n }\n 90% {\n transform: translate3d(0, 5px, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutDown {\n 20% {\n transform: translate3d(0, 10px, 0);\n }\n 40%,\n 45% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, 2000px, 0);\n }\n}\n\n.#{$rt-namespace}__bounce-enter {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__bounceInLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__bounceInRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__bounceInDown;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__bounceInUp;\n }\n}\n\n.#{$rt-namespace}__bounce-exit {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__bounceOutLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__bounceOutRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__bounceOutUp;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__bounceOutDown;\n }\n}\n","@keyframes #{$rt-namespace}__zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n 50% {\n opacity: 1;\n }\n}\n\n@keyframes #{$rt-namespace}__zoomOut {\n from {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n to {\n opacity: 0;\n }\n}\n\n.#{$rt-namespace}__zoom-enter {\n animation-name: #{$rt-namespace}__zoomIn;\n}\n\n.#{$rt-namespace}__zoom-exit {\n animation-name: #{$rt-namespace}__zoomOut;\n}\n","@keyframes #{$rt-namespace}__flipIn {\n from {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n animation-timing-function: ease-in;\n opacity: 0;\n }\n 40% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n animation-timing-function: ease-in;\n }\n 60% {\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1;\n }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n to {\n transform: perspective(400px);\n }\n}\n\n@keyframes #{$rt-namespace}__flipOut {\n from {\n transform: perspective(400px);\n }\n 30% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1;\n }\n to {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0;\n }\n}\n\n.#{$rt-namespace}__flip-enter {\n animation-name: #{$rt-namespace}__flipIn;\n}\n\n.#{$rt-namespace}__flip-exit {\n animation-name: #{$rt-namespace}__flipOut;\n}\n","@mixin transform {\n transform: translate3d(0, 0, 0);\n}\n\n@keyframes #{$rt-namespace}__slideInRight {\n from {\n transform: translate3d(110%, 0, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInLeft {\n from {\n transform: translate3d(-110%, 0, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInUp {\n from {\n transform: translate3d(0, 110%, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInDown {\n from {\n transform: translate3d(0, -110%, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutRight {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(110%, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutLeft {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(-110%, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutDown {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(0, 500px, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutUp {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(0, -500px, 0);\n }\n}\n\n.#{$rt-namespace}__slide-enter {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__slideInLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__slideInRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__slideInDown;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__slideInUp;\n }\n}\n\n.#{$rt-namespace}__slide-exit {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__slideOutLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__slideOutRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__slideOutUp;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__slideOutDown;\n }\n}\n","@keyframes #{$rt-namespace}__spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n","@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;500;600;700&display=swap');\n\n* html {\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n font-family: 'Open Sans', sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"],"names":[],"sourceRoot":""} -------------------------------------------------------------------------------- /build/static/js/main.0e2989e0.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! ***************************************************************************** 2 | Copyright (c) Microsoft Corporation. 3 | 4 | Permission to use, copy, modify, and/or distribute this software for any 5 | purpose with or without fee is hereby granted. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 8 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 9 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 10 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 11 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 12 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 13 | PERFORMANCE OF THIS SOFTWARE. 14 | ***************************************************************************** */ 15 | 16 | /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ 17 | 18 | /** 19 | * @license React 20 | * react-dom.production.min.js 21 | * 22 | * Copyright (c) Facebook, Inc. and its affiliates. 23 | * 24 | * This source code is licensed under the MIT license found in the 25 | * LICENSE file in the root directory of this source tree. 26 | */ 27 | 28 | /** 29 | * @license React 30 | * react-jsx-runtime.production.min.js 31 | * 32 | * Copyright (c) Facebook, Inc. and its affiliates. 33 | * 34 | * This source code is licensed under the MIT license found in the 35 | * LICENSE file in the root directory of this source tree. 36 | */ 37 | 38 | /** 39 | * @license React 40 | * react.production.min.js 41 | * 42 | * Copyright (c) Facebook, Inc. and its affiliates. 43 | * 44 | * This source code is licensed under the MIT license found in the 45 | * LICENSE file in the root directory of this source tree. 46 | */ 47 | 48 | /** 49 | * @license React 50 | * scheduler.production.min.js 51 | * 52 | * Copyright (c) Facebook, Inc. and its affiliates. 53 | * 54 | * This source code is licensed under the MIT license found in the 55 | * LICENSE file in the root directory of this source tree. 56 | */ 57 | 58 | /** 59 | * @remix-run/router v1.6.2 60 | * 61 | * Copyright (c) Remix Software Inc. 62 | * 63 | * This source code is licensed under the MIT license found in the 64 | * LICENSE.md file in the root directory of this source tree. 65 | * 66 | * @license MIT 67 | */ 68 | 69 | /** 70 | * React Router DOM v6.11.2 71 | * 72 | * Copyright (c) Remix Software Inc. 73 | * 74 | * This source code is licensed under the MIT license found in the 75 | * LICENSE.md file in the root directory of this source tree. 76 | * 77 | * @license MIT 78 | */ 79 | 80 | /** 81 | * React Router v6.11.2 82 | * 83 | * Copyright (c) Remix Software Inc. 84 | * 85 | * This source code is licensed under the MIT license found in the 86 | * LICENSE.md file in the root directory of this source tree. 87 | * 88 | * @license MIT 89 | */ 90 | 91 | /** 92 | * [js-sha3]{@link https://github.com/emn178/js-sha3} 93 | * 94 | * @version 0.8.0 95 | * @author Chen, Yi-Cyuan [emn178@gmail.com] 96 | * @copyright Chen, Yi-Cyuan 2015-2018 97 | * @license MIT 98 | */ 99 | 100 | /** @license React v16.13.1 101 | * react-is.production.min.js 102 | * 103 | * Copyright (c) Facebook, Inc. and its affiliates. 104 | * 105 | * This source code is licensed under the MIT license found in the 106 | * LICENSE file in the root directory of this source tree. 107 | */ 108 | -------------------------------------------------------------------------------- /cache/solidity-files-cache.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-cache-2", 3 | "files": { 4 | "C:\\Users\\DELL\\Desktop\\DAPPMENTORS\\P2E\\src\\contracts\\PlayToEarn.sol": { 5 | "lastModificationDate": 1692110876381, 6 | "contentHash": "48eaf034fbadbf021bd466534040699f", 7 | "sourceName": "src/contracts/PlayToEarn.sol", 8 | "solcConfig": { 9 | "version": "0.8.11", 10 | "settings": { 11 | "optimizer": { 12 | "enabled": true, 13 | "runs": 200 14 | }, 15 | "outputSelection": { 16 | "*": { 17 | "*": [ 18 | "abi", 19 | "evm.bytecode", 20 | "evm.deployedBytecode", 21 | "evm.methodIdentifiers", 22 | "metadata" 23 | ], 24 | "": [ 25 | "ast" 26 | ] 27 | } 28 | } 29 | } 30 | }, 31 | "imports": [ 32 | "@openzeppelin/contracts/access/Ownable.sol", 33 | "@openzeppelin/contracts/utils/Counters.sol", 34 | "@openzeppelin/contracts/security/ReentrancyGuard.sol", 35 | "@openzeppelin/contracts/utils/math/SafeMath.sol" 36 | ], 37 | "versionPragmas": [ 38 | ">=0.7.0 <0.9.0" 39 | ], 40 | "artifacts": [ 41 | "PlayToEarn" 42 | ] 43 | }, 44 | "C:\\Users\\DELL\\Desktop\\DAPPMENTORS\\P2E\\node_modules\\@openzeppelin\\contracts\\utils\\Counters.sol": { 45 | "lastModificationDate": 1688391544707, 46 | "contentHash": "74654e3ae5d7f39555055dfe244dab7a", 47 | "sourceName": "@openzeppelin/contracts/utils/Counters.sol", 48 | "solcConfig": { 49 | "version": "0.8.11", 50 | "settings": { 51 | "optimizer": { 52 | "enabled": true, 53 | "runs": 200 54 | }, 55 | "outputSelection": { 56 | "*": { 57 | "*": [ 58 | "abi", 59 | "evm.bytecode", 60 | "evm.deployedBytecode", 61 | "evm.methodIdentifiers", 62 | "metadata" 63 | ], 64 | "": [ 65 | "ast" 66 | ] 67 | } 68 | } 69 | } 70 | }, 71 | "imports": [], 72 | "versionPragmas": [ 73 | "^0.8.0" 74 | ], 75 | "artifacts": [ 76 | "Counters" 77 | ] 78 | }, 79 | "C:\\Users\\DELL\\Desktop\\DAPPMENTORS\\P2E\\node_modules\\@openzeppelin\\contracts\\access\\Ownable.sol": { 80 | "lastModificationDate": 1688391560046, 81 | "contentHash": "5a20b2cad87ddb61c7a3a6af21289e28", 82 | "sourceName": "@openzeppelin/contracts/access/Ownable.sol", 83 | "solcConfig": { 84 | "version": "0.8.11", 85 | "settings": { 86 | "optimizer": { 87 | "enabled": true, 88 | "runs": 200 89 | }, 90 | "outputSelection": { 91 | "*": { 92 | "*": [ 93 | "abi", 94 | "evm.bytecode", 95 | "evm.deployedBytecode", 96 | "evm.methodIdentifiers", 97 | "metadata" 98 | ], 99 | "": [ 100 | "ast" 101 | ] 102 | } 103 | } 104 | } 105 | }, 106 | "imports": [ 107 | "../utils/Context.sol" 108 | ], 109 | "versionPragmas": [ 110 | "^0.8.0" 111 | ], 112 | "artifacts": [ 113 | "Ownable" 114 | ] 115 | }, 116 | "C:\\Users\\DELL\\Desktop\\DAPPMENTORS\\P2E\\node_modules\\@openzeppelin\\contracts\\security\\ReentrancyGuard.sol": { 117 | "lastModificationDate": 1688391560279, 118 | "contentHash": "1535f8c0c68463f8c1b5239f7584e71f", 119 | "sourceName": "@openzeppelin/contracts/security/ReentrancyGuard.sol", 120 | "solcConfig": { 121 | "version": "0.8.11", 122 | "settings": { 123 | "optimizer": { 124 | "enabled": true, 125 | "runs": 200 126 | }, 127 | "outputSelection": { 128 | "*": { 129 | "*": [ 130 | "abi", 131 | "evm.bytecode", 132 | "evm.deployedBytecode", 133 | "evm.methodIdentifiers", 134 | "metadata" 135 | ], 136 | "": [ 137 | "ast" 138 | ] 139 | } 140 | } 141 | } 142 | }, 143 | "imports": [], 144 | "versionPragmas": [ 145 | "^0.8.0" 146 | ], 147 | "artifacts": [ 148 | "ReentrancyGuard" 149 | ] 150 | }, 151 | "C:\\Users\\DELL\\Desktop\\DAPPMENTORS\\P2E\\node_modules\\@openzeppelin\\contracts\\utils\\math\\SafeMath.sol": { 152 | "lastModificationDate": 1688391560341, 153 | "contentHash": "f6f4fda16c536e57069af40a245c985e", 154 | "sourceName": "@openzeppelin/contracts/utils/math/SafeMath.sol", 155 | "solcConfig": { 156 | "version": "0.8.11", 157 | "settings": { 158 | "optimizer": { 159 | "enabled": true, 160 | "runs": 200 161 | }, 162 | "outputSelection": { 163 | "*": { 164 | "*": [ 165 | "abi", 166 | "evm.bytecode", 167 | "evm.deployedBytecode", 168 | "evm.methodIdentifiers", 169 | "metadata" 170 | ], 171 | "": [ 172 | "ast" 173 | ] 174 | } 175 | } 176 | } 177 | }, 178 | "imports": [], 179 | "versionPragmas": [ 180 | "^0.8.0" 181 | ], 182 | "artifacts": [ 183 | "SafeMath" 184 | ] 185 | }, 186 | "C:\\Users\\DELL\\Desktop\\DAPPMENTORS\\P2E\\node_modules\\@openzeppelin\\contracts\\utils\\Context.sol": { 187 | "lastModificationDate": 1688391544695, 188 | "contentHash": "5f2c5c4b6af2dd4551027144797bc8be", 189 | "sourceName": "@openzeppelin/contracts/utils/Context.sol", 190 | "solcConfig": { 191 | "version": "0.8.11", 192 | "settings": { 193 | "optimizer": { 194 | "enabled": true, 195 | "runs": 200 196 | }, 197 | "outputSelection": { 198 | "*": { 199 | "*": [ 200 | "abi", 201 | "evm.bytecode", 202 | "evm.deployedBytecode", 203 | "evm.methodIdentifiers", 204 | "metadata" 205 | ], 206 | "": [ 207 | "ast" 208 | ] 209 | } 210 | } 211 | } 212 | }, 213 | "imports": [], 214 | "versionPragmas": [ 215 | "^0.8.0" 216 | ], 217 | "artifacts": [ 218 | "Context" 219 | ] 220 | } 221 | } 222 | } 223 | -------------------------------------------------------------------------------- /config-overrides.js: -------------------------------------------------------------------------------- 1 | // This file is included to deal with issues regarding react-scripts v5.0.0 and web3 2 | // Provided from Web3 documentation -> https://github.com/ChainSafe/web3.js#troubleshooting-and-known-issues 3 | 4 | const webpack = require('webpack'); 5 | 6 | module.exports = function override(config) { 7 | const fallback = config.resolve.fallback || {}; 8 | Object.assign(fallback, { 9 | "crypto": require.resolve("crypto-browserify"), 10 | "stream": require.resolve("stream-browserify"), 11 | "assert": require.resolve("assert"), 12 | "http": require.resolve("stream-http"), 13 | "https": require.resolve("https-browserify"), 14 | "os": require.resolve("os-browserify"), 15 | "url": require.resolve("url") 16 | }) 17 | config.resolve.fallback = fallback; 18 | config.plugins = (config.plugins || []).concat([ 19 | new webpack.ProvidePlugin({ 20 | process: 'process/browser', 21 | Buffer: ['buffer', 'Buffer'] 22 | }) 23 | ]) 24 | return config; 25 | } -------------------------------------------------------------------------------- /hardhat.config.js: -------------------------------------------------------------------------------- 1 | require('@nomiclabs/hardhat-waffle') 2 | require('dotenv').config() 3 | 4 | module.exports = { 5 | defaultNetwork: 'localhost', 6 | networks: { 7 | localhost: { 8 | url: 'http://127.0.0.1:8545', 9 | }, 10 | }, 11 | solidity: { 12 | version: '0.8.11', 13 | settings: { 14 | optimizer: { 15 | enabled: true, 16 | runs: 200, 17 | }, 18 | }, 19 | }, 20 | paths: { 21 | sources: './src/contracts', 22 | artifacts: './src/abis', 23 | }, 24 | mocha: { 25 | timeout: 40000, 26 | }, 27 | } 28 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | 13 | 19 | 20 | Vite App 21 | 22 | 23 |
24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "start": "react-app-rewired start", 7 | "build": "react-app-rewired build", 8 | "test": "react-app-rewired test", 9 | "eject": "react-scripts eject" 10 | }, 11 | "dependencies": { 12 | "@cometchat-pro/chat": "3.0.13", 13 | "@headlessui/react": "^1.7.16", 14 | "@nomiclabs/hardhat-ethers": "^2.1.0", 15 | "@nomiclabs/hardhat-waffle": "^2.0.3", 16 | "emojtcha-react": "^1.0.6", 17 | "ethereum-waffle": "^3.4.4", 18 | "ethers": "^5.6.9", 19 | "hardhat": "^2.10.1", 20 | "moment": "^2.29.4", 21 | "react": "^18.2.0", 22 | "react-dom": "^18.2.0", 23 | "react-hooks-global-state": "^1.0.2", 24 | "react-icons": "^4.3.1", 25 | "react-identicons": "^1.2.5", 26 | "react-moment": "^1.1.2", 27 | "react-router-dom": "6", 28 | "react-scripts": "5.0.0", 29 | "react-toastify": "^9.1.3", 30 | "web-vitals": "^2.1.4" 31 | }, 32 | "devDependencies": { 33 | "@openzeppelin/contracts": "^4.5.0", 34 | "@tailwindcss/forms": "0.4.0", 35 | "assert": "^2.0.0", 36 | "autoprefixer": "10.4.2", 37 | "babel-polyfill": "^6.26.0", 38 | "babel-preset-env": "^1.7.0", 39 | "babel-preset-es2015": "^6.24.1", 40 | "babel-preset-stage-2": "^6.24.1", 41 | "babel-preset-stage-3": "^6.24.1", 42 | "babel-register": "^6.26.0", 43 | "buffer": "^6.0.3", 44 | "chai": "^4.3.6", 45 | "chai-as-promised": "^7.1.1", 46 | "crypto-browserify": "^3.12.0", 47 | "dotenv": "^16.0.0", 48 | "https-browserify": "^1.0.0", 49 | "mnemonics": "^1.1.3", 50 | "os-browserify": "^0.3.0", 51 | "postcss": "8.4.5", 52 | "process": "^0.11.10", 53 | "react-app-rewired": "^2.1.11", 54 | "stream-browserify": "^3.0.0", 55 | "stream-http": "^3.2.0", 56 | "tailwindcss": "3.0.18", 57 | "url": "^0.11.0" 58 | }, 59 | "browserslist": { 60 | "production": [ 61 | ">0.2%", 62 | "not dead", 63 | "not op_mini all" 64 | ], 65 | "development": [ 66 | "last 1 chrome version", 67 | "last 1 firefox version", 68 | "last 1 safari version" 69 | ] 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | React App 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/public/logo512.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /screenshots/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/screenshots/0.gif -------------------------------------------------------------------------------- /screenshots/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/screenshots/1.gif -------------------------------------------------------------------------------- /screenshots/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cryptocore1001/P2ETutorial/04f0c1a4e1483b0320d53e4b75a29102407d0769/screenshots/3.gif -------------------------------------------------------------------------------- /scripts/deploy.js: -------------------------------------------------------------------------------- 1 | const { ethers } = require('hardhat') 2 | const fs = require('fs') 3 | 4 | const toWei = (num) => ethers.utils.parseEther(num.toString()) 5 | 6 | async function main() { 7 | const contract_name = 'PlayToEarn' 8 | const Contract = await ethers.getContractFactory(contract_name) 9 | const contract = await Contract.deploy() 10 | 11 | await contract.deployed() 12 | 13 | const address = JSON.stringify({ address: contract.address }, null, 4) 14 | fs.writeFile('./src/abis/contractAddress.json', address, 'utf8', (err) => { 15 | if (err) { 16 | console.error(err) 17 | return 18 | } 19 | console.log('Deployed contract address', contract.address) 20 | }) 21 | } 22 | 23 | main().catch((error) => { 24 | console.error(error) 25 | process.exitCode = 1 26 | }) 27 | -------------------------------------------------------------------------------- /scripts/seed.js: -------------------------------------------------------------------------------- 1 | const { ethers } = require('hardhat') 2 | // import address from '../abis/contractAddress.json' 3 | import abi from '../abis/src/contracts/PlayToEarn.sol/PlayToEarn.json' 4 | 5 | const toWei = (num) => ethers.utils.parseEther(num.toString()) 6 | const fromWei = (num) => ethers.utils.formatEther(num) 7 | 8 | const ContractAddress = '0x51a1ceb83b83f1985a81c295d1ff28afef186e02' 9 | const ContractAbi = abi.abi 10 | let tx 11 | 12 | const getEthereumContract = async () => { 13 | const provider = new ethers.providers.JsonRpcProvider( 14 | process.env.REACT_APP_RPC_URL 15 | ) 16 | ;[deployer, user1, user2, user3] = await ethers.getSigners() 17 | const signer = provider.getSigner(deployer.address) 18 | const contract = new ethers.Contract(ContractAddress, ContractAbi, signer) 19 | return contract 20 | } 21 | 22 | const createGame = async ({ 23 | title, 24 | description, 25 | participants, 26 | winners, 27 | challenges, 28 | starts, 29 | ends, 30 | stake, 31 | }) => { 32 | return new Promise(async (resolve, reject) => { 33 | try { 34 | const contract = await getEthereumContract() 35 | tx = await contract.createGame( 36 | title, 37 | description, 38 | participants, 39 | winners, 40 | challenges, 41 | starts, 42 | ends, 43 | { 44 | value: toWei(stake), 45 | } 46 | ) 47 | await tx.wait() 48 | resolve(tx) 49 | } catch (error) { 50 | reject(error) 51 | } 52 | }) 53 | } 54 | 55 | const invitePlayer = async (player, gameId) => { 56 | return new Promise(async (resolve, reject) => { 57 | try { 58 | const contract = await getEthereumContract() 59 | tx = await contract.invitePlayer(player, gameId) 60 | await tx.wait() 61 | resolve(tx) 62 | } catch (err) { 63 | reject(err) 64 | } 65 | }) 66 | } 67 | 68 | const acceptInvitation = async (gameId, stake) => { 69 | return new Promise(async (resolve, reject) => { 70 | try { 71 | const contract = await getEthereumContract() 72 | tx = await contract.acceptInvitation(gameId, { 73 | value: toWei(stake), 74 | }) 75 | await tx.wait() 76 | resolve(tx) 77 | } catch (err) { 78 | reject(err) 79 | } 80 | }) 81 | } 82 | 83 | const recordScore = async (gameId, score) => { 84 | return new Promise(async (resolve, reject) => { 85 | try { 86 | const contract = await getEthereumContract() 87 | tx = await contract.recordScore(gameId, score) 88 | await tx.wait() 89 | resolve(tx) 90 | } catch (err) { 91 | reject(err) 92 | } 93 | }) 94 | } 95 | 96 | const payout = async (gameId) => { 97 | return new Promise(async (resolve, reject) => { 98 | try { 99 | const contract = await getEthereumContract() 100 | tx = await contract.payout(gameId) 101 | await tx.wait() 102 | resolve(tx) 103 | } catch (err) { 104 | reject(err) 105 | } 106 | }) 107 | } 108 | 109 | const loadData = async () => { 110 | await getMyGames() 111 | await getInvitations() 112 | } 113 | 114 | const getGames = async () => { 115 | try { 116 | const contract = await getEthereumContract() 117 | const games = await contract.getGames() 118 | console.log(structuredGames(games)) 119 | } catch (err) { 120 | reportError(err) 121 | } 122 | } 123 | 124 | const getGame = async (id) => { 125 | try { 126 | const contract = await getEthereumContract() 127 | const game = await contract.getGame(id) 128 | console.log(structuredGames([game])[0]) 129 | } catch (err) { 130 | reportError(err) 131 | } 132 | } 133 | 134 | const getInvitations = async () => { 135 | try { 136 | const contract = await getEthereumContract() 137 | const invitations = await contract.getInvitations() 138 | console.log(structuredInvitations(invitations)) 139 | } catch (err) { 140 | reportError(err) 141 | } 142 | } 143 | 144 | const getScores = async (id) => { 145 | try { 146 | const contract = await getEthereumContract() 147 | const scores = await contract.getScores(id) 148 | console.log(structuredPlayersScore(scores)) 149 | } catch (err) { 150 | reportError(err) 151 | } 152 | } 153 | 154 | const getMyGames = async () => { 155 | try { 156 | const contract = await getEthereumContract() 157 | const games = await contract.getMyGames() 158 | console.log(structuredGames(games)) 159 | } catch (err) { 160 | reportError(err) 161 | } 162 | } 163 | 164 | const structuredGames = (games) => 165 | games 166 | .map((game) => ({ 167 | id: game.id.toNumber(), 168 | title: game.title, 169 | description: game.description, 170 | owner: game.owner.toLowerCase(), 171 | participants: game.participants.toNumber(), 172 | challenges: game.challenges.toNumber(), 173 | numberOfWinners: game.numberOfWinners.toNumber(), 174 | plays: game.plays.toNumber(), 175 | acceptees: game.acceptees.toNumber(), 176 | stake: fromWei(game.stake), 177 | startDate: game.startDate.toNumber(), 178 | endDate: game.endDate.toNumber(), 179 | timestamp: game.timestamp.toNumber(), 180 | deleted: game.deleted, 181 | paidOut: game.paidOut, 182 | })) 183 | .sort((a, b) => b.timestamp - a.timestamp) 184 | 185 | const structuredPlayersScore = (playersScore) => 186 | playersScore 187 | .map((playerScore) => ({ 188 | gameId: playerScore.gameId.toNumber(), 189 | player: playerScore.player.toLowerCase(), 190 | score: playerScore.score.toNumber(), 191 | played: playerScore.played, 192 | })) 193 | .sort((a, b) => { 194 | if (a.played !== b.played) { 195 | return a.played ? -1 : 1 196 | } else { 197 | return a.score - b.score 198 | } 199 | }) 200 | 201 | const structuredInvitations = (invitations) => 202 | invitations.map((invitation) => ({ 203 | gameId: invitation.gameId.toNumber(), 204 | account: invitation.account.toLowerCase(), 205 | responded: invitation.responded, 206 | accepted: invitation.accepted, 207 | title: invitation.title, 208 | stake: fromWei(invitation.stake), 209 | })) 210 | 211 | async function main() { 212 | const params = { 213 | description: 'showcase your speed in a game', 214 | title: 'Game title', 215 | participants: 4, 216 | winners: 1, 217 | challenges: 5, 218 | starts: Date.now(), 219 | ends: Date.now() + 5 * 60 * 1000, 220 | stake: 0.5, 221 | gameId: 1, 222 | } 223 | 224 | await createGame(params) 225 | await getMyGames() 226 | } 227 | 228 | main().catch((error) => { 229 | console.error(error) 230 | process.exitCode = 1 231 | }) 232 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | import { Routes, Route } from 'react-router-dom' 2 | import GamePlay from './pages/GamePlay' 3 | import Home from './pages/Home' 4 | import MyGames from './pages/MyGames' 5 | import Invitations from './pages/Invitations' 6 | import { ToastContainer } from 'react-toastify' 7 | import { useEffect } from 'react' 8 | import { checkAuthState } from './services/chat' 9 | import { isWalletConnected, loadData } from './services/blockchain' 10 | 11 | const App = () => { 12 | useEffect(() => { 13 | isWalletConnected() 14 | const fetchData = async () => { 15 | await loadData() 16 | await checkAuthState() 17 | } 18 | 19 | fetchData() 20 | }, []) 21 | 22 | return ( 23 |
24 | 25 | } /> 26 | } /> 27 | } /> 28 | } /> 29 | 30 | 31 | 43 |
44 | ) 45 | } 46 | 47 | export default App 48 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "..\\..\\..\\..\\build-info\\07c767d2c410cb819d9a32ba392f0dd3.json" 4 | } 5 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/access/Ownable.sol/Ownable.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "Ownable", 4 | "sourceName": "@openzeppelin/contracts/access/Ownable.sol", 5 | "abi": [ 6 | { 7 | "anonymous": false, 8 | "inputs": [ 9 | { 10 | "indexed": true, 11 | "internalType": "address", 12 | "name": "previousOwner", 13 | "type": "address" 14 | }, 15 | { 16 | "indexed": true, 17 | "internalType": "address", 18 | "name": "newOwner", 19 | "type": "address" 20 | } 21 | ], 22 | "name": "OwnershipTransferred", 23 | "type": "event" 24 | }, 25 | { 26 | "inputs": [], 27 | "name": "owner", 28 | "outputs": [ 29 | { 30 | "internalType": "address", 31 | "name": "", 32 | "type": "address" 33 | } 34 | ], 35 | "stateMutability": "view", 36 | "type": "function" 37 | }, 38 | { 39 | "inputs": [], 40 | "name": "renounceOwnership", 41 | "outputs": [], 42 | "stateMutability": "nonpayable", 43 | "type": "function" 44 | }, 45 | { 46 | "inputs": [ 47 | { 48 | "internalType": "address", 49 | "name": "newOwner", 50 | "type": "address" 51 | } 52 | ], 53 | "name": "transferOwnership", 54 | "outputs": [], 55 | "stateMutability": "nonpayable", 56 | "type": "function" 57 | } 58 | ], 59 | "bytecode": "0x", 60 | "deployedBytecode": "0x", 61 | "linkReferences": {}, 62 | "deployedLinkReferences": {} 63 | } 64 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/security/ReentrancyGuard.sol/ReentrancyGuard.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "..\\..\\..\\..\\build-info\\07c767d2c410cb819d9a32ba392f0dd3.json" 4 | } 5 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/security/ReentrancyGuard.sol/ReentrancyGuard.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "ReentrancyGuard", 4 | "sourceName": "@openzeppelin/contracts/security/ReentrancyGuard.sol", 5 | "abi": [], 6 | "bytecode": "0x", 7 | "deployedBytecode": "0x", 8 | "linkReferences": {}, 9 | "deployedLinkReferences": {} 10 | } 11 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "..\\..\\..\\..\\build-info\\07c767d2c410cb819d9a32ba392f0dd3.json" 4 | } 5 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/utils/Context.sol/Context.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "Context", 4 | "sourceName": "@openzeppelin/contracts/utils/Context.sol", 5 | "abi": [], 6 | "bytecode": "0x", 7 | "deployedBytecode": "0x", 8 | "linkReferences": {}, 9 | "deployedLinkReferences": {} 10 | } 11 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/utils/Counters.sol/Counters.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "..\\..\\..\\..\\build-info\\07c767d2c410cb819d9a32ba392f0dd3.json" 4 | } 5 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/utils/Counters.sol/Counters.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "Counters", 4 | "sourceName": "@openzeppelin/contracts/utils/Counters.sol", 5 | "abi": [], 6 | "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122023510280639f1987959a3a3f8fd335c3ebdb9e1a5eec465f08f1e0b67a895eeb64736f6c634300080b0033", 7 | "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122023510280639f1987959a3a3f8fd335c3ebdb9e1a5eec465f08f1e0b67a895eeb64736f6c634300080b0033", 8 | "linkReferences": {}, 9 | "deployedLinkReferences": {} 10 | } 11 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/utils/math/SafeMath.sol/SafeMath.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "..\\..\\..\\..\\..\\build-info\\07c767d2c410cb819d9a32ba392f0dd3.json" 4 | } 5 | -------------------------------------------------------------------------------- /src/abis/@openzeppelin/contracts/utils/math/SafeMath.sol/SafeMath.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "SafeMath", 4 | "sourceName": "@openzeppelin/contracts/utils/math/SafeMath.sol", 5 | "abi": [], 6 | "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a9109f2efc8e807b104ab6af749e77e9016fccceeb73d23dfdaf81395ff4a2a164736f6c634300080b0033", 7 | "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a9109f2efc8e807b104ab6af749e77e9016fccceeb73d23dfdaf81395ff4a2a164736f6c634300080b0033", 8 | "linkReferences": {}, 9 | "deployedLinkReferences": {} 10 | } 11 | -------------------------------------------------------------------------------- /src/abis/contractAddress.json: -------------------------------------------------------------------------------- 1 | { 2 | "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3" 3 | } -------------------------------------------------------------------------------- /src/abis/src/contracts/PlayToEarn.sol/PlayToEarn.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "..\\..\\..\\build-info\\07c767d2c410cb819d9a32ba392f0dd3.json" 4 | } 5 | -------------------------------------------------------------------------------- /src/components/Chat.jsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react' 2 | import Identicon from 'react-identicons' 3 | import { FaTimes } from 'react-icons/fa' 4 | import { setGlobalState, truncate, useGlobalState } from '../store' 5 | import { useParams } from 'react-router-dom' 6 | import { getMessages, listenForMessage, sendMessage } from '../services/chat' 7 | 8 | const Chat = () => { 9 | const [connectedAccount] = useGlobalState("connectedAccount"); 10 | const [chatModal] = useGlobalState("chatModal"); 11 | const [messages] = useGlobalState("messages"); 12 | const [message, setMessage] = useState(""); 13 | const { id } = useParams(); 14 | 15 | const onSendMessage = async (e) => { 16 | e.preventDefault(); 17 | if (!message) return; 18 | 19 | await sendMessage(`guid_${id}`, message).then((msg) => { 20 | setGlobalState("messages", (prevState) => [...prevState, msg]); 21 | console.log(msg); 22 | setMessage(""); 23 | scrollToEnd(); 24 | }); 25 | }; 26 | 27 | useEffect(() => { 28 | const fetchData = async () => { 29 | await getMessages(`guid_${id}`).then((msgs) => { 30 | setGlobalState('messages', msgs) 31 | scrollToEnd() 32 | }) 33 | 34 | await listenForMessage(`guid_${id}`).then((msg) => { 35 | setGlobalState('messages', (prevState) => [...prevState, msg]) 36 | scrollToEnd() 37 | }) 38 | } 39 | 40 | fetchData() 41 | }, []) 42 | 43 | const scrollToEnd = () => { 44 | const elmnt = document.getElementById("messages-container"); 45 | elmnt.scrollTop = elmnt.scrollHeight; 46 | }; 47 | 48 | const closeModal = () => { 49 | setGlobalState("chatModal", "scale-0"); 50 | setMessage(""); 51 | }; 52 | 53 | return ( 54 |
58 |
59 |
60 |
61 |

Chat

62 | 68 |
69 | 70 |
71 |
75 | {messages.length < 1 &&

No Chat yet...

} 76 | {messages.map((msg, i) => ( 77 | 84 | ))} 85 |
86 | 87 |
88 | setMessage(e.target.value)} 91 | className="h-full w-full p-5 focus:outline-none focus:ring-0 rounded-md 92 | placeholder-gray-400 bg-transparent border border-gray-400" 93 | placeholder="Leave a message..." 94 | /> 95 |
96 |
97 |
98 |
99 |
100 | ); 101 | } 102 | 103 | const Message = ({ text, time, owner, you }) => { 104 | return ( 105 |
106 |
107 | 112 | 113 |
114 |

115 | {you ? '@You' : truncate(owner, 4, 4, 11)} 116 |

117 |

118 | {text} 119 |

120 |
121 |
122 | 123 | {new Date(time).toLocaleString()} 124 |
125 | ) 126 | } 127 | 128 | export default Chat 129 | -------------------------------------------------------------------------------- /src/components/ChatButton.jsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { MdOutlineChat } from "react-icons/md"; 3 | import { FiLogIn } from "react-icons/fi"; 4 | import { HiLogin } from "react-icons/hi"; 5 | import { FiUsers } from "react-icons/fi"; 6 | import { AiFillLock } from "react-icons/ai"; 7 | import { Menu } from "@headlessui/react"; 8 | import { toast } from "react-toastify"; 9 | import { 10 | createNewGroup, 11 | getGroup, 12 | joinGroup, 13 | logOutWithCometChat, 14 | loginWithCometChat, 15 | signUpWithCometChat, 16 | } from '../services/chat' 17 | import { setGlobalState, useGlobalState } from '../store' 18 | import { IoMdPeople, IoIosAddCircle } from 'react-icons/io' 19 | 20 | 21 | const ChatButton = ({ gid }) => { 22 | const [connectedAccount] = useGlobalState('connectedAccount') 23 | const [currentUser] = useGlobalState('currentUser') 24 | const [game] = useGlobalState('game') 25 | const [group] = useGlobalState('group') 26 | 27 | const fetchGroup = async () => { 28 | try { 29 | const Group = await getGroup(`guid_${gid}`); 30 | setGlobalState('group',Group); 31 | } catch (err) { 32 | console.log(err) 33 | } 34 | } 35 | 36 | useEffect(()=>{ 37 | fetchGroup() 38 | },[]) 39 | 40 | const handleSignUp = async () => { 41 | await toast.promise( 42 | new Promise(async (resolve, reject) => { 43 | await signUpWithCometChat(connectedAccount) 44 | .then((user) => resolve(user)) 45 | .catch((error) => { 46 | alert(JSON.stringify(error)); 47 | reject(error); 48 | }); 49 | }), 50 | { 51 | pending: "Signning up...", 52 | success: "Signed up successfully, please login 👌", 53 | error: "Encountered error 🤯", 54 | } 55 | ); 56 | }; 57 | 58 | const handleLogin = async () => { 59 | await toast.promise( 60 | new Promise(async (resolve, reject) => { 61 | await loginWithCometChat(connectedAccount) 62 | .then((user) => { 63 | setGlobalState("currentUser", user); 64 | resolve(user); 65 | }) 66 | .catch((error) => { 67 | alert(JSON.stringify(error)); 68 | reject(error); 69 | }); 70 | }), 71 | { 72 | pending: "Logging...", 73 | success: "Logged in successfully 👌", 74 | error: "Encountered error 🤯", 75 | } 76 | ); 77 | }; 78 | 79 | const handleLogout = async () => { 80 | await toast.promise( 81 | new Promise(async (resolve, reject) => { 82 | await logOutWithCometChat() 83 | .then(() => { 84 | setGlobalState("currentUser", null); 85 | resolve(); 86 | }) 87 | .catch((error) => { 88 | alert(JSON.stringify(error)); 89 | reject(error); 90 | }); 91 | }), 92 | { 93 | pending: "Leaving...", 94 | success: "Logged out successfully 👌", 95 | error: "Encountered error 🤯", 96 | } 97 | ); 98 | }; 99 | 100 | const handleCreateGroup = async () => { 101 | await toast.promise( 102 | new Promise(async (resolve, reject) => { 103 | await createNewGroup(`guid_${gid}`, "game.title") 104 | .then((group) => { 105 | setGlobalState("group", group); 106 | resolve(group); 107 | window.location.reload(); 108 | }) 109 | .catch((error) => { 110 | alert(JSON.stringify(error)); 111 | reject(error); 112 | }); 113 | }), 114 | { 115 | pending: "Creating group...", 116 | success: "Group created successfully 👌", 117 | error: "Encountered error 🤯", 118 | } 119 | ); 120 | }; 121 | 122 | const handleJoinGroup = async () => { 123 | await toast.promise( 124 | new Promise(async (resolve, reject) => { 125 | await joinGroup(`guid_${gid}`) 126 | .then((group) => { 127 | setGlobalState("group", group); 128 | resolve(); 129 | window.location.reload(); 130 | }) 131 | .catch((error) => { 132 | alert(JSON.stringify(error)); 133 | reject(error); 134 | }); 135 | }), 136 | { 137 | pending: "Joining group...", 138 | success: "Group joined successfully 👌", 139 | error: "Encountered error 🤯", 140 | } 141 | ); 142 | }; 143 | 144 | return ( 145 | 146 | 151 | Chat 152 | 153 | 154 | 159 | {!currentUser ? ( 160 | <> 161 | 162 | {({ active }) => ( 163 | 172 | )} 173 | 174 | 175 | {({ active }) => ( 176 | 185 | )} 186 | 187 | 188 | ) : !group && currentUser?.uid.toLowerCase() == game.owner ? ( 189 | <> 190 | 191 | {({ active }) => ( 192 | 201 | )} 202 | 203 | 204 | ) : group && 205 | !group?.hasJoined && 206 | currentUser.uid.toLowerCase() != game.owner ? ( 207 | <> 208 | 209 | {({ active }) => ( 210 | 219 | )} 220 | 221 | 222 | ) : ( 223 | <> 224 | {group && group?.hasJoined && ( 225 | 226 | {({ active }) => ( 227 | 236 | )} 237 | 238 | )} 239 | 240 | 241 | {({ active }) => ( 242 | 251 | )} 252 | 253 | 254 | )} 255 | 256 | 257 | ); 258 | }; 259 | 260 | export default ChatButton; 261 | -------------------------------------------------------------------------------- /src/components/CreateGame.jsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import { FaTimes } from 'react-icons/fa' 3 | import { setGlobalState, useGlobalState } from '../store' 4 | import { createGame } from '../services/blockchain' 5 | import { toast } from 'react-toastify' 6 | import { useNavigate } from 'react-router-dom' 7 | 8 | const CreateGame = () => { 9 | const [createModal] = useGlobalState('createModal') 10 | const navigate = useNavigate() 11 | 12 | const [game, setGame] = useState({ 13 | title: '', 14 | description: '', 15 | participants: '', 16 | winners: '', 17 | challenges: '', 18 | starts: '', 19 | ends: '', 20 | stake: '', 21 | }) 22 | 23 | const handleChange = (e) => { 24 | const { name, value } = e.target 25 | setGame((prevState) => ({ 26 | ...prevState, 27 | [name]: value, 28 | })) 29 | } 30 | 31 | const closeModal = () => { 32 | setGlobalState('createModal', 'scale-0') 33 | setGame({ 34 | title: '', 35 | participants: '', 36 | winners: '', 37 | challenges: '', 38 | starts: '', 39 | ends: '', 40 | description: '', 41 | stake: '', 42 | }) 43 | } 44 | 45 | const handleGameCreation = async (e) => { 46 | e.preventDefault() 47 | 48 | game.starts = new Date(game.starts).getTime() 49 | game.ends = new Date(game.ends).getTime() 50 | 51 | await toast.promise(new Promise(async (resolve, reject) => { 52 | await createGame(game) 53 | .then((tx)=>{ 54 | console.log(tx) 55 | closeModal() 56 | resolve(tx) 57 | navigate('/mygames') 58 | }) 59 | .catch((err)=>{ 60 | reject(err) 61 | }) 62 | }), 63 | { 64 | pending: "Approve transaction...", 65 | success: "Game creation successful 👌", 66 | error: "Encountered error 🤨", 67 | }); 68 | } 69 | 70 | return ( 71 |
75 |
76 |
77 |
78 |

Create Game

79 | 85 |
86 | 87 |
91 | 92 |
93 | 102 |
103 | 104 |
105 |
106 | 107 |
108 | 117 |
118 |
119 | 120 |
121 | 122 |
123 | 133 |
134 |
135 | 136 |
137 | 138 |
139 | 149 |
150 |
151 |
152 |
153 | 154 |
155 | 166 |
167 |
168 | 169 | 170 |
171 | 180 |
181 | 182 |
183 | 192 |
193 | 194 | 195 | 196 |