├── public ├── favicon.ico ├── logo192.png ├── logo512.png ├── robots.txt ├── netlify.toml ├── manifest.json └── index.html ├── src ├── Component │ ├── StatComponent │ │ ├── lanCount.js │ │ ├── Theme.js │ │ ├── UserStat.jsx │ │ ├── RepoStat.jsx │ │ └── LanStat.jsx │ ├── SocialComponent │ │ ├── socialData.js │ │ ├── _social.scss │ │ └── Social.jsx │ ├── BadgeComponent │ │ ├── Badge.jsx │ │ ├── _badge.scss │ │ ├── lanBadge.js │ │ ├── FwBadge.jsx │ │ ├── LanguageBadge.jsx │ │ ├── fwBade.js │ │ ├── ProfileView.jsx │ │ └── Supporter.jsx │ ├── Stat.jsx │ ├── _stat.scss │ ├── Home.jsx │ └── _home.scss ├── Image │ └── readmeex.jpg ├── scss │ ├── _variables.scss │ ├── style.scss │ ├── _mixins.scss │ ├── _global.scss │ ├── style.css.map │ └── style.css ├── index.js ├── Permanent │ ├── _navbar.scss │ └── Navbar.jsx └── App.js ├── LICENSE ├── package.json └── README.md /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anhduy1202/Git-Readme/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anhduy1202/Git-Readme/HEAD/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anhduy1202/Git-Readme/HEAD/public/logo512.png -------------------------------------------------------------------------------- /src/Component/StatComponent/lanCount.js: -------------------------------------------------------------------------------- 1 | export const lanCountData = [1,2,3,4,5,6,7,8,9,10]; -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/Image/readmeex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anhduy1202/Git-Readme/HEAD/src/Image/readmeex.jpg -------------------------------------------------------------------------------- /src/Component/SocialComponent/socialData.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | export const socialData = ["LinkedIn","Instagram","Twitter","Facebook","Discord","Youtube","Github"]; -------------------------------------------------------------------------------- /src/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | $font-sm: 1rem; 4 | $font-md: 1.5rem; 5 | $font-mdlg: 1.75rem; 6 | $font-lg: 2rem; 7 | $font-xlg: 2.5rem; 8 | 9 | //Font-family: 10 | $code: 'Source Code Pro', monospace; -------------------------------------------------------------------------------- /src/scss/style.scss: -------------------------------------------------------------------------------- 1 | @import './global'; 2 | @import './variables'; 3 | @import '../Component/stat'; 4 | @import '../Component/SocialComponent/social'; 5 | @import '../Permanent/navbar'; 6 | @import '../Component/home'; 7 | @import './mixins'; 8 | @import '../Component/BadgeComponent/badge'; -------------------------------------------------------------------------------- /src/Component/StatComponent/Theme.js: -------------------------------------------------------------------------------- 1 | 2 | export const themeData = [ 3 | "tokyonight","default","dark","radical","merko","onedark","cobalt","synthwave","highcontrast","dracula","pussian","vue","vue-dark","shades-of-purple","nightowl","buefy","algolia","gotham","midnight-purple","react","jolly","github_dark","outrun" 4 | ] 5 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | ReactDOM.render( 6 | 7 | 8 | , 9 | document.getElementById('root') 10 | ); 11 | 12 | // If you want to start measuring performance in your app, pass a function 13 | // to log results (for example: reportWebVitals(console.log)) 14 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 15 | -------------------------------------------------------------------------------- /src/Component/BadgeComponent/Badge.jsx: -------------------------------------------------------------------------------- 1 | import FwBadge from "./FwBadge" 2 | import LanguageBadge from "./LanguageBadge" 3 | import ProfileView from "./ProfileView" 4 | import Supporter from "./Supporter" 5 | 6 | const Badge = () => { 7 | 8 | 9 | return ( 10 |
11 | 12 | 13 | 14 | 15 | 16 |
17 | ); 18 | } 19 | 20 | export default Badge; -------------------------------------------------------------------------------- /src/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | //640px, 1024px, 1400px 2 | $breakpoints-up: ("medium" : "50em", "large" : "64em", "xlarge": "87.5em"); 3 | 4 | //639px, 1023pz, 1399px 5 | $breakpoints-down: ("small" : "25em", "medium" : "63.9375em", "large": "87.4375em"); 6 | 7 | @mixin breakpoint-up($size) { 8 | @media (min-width: map-get($breakpoints-up, $size)) { 9 | @content; 10 | } 11 | } 12 | @mixin breakpoint-down($size) { 13 | @media (max-width: map-get($breakpoints-down, $size)) { 14 | @content; 15 | } 16 | } -------------------------------------------------------------------------------- /public/netlify.toml: -------------------------------------------------------------------------------- 1 | [[headers]] 2 | for = "/*" 3 | [headers.values] 4 | X-Frame-Options = "DENY" 5 | X-XSS-Protection = "1; mode=block" 6 | Content-Security-Policy = "form-action https:" 7 | Referrer-Policy = "strict-origin-when-cross-origin" 8 | Strict-Transport-Security = "max-age=2592000" 9 | Feature-Policy = "vibrate 'none'; geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none'" 10 | -------------------------------------------------------------------------------- /src/Permanent/_navbar.scss: -------------------------------------------------------------------------------- 1 | @import '../scss/variables'; 2 | @import '../scss/mixins'; 3 | .navbar-container { 4 | align-self: flex-end; 5 | margin-top: 1rem; 6 | margin-bottom: 1rem; 7 | margin-right: 3rem; 8 | @include breakpoint-down(medium){ 9 | margin-left: 2rem; 10 | } 11 | a{ 12 | font-size: 1.2rem; 13 | font-family: $code; 14 | font-weight: 600; 15 | 16 | } 17 | @include breakpoint-down(medium) { 18 | a{ 19 | font-size: 0.9rem; 20 | 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/scss/_global.scss: -------------------------------------------------------------------------------- 1 | @import "./variables"; 2 | .App { 3 | height: 100vh; 4 | width: 100vw; 5 | display: flex; 6 | flex-direction: column; 7 | padding:0; 8 | font-size: $font-md; 9 | position: relative; 10 | font-family: $code; 11 | align-items: center; 12 | 13 | 14 | } 15 | 16 | html{ 17 | height: 100vh; 18 | font-size: 100%; 19 | box-sizing: border-box; 20 | overflow-x: hidden; 21 | background-color: #32363b; 22 | 23 | } 24 | *, *::before, *::after { 25 | box-sizing: inherit; 26 | } 27 | 28 | 29 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /src/Component/SocialComponent/_social.scss: -------------------------------------------------------------------------------- 1 | @import '../../scss/variables'; 2 | 3 | .social { 4 | &-container{ 5 | width:70%; 6 | display: flex; 7 | flex-direction: column; 8 | } 9 | &-icon{ 10 | 11 | min-width: 100%; 12 | margin-top: 2.5rem; 13 | 14 | } 15 | &-link{ 16 | min-width: 15%; 17 | @include breakpoint-down(medium){ 18 | min-width: 30%; 19 | } 20 | } 21 | 22 | } 23 | 24 | .socialStat { 25 | &-form { 26 | display: flex; 27 | min-width: 100%; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/Component/Stat.jsx: -------------------------------------------------------------------------------- 1 | import LanStat from "./StatComponent/LanStat"; 2 | import RepoStat from "./StatComponent/RepoStat"; 3 | import UserStat from "./StatComponent/UserStat"; 4 | 5 | 6 | 7 | const Stat = (props) => { 8 | 9 | 10 | return ( 11 |
12 | 13 | 14 | 15 | 16 | 17 | {/* 18 | 19 | 20 | 21 | */} 22 |
23 | ); 24 | } 25 | 26 | export default Stat; -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import { BrowserRouter as Router, Redirect, Route, Switch } from 'react-router-dom'; 2 | import Badge from './Component/BadgeComponent/Badge'; 3 | import Home from './Component/Home'; 4 | import Social from './Component/SocialComponent/Social'; 5 | import Stat from './Component/Stat'; 6 | import Navbar from './Permanent/Navbar'; 7 | import './scss/style.css'; 8 | 9 | function App() { 10 | return ( 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
32 | ); 33 | } 34 | 35 | export default App; 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Daniel Truong 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "readmegithub", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@material-ui/core": "^4.12.3", 7 | "@material-ui/icons": "^4.11.2", 8 | "@testing-library/jest-dom": "^5.14.1", 9 | "@testing-library/react": "^11.2.7", 10 | "@testing-library/user-event": "^12.8.3", 11 | "react": "^17.0.2", 12 | "react-dom": "^17.0.2", 13 | "react-router-dom": "^5.2.1", 14 | "react-scripts": "4.0.3", 15 | "react-use-clipboard": "^1.0.7", 16 | "web-vitals": "^1.1.2" 17 | }, 18 | "scripts": { 19 | "start": "react-scripts start", 20 | "build": "CI= react-scripts build", 21 | "test": "react-scripts test", 22 | "eject": "react-scripts eject" 23 | }, 24 | "eslintConfig": { 25 | "extends": [ 26 | "react-app", 27 | "react-app/jest" 28 | ] 29 | }, 30 | "browserslist": { 31 | "production": [ 32 | ">0.2%", 33 | "not dead", 34 | "not op_mini all" 35 | ], 36 | "development": [ 37 | "last 1 chrome version", 38 | "last 1 firefox version", 39 | "last 1 safari version" 40 | ] 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/anhduy1202/Git-Readme) [![Netlify Status](https://api.netlify.com/api/v1/badges/756bcad2-3fba-4b30-adf1-1e00f90ba5d1/deploy-status)](https://app.netlify.com/sites/gitmee/deploys) 3 | # Git Readme: Custom Github Readme in an easier way 🥳 4 | 5 | 6 | 7 | 👆 These badges are copy pasted from this website 8 | 9 | 10 | ## Make your Github Readme prettier in 2 steps: 11 | * Go to your Github readme to customize it 12 | * Use this website and copy the code you need 😍 13 | 14 | ### Read more about this project on my blog: https://danieltruong.hashnode.dev/git-readme-customize-your-github-readme-in-an-easier-way 15 | 16 | ## Give it a ⭐️ if you enjoy using the website 17 | -------------------------------------------------------------------------------- /src/Component/BadgeComponent/_badge.scss: -------------------------------------------------------------------------------- 1 | @import "../../scss/variables"; 2 | @import "../../scss/mixins"; 3 | 4 | .badge { 5 | &-link { 6 | min-width: 35%; 7 | } 8 | 9 | 10 | } 11 | 12 | .badge-container { 13 | max-width: 100%; 14 | @include breakpoint-down(medium){ 15 | margin-left: 2rem; 16 | } 17 | } 18 | 19 | .mainbadge{ 20 | @include breakpoint-down(medium){ 21 | max-width: 100%; 22 | } 23 | } 24 | 25 | .badgeStat{ 26 | max-width: 50%; 27 | padding-bottom: 2.5rem; 28 | &-form { 29 | display: flex; 30 | min-width: 100%; 31 | margin-bottom: 1.5rem; 32 | @include breakpoint-down(medium){ 33 | min-width: 80%; 34 | } 35 | 36 | } 37 | @include breakpoint-down(medium){ 38 | max-width: 100%; 39 | p { 40 | font-size: 0.87rem; 41 | } 42 | } 43 | } 44 | 45 | .countStat { 46 | max-width: 50%; 47 | padding-bottom: 2rem; 48 | flex-direction: column; 49 | @include breakpoint-down(medium) { 50 | max-width: 100%; 51 | img { 52 | transform: scale(1.5); 53 | margin-left: 1rem; 54 | margin-bottom: 1rem; 55 | } 56 | } 57 | 58 | 59 | } -------------------------------------------------------------------------------- /src/Component/_stat.scss: -------------------------------------------------------------------------------- 1 | @import '../scss/variables'; 2 | @import '../scss/mixins'; 3 | 4 | .stat { 5 | &-container{ 6 | width:70%; 7 | display: flex; 8 | flex-direction: column; 9 | @include breakpoint-down(medium){ 10 | min-width: 80%; 11 | } 12 | } 13 | } 14 | .social { 15 | &-container { 16 | @include breakpoint-down(medium){ 17 | min-width: 100%; 18 | margin-left: 2rem; 19 | } 20 | } 21 | 22 | &-icon { 23 | @include breakpoint-down(medium){ 24 | max-width: 100%; 25 | } 26 | } 27 | } 28 | 29 | .socialStat{ 30 | @include breakpoint-down(medium) { 31 | } 32 | } 33 | .userStat, .lanStat, .socialStat, .badgeStat, .countStat{ 34 | display: flex; 35 | flex-direction: row; 36 | padding-bottom: 3rem; 37 | border-bottom: 2px solid #99aab5; 38 | flex-wrap: wrap; 39 | min-width: 40%; 40 | &-form { 41 | display: flex; 42 | max-width: 50%; 43 | flex-direction: column; 44 | @include breakpoint-down(medium){ 45 | max-width: 110%; 46 | margin-right: -1rem; 47 | margin-bottom: 2rem; 48 | } 49 | } 50 | 51 | } 52 | 53 | .lanStat { 54 | 55 | &-img { 56 | margin-bottom: 3rem; 57 | } 58 | } 59 | 60 | 61 | .userStat{ 62 | &-img{ 63 | @include breakpoint-down(medium) { 64 | max-width: 100%; 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /src/Permanent/Navbar.jsx: -------------------------------------------------------------------------------- 1 | import { Breadcrumbs, makeStyles } from "@material-ui/core" 2 | import { Link } from "react-router-dom" 3 | import HomeIcon from '@material-ui/icons/Home'; 4 | import EqualizerIcon from '@material-ui/icons/Equalizer'; 5 | import WifiIcon from '@material-ui/icons/Wifi'; 6 | import LabelIcon from '@material-ui/icons/Label'; 7 | const useStyles = makeStyles(() => ({ 8 | 9 | link: { 10 | display:"flex", 11 | textDecoration:"none", 12 | color:"#FFFFFF" 13 | }, 14 | 15 | icon: { 16 | color:"#7289DA", 17 | textDecoration:"none", 18 | paddingRight: 4 19 | 20 | }, 21 | bread: { 22 | color: "#FFFFFF" 23 | } 24 | })); 25 | 26 | const Navbar = () => { 27 | const classes = useStyles(); 28 | return ( 29 | 50 | 51 | ); 52 | } 53 | 54 | export default Navbar; -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 18 | 19 | 23 | 24 | 33 | Github Read Me 34 | 35 | 36 | 37 |
38 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /src/Component/Home.jsx: -------------------------------------------------------------------------------- 1 | import example from '../Image/readmeex.jpg'; 2 | 3 | const Home = (props) => { 4 | return ( 5 |
6 |
Welcome to GitReadme 👾🤩
7 |
8 | The only website you'll need to make a pretty looking Readme on Github 9 |
10 | 11 |

12 | Here's an example from my Github Readme 13 |

14 | 15 | 16 |
17 |

How It Works? 🤔

18 |

It's easy! Just follow these steps

19 |
    20 |
  1. Sign In/ Sign Up to your Github Account
  2. 21 |
  3. At the homepage, click on the readme (introduce yourself)
  4. 22 |
  5. Type anything you want
  6. 23 |
  7. Use this website and copy the code you need 😍
  8. 24 |
25 |
26 | 27 |
28 |

Credits:

29 |

Awesome resources that I collect information from

30 |
31 |
32 | Ileriayo's Github 33 |
34 |
35 | Shields.io 36 |
37 |
38 | Anurag's Github 39 |
40 |
41 | Anton's Website 42 |
43 |
44 |
45 | 46 |
47 |

Thank You!

48 |

Give it a ⭐️ if you enjoy using the website

49 | 🌞 My Github 🌞 50 |
51 |
52 | ); 53 | } 54 | 55 | export default Home; 56 | -------------------------------------------------------------------------------- /src/Component/BadgeComponent/lanBadge.js: -------------------------------------------------------------------------------- 1 | 2 | export const lanBadge = [ 3 | { 4 | language: "C", link: "https://img.shields.io/badge/c-%2300599C.svg?style=for-the-badge&logo=c&logoColor=white" 5 | }, 6 | { 7 | language: "C#", link: "https://img.shields.io/badge/c%23-%23239120.svg?style=for-the-badge&logo=c-sharp&logoColor=white" 8 | }, 9 | { 10 | language: "C++", link: "https://img.shields.io/badge/c++-%2300599C.svg?style=for-the-badge&logo=c%2B%2B&logoColor=white" 11 | }, 12 | { 13 | language: "CSS3", link: "https://img.shields.io/badge/css3-%231572B6.svg?style=for-the-badge&logo=css3&logoColor=white" 14 | }, 15 | { 16 | language: "Dart", link: "https://img.shields.io/badge/dart-%230175C2.svg?style=for-the-badge&logo=dart&logoColor=white" 17 | }, 18 | { 19 | language: "Golang", link: "https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white" 20 | }, 21 | { 22 | language: "GraphQL", link: "https://img.shields.io/badge/-GraphQL-E10098?style=for-the-badge&logo=graphql&logoColor=white" 23 | }, 24 | { 25 | language: "HTML5", link: "https://img.shields.io/badge/html5-%23E34F26.svg?style=for-the-badge&logo=html5&logoColor=white" 26 | }, 27 | { 28 | language: "Java", link: "https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=java&logoColor=white" 29 | }, 30 | { 31 | language: "Javascript", link: "https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge&logo=javascript&logoColor=%23F7DF1E" 32 | }, 33 | { 34 | language:"Kotlin", link: "https://img.shields.io/badge/kotlin-%230095D5.svg?style=for-the-badge&logo=kotlin&logoColor=white" 35 | }, 36 | { 37 | language:"PHP", link: "https://img.shields.io/badge/php-%23777BB4.svg?style=for-the-badge&logo=php&logoColor=white" 38 | }, 39 | { 40 | language:"Python", link: "https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54" 41 | }, 42 | { 43 | language:"R", link: "https://img.shields.io/badge/r-%23276DC3.svg?style=for-the-badge&logo=r&logoColor=white" 44 | }, 45 | { 46 | language:"Ruby", link: "https://img.shields.io/badge/ruby-%23CC342D.svg?style=for-the-badge&logo=ruby&logoColor=white" 47 | }, 48 | { 49 | language:"Rust", link: "https://img.shields.io/badge/rust-%23000000.svg?style=for-the-badge&logo=rust&logoColor=white" 50 | }, 51 | { 52 | language:"Shell Script", link: "https://img.shields.io/badge/shell_script-%23121011.svg?style=for-the-badge&logo=gnu-bash&logoColor=white" 53 | }, 54 | { 55 | language:"Swift", link: "https://img.shields.io/badge/swift-F54A2A?style=for-the-badge&logo=swift&logoColor=white" 56 | }, 57 | { 58 | language:"TypeScript", link: "https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white" 59 | } 60 | 61 | ] -------------------------------------------------------------------------------- /src/Component/_home.scss: -------------------------------------------------------------------------------- 1 | @import '../scss/variables'; 2 | @import '../scss/mixins'; 3 | 4 | .home{ 5 | &-container{ 6 | display: flex; 7 | justify-content: center; 8 | align-items:center; 9 | flex-direction: column; 10 | @include breakpoint-down(medium) { 11 | margin-left: 1.2rem; 12 | margin-right: 1.2rem; 13 | } 14 | } 15 | 16 | 17 | 18 | &-example { 19 | margin-top: 2rem; 20 | max-width: 70%; 21 | box-shadow: 2px 2px 14px 2px #3b497c; 22 | margin: 0 1.2rem 0 1.2rem; 23 | @include breakpoint-down(medium) { 24 | max-width:80%; 25 | } 26 | } 27 | &-subheader{ 28 | color:#999999; 29 | @include breakpoint-down(medium) { 30 | font-size: 1.2rem; 31 | } 32 | } 33 | } 34 | header{ 35 | margin-top: 2.5rem; 36 | margin-bottom: 2rem; 37 | color:#7289Da; 38 | font-weight: 600; 39 | font-size: $font-mdlg; 40 | 41 | @include breakpoint-down(medium) { 42 | font-size: 1.4rem; 43 | text-align: center; 44 | } 45 | } 46 | .exampledes{ 47 | color:#6e85d6; 48 | font-size: 1.3rem; 49 | text-align: center; 50 | max-width: 50%; 51 | @include breakpoint-down(medium) { 52 | margin-top: 2rem; 53 | font-size: 1.2rem; 54 | } 55 | } 56 | .how { 57 | margin-top: 2rem; 58 | text-align: center; 59 | &-header{ 60 | font-size: $font-lg; 61 | color:#7289Da; 62 | @include breakpoint-down(medium) { 63 | font-size: 1.5rem; 64 | text-align: center; 65 | } 66 | } 67 | &-subheader{ 68 | color:#999999; 69 | @include breakpoint-down(medium) { 70 | font-size: 1.2rem; 71 | } 72 | } 73 | &-steps{ 74 | display: flex; 75 | color:rgb(197, 194, 194); 76 | flex-direction: column; 77 | align-items: flex-start; 78 | @include breakpoint-down(medium) { 79 | margin: 2rem 2rem 0 2rem; 80 | font-size: 1rem; 81 | } 82 | } 83 | li{ 84 | margin-bottom: 1.4rem; 85 | } 86 | 87 | } 88 | 89 | .credits { 90 | text-align: center; 91 | &-header{ 92 | 93 | font-size: $font-lg; 94 | color:#7289Da; 95 | @include breakpoint-down(medium) { 96 | font-size: 1.5rem; 97 | text-align: center; 98 | } 99 | } 100 | &-subheader{ 101 | 102 | color:#999999; 103 | @include breakpoint-down(medium) { 104 | font-size: 1.2rem; 105 | text-align: center; 106 | } 107 | } 108 | &-grid { 109 | display: grid; 110 | grid-template-columns: repeat(2,1fr); 111 | text-align: center; 112 | row-gap: 1.5rem; 113 | @include breakpoint-down(medium) { 114 | margin: 0 2rem 0 2rem; 115 | grid-template-columns: repeat(2,0.5fr); 116 | text-align: center; 117 | } 118 | a{ 119 | text-decoration: none; 120 | font-size: 1.3rem; 121 | @include breakpoint-down(medium){ 122 | font-size: 1.1rem; 123 | } 124 | } 125 | 126 | } 127 | 128 | 129 | } 130 | 131 | .theme,.count{ 132 | margin-bottom: 4rem; 133 | padding-bottom: 4rem; 134 | border-bottom: 2px solid #7285c9; 135 | } 136 | 137 | .myrepo { 138 | text-align: center; 139 | &-header { 140 | color: #7289Da; 141 | font-weight: 600; 142 | font-size: $font-lg; 143 | @include breakpoint-down(medium) { 144 | font-size: 1.5rem; 145 | text-align: center; 146 | } 147 | } 148 | &-star { 149 | color:white; 150 | @include breakpoint-down(medium) { 151 | margin: 0 2rem 2rem 2rem; 152 | font-size: 1.2rem; 153 | text-align: center; 154 | } 155 | } 156 | a{ 157 | font-size: 1.6rem; 158 | text-decoration: none; 159 | color:#afc1fc; 160 | font-weight: 600; 161 | @include breakpoint-down(medium) { 162 | font-size: 1.4rem; 163 | } 164 | 165 | } 166 | margin-bottom: 4rem; 167 | } -------------------------------------------------------------------------------- /src/Component/BadgeComponent/FwBadge.jsx: -------------------------------------------------------------------------------- 1 | import { Accordion, AccordionDetails, AccordionSummary, Button, Card, CardContent, FormControl, Input, InputAdornment, InputLabel, makeStyles, Menu, MenuItem, Select, TextField, Typography } from "@material-ui/core" 2 | import { useState } from "react"; 3 | import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; 4 | import useCopyClipboard from "react-use-clipboard"; 5 | import { useEffect } from "react"; 6 | import { fwBadge } from "./fwBade"; 7 | 8 | const useStyles = makeStyles(() => ({ 9 | 10 | header: { 11 | color: "#7289Da", 12 | fontFamily: "Source Code Pro", 13 | fontWeight: 700, 14 | fontSize: "1.5rem", 15 | marginTop: "2.5rem", 16 | marginBottom: "3rem", 17 | alignSelf: "center", 18 | 19 | }, 20 | form: { 21 | alignSelf: "flex-start", 22 | minWidth: "100%", 23 | fontFamily: "Source Code Pro", 24 | }, 25 | lanField: { 26 | display: "flex", 27 | flexDirection: "row", 28 | maxWidth: "100%", 29 | }, 30 | link: { 31 | justifySelf: "flex-end", 32 | minWidth: "20%", 33 | }, 34 | 35 | lan: { 36 | maxWidth: "80%", 37 | marginBottom: "1rem", 38 | marginTop: "2rem", 39 | fontFamily: "Source Code Pro", 40 | backgroundColor: "white", 41 | padding: "0rem", 42 | backgroundColor: "#7c93e6", 43 | 44 | }, 45 | 46 | item: { 47 | color: "#586fc5" 48 | }, 49 | button: { 50 | display: "block", 51 | marginTop: "1rem", 52 | fontWeight: 700, 53 | fontFamily: "Source Code Pro" 54 | }, 55 | label: { 56 | color: "#FFFFFF", 57 | 58 | }, 59 | select: { 60 | minWidth: "80%", 61 | marginRight: "2rem", 62 | color: "#7289Da", 63 | boxShadow: "1px 1px 12px 3px #4d5661", 64 | paddingLeft: "0.5rem", 65 | paddingTop:"1rem", 66 | paddingBottom:"1rem" 67 | 68 | }, 69 | typocode: { 70 | whiteSpace:"normal", 71 | overflow:"hidden", 72 | color: "white", 73 | fontWeight: 700, 74 | fontFamily: "Source Code Pro" 75 | }, 76 | 77 | 78 | 79 | })) 80 | 81 | const FwBadge = () => { 82 | const classes = useStyles(); 83 | const [fwLink, setLink] = useState("https://img.shields.io/badge/.NET-5C2D91?style=for-the-badge&logo=.net&logoColor=white") 84 | const [code, setCode] = useState(``); 85 | const [isCopied, setCopied] = useCopyClipboard(code); 86 | const [Copied, setCop] = useState(false); 87 | 88 | useEffect(() => { 89 | setCode(``); 90 | }, [fwLink]) 91 | 92 | const handleChange = (e) => { 93 | setLink(e); 94 | setCop(false); 95 | } 96 | 97 | const handleClick= () => { 98 | setCopied(code); 99 | setCop(true); 100 | } 101 | 102 | return ( 103 |
104 | 105 | Frameworks/Platforms/Libraries: 106 | 107 |
108 |
109 | 110 | 121 | 122 | 123 | 124 | 125 |
126 | 127 | } 129 | aria-controls="panel1a-content" 130 | id="panel1a-header" 131 | > 132 | View Code 133 | 134 | 135 | 136 | {code} 137 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 |
148 |
149 | ); 150 | } 151 | 152 | export default FwBadge; -------------------------------------------------------------------------------- /src/Component/BadgeComponent/LanguageBadge.jsx: -------------------------------------------------------------------------------- 1 | import { Accordion, AccordionDetails, AccordionSummary, Button, Card, CardContent, FormControl, Input, InputAdornment, InputLabel, makeStyles, Menu, MenuItem, Select, TextField, Typography } from "@material-ui/core" 2 | import { AccountCircle, SettingsInputComponentTwoTone } from "@material-ui/icons"; 3 | import { useState } from "react"; 4 | import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; 5 | import useCopyClipboard from "react-use-clipboard"; 6 | import { useEffect } from "react"; 7 | import { lanBadge } from "./lanBadge"; 8 | 9 | const useStyles = makeStyles(() => ({ 10 | 11 | header: { 12 | color: "#7289Da", 13 | fontFamily: "Source Code Pro", 14 | fontWeight: 700, 15 | fontSize: "1.5rem", 16 | marginTop: "2.5rem", 17 | marginBottom: "3rem", 18 | alignSelf: "center", 19 | 20 | }, 21 | form: { 22 | alignSelf: "flex-start", 23 | minWidth: "100%", 24 | fontFamily: "Source Code Pro", 25 | 26 | }, 27 | lanField: { 28 | display:"flex", 29 | flexDirection:"row", 30 | maxWidth:"100%", 31 | }, 32 | link: { 33 | justifySelf:"flex-end", 34 | minWidth:"20%", 35 | }, 36 | 37 | 38 | lan: { 39 | maxWidth: "80%", 40 | marginBottom: "1rem", 41 | marginTop: "2rem", 42 | fontFamily: "Source Code Pro", 43 | backgroundColor:"white", 44 | padding: "0rem", 45 | backgroundColor: "#7c93e6", 46 | 47 | }, 48 | 49 | item: { 50 | color: "#586fc5" 51 | }, 52 | button: { 53 | display: "block", 54 | marginTop: "1rem", 55 | fontWeight: 700, 56 | fontFamily: "Source Code Pro" 57 | }, 58 | label: { 59 | color: "#FFFFFF", 60 | 61 | }, 62 | select: { 63 | minWidth:"80%", 64 | marginRight:"2rem", 65 | color: "#7289Da", 66 | boxShadow: "1px 1px 12px 3px #4d5661", 67 | paddingLeft: "0.5rem", 68 | 69 | 70 | }, 71 | 72 | typocode: { 73 | whiteSpace:"normal", 74 | overflow:"hidden", 75 | color: "white", 76 | fontWeight: 700, 77 | fontFamily: "Source Code Pro" 78 | }, 79 | 80 | 81 | 82 | })) 83 | 84 | const LanguageBadge = () => { 85 | const classes = useStyles(); 86 | const [lanLink, setLink] = useState("https://img.shields.io/badge/c%23-%23239120.svg?style=for-the-badge&logo=c-sharp&logoColor=white"); 87 | const [badgeCode, setCode] = useState(``); 88 | const [Copied, setCop] = useState(false); 89 | const [isCopied, setCopied] = useCopyClipboard(badgeCode); 90 | 91 | useEffect(() => { 92 | setCode(``); 93 | }, [lanLink]) 94 | 95 | 96 | const handleChange = (link) => { 97 | setLink(link); 98 | setCop(false); 99 | } 100 | 101 | const handleClick = () => { 102 | setCopied(badgeCode); 103 | setCop(true); 104 | } 105 | return ( 106 |
107 | 108 | Programming Languages: 109 | 110 |
111 |
112 | 113 | 126 | 127 | 128 | 129 | 130 |
131 | 132 | 133 | } 135 | aria-controls="panel1a-content" 136 | id="panel1a-header" 137 | > 138 | View Code 139 | 140 | 141 | 142 | {badgeCode} 143 | 146 | 147 | 148 | 149 | 150 | 151 | 152 |
153 |
154 | ); 155 | } 156 | 157 | export default LanguageBadge; -------------------------------------------------------------------------------- /src/Component/BadgeComponent/fwBade.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | export const fwBadge = [ 4 | { 5 | name: ".NET", url: "https://img.shields.io/badge/.NET-5C2D91?style=for-the-badge&logo=.net&logoColor=white" 6 | }, 7 | { 8 | name: "Angular", url: "https://img.shields.io/badge/angular-%23DD0031.svg?style=for-the-badge&logo=angular&logoColor=white" 9 | }, 10 | { 11 | name: "Angular.js", url: "https://img.shields.io/badge/angular.js-%23E23237.svg?style=for-the-badge&logo=angularjs&logoColor=white" 12 | }, 13 | { 14 | name: "Ant Design", url: "https://img.shields.io/badge/-AntDesign-%230170FE?style=for-the-badge&logo=ant-design&logoColor=white" 15 | }, 16 | { 17 | name: "Apollo GraphQL", url: "https://img.shields.io/badge/-ApolloGraphQL-311C87?style=for-the-badge&logo=apollo-graphql" 18 | }, 19 | { 20 | name: "Bootstrap", url: "https://img.shields.io/badge/bootstrap-%23563D7C.svg?style=for-the-badge&logo=bootstrap&logoColor=white" 21 | }, 22 | { 23 | name: "Django", url: "https://img.shields.io/badge/django-%23092E20.svg?style=for-the-badge&logo=django&logoColor=white" 24 | }, 25 | { 26 | name: "Electron.js", url: "https://img.shields.io/badge/Electron-191970?style=for-the-badge&logo=Electron&logoColor=white" 27 | }, 28 | { 29 | name: "Express.js", url: "https://img.shields.io/badge/express.js-%23404d59.svg?style=for-the-badge&logo=express&logoColor=%2361DAFB" 30 | }, 31 | { 32 | name: "FastAPI", url: "https://img.shields.io/badge/FastAPI-005571?style=for-the-badge&logo=fastapi" 33 | }, 34 | { 35 | name: "Flask", url: "https://img.shields.io/badge/flask-%23000.svg?style=for-the-badge&logo=flask&logoColor=white" 36 | }, 37 | { 38 | name: "Flutter", url: "https://img.shields.io/badge/Flutter-%2302569B.svg?style=for-the-badge&logo=Flutter&logoColor=white" 39 | }, 40 | { 41 | name: "Gatsby.js", url: "https://img.shields.io/badge/Gatsby-%23663399.svg?style=for-the-badge&logo=gatsby&logoColor=white" 42 | }, 43 | { 44 | name: "Gulp", url: "https://img.shields.io/badge/GULP-%23CF4647.svg?style=for-the-badge&logo=gulp&logoColor=white" 45 | }, 46 | { 47 | name: "jQuery", url: "https://img.shields.io/badge/jquery-%230769AD.svg?style=for-the-badge&logo=jquery&logoColor=white" 48 | }, 49 | { 50 | name: "Laravel", url: "https://img.shields.io/badge/laravel-%23FF2D20.svg?style=for-the-badge&logo=laravel&logoColor=white" 51 | }, 52 | { 53 | name: "MaterialUI", url: "https://img.shields.io/badge/materialui-%230081CB.svg?style=for-the-badge&logo=material-ui&logoColor=white" 54 | }, 55 | { 56 | name: "NPM", url: "https://img.shields.io/badge/NPM-%23000000.svg?style=for-the-badge&logo=npm&logoColor=white" 57 | }, 58 | { 59 | name: "NestJS", url: "https://img.shields.io/badge/nestjs-%23E0234E.svg?style=for-the-badge&logo=nestjs&logoColor=white" 60 | }, 61 | { 62 | name: "NextJS", url: "https://img.shields.io/badge/Next-black?style=for-the-badge&logo=next.js&logoColor=white" 63 | }, 64 | { 65 | name: "Node.js", url: "https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white" 66 | }, 67 | { 68 | name: "OpenCV", url: "https://img.shields.io/badge/opencv-%23white.svg?style=for-the-badge&logo=opencv&logoColor=white" 69 | }, 70 | { 71 | name: "OpenGL", url: "https://img.shields.io/badge/OpenGL-%23FFFFFF.svg?style=for-the-badge&logo=opengl" 72 | }, 73 | { 74 | name: "Rails", url: "https://img.shields.io/badge/rails-%23CC0000.svg?style=for-the-badge&logo=ruby-on-rails&logoColor=white" 75 | }, 76 | { 77 | name: "React", url: "https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB" 78 | }, 79 | { 80 | name: "React Native", url: "https://img.shields.io/badge/react_native-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB" 81 | }, 82 | { 83 | name: "React Router", url: "https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white" 84 | }, 85 | { 86 | name: "Redux", url: "https://img.shields.io/badge/redux-%23593d88.svg?style=for-the-badge&logo=redux&logoColor=white" 87 | }, 88 | { 89 | name: "SASS", url: "https://img.shields.io/badge/SASS-hotpink.svg?style=for-the-badge&logo=SASS&logoColor=white" 90 | }, 91 | { 92 | name: "Spring", url: "https://img.shields.io/badge/spring-%236DB33F.svg?style=for-the-badge&logo=spring&logoColor=white" 93 | }, 94 | { 95 | name: "Strapi", url: "https://img.shields.io/badge/strapi-%232E7EEA.svg?style=for-the-badge&logo=strapi&logoColor=white" 96 | }, 97 | { 98 | name: "Styled Components", url: "https://img.shields.io/badge/styled--components-DB7093?style=for-the-badge&logo=styled-components&logoColor=white" 99 | }, 100 | { 101 | name: "TailwindCSS", url: "https://img.shields.io/badge/tailwindcss-%2338B2AC.svg?style=for-the-badge&logo=tailwind-css&logoColor=white" 102 | }, 103 | { 104 | name: "Three.js", url: "https://img.shields.io/badge/threejs-black?style=for-the-badge&logo=three.js&logoColor=white" 105 | }, 106 | { 107 | name: "Vue.js", url: "https://img.shields.io/badge/vuejs-%2335495e.svg?style=for-the-badge&logo=vuedotjs&logoColor=%234FC08D" 108 | } 109 | ] 110 | -------------------------------------------------------------------------------- /src/Component/BadgeComponent/ProfileView.jsx: -------------------------------------------------------------------------------- 1 | import { Accordion, AccordionDetails, AccordionSummary, Button, Card, CardContent, FormControl, Input, InputAdornment, InputLabel, makeStyles, Menu, MenuItem, Select, TextField, Typography } from "@material-ui/core" 2 | import { useState } from "react"; 3 | import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; 4 | import { AccountCircle } from "@material-ui/icons"; 5 | 6 | import useCopyClipboard from "react-use-clipboard"; 7 | import { useEffect } from "react"; 8 | 9 | 10 | const useStyles = makeStyles(() => ({ 11 | 12 | header: { 13 | color: "#7289Da", 14 | fontFamily: "Source Code Pro", 15 | fontWeight: 700, 16 | fontSize: "1.5rem", 17 | marginTop: "2.5rem", 18 | marginBottom: "3rem", 19 | alignSelf: "center", 20 | 21 | }, 22 | input: { 23 | maxWidth: "90%", 24 | fontFamily: "Source Code Pro", 25 | color: "#FFFFFF" 26 | 27 | }, 28 | form: { 29 | alignSelf: "flex-start", 30 | minWidth: "100%", 31 | fontFamily: "Source Code Pro", 32 | }, 33 | form2: { 34 | alignSelf: "flex-start", 35 | minWidth: "100%", 36 | fontFamily: "Source Code Pro", 37 | marginTop:"1rem", 38 | }, 39 | lanField: { 40 | display: "flex", 41 | flexDirection: "row", 42 | maxWidth: "100%", 43 | }, 44 | lan: { 45 | maxWidth: "80%", 46 | marginBottom: "1rem", 47 | marginTop: "2rem", 48 | fontFamily: "Source Code Pro", 49 | backgroundColor: "white", 50 | padding: "0rem", 51 | backgroundColor: "#7c93e6", 52 | 53 | }, 54 | link: { 55 | justifySelf: "flex-end", 56 | minWidth: "20%", 57 | }, 58 | view: { 59 | maxWidth: "20%", 60 | } 61 | , 62 | button: { 63 | display: "block", 64 | marginTop: "1rem", 65 | fontWeight: 700, 66 | fontFamily: "Source Code Pro" 67 | }, 68 | label: { 69 | color: "#FFFFFF", 70 | }, 71 | 72 | 73 | typocode: { 74 | whiteSpace:"normal", 75 | overflow:"hidden", 76 | color: "white", 77 | fontWeight: 700, 78 | fontFamily: "Source Code Pro" 79 | }, 80 | 81 | 82 | 83 | })) 84 | const ProfileView = () => { 85 | const [username, setUsername] = useState("anhduy1202"); 86 | const [color, setColor] = useState("blue"); 87 | const [code, setCode] = useState(``); 88 | const [isCopied, setCopied] = useCopyClipboard(code); 89 | const [Copied, setCop] = useState(false); 90 | 91 | 92 | useEffect(() => { 93 | setCode(``); 94 | 95 | }, [username, color]) 96 | 97 | const handleChange = (e) => { 98 | setUsername(e); 99 | setCop(false); 100 | if (e.length == 0) { 101 | setUsername("anhduy1202"); 102 | } 103 | } 104 | 105 | const handleColor = (e) => { 106 | setColor(e); 107 | if (e.length == 0) { 108 | setColor("blue"); 109 | } 110 | setCop(false); 111 | } 112 | 113 | const handleClick = () => { 114 | setCopied(code); 115 | setCop(true); 116 | } 117 | 118 | const classes = useStyles(); 119 | return ( 120 |
121 | 122 | Add Profile Views Count: 123 | 124 |
125 |
126 | 127 | Github's username 128 | handleChange(e.target.value)} 133 | startAdornment={ 134 | 135 | 136 | 137 | } /> 138 | 139 | 140 | 141 | 142 | Badge Color 143 | handleColor(e.target.value)} 148 | /> 149 | 150 | 151 | 152 | 153 |
154 | profile count view 155 | 156 | } 158 | aria-controls="panel1a-content" 159 | id="panel1a-header" 160 | > 161 | View Code 162 | 163 | 164 | 165 | {code} 166 | 169 | 170 | 171 | 172 | 173 | 174 | 175 |
176 | 177 |
178 | ); 179 | } 180 | 181 | export default ProfileView; -------------------------------------------------------------------------------- /src/Component/StatComponent/UserStat.jsx: -------------------------------------------------------------------------------- 1 | import { Accordion, AccordionDetails, AccordionSummary, Button, Card, CardContent, FormControl, Input, InputAdornment, InputLabel, makeStyles, MenuItem, Select, TextField, Typography } from "@material-ui/core" 2 | import { AccountCircle } from "@material-ui/icons"; 3 | import { useState } from "react"; 4 | import { themeData } from "./Theme"; 5 | import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; 6 | import { useEffect } from "react"; 7 | import useCopyClipboard from "react-use-clipboard"; 8 | 9 | const useStyles = makeStyles(() => ({ 10 | header: { 11 | fontFamily: 'Source Code Pro', 12 | fontWeight: 700, 13 | fontSize: "1.5rem", 14 | marginTop: "2rem", 15 | marginBottom: "2rem", 16 | alignSelf: "center", 17 | color: "#7289DA" 18 | 19 | }, 20 | 21 | form: { 22 | alignSelf: "flex-start", 23 | minWidth: "100%", 24 | fontFamily: "Source Code Pro", 25 | 26 | 27 | }, 28 | input: { 29 | maxWidth: "90%", 30 | fontFamily: "Source Code Pro", 31 | color: "#FFFFFF" 32 | 33 | }, 34 | 35 | theme: { 36 | maxWidth: "90%", 37 | marginTop: "2rem", 38 | fontFamily: "Source Code Pro", 39 | 40 | }, 41 | accord: { 42 | maxWidth: "90%", 43 | marginTop: "2rem", 44 | fontFamily: "Source Code Pro", 45 | backgroundColor: "#7c93e6", 46 | }, 47 | button: { 48 | display: "block", 49 | marginTop: "1rem", 50 | fontWeight: 700, 51 | fontFamily: "Source Code Pro" 52 | }, 53 | label: { 54 | color: "#FFFFFF", 55 | 56 | }, 57 | select: { 58 | color: "#99AAB5", 59 | fontWeight: 700 60 | }, 61 | 62 | typocode: { 63 | whiteSpace:"normal", 64 | overflow:"hidden", 65 | color: "white", 66 | fontWeight: 700, 67 | fontFamily: "Source Code Pro" 68 | }, 69 | 70 | })) 71 | 72 | 73 | const UserStat = () => { 74 | const [userName, setUserName] = useState("anhduy1202"); 75 | const [theme, setTheme] = useState("tokyonight"); 76 | const [userStatCode, setuserCode] = useState(``); 77 | const classes = useStyles(); 78 | const [isCopied, setCopied] = useCopyClipboard(userStatCode); 79 | const [Copied, setCop] = useState(false); 80 | useEffect(() => { 81 | setuserCode(``); 82 | 83 | }, [userName, theme]) 84 | 85 | const handleChange = (e) => { 86 | setCop(false); 87 | setUserName(e); 88 | if (e.length == 0) { 89 | setUserName("anhduy1202"); 90 | } 91 | } 92 | const handleTheme = (e) => { 93 | setTheme(e); 94 | setCop(false); 95 | } 96 | 97 | const handleClick = () => { 98 | setCopied(userStatCode); 99 | setCop(true); 100 | } 101 | 102 | 103 | return ( 104 |
105 | 106 | Github Stats: 107 | 108 |
109 |
110 | 111 | Github's username 112 | handleChange(e.target.value)} 117 | startAdornment={ 118 | 119 | 120 | 121 | 122 | } /> 123 | 124 | 125 | 126 | 127 | Stat's Theme 128 | 140 | 141 | 142 | 143 | } 145 | aria-controls="panel1a-content" 146 | id="panel1a-header" 147 | > 148 | View Code 149 | 150 | 151 | 152 | {userStatCode} 153 | 156 | 157 | 158 | 159 | 160 | 161 | 162 |
163 | Your Stat 164 | 165 |
166 |
167 | ); 168 | } 169 | 170 | export default UserStat; -------------------------------------------------------------------------------- /src/scss/style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": [ 5 | "style.scss", 6 | "_global.scss", 7 | "_variables.scss", 8 | "_variables.scss", 9 | "../Component/_stat.scss", 10 | "_variables.scss", 11 | "_mixins.scss", 12 | "../Component/SocialComponent/_social.scss", 13 | "_variables.scss", 14 | "../Permanent/_navbar.scss", 15 | "_variables.scss", 16 | "_mixins.scss", 17 | "../Component/_home.scss", 18 | "_variables.scss", 19 | "_mixins.scss", 20 | "_mixins.scss", 21 | "../Component/BadgeComponent/_badge.scss", 22 | "_variables.scss", 23 | "_mixins.scss" 24 | ], 25 | "names": [], 26 | "file": "style.css" 27 | } -------------------------------------------------------------------------------- /src/Component/BadgeComponent/Supporter.jsx: -------------------------------------------------------------------------------- 1 | import { Accordion, AccordionDetails, AccordionSummary, Button, Card, CardContent, FormControl, Input, InputAdornment, InputLabel, makeStyles, Menu, MenuItem, Select, TextField, Typography } from "@material-ui/core" 2 | import { useState } from "react"; 3 | import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; 4 | import { AccountCircle } from "@material-ui/icons"; 5 | import FolderIcon from '@material-ui/icons/Folder'; 6 | import useCopyClipboard from "react-use-clipboard"; 7 | import { useEffect } from "react"; 8 | 9 | const useStyles = makeStyles(() => ({ 10 | 11 | header: { 12 | color: "#7289Da", 13 | fontFamily: "Source Code Pro", 14 | fontWeight: 700, 15 | fontSize: "1.5rem", 16 | marginTop: "2.5rem", 17 | marginBottom: "3rem", 18 | alignSelf: "center", 19 | 20 | }, 21 | input: { 22 | maxWidth: "90%", 23 | fontFamily: "Source Code Pro", 24 | color: "#FFFFFF" 25 | 26 | }, 27 | form: { 28 | alignSelf: "flex-start", 29 | minWidth: "100%", 30 | fontFamily: "Source Code Pro", 31 | }, 32 | form2: { 33 | alignSelf: "flex-start", 34 | minWidth: "100%", 35 | fontFamily: "Source Code Pro", 36 | marginTop: "2rem", 37 | }, 38 | lanField: { 39 | display: "flex", 40 | flexDirection: "row", 41 | maxWidth: "100%", 42 | }, 43 | lan: { 44 | maxWidth: "80%", 45 | marginBottom: "1rem", 46 | marginTop: "2rem", 47 | fontFamily: "Source Code Pro", 48 | backgroundColor: "white", 49 | padding: "0rem", 50 | backgroundColor: "#7c93e6", 51 | 52 | }, 53 | link: { 54 | justifySelf: "flex-end", 55 | minWidth: "20%", 56 | }, 57 | view: { 58 | maxWidth: "20%", 59 | } 60 | , 61 | button: { 62 | display: "block", 63 | marginTop: "1rem", 64 | fontWeight: 700, 65 | fontFamily: "Source Code Pro" 66 | }, 67 | label: { 68 | color: "#FFFFFF", 69 | }, 70 | img: { 71 | maxWidth: "10%", 72 | }, 73 | 74 | 75 | typocode: { 76 | whiteSpace:"normal", 77 | overflow:"hidden", 78 | color: "white", 79 | fontWeight: 700, 80 | fontFamily: "Source Code Pro" 81 | }, 82 | 83 | 84 | 85 | })) 86 | const Supporter = () => { 87 | 88 | const classes = useStyles(); 89 | const [username, setUsername] = useState("anhduy1202"); 90 | const [repo, setRepo] = useState("better-tic-tac-toe-client"); 91 | const [code, setCode] = useState(` { 96 | setCode(` { 100 | setCop(false); 101 | setUsername(e); 102 | if (e.length == 0) { 103 | setUsername("anhduy1202"); 104 | } 105 | } 106 | 107 | const handleRepo = (e) => { 108 | setCop(false); 109 | setRepo(e); 110 | if (e.length == 0) { 111 | setRepo("better-tic-tac-toe-client"); 112 | } 113 | } 114 | const handleClick=()=>{ 115 | setCopied(code); 116 | setCop(true); 117 | } 118 | 119 | return ( 120 |
121 | 122 | Display Supporters: 123 | 124 |
125 |
126 | 127 | Github's username 128 | handleChange(e.target.value)} 133 | startAdornment={ 134 | 135 | 136 | 137 | } /> 138 | 139 | 140 | 141 | 142 | Github's Repositories 143 | handleRepo(e.target.value)} 148 | startAdornment={ 149 | 150 | } 151 | /> 152 | 153 | 154 | 155 | 156 |
157 | Supporter Not Found 158 | 159 | } 161 | aria-controls="panel1a-content" 162 | id="panel1a-header" 163 | > 164 | View Code 165 | 166 | 167 | 168 | {code} 169 | 172 | 173 | 174 | 175 | 176 | 177 | 178 |
179 | 180 |
181 | ); 182 | } 183 | 184 | export default Supporter; -------------------------------------------------------------------------------- /src/Component/StatComponent/RepoStat.jsx: -------------------------------------------------------------------------------- 1 | import { Accordion, AccordionDetails, AccordionSummary, Button, Card, CardContent, FormControl, Input, InputAdornment, InputLabel, makeStyles, Menu, MenuItem, Select, TextField, Typography } from "@material-ui/core" 2 | import { AccountCircle } from "@material-ui/icons"; 3 | import FolderIcon from '@material-ui/icons/Folder'; 4 | import { useState } from "react"; 5 | import { themeData } from "./Theme"; 6 | import { lanCountData } from "./lanCount"; 7 | import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; 8 | import { useEffect } from "react"; 9 | import useCopyClipboard from "react-use-clipboard"; 10 | const useStyles = makeStyles(() => ({ 11 | 12 | header: { 13 | color: "#7289Da", 14 | fontFamily: "Source Code Pro", 15 | fontWeight: 700, 16 | fontSize: "1.5rem", 17 | marginTop: "2.5rem", 18 | marginBottom: "2rem", 19 | alignSelf: "center", 20 | 21 | }, 22 | form: { 23 | alignSelf: "flex-start", 24 | minWidth: "100%", 25 | fontFamily: "Source Code Pro", 26 | 27 | 28 | }, 29 | 30 | repoForm: { 31 | marginTop: "1.5rem" 32 | }, 33 | input: { 34 | maxWidth: "90%", 35 | fontFamily: "Source Code Pro", 36 | color: "#FFFFFF" 37 | 38 | }, 39 | 40 | theme: { 41 | maxWidth: "90%", 42 | marginTop: "2rem", 43 | fontFamily: "Source Code Pro", 44 | 45 | }, 46 | accord: { 47 | maxWidth: "90%", 48 | marginTop: "2rem", 49 | fontFamily: "Source Code Pro", 50 | backgroundColor: "#7c93e6", 51 | }, 52 | button: { 53 | display: "block", 54 | marginTop: "1rem", 55 | fontWeight: 700, 56 | fontFamily: "Source Code Pro" 57 | }, 58 | label: { 59 | color: "#FFFFFF", 60 | 61 | }, 62 | select: { 63 | color: "#99AAB5", 64 | fontWeight: 700 65 | }, 66 | typocode: { 67 | whiteSpace:"normal", 68 | overflow:"hidden", 69 | color: "white", 70 | fontWeight: 700, 71 | fontFamily: "Source Code Pro" 72 | }, 73 | 74 | })) 75 | 76 | const RepoStat = () => { 77 | const [userName, setUserName] = useState("anhduy1202"); 78 | const [repo, setRepo] = useState("Git-Readme"); 79 | const [repoCode, setRepoCode] = useState(``); 85 | 86 | }, [userName, repo]) 87 | 88 | const handleChange = (e) => { 89 | setCop(false); 90 | setUserName(e); 91 | if (e.length == 0) { 92 | setUserName("anhduy1202"); 93 | } 94 | } 95 | 96 | 97 | const handleClick = () => { 98 | setCopied(repoCode); 99 | setCop(true); 100 | } 101 | 102 | const handleRepoChange=(e)=>{ 103 | setRepo(e); 104 | setCop(false); 105 | if (e.length == 0) { 106 | setRepo("better-tic-tac-toe-client"); 107 | } 108 | } 109 | 110 | 111 | return ( 112 |
113 | 114 | Repo Stats: 115 | 116 |
117 |
118 | 119 | Github's username 120 | handleChange(e.target.value)} 125 | startAdornment={ 126 | 127 | 128 | 129 | 130 | } /> 131 | 132 | 133 | 134 | 135 | Github's Repositories 136 | handleRepoChange(e.target.value)} 141 | startAdornment={ 142 | 143 | 144 | 145 | 146 | } /> 147 | 148 | 149 | 150 | 151 | 152 | 153 | } 155 | aria-controls="panel1a-content" 156 | id="panel1a-header" 157 | > 158 | View Code 159 | 160 | 161 | 162 | {repoCode} 163 | 166 | 167 | 168 | 169 | 170 | 171 | 172 |
173 | Your Stat 174 | 175 |
176 |
177 | ); 178 | } 179 | 180 | export default RepoStat; 181 | -------------------------------------------------------------------------------- /src/Component/SocialComponent/Social.jsx: -------------------------------------------------------------------------------- 1 | import { Accordion, AccordionDetails, AccordionSummary, Button, Card, CardContent, FormControl, Input, InputAdornment, InputLabel, makeStyles, Menu, MenuItem, Select, TextField, Typography } from "@material-ui/core" 2 | import { AccountCircle } from "@material-ui/icons"; 3 | import { useState } from "react"; 4 | import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; 5 | import useCopyClipboard from "react-use-clipboard"; 6 | import { useEffect } from "react"; 7 | import { socialData } from "./socialData"; 8 | 9 | const useStyles = makeStyles(() => ({ 10 | 11 | header: { 12 | color: "#7289Da", 13 | fontFamily: "Source Code Pro", 14 | fontWeight: 700, 15 | fontSize: "1.5rem", 16 | marginTop: "2.5rem", 17 | marginBottom: "2rem", 18 | alignSelf: "center", 19 | 20 | }, 21 | form: { 22 | alignSelf: "flex-start", 23 | minWidth: "100%", 24 | fontFamily: "Source Code Pro", 25 | 26 | 27 | }, 28 | input: { 29 | maxWidth: "100%", 30 | fontFamily: "Source Code Pro", 31 | color: "#FFFFFF" 32 | 33 | }, 34 | 35 | social: { 36 | maxWidth: "100%", 37 | marginBottom: "2rem", 38 | fontFamily: "Source Code Pro", 39 | 40 | }, 41 | 42 | button: { 43 | display: "block", 44 | marginTop: "1rem", 45 | fontWeight: 700, 46 | fontFamily: "Source Code Pro" 47 | }, 48 | label: { 49 | color: "#FFFFFF", 50 | 51 | }, 52 | select: { 53 | color: "#7289Da", 54 | }, 55 | 56 | typocode: { 57 | whiteSpace:"normal", 58 | overflow:"hidden", 59 | color: "white", 60 | fontWeight: 700, 61 | fontFamily: "Source Code Pro" 62 | }, 63 | accord: { 64 | maxWidth: "90%", 65 | marginTop: "2rem", 66 | fontFamily: "Source Code Pro", 67 | backgroundColor: "#7c93e6", 68 | }, 69 | 70 | 71 | })) 72 | 73 | const Social = () => { 74 | const classes = useStyles(); 75 | const [socialLink, setLink] = useState("https://www.linkedin.com/in/truong-duy-12a4b5188/"); 76 | const [socialImage, setImage] = useState("https://img.shields.io/badge/-LinkedIn-0e76a8?style=plastic&logo=linkedIn"); 77 | const [code, setCode] = useState(` `); 78 | const [isCopied, setCopied] = useCopyClipboard(code); 79 | const [Copied, setCop] = useState(false); 80 | 81 | useEffect(() => { 82 | setCode(` `) 83 | }, [socialLink, socialImage]) 84 | 85 | const [social, setSocial] = useState("Linkedin"); 86 | const handleSelect = (e) => { 87 | setSocial(e); 88 | setCop(false); 89 | if (e === "LinkedIn") { 90 | setImage("https://img.shields.io/badge/-LinkedIn-0e76a8?style=plastic&logo=linkedIn"); 91 | 92 | } 93 | else if (e === "Instagram") { 94 | setImage("https://img.shields.io/badge/-Instagram-833AB4?style=plastic&logo=Instagram"); 95 | } 96 | else if (e === "Twitter") { 97 | setImage("https://img.shields.io/badge/-Twitter-1DA1F2?style=plastic&logo=Twitter"); 98 | } 99 | else if (e === "Youtube") { 100 | setImage("https://img.shields.io/badge/-%23FF0000.svg?style=for-the-badge&logo=YouTube&logoColor=white"); 101 | } 102 | else if (e === "Facebook") { 103 | setImage("https://img.shields.io/badge/Facebook-%231877F2.svg?style=for-the-badge&logo=Facebook&logoColor=white"); 104 | } 105 | else if (e === "Discord") { 106 | setImage("https://img.shields.io/badge/%3CServer%3E-%237289DA.svg?style=for-the-badge&logo=discord&logoColor=white"); 107 | } 108 | else if (e === "Github") { 109 | setImage("https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white"); 110 | } 111 | } 112 | 113 | const handleLink = (e) => { 114 | setLink(e); 115 | setCop(false); 116 | } 117 | const handleCopy = () => { 118 | setCopied(code); 119 | setCop(true); 120 | } 121 | return ( 122 |
123 | 124 | Social Media: 125 | 126 |
127 |
128 | 129 | Social Media 130 | 143 | 144 | 145 | 146 | Social media's link 147 | handleLink(e.target.value)} 152 | startAdornment={ 153 | 154 | 155 | 156 | 157 | } /> 158 | 159 | 160 | 161 | 162 | 163 |
164 | 165 | 166 | 167 | 168 | } 170 | aria-controls="panel1a-content" 171 | id="panel1a-header" 172 | > 173 | View Code 174 | 175 | 176 | 177 | {code} 178 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 |
189 |
190 | ); 191 | } 192 | 193 | export default Social; -------------------------------------------------------------------------------- /src/Component/StatComponent/LanStat.jsx: -------------------------------------------------------------------------------- 1 | import { Accordion, AccordionDetails, AccordionSummary, Button, Card, CardContent, FormControl, Input, InputAdornment, InputLabel, makeStyles, Menu, MenuItem, Select, TextField, Typography } from "@material-ui/core" 2 | import { AccountCircle } from "@material-ui/icons"; 3 | import { useState } from "react"; 4 | import { themeData } from "./Theme"; 5 | import { lanCountData } from "./lanCount"; 6 | import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; 7 | import { useEffect } from "react"; 8 | import useCopyClipboard from "react-use-clipboard"; 9 | 10 | const useStyles = makeStyles(() => ({ 11 | 12 | header: { 13 | color: "#7289Da", 14 | fontFamily: "Source Code Pro", 15 | fontWeight: 700, 16 | fontSize: "1.5rem", 17 | marginTop: "2.5rem", 18 | marginBottom: "2rem", 19 | alignSelf: "center", 20 | 21 | }, 22 | form: { 23 | alignSelf: "flex-start", 24 | minWidth: "100%", 25 | fontFamily: "Source Code Pro", 26 | 27 | 28 | }, 29 | input: { 30 | maxWidth: "90%", 31 | fontFamily: "Source Code Pro", 32 | color: "#FFFFFF" 33 | 34 | }, 35 | 36 | theme: { 37 | maxWidth: "90%", 38 | marginTop: "2rem", 39 | fontFamily: "Source Code Pro", 40 | 41 | }, 42 | accord: { 43 | maxWidth: "90%", 44 | marginTop: "2rem", 45 | fontFamily: "Source Code Pro", 46 | backgroundColor: "#7c93e6", 47 | }, 48 | button: { 49 | display: "block", 50 | marginTop: "1rem", 51 | fontWeight: 700, 52 | fontFamily: "Source Code Pro" 53 | }, 54 | label: { 55 | color: "#FFFFFF", 56 | 57 | }, 58 | select: { 59 | color: "#99AAB5", 60 | fontWeight: 700 61 | }, 62 | typocode: { 63 | whiteSpace:"normal", 64 | overflow:"hidden", 65 | color: "white", 66 | fontWeight: 700, 67 | fontFamily: "Source Code Pro" 68 | }, 69 | 70 | })) 71 | 72 | const LanStat = () => { 73 | const classes = useStyles(); 74 | const [userName, setUserName] = useState("anhduy1202"); 75 | const [theme, setTheme] = useState("tokyonight"); 76 | const [layout, setLayout] = useState(""); 77 | const [lanCount, setLanCount] = useState(5); 78 | const [lanStatCode, setlanCode] = useState(``); 79 | const [isCopied, setCopied] = useCopyClipboard(lanStatCode); 80 | const [Copied, setCop] = useState(false); 81 | useEffect(() => { 82 | setlanCode(``); 83 | 84 | }, [userName, theme,lanCount,layout]) 85 | 86 | const handleChange = (e) => { 87 | setCop(false); 88 | setUserName(e); 89 | if (e.length == 0) { 90 | setUserName("anhduy1202"); 91 | } 92 | } 93 | const handleTheme = (e) => { 94 | setTheme(e); 95 | setCop(false); 96 | } 97 | 98 | const handleClick = () => { 99 | setCopied(lanStatCode); 100 | setCop(true); 101 | } 102 | 103 | const handleLayout = (e) => { 104 | setLayout(e); 105 | setCop(false); 106 | } 107 | const handleLanCount= (e) => { 108 | setLanCount(e); 109 | setCop(false); 110 | } 111 | 112 | return ( 113 | 114 |
115 | 116 | Language Stats: 117 | 118 |
119 |
120 | 121 | Github's username 122 | handleChange(e.target.value)} 127 | startAdornment={ 128 | 129 | 130 | 131 | 132 | } /> 133 | 134 | 135 | 136 | 137 | Stat's Theme 138 | 150 | 151 | 152 | Stat's Language Count 153 | 166 | 167 | 168 | Stat's Layout 169 | 179 | 180 | 181 | } 183 | aria-controls="panel1a-content" 184 | id="panel1a-header" 185 | > 186 | View Code 187 | 188 | 189 | 190 | {lanStatCode} 191 | 194 | 195 | 196 | 197 | 198 | 199 | 200 |
201 | Your Stat 202 | 203 |
204 | 205 | 206 |
207 | ); 208 | } 209 | 210 | export default LanStat; -------------------------------------------------------------------------------- /src/scss/style.css: -------------------------------------------------------------------------------- 1 | .App { 2 | height: 100vh; 3 | width: 100vw; 4 | display: -webkit-box; 5 | display: -ms-flexbox; 6 | display: flex; 7 | -webkit-box-orient: vertical; 8 | -webkit-box-direction: normal; 9 | -ms-flex-direction: column; 10 | flex-direction: column; 11 | padding: 0; 12 | font-size: 1.5rem; 13 | position: relative; 14 | font-family: "Source Code Pro", monospace; 15 | -webkit-box-align: center; 16 | -ms-flex-align: center; 17 | align-items: center; 18 | } 19 | 20 | html { 21 | height: 100vh; 22 | font-size: 100%; 23 | -webkit-box-sizing: border-box; 24 | box-sizing: border-box; 25 | overflow-x: hidden; 26 | background-color: #32363b; 27 | } 28 | 29 | *, *::before, *::after { 30 | -webkit-box-sizing: inherit; 31 | box-sizing: inherit; 32 | } 33 | 34 | .stat-container { 35 | width: 70%; 36 | display: -webkit-box; 37 | display: -ms-flexbox; 38 | display: flex; 39 | -webkit-box-orient: vertical; 40 | -webkit-box-direction: normal; 41 | -ms-flex-direction: column; 42 | flex-direction: column; 43 | } 44 | 45 | @media (max-width: 63.9375em) { 46 | .stat-container { 47 | min-width: 80%; 48 | } 49 | } 50 | 51 | @media (max-width: 63.9375em) { 52 | .social-container { 53 | min-width: 100%; 54 | margin-left: 2rem; 55 | } 56 | } 57 | 58 | @media (max-width: 63.9375em) { 59 | .social-icon { 60 | max-width: 100%; 61 | } 62 | } 63 | 64 | .userStat, .lanStat, .socialStat, .badgeStat, .countStat { 65 | display: -webkit-box; 66 | display: -ms-flexbox; 67 | display: flex; 68 | -webkit-box-orient: horizontal; 69 | -webkit-box-direction: normal; 70 | -ms-flex-direction: row; 71 | flex-direction: row; 72 | padding-bottom: 3rem; 73 | border-bottom: 2px solid #99aab5; 74 | -ms-flex-wrap: wrap; 75 | flex-wrap: wrap; 76 | min-width: 40%; 77 | } 78 | 79 | .userStat-form, .lanStat-form, .socialStat-form, .badgeStat-form, .countStat-form { 80 | display: -webkit-box; 81 | display: -ms-flexbox; 82 | display: flex; 83 | max-width: 50%; 84 | -webkit-box-orient: vertical; 85 | -webkit-box-direction: normal; 86 | -ms-flex-direction: column; 87 | flex-direction: column; 88 | } 89 | 90 | @media (max-width: 63.9375em) { 91 | .userStat-form, .lanStat-form, .socialStat-form, .badgeStat-form, .countStat-form { 92 | max-width: 110%; 93 | margin-right: -1rem; 94 | margin-bottom: 2rem; 95 | } 96 | } 97 | 98 | .lanStat-img { 99 | margin-bottom: 3rem; 100 | } 101 | 102 | @media (max-width: 63.9375em) { 103 | .userStat-img { 104 | max-width: 100%; 105 | } 106 | } 107 | 108 | .social-container { 109 | width: 70%; 110 | display: -webkit-box; 111 | display: -ms-flexbox; 112 | display: flex; 113 | -webkit-box-orient: vertical; 114 | -webkit-box-direction: normal; 115 | -ms-flex-direction: column; 116 | flex-direction: column; 117 | } 118 | 119 | .social-icon { 120 | min-width: 100%; 121 | margin-top: 2.5rem; 122 | } 123 | 124 | .social-link { 125 | min-width: 15%; 126 | } 127 | 128 | @media (max-width: 63.9375em) { 129 | .social-link { 130 | min-width: 30%; 131 | } 132 | } 133 | 134 | .socialStat-form { 135 | display: -webkit-box; 136 | display: -ms-flexbox; 137 | display: flex; 138 | min-width: 100%; 139 | } 140 | 141 | .navbar-container { 142 | -ms-flex-item-align: end; 143 | align-self: flex-end; 144 | margin-top: 1rem; 145 | margin-bottom: 1rem; 146 | margin-right: 3rem; 147 | } 148 | 149 | @media (max-width: 63.9375em) { 150 | .navbar-container { 151 | margin-left: 2rem; 152 | } 153 | } 154 | 155 | .navbar-container a { 156 | font-size: 1.2rem; 157 | font-family: "Source Code Pro", monospace; 158 | font-weight: 600; 159 | } 160 | 161 | @media (max-width: 63.9375em) { 162 | .navbar-container a { 163 | font-size: 0.9rem; 164 | } 165 | } 166 | 167 | .home-container { 168 | display: -webkit-box; 169 | display: -ms-flexbox; 170 | display: flex; 171 | -webkit-box-pack: center; 172 | -ms-flex-pack: center; 173 | justify-content: center; 174 | -webkit-box-align: center; 175 | -ms-flex-align: center; 176 | align-items: center; 177 | -webkit-box-orient: vertical; 178 | -webkit-box-direction: normal; 179 | -ms-flex-direction: column; 180 | flex-direction: column; 181 | } 182 | 183 | @media (max-width: 63.9375em) { 184 | .home-container { 185 | margin-left: 1.2rem; 186 | margin-right: 1.2rem; 187 | } 188 | } 189 | 190 | .home-example { 191 | margin-top: 2rem; 192 | max-width: 70%; 193 | -webkit-box-shadow: 2px 2px 14px 2px #3b497c; 194 | box-shadow: 2px 2px 14px 2px #3b497c; 195 | margin: 0 1.2rem 0 1.2rem; 196 | } 197 | 198 | @media (max-width: 63.9375em) { 199 | .home-example { 200 | max-width: 80%; 201 | } 202 | } 203 | 204 | .home-subheader { 205 | color: #999999; 206 | } 207 | 208 | @media (max-width: 63.9375em) { 209 | .home-subheader { 210 | font-size: 1.2rem; 211 | } 212 | } 213 | 214 | header { 215 | margin-top: 2.5rem; 216 | margin-bottom: 2rem; 217 | color: #7289Da; 218 | font-weight: 600; 219 | font-size: 1.75rem; 220 | } 221 | 222 | @media (max-width: 63.9375em) { 223 | header { 224 | font-size: 1.4rem; 225 | text-align: center; 226 | } 227 | } 228 | 229 | .exampledes { 230 | color: #6e85d6; 231 | font-size: 1.3rem; 232 | text-align: center; 233 | max-width: 50%; 234 | } 235 | 236 | @media (max-width: 63.9375em) { 237 | .exampledes { 238 | margin-top: 2rem; 239 | font-size: 1.2rem; 240 | } 241 | } 242 | 243 | .how { 244 | margin-top: 2rem; 245 | text-align: center; 246 | } 247 | 248 | .how-header { 249 | font-size: 2rem; 250 | color: #7289Da; 251 | } 252 | 253 | @media (max-width: 63.9375em) { 254 | .how-header { 255 | font-size: 1.5rem; 256 | text-align: center; 257 | } 258 | } 259 | 260 | .how-subheader { 261 | color: #999999; 262 | } 263 | 264 | @media (max-width: 63.9375em) { 265 | .how-subheader { 266 | font-size: 1.2rem; 267 | } 268 | } 269 | 270 | .how-steps { 271 | display: -webkit-box; 272 | display: -ms-flexbox; 273 | display: flex; 274 | color: #c5c2c2; 275 | -webkit-box-orient: vertical; 276 | -webkit-box-direction: normal; 277 | -ms-flex-direction: column; 278 | flex-direction: column; 279 | -webkit-box-align: start; 280 | -ms-flex-align: start; 281 | align-items: flex-start; 282 | } 283 | 284 | @media (max-width: 63.9375em) { 285 | .how-steps { 286 | margin: 2rem 2rem 0 2rem; 287 | font-size: 1rem; 288 | } 289 | } 290 | 291 | .how li { 292 | margin-bottom: 1.4rem; 293 | } 294 | 295 | .credits { 296 | text-align: center; 297 | } 298 | 299 | .credits-header { 300 | font-size: 2rem; 301 | color: #7289Da; 302 | } 303 | 304 | @media (max-width: 63.9375em) { 305 | .credits-header { 306 | font-size: 1.5rem; 307 | text-align: center; 308 | } 309 | } 310 | 311 | .credits-subheader { 312 | color: #999999; 313 | } 314 | 315 | @media (max-width: 63.9375em) { 316 | .credits-subheader { 317 | font-size: 1.2rem; 318 | text-align: center; 319 | } 320 | } 321 | 322 | .credits-grid { 323 | display: -ms-grid; 324 | display: grid; 325 | -ms-grid-columns: (1fr)[2]; 326 | grid-template-columns: repeat(2, 1fr); 327 | text-align: center; 328 | row-gap: 1.5rem; 329 | } 330 | 331 | @media (max-width: 63.9375em) { 332 | .credits-grid { 333 | margin: 0 2rem 0 2rem; 334 | -ms-grid-columns: (0.5fr)[2]; 335 | grid-template-columns: repeat(2, 0.5fr); 336 | text-align: center; 337 | } 338 | } 339 | 340 | .credits-grid a { 341 | text-decoration: none; 342 | font-size: 1.3rem; 343 | } 344 | 345 | @media (max-width: 63.9375em) { 346 | .credits-grid a { 347 | font-size: 1.1rem; 348 | } 349 | } 350 | 351 | .theme, .count { 352 | margin-bottom: 4rem; 353 | padding-bottom: 4rem; 354 | border-bottom: 2px solid #7285c9; 355 | } 356 | 357 | .myrepo { 358 | text-align: center; 359 | margin-bottom: 4rem; 360 | } 361 | 362 | .myrepo-header { 363 | color: #7289Da; 364 | font-weight: 600; 365 | font-size: 2rem; 366 | } 367 | 368 | @media (max-width: 63.9375em) { 369 | .myrepo-header { 370 | font-size: 1.5rem; 371 | text-align: center; 372 | } 373 | } 374 | 375 | .myrepo-star { 376 | color: white; 377 | } 378 | 379 | @media (max-width: 63.9375em) { 380 | .myrepo-star { 381 | margin: 0 2rem 2rem 2rem; 382 | font-size: 1.2rem; 383 | text-align: center; 384 | } 385 | } 386 | 387 | .myrepo a { 388 | font-size: 1.6rem; 389 | text-decoration: none; 390 | color: #afc1fc; 391 | font-weight: 600; 392 | } 393 | 394 | @media (max-width: 63.9375em) { 395 | .myrepo a { 396 | font-size: 1.4rem; 397 | } 398 | } 399 | 400 | .badge-link { 401 | min-width: 35%; 402 | } 403 | 404 | .badge-container { 405 | max-width: 100%; 406 | } 407 | 408 | @media (max-width: 63.9375em) { 409 | .badge-container { 410 | margin-left: 2rem; 411 | } 412 | } 413 | 414 | @media (max-width: 63.9375em) { 415 | .mainbadge { 416 | max-width: 100%; 417 | } 418 | } 419 | 420 | .badgeStat { 421 | max-width: 50%; 422 | padding-bottom: 2.5rem; 423 | } 424 | 425 | .badgeStat-form { 426 | display: -webkit-box; 427 | display: -ms-flexbox; 428 | display: flex; 429 | min-width: 100%; 430 | margin-bottom: 1.5rem; 431 | } 432 | 433 | @media (max-width: 63.9375em) { 434 | .badgeStat-form { 435 | min-width: 80%; 436 | } 437 | } 438 | 439 | @media (max-width: 63.9375em) { 440 | .badgeStat { 441 | max-width: 100%; 442 | } 443 | .badgeStat p { 444 | font-size: 0.87rem; 445 | } 446 | } 447 | 448 | .countStat { 449 | max-width: 50%; 450 | padding-bottom: 2rem; 451 | -webkit-box-orient: vertical; 452 | -webkit-box-direction: normal; 453 | -ms-flex-direction: column; 454 | flex-direction: column; 455 | } 456 | 457 | @media (max-width: 63.9375em) { 458 | .countStat { 459 | max-width: 100%; 460 | } 461 | .countStat img { 462 | -webkit-transform: scale(1.5); 463 | transform: scale(1.5); 464 | margin-left: 1rem; 465 | margin-bottom: 1rem; 466 | } 467 | } 468 | /*# sourceMappingURL=style.css.map */ --------------------------------------------------------------------------------