├── .gitignore ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── public ├── Panda.png ├── index.html ├── manifest.json └── robots.txt └── src ├── App.jsx ├── Assets ├── CSS │ ├── Contact.css │ ├── Hero.css │ ├── MyComputer.css │ └── Recent.css ├── Icons │ ├── Atom.svg │ ├── Autopsy.png │ ├── BitBucket.svg │ ├── C.svg │ ├── CPlus.svg │ ├── CSS.svg │ ├── CSharp.svg │ ├── Calculator.png │ ├── Chartjs.svg │ ├── Chrome.png │ ├── Discordjs.svg │ ├── DynamoDB.svg │ ├── Ejs.png │ ├── Expressjs.svg │ ├── FTKImager.png │ ├── Fastify.svg │ ├── FileExplorer.png │ ├── Firebase.svg │ ├── Folder.png │ ├── FullFolder.png │ ├── Git.svg │ ├── Github.svg │ ├── GithubDesktop.png │ ├── HTML.svg │ ├── Hotjar.svg │ ├── Icons.jsx │ ├── JFreeChart.jpg │ ├── Java.svg │ ├── JavaScript.svg │ ├── KSJaay.png │ ├── Kotlin.svg │ ├── Linux.svg │ ├── MariaDB.svg │ ├── Material_UI.svg │ ├── Mobx.svg │ ├── MongoDB.svg │ ├── MySQL.svg │ ├── NPM.svg │ ├── Netbeans.svg │ ├── Nextjs.svg │ ├── Nginx.svg │ ├── Node.svg │ ├── Nodejs.svg │ ├── NormalBackground.jpg │ ├── Notepad.png │ ├── Oracle.svg │ ├── PHP.svg │ ├── PostgreSQL.svg │ ├── Postman.svg │ ├── Python.svg │ ├── React.svg │ ├── ReactNative.svg │ ├── Recycle.png │ ├── RecycleFull.png │ ├── Redis.svg │ ├── SQLite.svg │ ├── Scala.svg │ ├── Socket.svg │ ├── Sort.png │ ├── Strapi.svg │ ├── Tailwind.svg │ ├── TaskManager.png │ ├── Tensorflow.svg │ ├── Terminal.png │ ├── TypeScript.svg │ ├── Unity.svg │ ├── Vercel.svg │ ├── Visual.svg │ ├── Vue.svg │ ├── Wifi.png │ ├── Windows.svg │ ├── WindowsLoading.svg │ ├── Wireshark.svg │ ├── jQuery.svg │ └── mysql-3.svg ├── Images │ ├── Backgrounds │ │ ├── Desert.webp │ │ ├── Windows.jpg │ │ └── WindowsDumb.jpg │ ├── KSJaay.png │ ├── Projects │ │ ├── AlitaOpenSource.png │ │ ├── AmariWebsite.PNG │ │ ├── CovidApp.png │ │ ├── CovidApp2.png │ │ └── JavaChat.png │ └── TerminalBackground.png └── Resume.pdf ├── Components ├── Apps │ ├── Calculator.jsx │ ├── Editor.jsx │ ├── Folder.jsx │ ├── Github.jsx │ ├── Google.jsx │ ├── KSJaay.jsx │ ├── Portfolio │ │ ├── About.jsx │ │ ├── Contact.jsx │ │ ├── Experience.jsx │ │ ├── Projects.jsx │ │ ├── Resume.jsx │ │ └── Skills.jsx │ ├── Recycle.jsx │ ├── Settings.jsx │ ├── Terminal.jsx │ └── TextEditor.jsx └── Computer │ ├── BSOD.jsx │ ├── Desktop.jsx │ ├── Helpers │ ├── Context.jsx │ ├── CreateInFolder.jsx │ └── CreateItem.jsx │ ├── MainPage.jsx │ ├── Modal.jsx │ ├── NavMenuBlocks.jsx │ └── Navbar.jsx ├── Index.css ├── Utils └── Style.js └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 KSJaay.com 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # THIS PROJECT IS A MESS, RECODE WHICH IS MUCH CLEANER IS COMING SOON 2 | 3 | # Win10React 4 | 5 | This is my Windows 10 💻 themed portfolio, created using React and Styled Components. 6 | 7 | ## Notice 8 | 9 | > This project is not in anyway affiliated with Microsoft or any of the Microsoft’s Operating System or Products. This is also not Windows 365 cloud PC. 10 | 11 | ## Can I help with this project? 12 | 13 | I'm working actively on the project but some times I make mistakes, so if you want to help me out, just shoot me a message or open up a pull request. I have a list of future updates at the bottom, so you can check that out and see what the future will offer. If you want to see specific updates you can also open an issue, and let me know :) 14 | 15 | # Why did you create this? 16 | 17 | I got really bored of looking at my current portfolio, cause it looked the same as everyone elses. So I thought what can I do to make it nicer/stand out. And this was pretty much what I decided to do. (Thinking about making a different design now so...) 18 | 19 | # Features 20 | 21 | - [ ] Animations 22 | - [ ] Applications: 23 | - [ ] Calculator 24 | - [x] Github Desktop 25 | - [x] Google Chrome 26 | - [x] KSJaay 27 | - [x] Notepad 28 | - [ ] React Editor 29 | - [x] Recycle Bin 30 | - [x] Terminal 31 | - [x] VS Code 32 | - [ ] Microsoft Store 33 | - [x] Context menu 34 | - [x] Delete applications, files, & folders 35 | - [x] Desktop & Navbar icons 36 | - [x] Drag, minimize, close, & resize windows 37 | - [x] File Explorer 38 | - [ ] Games (Knots and Crosses, Chess?, & idk...) 39 | - [x] Multiple windows support 40 | - [ ] Side Navigation 41 | - [x] Startup screen 42 | - [x] Start menu, Search menu, & Widgets 43 | - [ ] Task bar feed (News, Weather, & More!) 44 | - [ ] Themes & backgrounds 45 | - [x] User local weather updates 46 | 47 | ## Future plans 48 | 49 | - Create the highlight box (Mousedown on Windows) 50 | - Better start menu 51 | - Games 52 | - Live React coding 53 | - Login/Logout screen 54 | - Move to a state manager (Redux or Mobx) 55 | 56 | # Stack 57 | 58 | - Framework - React 59 | - Styling - Styled-components 60 | - Icons - React-Icons 61 | 62 | ## Known Issues 63 | 64 | - Opening applications through terminal doesn't bring application to front 65 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "win10react", 3 | "author": { 4 | "name": "KSJaay", 5 | "email": "contact@ksjaay.com" 6 | }, 7 | "version": "1.0.0", 8 | "description": "💻 Windows 10 themed portfolio, using React and Styled Components.", 9 | "private": true, 10 | "dependencies": { 11 | "@emotion/react": "^11.9.0", 12 | "@emotion/styled": "^11.8.1", 13 | "@monaco-editor/react": "^4.3.1", 14 | "@mui/material": "^5.0.2", 15 | "moment": "^2.29.1", 16 | "react": "^17.0.2", 17 | "react-calendar": "^3.4.0", 18 | "react-dom": "^17.0.2", 19 | "react-draggable": "^4.4.4", 20 | "react-icons": "^4.2.0", 21 | "react-router-dom": "^5.3.0", 22 | "react-scripts": "^4.0.3", 23 | "styled-components": "^5.3.1" 24 | }, 25 | "scripts": { 26 | "start": "react-scripts start", 27 | "build": "react-scripts build", 28 | "test": "react-scripts test", 29 | "eject": "react-scripts eject" 30 | }, 31 | "eslintConfig": { 32 | "extends": [ 33 | "react-app", 34 | "react-app/jest" 35 | ] 36 | }, 37 | "browserslist": { 38 | "production": [ 39 | ">0.2%", 40 | "not dead", 41 | "not op_mini all" 42 | ], 43 | "development": [ 44 | "last 1 chrome version", 45 | "last 1 firefox version", 46 | "last 1 safari version" 47 | ] 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /public/Panda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/public/Panda.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | KSJaay 25 | 26 | 27 | 28 |
29 | 30 | 31 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "KSJaay", 3 | "name": "Windows 10 themed portfolio using React and Styled components. Recode in the works.", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "theme_color": "#6524FA", 7 | "background_color": "#6524FA" 8 | } 9 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React from "react"; 3 | import { BrowserRouter as Router, Route } from "react-router-dom"; 4 | import { ThemeProvider } from "styled-components"; 5 | import { darkTheme } from "./Utils/Style"; 6 | import { lightTheme } from "./Utils/Style"; 7 | 8 | // Import react components 9 | import { Computer } from "./Components/Computer/MainPage"; 10 | 11 | export class App extends React.Component { 12 | constructor(props) { 13 | super(props); 14 | this.state = { 15 | // default theme 16 | theme: "dark", 17 | }; 18 | } 19 | 20 | componentDidMount() { 21 | // Load theme from local storage 22 | let theme = !localStorage.getItem("ksjaay_theme") 23 | ? "dark" 24 | : localStorage.getItem("ksjaay_theme"); 25 | this.setState({ theme: theme }); 26 | 27 | // Version management for later features 28 | let version = localStorage.getItem("version"); 29 | if (!version) localStorage.setItem("version", "1.0.0"); 30 | } 31 | 32 | render() { 33 | return ( 34 | 38 | 39 | 40 | 41 | 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Assets/CSS/Contact.css: -------------------------------------------------------------------------------- 1 | .lds-ellipsis { 2 | position: relative; 3 | display: flex; 4 | width: 150px; 5 | justify-content: center; 6 | align-items: center; 7 | padding: 10.5px 32px 8 | } 9 | .lds-ellipsis div { 10 | position: absolute; 11 | width: 13px; 12 | height: 13px; 13 | border-radius: 50%; 14 | background: #fff; 15 | animation-timing-function: cubic-bezier(0, 1, 1, 0); 16 | } 17 | .lds-ellipsis div:nth-child(1) { 18 | left: 43px; 19 | animation: lds-ellipsis1 0.6s infinite; 20 | } 21 | .lds-ellipsis div:nth-child(2) { 22 | left: 43px; 23 | animation: lds-ellipsis2 0.6s infinite; 24 | } 25 | .lds-ellipsis div:nth-child(3) { 26 | left: 67px; 27 | animation: lds-ellipsis2 0.6s infinite; 28 | } 29 | .lds-ellipsis div:nth-child(4) { 30 | left: 91px; 31 | animation: lds-ellipsis3 0.6s infinite; 32 | } 33 | 34 | 35 | 36 | @keyframes lds-ellipsis1 { 37 | 0% { 38 | transform: scale(0); 39 | } 40 | 100% { 41 | transform: scale(1); 42 | } 43 | } 44 | 45 | @keyframes lds-ellipsis3 { 46 | 0% { 47 | transform: scale(1); 48 | } 49 | 100% { 50 | transform: scale(0); 51 | } 52 | } 53 | 54 | @keyframes lds-ellipsis2 { 55 | 0% { 56 | transform: translate(0, 0); 57 | } 58 | 100% { 59 | transform: translate(24px, 0); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/Assets/CSS/Hero.css: -------------------------------------------------------------------------------- 1 | .amari-logo{ 2 | animation: mover 2s linear infinite; 3 | width: 15em; 4 | height: auto; 5 | padding: 50px 0 30px 0; 6 | } 7 | 8 | 9 | @-webkit-keyframes mover { 10 | 0% { transform: translateY(0); } 11 | 25% { transform: translateY(-2px); } 12 | 30% { transform: translateY(-3px); } 13 | 50% { transform: translateY(0px); } 14 | 75% { transform: translateY(3px); } 15 | 80% { transform: translateY(2px); } 16 | 100% { transform: translateY(0px); } 17 | } 18 | @-moz-keyframes mover { 19 | 0% { transform: translateY(0); } 20 | 25% { transform: translateY(-2px); } 21 | 30% { transform: translateY(-3px); } 22 | 50% { transform: translateY(0px); } 23 | 75% { transform: translateY(3px); } 24 | 80% { transform: translateY(2px); } 25 | 100% { transform: translateY(0px); } 26 | } 27 | @-ms-keyframes mover { 28 | 0% { transform: translateY(0); } 29 | 25% { transform: translateY(-2px); } 30 | 30% { transform: translateY(-3px); } 31 | 50% { transform: translateY(0px); } 32 | 75% { transform: translateY(3px); } 33 | 80% { transform: translateY(2px); } 34 | 100% { transform: translateY(0px); } 35 | } 36 | @-o-keyframes mover { 37 | 0% { transform: translateY(0); } 38 | 25% { transform: translateY(-2px); } 39 | 30% { transform: translateY(-3px); } 40 | 50% { transform: translateY(0px); } 41 | 75% { transform: translateY(3px); } 42 | 80% { transform: translateY(2px); } 43 | 100% { transform: translateY(0px); } 44 | } 45 | @keyframes mover { 46 | 0% { transform: translateY(0); } 47 | 25% { transform: translateY(-2px); } 48 | 30% { transform: translateY(-3px); } 49 | 50% { transform: translateY(0px); } 50 | 75% { transform: translateY(3px); } 51 | 80% { transform: translateY(2px); } 52 | 100% { transform: translateY(0px); } 53 | } -------------------------------------------------------------------------------- /src/Assets/CSS/MyComputer.css: -------------------------------------------------------------------------------- 1 | .react-calendar__navigation__prev2-button{ 2 | display: none; 3 | } 4 | 5 | .react-calendar__navigation__next2-button{ 6 | display: none; 7 | } 8 | 9 | .react-calendar { 10 | width: 100%; 11 | max-width: 100%; 12 | height: 310px; 13 | background: #25262800; 14 | border: none; 15 | font-family: Arial, Helvetica, sans-serif; 16 | line-height: 1.125em; 17 | } 18 | .react-calendar--doubleView { 19 | width: 700px; 20 | } 21 | .react-calendar--doubleView .react-calendar__viewContainer { 22 | display: flex; 23 | margin: -0.5em; 24 | } 25 | .react-calendar--doubleView .react-calendar__viewContainer > * { 26 | width: 50%; 27 | margin: 0.5em; 28 | } 29 | 30 | .react-calendar, 31 | .react-calendar *, 32 | .react-calendar *:before, 33 | .react-calendar *:after { 34 | -moz-box-sizing: border-box; 35 | -webkit-box-sizing: border-box; 36 | box-sizing: border-box; 37 | } 38 | .react-calendar button { 39 | margin: 0; 40 | border: 0; 41 | outline: none; 42 | } 43 | .react-calendar button:enabled:hover { 44 | cursor: pointer; 45 | } 46 | .react-calendar__navigation { 47 | height: 44px; 48 | margin-bottom: 1em; 49 | } 50 | .react-calendar__navigation button { 51 | min-width: 44px; 52 | background: none; 53 | } 54 | .react-calendar__navigation__label__labelText{ 55 | color: white; 56 | } 57 | 58 | .react-calendar__navigation__arrow{ 59 | color: white; 60 | } 61 | .react-calendar__navigation button:enabled:hover, 62 | .react-calendar__navigation button:enabled:focus { 63 | background-color: #252628; 64 | } 65 | .react-calendar__navigation button[disabled] { 66 | background-color: #f0f0f0; 67 | } 68 | .react-calendar__month-view__weekdays { 69 | text-align: center; 70 | text-transform: uppercase; 71 | font-weight: bold; 72 | font-size: 0.75em; 73 | color: white; 74 | text-decoration: none; 75 | } 76 | .react-calendar__month-view__weekdays__weekday { 77 | padding: 0.5em; 78 | color: white; 79 | text-decoration: none; 80 | } 81 | 82 | .react-calendar__month-view__days__day{ 83 | color: white; 84 | } 85 | 86 | .react-calendar__month-view__weekNumbers { 87 | font-weight: bold; 88 | } 89 | .react-calendar__month-view__weekNumbers .react-calendar__tile { 90 | display: flex; 91 | align-items: center; 92 | justify-content: center; 93 | font-size: 0.75em; 94 | padding: calc(0.75em / 0.75) calc(0.5em / 0.75); 95 | } 96 | .react-calendar__month-view__days__day--weekend { 97 | color: #d10000; 98 | } 99 | .react-calendar__month-view__days__day--neighboringMonth { 100 | color: #757575; 101 | } 102 | .react-calendar__year-view .react-calendar__tile, 103 | .react-calendar__decade-view .react-calendar__tile, 104 | .react-calendar__century-view .react-calendar__tile { 105 | padding: 2em 0.5em; 106 | } 107 | .react-calendar__tile { 108 | max-width: 100%; 109 | text-align: center; 110 | padding: 0.75em 0.5em; 111 | background: none; 112 | } 113 | .react-calendar__tile:disabled { 114 | background-color: #f0f0f0; 115 | } 116 | .react-calendar__tile:enabled:hover, 117 | .react-calendar__tile:enabled:focus { 118 | background-color: #252628; 119 | } 120 | .react-calendar__tile--now { 121 | background: #3bce85; 122 | } 123 | .react-calendar__tile--now:enabled:hover, 124 | .react-calendar__tile--now:enabled:focus { 125 | background: #3bce85; 126 | } 127 | .react-calendar__tile--hasActive { 128 | background: #76baff; 129 | } 130 | .react-calendar__tile--hasActive:enabled:hover, 131 | .react-calendar__tile--hasActive:enabled:focus { 132 | background: #a9d4ff; 133 | } 134 | .react-calendar__tile--active { 135 | background: #006edc; 136 | color: white; 137 | } 138 | .react-calendar__tile--active:enabled:hover, 139 | .react-calendar__tile--active:enabled:focus { 140 | background: #1087ff; 141 | } 142 | .react-calendar--selectRange .react-calendar__tile--hover { 143 | background-color: #e6e6e6; 144 | } 145 | 146 | .react-calendar__navigation__label__labelText{ 147 | color: white; 148 | } 149 | 150 | .react-calendar__navigation button[disabled]{ 151 | background-color: #21252b; 152 | } 153 | 154 | .react-calendar__decade-view__years__year, 155 | .react-calendar__year-view__months__month, 156 | .react-calendar__century-view__decades__decade{ 157 | color: white; 158 | } -------------------------------------------------------------------------------- /src/Assets/CSS/Recent.css: -------------------------------------------------------------------------------- 1 | .featured-project-link-item{ 2 | font-size: 1.8em; 3 | margin: 18px 20px 0px 5px; 4 | color: var(--font-color); 5 | text-decoration: none; 6 | } 7 | 8 | .featured-project-link-item:hover{ 9 | cursor: pointer; 10 | color: var(--highlight-color); 11 | } 12 | 13 | @media (max-width: 768px) { 14 | .featured-project-link-item{ 15 | margin: 18px 20px 10px 8px; 16 | } 17 | } -------------------------------------------------------------------------------- /src/Assets/Icons/Atom.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Autopsy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Autopsy.png -------------------------------------------------------------------------------- /src/Assets/Icons/BitBucket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/C.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/CPlus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/CSS.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/CSharp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Calculator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Calculator.png -------------------------------------------------------------------------------- /src/Assets/Icons/Chartjs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 9 | 12 | 14 | 15 | -------------------------------------------------------------------------------- /src/Assets/Icons/Chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Chrome.png -------------------------------------------------------------------------------- /src/Assets/Icons/DynamoDB.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Ejs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Ejs.png -------------------------------------------------------------------------------- /src/Assets/Icons/Expressjs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/FTKImager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/FTKImager.png -------------------------------------------------------------------------------- /src/Assets/Icons/Fastify.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/FileExplorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/FileExplorer.png -------------------------------------------------------------------------------- /src/Assets/Icons/Firebase.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Folder.png -------------------------------------------------------------------------------- /src/Assets/Icons/FullFolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/FullFolder.png -------------------------------------------------------------------------------- /src/Assets/Icons/Git.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/GithubDesktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/GithubDesktop.png -------------------------------------------------------------------------------- /src/Assets/Icons/HTML.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Hotjar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Icons.jsx: -------------------------------------------------------------------------------- 1 | // Export all icons 2 | export const Icons = { 3 | Atom: require("./Atom.svg").default, 4 | Autopsy: require("./Autopsy.png").default, 5 | BitBucket: require("./BitBucket.svg").default, 6 | C: require("./C.svg").default, 7 | "C#": require("./CSharp.svg").default, 8 | "C++": require("./CPlus.svg").default, 9 | Chartjs: require("./Chartjs.svg").default, 10 | CSS: require("./CSS.svg").default, 11 | "Discord.js": require("./Discordjs.svg").default, 12 | DynamoDB: require("./DynamoDB.svg").default, 13 | Express: require("./Expressjs.svg").default, 14 | Fastify: require("./Fastify.svg").default, 15 | Firebase: require("./Firebase.svg").default, 16 | "FTK Imager": require("./FTKImager.png").default, 17 | Git: require("./Git.svg").default, 18 | Github: require("./Github.svg").default, 19 | Hotjar: require("./Hotjar.svg").default, 20 | HTML: require("./HTML.svg").default, 21 | Java: require("./Java.svg").default, 22 | JavaScript: require("./JavaScript.svg").default, 23 | JFreeChart: require("./JFreeChart.jpg").default, 24 | jQuery: require("./jQuery.svg").default, 25 | Kotlin: require("./Kotlin.svg").default, 26 | Linux: require("./Linux.svg").default, 27 | MariaDB: require("./MariaDB.svg").default, 28 | "Material UI": require("./Material_UI.svg").default, 29 | Mobx: require("./Mobx.svg").default, 30 | MongoDB: require("./MongoDB.svg").default, 31 | MySQL: require("./MySQL.svg").default, 32 | "NetBeans IDE": require("./Netbeans.svg").default, 33 | Nextjs: require("./Nextjs.svg").default, 34 | Nginx: require("./Nginx.svg").default, 35 | Nodejs: require("./Node.svg").default, 36 | NPM: require("./NPM.svg").default, 37 | Oracle: require("./Oracle.svg").default, 38 | PHP: require("./PHP.svg").default, 39 | PostgreSQL: require("./PostgreSQL.svg").default, 40 | Postman: require("./Postman.svg").default, 41 | Python: require("./Python.svg").default, 42 | React: require("./React.svg").default, 43 | "React Native": require("./ReactNative.svg").default, 44 | Redis: require("./Redis.svg").default, 45 | Scala: require("./Scala.svg").default, 46 | "Socket.io": require("./Socket.svg").default, 47 | Strapi: require("./Strapi.svg").default, 48 | SQLite: require("./SQLite.svg").default, 49 | Tailwind: require("./Tailwind.svg").default, 50 | Tensorflow: require("./Tensorflow.svg").default, 51 | TypeScript: require("./TypeScript.svg").default, 52 | Unity: require("./Unity.svg").default, 53 | Vercel: require("./Vercel.svg").default, 54 | "Visual Studio Code": require("./Visual.svg").default, 55 | Vuejs: require("./Vue.svg").default, 56 | Wireshark: require("./Wireshark.svg").default, 57 | }; 58 | 59 | /* 60 | Icons I need to get 61 | Strapi 62 | Mobx 63 | DynamoDB 64 | Firebase 65 | Expo 66 | Sass 67 | Hotjar 68 | Tailwind 69 | Fastify 70 | Styled components 71 | Chartjs 72 | Canvas 73 | Canvas constructor 74 | Hapi 75 | Material UI 76 | PayPal SDK 77 | Framer motion 78 | Nextjs 79 | Twitter SDK 80 | Twitch SDK 81 | Youtube SDK 82 | Tensortflow 83 | p5js 84 | Jfreechart 85 | BitBucket 86 | Unity 87 | */ 88 | -------------------------------------------------------------------------------- /src/Assets/Icons/JFreeChart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/JFreeChart.jpg -------------------------------------------------------------------------------- /src/Assets/Icons/Java.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/JavaScript.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/KSJaay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/KSJaay.png -------------------------------------------------------------------------------- /src/Assets/Icons/Kotlin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/MariaDB.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Material_UI.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Mobx.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/MongoDB.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/MySQL.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/NPM.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Nextjs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Nginx.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 21 | 32 | 35 | 38 | 39 | -------------------------------------------------------------------------------- /src/Assets/Icons/Node.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Nodejs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/NormalBackground.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/NormalBackground.jpg -------------------------------------------------------------------------------- /src/Assets/Icons/Notepad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Notepad.png -------------------------------------------------------------------------------- /src/Assets/Icons/Oracle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/PostgreSQL.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Postman.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Python.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/React.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Recycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Recycle.png -------------------------------------------------------------------------------- /src/Assets/Icons/RecycleFull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/RecycleFull.png -------------------------------------------------------------------------------- /src/Assets/Icons/Redis.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/SQLite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Scala.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Socket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Sort.png -------------------------------------------------------------------------------- /src/Assets/Icons/Strapi.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Tailwind.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/TaskManager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/TaskManager.png -------------------------------------------------------------------------------- /src/Assets/Icons/Tensorflow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Terminal.png -------------------------------------------------------------------------------- /src/Assets/Icons/TypeScript.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Unity.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Visual.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Vue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/Wifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Icons/Wifi.png -------------------------------------------------------------------------------- /src/Assets/Icons/Windows.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/WindowsLoading.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 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 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /src/Assets/Icons/Wireshark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/jQuery.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Icons/mysql-3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Assets/Images/Backgrounds/Desert.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/Backgrounds/Desert.webp -------------------------------------------------------------------------------- /src/Assets/Images/Backgrounds/Windows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/Backgrounds/Windows.jpg -------------------------------------------------------------------------------- /src/Assets/Images/Backgrounds/WindowsDumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/Backgrounds/WindowsDumb.jpg -------------------------------------------------------------------------------- /src/Assets/Images/KSJaay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/KSJaay.png -------------------------------------------------------------------------------- /src/Assets/Images/Projects/AlitaOpenSource.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/Projects/AlitaOpenSource.png -------------------------------------------------------------------------------- /src/Assets/Images/Projects/AmariWebsite.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/Projects/AmariWebsite.PNG -------------------------------------------------------------------------------- /src/Assets/Images/Projects/CovidApp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/Projects/CovidApp.png -------------------------------------------------------------------------------- /src/Assets/Images/Projects/CovidApp2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/Projects/CovidApp2.png -------------------------------------------------------------------------------- /src/Assets/Images/Projects/JavaChat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/Projects/JavaChat.png -------------------------------------------------------------------------------- /src/Assets/Images/TerminalBackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Images/TerminalBackground.png -------------------------------------------------------------------------------- /src/Assets/Resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KSJaay/Win10React/25a0697a3a56af02e766cf3f4f0246a5874141d8/src/Assets/Resume.pdf -------------------------------------------------------------------------------- /src/Components/Apps/Editor.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React, { useState, useEffect } from "react"; 3 | import styled from "styled-components"; 4 | import Editor from "@monaco-editor/react"; 5 | 6 | // Editor created using @monaco-editor/react 7 | const VsEditor = ({ content, updateFile }) => { 8 | let [value, setValue] = useState("// Code goes here"); 9 | useEffect(() => { 10 | if (content) { 11 | setValue(content.content); 12 | } 13 | }, [content]); 14 | 15 | return ( 16 | { 18 | if (content) { 19 | if (e.ctrlKey && e.key === "s") { 20 | e.preventDefault(); 21 | let newFile = content; 22 | newFile.content = value; 23 | updateFile(newFile); 24 | } 25 | } 26 | }} 27 | > 28 | {content ? ( 29 | 30 | navigator.clipboard.writeText(value)}> 31 | Copy 32 | 33 | { 35 | if (content) { 36 | let newContent = content; 37 | newContent.content = value; 38 | updateFile(newContent); 39 | } 40 | }} 41 | > 42 | Save 43 | 44 | 45 | ) : null} 46 | 47 | { 53 | setValue(value); 54 | }} 55 | /> 56 | 57 | 58 | ); 59 | }; 60 | 61 | const Container = styled.div` 62 | display: flex; 63 | flex: 1; 64 | height: 100%; 65 | background-color: #1e1e1e; 66 | display: flex; 67 | flex-direction: column; 68 | `; 69 | 70 | const Content = styled.div` 71 | flex: 1; 72 | background-color: ${(props) => props.theme.colors.primary}; 73 | `; 74 | 75 | const MenuContainer = styled.div` 76 | background-color: ${(props) => props.theme.colors.secondary}; 77 | display: flex; 78 | `; 79 | 80 | const MenuItem = styled.div` 81 | border-right: 2px solid ${(props) => props.theme.colors.primary}; 82 | padding: 3px 15px; 83 | 84 | &:hover { 85 | background-color: ${(props) => props.theme.colors.primary}; 86 | } 87 | `; 88 | 89 | export default VsEditor; 90 | -------------------------------------------------------------------------------- /src/Components/Apps/Folder.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React from "react"; 3 | import styled from "styled-components"; 4 | 5 | // Import icons 6 | import ChromeIcon from "./../../Assets/Icons/Chrome.png"; 7 | import CalculatorIcon from "./../../Assets/Icons/Calculator.png"; 8 | import VscodeIcon from "./../../Assets/Icons/Visual.svg"; 9 | import RecycleIcon from "./../../Assets/Icons/Recycle.png"; 10 | import KSJaayIcon from "./../../Assets/Icons/KSJaay.png"; 11 | import TerminalIcon from "./../../Assets/Icons/Terminal.png"; 12 | import FolderIcon from "./../../Assets/Icons/Folder.png"; 13 | import NotepadIcon from "./../../Assets/Icons/Notepad.png"; 14 | import ReactIcon from "./../../Assets/Icons/React.svg"; 15 | import GithubIcon from "./../../Assets/Icons/GithubDesktop.png"; 16 | 17 | // Assign icons to file names 18 | const icons = { 19 | recycle_bin: RecycleIcon, 20 | google_chrome: ChromeIcon, 21 | github: GithubIcon, 22 | visual_studio: VscodeIcon, 23 | calculator: CalculatorIcon, 24 | ksjaay: KSJaayIcon, 25 | terminal: TerminalIcon, 26 | folder: FolderIcon, 27 | file: NotepadIcon, 28 | react: ReactIcon, 29 | "react file": ReactIcon, 30 | }; 31 | 32 | // Cool folder things that a folder would do 33 | const Folder = ({ content, openModal }) => { 34 | let component = content; 35 | return ( 36 | 37 | 0 41 | ? {} 42 | : { justifyContent: "center", display: "flex", marginTop: "8px" } 43 | } 44 | > 45 | {component.content.length < 1 ? "No files found." : null} 46 | 47 | {component.content.length < 1 48 | ? null 49 | : component.content.map((item, index) => ( 50 | 56 | 61 | 64 | {item.name} 65 | 66 | 67 | ))} 68 | 69 | 70 | 71 | ); 72 | }; 73 | 74 | const Container = styled.div` 75 | height: 100%; 76 | width: 100%; 77 | display: flex; 78 | flex-direction: column; 79 | `; 80 | 81 | const Content = styled.div` 82 | flex: 1; 83 | display: grid; 84 | `; 85 | 86 | const ItemsContainer = styled.div` 87 | display: flex; 88 | flex-flow: row wrap; 89 | flex-direction: row; 90 | align-items: flex-end; 91 | justify-content: flex-start; 92 | align-content: flex-start; 93 | flex-wrap: wrap; 94 | max-height: calc(100vh - 50px); 95 | overflow: hidden; 96 | overflow-y: auto; 97 | `; 98 | 99 | const DesktopItems = styled.div` 100 | display: flex; 101 | flex-direction: column; 102 | width: 80px; 103 | height: 95px; 104 | padding: 5px; 105 | border-radius: 5px; 106 | margin: 3px; 107 | justify-content: flex-start; 108 | align-items: center; 109 | 110 | &:hover { 111 | background-color: ${(props) => props.theme.colors.highlight}22; 112 | } 113 | 114 | &:focus { 115 | background-color: ${(props) => props.theme.colors.highlight}66; 116 | } 117 | `; 118 | 119 | const DesktopIcon = styled.img` 120 | width: 60px; 121 | height: 60px; 122 | `; 123 | 124 | const DesktopItemName = styled.div` 125 | font-size: 12px; 126 | text-align: center; 127 | padding-top: 3px; 128 | `; 129 | 130 | export default Folder; 131 | -------------------------------------------------------------------------------- /src/Components/Apps/Github.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React from "react"; 3 | import styled from "styled-components"; 4 | 5 | // Whole thing is just an iframe 6 | const Github = () => { 7 | return ( 8 | 9 | 17 | 18 | ); 19 | }; 20 | 21 | const Container = styled.div` 22 | width: 100%; 23 | height: 100%; 24 | display: flex; 25 | `; 26 | 27 | export default Resume; 28 | -------------------------------------------------------------------------------- /src/Components/Apps/Recycle.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React from "react"; 3 | import styled from "styled-components"; 4 | 5 | // Import icons 6 | import ChromeIcon from "./../../Assets/Icons/Chrome.png"; 7 | import CalculatorIcon from "./../../Assets/Icons/Calculator.png"; 8 | import VscodeIcon from "./../../Assets/Icons/Visual.svg"; 9 | import RecycleIcon from "./../../Assets/Icons/Recycle.png"; 10 | import KSJaayIcon from "./../../Assets/Icons/KSJaay.png"; 11 | import TerminalIcon from "./../../Assets/Icons/Terminal.png"; 12 | import FolderIcon from "./../../Assets/Icons/Folder.png"; 13 | import FullFolderIcon from "./../../Assets/Icons/FullFolder.png"; 14 | import NotepadIcon from "./../../Assets/Icons/Notepad.png"; 15 | import ReactIcon from "./../../Assets/Icons/React.svg"; 16 | import GithubIcon from "./../../Assets/Icons/GithubDesktop.png"; 17 | 18 | // Assign icons to file names 19 | const icons = { 20 | recycle_bin: RecycleIcon, 21 | google_chrome: ChromeIcon, 22 | github: GithubIcon, 23 | visual_studio: VscodeIcon, 24 | calculator: CalculatorIcon, 25 | ksjaay: KSJaayIcon, 26 | terminal: TerminalIcon, 27 | folder: FolderIcon, 28 | fullFolder: FullFolderIcon, 29 | file: NotepadIcon, 30 | react: ReactIcon, 31 | "react file": ReactIcon, 32 | }; 33 | 34 | // Basic recycle bin 35 | const Recycle = ({ data }) => { 36 | return ( 37 | 38 |
39 | 40 | 41 |
42 | 0 45 | ? {} 46 | : { justifyContent: "center", display: "flex", marginTop: "20px" } 47 | } 48 | > 49 | {data.recycle.length < 1 ? "Recycle bin is empty." : null} 50 | 51 | {data.recycle.length < 1 52 | ? null 53 | : data.recycle.map((item, index) => ( 54 | 55 | 0 58 | ? icons["fullFolder"] 59 | : icons[item.id] 60 | } 61 | draggable={false} 62 | id={item.name} 63 | /> 64 | {item.name} 65 | 66 | ))} 67 | 68 | 69 |
70 | ); 71 | }; 72 | 73 | const Container = styled.div` 74 | height: 100%; 75 | width: 100%; 76 | display: flex; 77 | flex-direction: column; 78 | `; 79 | 80 | const Header = styled.div` 81 | display: flex; 82 | flex-direction: row; 83 | justify-content: flex-end; 84 | background-color: ${(props) => props.theme.colors.primary}; 85 | `; 86 | 87 | const Button = styled.div` 88 | padding: 8px 12px; 89 | background-color: ${(props) => props.theme.colors.primary}; 90 | 91 | &:hover { 92 | background-color: ${(props) => props.theme.colors.light}; 93 | } 94 | `; 95 | 96 | const Content = styled.div` 97 | flex: 1; 98 | display: grid; 99 | `; 100 | 101 | const ItemsContainer = styled.div` 102 | display: flex; 103 | flex-flow: row wrap; 104 | flex-direction: row; 105 | align-items: flex-end; 106 | justify-content: flex-start; 107 | align-content: flex-start; 108 | flex-wrap: wrap; 109 | max-height: calc(100vh - 50px); 110 | overflow: hidden; 111 | overflow-y: auto; 112 | `; 113 | 114 | const DesktopItems = styled.div` 115 | display: flex; 116 | flex-direction: column; 117 | width: 80px; 118 | height: 95px; 119 | padding: 5px; 120 | border-radius: 5px; 121 | margin: 3px; 122 | justify-content: flex-start; 123 | align-items: center; 124 | overflow: hidden; 125 | 126 | &:hover { 127 | background-color: ${(props) => props.theme.colors.highlight}22; 128 | } 129 | 130 | &:focus { 131 | background-color: ${(props) => props.theme.colors.highlight}66; 132 | } 133 | `; 134 | 135 | const DesktopIcon = styled.img` 136 | width: 60px; 137 | height: 60px; 138 | `; 139 | 140 | const DesktopItemName = styled.div` 141 | font-size: 12px; 142 | text-align: center; 143 | padding-top: 3px; 144 | `; 145 | 146 | export default Recycle; 147 | -------------------------------------------------------------------------------- /src/Components/Apps/Settings.jsx: -------------------------------------------------------------------------------- 1 | // I promise I coded this, probably just an old commit or something... 2 | 3 | // Import node_modules 4 | import React from "react"; 5 | import styled from "styled-components"; 6 | 7 | const TextEditor = ({ content }) => { 8 | return ; 9 | }; 10 | 11 | const Container = styled.div` 12 | height: 100%; 13 | width: 100%; 14 | min-height: 100%; 15 | min-width: 100%; 16 | max-height: 100%; 17 | max-width: 100%; 18 | display: flex; 19 | flex-direction: column; 20 | `; 21 | 22 | export default TextEditor; 23 | -------------------------------------------------------------------------------- /src/Components/Apps/TextEditor.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React, { useState, useEffect } from "react"; 3 | import styled from "styled-components"; 4 | 5 | const TextEditor = ({ content, updateFile }) => { 6 | const [value, setValue] = useState(content.content); 7 | 8 | useEffect(() => { 9 | setValue(content.content); 10 | }, [content]); 11 | 12 | return ( 13 | { 15 | if (e.ctrlKey && e.key === "s") { 16 | e.preventDefault(); 17 | let newFile = content; 18 | newFile.content = value; 19 | updateFile(newFile); 20 | } 21 | }} 22 | > 23 | 24 | navigator.clipboard.writeText(value)}> 25 | Copy 26 | 27 | { 29 | let newFile = content; 30 | newFile.content = value; 31 | updateFile(newFile); 32 | }} 33 | > 34 | Save 35 | 36 | Exit 37 | 38 | 39 | setValue(event.target.value)} 44 | /> 45 | 46 | 47 | ); 48 | }; 49 | 50 | const Container = styled.div` 51 | height: 100%; 52 | width: 100%; 53 | min-height: 100%; 54 | min-width: 100%; 55 | max-height: 100%; 56 | max-width: 100%; 57 | display: flex; 58 | flex-direction: column; 59 | `; 60 | 61 | const MenuContainer = styled.div` 62 | background-color: ${(props) => props.theme.colors.light}; 63 | display: flex; 64 | `; 65 | 66 | const MenuItem = styled.div` 67 | border-right: 2px solid ${(props) => props.theme.colors.primary}; 68 | padding: 3px 15px; 69 | 70 | &:hover { 71 | background-color: ${(props) => props.theme.colors.primary}; 72 | } 73 | `; 74 | 75 | const InputContainer = styled.div` 76 | flex: 1; 77 | display: flex; 78 | `; 79 | 80 | const Input = styled.textarea` 81 | flex: 1; 82 | outline: none; 83 | border: none; 84 | resize: none; 85 | background: ${(props) => props.theme.colors.secondary}; 86 | color: ${(props) => props.theme.colors.font}; 87 | padding: 5px; 88 | border-radius: 5px; 89 | font-family: "Exo", sans-serif; 90 | font-size: 16px; 91 | `; 92 | 93 | export default TextEditor; 94 | -------------------------------------------------------------------------------- /src/Components/Computer/BSOD.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React from "react"; 3 | import styled from "styled-components"; 4 | 5 | // Worst feeling ever is coded below 6 | const BSOD = () => { 7 | return ( 8 | 9 | :( 10 | 11 | Your PC ran into a problem and needs to restart. We're just collected 12 | some error information. Please restart your PC to fix this issue. 13 | 14 | 15 | Just refresh the broswer if you don't get the joke :) 16 | 17 | 18 | ); 19 | }; 20 | 21 | const Container = styled.div` 22 | position: absolute; 23 | overflow: hidden; 24 | width: 65%; 25 | height: 100%; 26 | flex: 1; 27 | display: flex; 28 | justify-content: center; 29 | color: ${(props) => props.theme.colors.font}; 30 | background-color: #0079d8; 31 | flex-direction: column; 32 | padding: 0 25% 0 10%; 33 | `; 34 | 35 | const SadFace = styled.div` 36 | font-size: 8em; 37 | `; 38 | 39 | const ErrorText = styled.div` 40 | margin-top: 30px; 41 | font-size: 2em; 42 | `; 43 | 44 | const SmallText = styled.div` 45 | margin-top: 30px; 46 | font-size: 12px; 47 | `; 48 | 49 | export default BSOD; 50 | -------------------------------------------------------------------------------- /src/Components/Computer/Desktop.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React from "react"; 3 | import styled from "styled-components"; 4 | 5 | // Import icons 6 | import Recycle from "./../../Assets/Icons/Recycle.png"; 7 | import RecycleFull from "./../../Assets/Icons/RecycleFull.png"; 8 | import Modal from "./Modal"; 9 | 10 | // Import icons 11 | import ChromeIcon from "./../../Assets/Icons/Chrome.png"; 12 | import CalculatorIcon from "./../../Assets/Icons/Calculator.png"; 13 | import VscodeIcon from "./../../Assets/Icons/Visual.svg"; 14 | import RecycleIcon from "./../../Assets/Icons/Recycle.png"; 15 | import KSJaayIcon from "./../../Assets/Icons/KSJaay.png"; 16 | import TerminalIcon from "./../../Assets/Icons/Terminal.png"; 17 | import FolderIcon from "./../../Assets/Icons/Folder.png"; 18 | import FullFolderIcon from "./../../Assets/Icons/FullFolder.png"; 19 | import NotepadIcon from "./../../Assets/Icons/Notepad.png"; 20 | import ReactIcon from "./../../Assets/Icons/React.svg"; 21 | import GithubIcon from "./../../Assets/Icons/GithubDesktop.png"; 22 | 23 | // Assign icons to file names 24 | const icons = { 25 | recycle_bin: RecycleIcon, 26 | google_chrome: ChromeIcon, 27 | github: GithubIcon, 28 | visual_studio: VscodeIcon, 29 | calculator: CalculatorIcon, 30 | ksjaay: KSJaayIcon, 31 | terminal: TerminalIcon, 32 | folder: FolderIcon, 33 | file: NotepadIcon, 34 | react: ReactIcon, 35 | "react file": ReactIcon, 36 | }; 37 | 38 | export class Desktop extends React.Component { 39 | render() { 40 | // Handler for clicks depending on screen size 41 | const handleClick = (id, folder) => (e) => { 42 | if (window.innerWidth < 1000) { 43 | return this.props.openModal(id, folder); 44 | } 45 | if (e.detail === 2) { 46 | this.props.openModal(id, folder); 47 | } 48 | }; 49 | const handleTerminalOpen = (id) => { 50 | this.props.openModal(id); 51 | }; 52 | const handleClose = (id) => (e) => { 53 | this.props.closeModal(id); 54 | }; 55 | const maximizeWindow = (id) => (e) => { 56 | this.props.maximizeWindow(id); 57 | }; 58 | const minimizeWindow = (id) => (e) => { 59 | this.props.minimizeWindow(id); 60 | }; 61 | const focusWindow = (id) => (e) => { 62 | this.props.focusWindow(id); 63 | }; 64 | const createFolder = (id) => { 65 | this.props.createFolder(id, "folder"); 66 | }; 67 | const updateFile = (file) => { 68 | this.props.updateFile(file); 69 | }; 70 | // Loads the content to current screen 71 | return ( 72 | 73 | {this.props.modals && 74 | this.props.modals.map((item, index) => ( 75 | 92 | ))} 93 | 94 | {this.props.data && 95 | this.props.data.desktop.map((item, index) => { 96 | if (item.name === "Recycle Bin") { 97 | return ( 98 | 104 | {this.props.data && 105 | this.props.data.recycle && 106 | this.props.data.recycle.length > 0 ? ( 107 | 112 | ) : ( 113 | 118 | )} 119 | 120 | {item.name} 121 | 122 | 123 | ); 124 | } else if (item.id === "folder") { 125 | return ( 126 | 132 | {item.content.length > 0 ? ( 133 | 138 | ) : ( 139 | 144 | )} 145 | 146 | {item.name} 147 | 148 | 149 | ); 150 | } else { 151 | return ( 152 | 158 | 163 | 164 | {item.name} 165 | 166 | 167 | ); 168 | } 169 | })} 170 | 171 | 172 | ); 173 | } 174 | } 175 | 176 | const Container = styled.div` 177 | flex: 1; 178 | display: grid; 179 | `; 180 | 181 | const ItemsContainer = styled.div` 182 | display: flex; 183 | flex-flow: column wrap; 184 | flex-direction: column; 185 | align-items: flex-end; 186 | justify-content: flex-start; 187 | align-content: flex-start; 188 | flex-wrap: wrap; 189 | max-height: calc(100vh - 50px); 190 | overflow: hidden; 191 | `; 192 | 193 | const DesktopItems = styled.div` 194 | display: flex; 195 | flex-direction: column; 196 | width: 80px; 197 | height: 95px; 198 | padding: 5px; 199 | border-radius: 5px; 200 | margin: 3px; 201 | justify-content: flex-start; 202 | align-items: center; 203 | overflow: hidden; 204 | 205 | &:hover { 206 | background-color: ${(props) => props.theme.colors.highlight}22; 207 | } 208 | 209 | &:focus { 210 | background-color: ${(props) => props.theme.colors.highlight}66; 211 | } 212 | `; 213 | 214 | const DesktopIcon = styled.img` 215 | width: 60px; 216 | height: 60px; 217 | `; 218 | 219 | const DesktopItemName = styled.div` 220 | font-size: 12px; 221 | text-align: center; 222 | padding-top: 3px; 223 | `; 224 | -------------------------------------------------------------------------------- /src/Components/Computer/Helpers/CreateInFolder.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React, { useState } from "react"; 3 | import styled from "styled-components"; 4 | 5 | const CreateInFolder = ({ data, createItem, closeMenu, info }) => { 6 | const [error, setError] = useState(false); 7 | const [input, setInput] = useState(""); 8 | 9 | // Check the name user has input and check if it already exists on desktop 10 | const checkInput = () => { 11 | if (input.length < 1) return; 12 | let directories = data.desktop.map((x) => x.name); 13 | let index = directories.indexOf(info.name); 14 | if (index > -1) { 15 | let folder = data.desktop[index].content.map((x) => x.name.toLowerCase()); 16 | if ( 17 | folder.includes(input.toLowerCase()) || 18 | data.desktop[index].name.toLowerCase() === input.toLowerCase() 19 | ) { 20 | return setError(true); 21 | } 22 | } 23 | 24 | setError(false); 25 | setInput(""); 26 | createItem(input, info.file, info.name); 27 | }; 28 | 29 | return ( 30 | 31 | 32 | 33 | New {!info.open ? null : info.file.toLowerCase()} name 34 | { 38 | if (e.key === "Enter") { 39 | checkInput(); 40 | } 41 | }} 42 | onChange={(e) => { 43 | setInput(e.target.value); 44 | }} 45 | /> 46 | 49 | {info.file} already exists 50 | 51 | 52 | 53 | 56 | checkInput()}>Create 57 | 58 | 59 | 60 | ); 61 | }; 62 | 63 | const Container = styled.div` 64 | position: absolute; 65 | display: flex; 66 | width: 100vw; 67 | height: 100vh; 68 | justify-content: center; 69 | align-items: center; 70 | z-index: 99999; 71 | `; 72 | 73 | const Modal = styled.div` 74 | background-color: ${(props) => props.theme.colors.primary}; 75 | display: flex; 76 | justify-content: center; 77 | flex-direction: column; 78 | min-width: 350px; 79 | `; 80 | 81 | const InputContainer = styled.div` 82 | padding: 20px 20px 10px 20px; 83 | display: flex; 84 | justify-content: center; 85 | flex-direction: column; 86 | `; 87 | 88 | const Title = styled.div` 89 | margin-bottom: 20px; 90 | `; 91 | 92 | const Input = styled.input` 93 | width: 100%; 94 | font-family: "Exo", sans-serif; 95 | font-size: 16px; 96 | border: 1px solid ${(props) => props.theme.colors.primary}; 97 | background-color: ${(props) => props.theme.colors.light}; 98 | color: ${(props) => props.theme.colors.font}; 99 | border: 2px solid ${(props) => props.theme.colors.light}; 100 | border-radius: 5px; 101 | padding: 2px 0; 102 | padding-left: 5px; 103 | 104 | &:focus { 105 | outline: none; 106 | border: 2px solid ${(props) => props.theme.colors.highlight}; 107 | } 108 | `; 109 | 110 | const Error = styled.div` 111 | color: #d83030; 112 | margin-top: 5px; 113 | margin-left: 3px; 114 | `; 115 | 116 | const ButtonContainer = styled.div` 117 | display: flex; 118 | border-top: 2px solid ${(props) => props.theme.colors.light}; 119 | `; 120 | 121 | const Button = styled.div` 122 | flex: 1; 123 | text-align: center; 124 | padding: 10px 0; 125 | border-right: 2px solid ${(props) => props.theme.colors.light}; 126 | 127 | &:hover { 128 | cursor: pointer; 129 | } 130 | `; 131 | 132 | const ButtonSecond = styled.div` 133 | flex: 1; 134 | text-align: center; 135 | padding: 10px 0; 136 | 137 | &:hover { 138 | cursor: pointer; 139 | } 140 | `; 141 | 142 | export default CreateInFolder; 143 | -------------------------------------------------------------------------------- /src/Components/Computer/Helpers/CreateItem.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React, { useState } from "react"; 3 | import styled from "styled-components"; 4 | 5 | const CreateItem = ({ data, createItem, closeMenu, type }) => { 6 | const [error, setError] = useState(false); 7 | const [input, setInput] = useState(""); 8 | 9 | // Check the name user has input and check if it already exists on desktop 10 | const checkInput = () => { 11 | if (input.length < 1) return; 12 | let files = data.desktop.map((x) => x.name.toLowerCase()); 13 | if (files.includes(input.toLowerCase())) { 14 | return setError(true); // Error this name already exists 15 | } 16 | setError(false); 17 | setInput(""); 18 | createItem(input, type); 19 | }; 20 | 21 | return ( 22 | 23 | 24 | 25 | New {!type ? null : type.toLowerCase()} name 26 | { 30 | if (e.key === "Enter") { 31 | checkInput(); 32 | } 33 | }} 34 | onChange={(e) => { 35 | setInput(e.target.value); 36 | }} 37 | /> 38 | 41 | {type} already exists 42 | 43 | 44 | 45 | 48 | checkInput()}>Create 49 | 50 | 51 | 52 | ); 53 | }; 54 | 55 | const Container = styled.div` 56 | position: absolute; 57 | display: flex; 58 | width: 100vw; 59 | height: 100vh; 60 | justify-content: center; 61 | align-items: center; 62 | z-index: 99999; 63 | `; 64 | 65 | const Modal = styled.div` 66 | background-color: ${(props) => props.theme.colors.primary}; 67 | display: flex; 68 | justify-content: center; 69 | flex-direction: column; 70 | min-width: 350px; 71 | `; 72 | 73 | const InputContainer = styled.div` 74 | padding: 20px 20px 10px 20px; 75 | display: flex; 76 | justify-content: center; 77 | flex-direction: column; 78 | `; 79 | 80 | const Title = styled.div` 81 | margin-bottom: 20px; 82 | `; 83 | 84 | const Input = styled.input` 85 | width: 100%; 86 | font-family: "Exo", sans-serif; 87 | font-size: 16px; 88 | border: 1px solid ${(props) => props.theme.colors.primary}; 89 | background-color: ${(props) => props.theme.colors.light}; 90 | color: ${(props) => props.theme.colors.font}; 91 | border: 2px solid ${(props) => props.theme.colors.light}; 92 | border-radius: 5px; 93 | padding: 2px 0; 94 | padding-left: 5px; 95 | 96 | &:focus { 97 | outline: none; 98 | border: 2px solid ${(props) => props.theme.colors.highlight}; 99 | } 100 | `; 101 | 102 | const Error = styled.div` 103 | color: #d83030; 104 | margin-top: 5px; 105 | margin-left: 3px; 106 | `; 107 | 108 | const ButtonContainer = styled.div` 109 | display: flex; 110 | border-top: 2px solid ${(props) => props.theme.colors.light}; 111 | `; 112 | 113 | const Button = styled.div` 114 | flex: 1; 115 | text-align: center; 116 | padding: 10px 0; 117 | border-right: 2px solid ${(props) => props.theme.colors.light}; 118 | 119 | &:hover { 120 | cursor: pointer; 121 | } 122 | `; 123 | 124 | const ButtonSecond = styled.div` 125 | flex: 1; 126 | text-align: center; 127 | padding: 10px 0; 128 | 129 | &:hover { 130 | cursor: pointer; 131 | } 132 | `; 133 | 134 | export default CreateItem; 135 | -------------------------------------------------------------------------------- /src/Components/Computer/Modal.jsx: -------------------------------------------------------------------------------- 1 | // Import node_modules 2 | import React from "react"; 3 | import styled from "styled-components"; 4 | import Draggable from "react-draggable"; 5 | 6 | // Import Applications 7 | import Calculator from "./../Apps/Calculator"; 8 | import Google from "./../Apps/Google"; 9 | import KSJaay from "./../Apps/KSJaay"; 10 | import Recycle from "./../Apps/Recycle"; 11 | import Terminal from "./../Apps/Terminal"; 12 | import Github from "./../Apps/Github"; 13 | import Folder from "./../Apps/Folder"; 14 | import TextEditor from "./../Apps/TextEditor"; 15 | import VsEditor from "./../Apps/Editor"; 16 | 17 | // Import icons 18 | import { BiSquare, BiMinus } from "react-icons/bi"; 19 | import { VscChromeClose, VscChromeRestore } from "react-icons/vsc"; 20 | 21 | // Functions for each app 22 | const apps = { 23 | recycle_bin: function (content, data) { 24 | return ; 25 | }, 26 | google_chrome: function (content, data) { 27 | return ; 28 | }, 29 | github: function (content, data) { 30 | return ; 31 | }, 32 | visual_studio: function () { 33 | return ; 34 | }, 35 | calculator: function () { 36 | return ; 37 | }, 38 | ksjaay: function (content, data) { 39 | return ; 40 | }, 41 | terminal: function ( 42 | content, 43 | data, 44 | createFolder, 45 | updateFile, 46 | openModal, 47 | openTerminalModal, 48 | closeModal 49 | ) { 50 | return ( 51 | 57 | ); 58 | }, 59 | folder: function (content, data, createFolder, updateFile, openModal) { 60 | return ; 61 | }, 62 | file: function (content, data, createFolder, updateFile) { 63 | return ; 64 | }, 65 | react: function (content, data, createFolder, updateFile) { 66 | return ; 67 | }, 68 | "react file": function (content, data, createFolder, updateFile) { 69 | return ; 70 | }, 71 | }; 72 | 73 | // Update the position of the component 74 | const UpdatePosition = (component) => { 75 | let elem = document.getElementById(component.name); 76 | if (component.maximized === false) { 77 | let posXY = elem.style.getPropertyValue("--modal-transform"); 78 | elem.style.transform = posXY; 79 | } else { 80 | elem.style.setProperty("--modal-transform", elem.style.transform); 81 | elem.style.transform = `translate(0pt,0pt)`; 82 | } 83 | }; 84 | 85 | const Modal = ({ 86 | component, 87 | closeModal, 88 | maximizeWindow, 89 | minimizeWindow, 90 | focusWindow, 91 | data, 92 | createFolder, 93 | updateFile, 94 | openModal, 95 | openTerminalModal, 96 | }) => { 97 | // Check if the component is in focus, if so bring zIndex to front 98 | let zindex = 99 | component.isFocused === true ? { zIndex: "30" } : { zIndex: "20" }; 100 | 101 | // Change the size of the component based on if it is maximized or not 102 | let size = 103 | component.maximized === true 104 | ? { 105 | top: "0", 106 | left: "0", 107 | position: "absolute", 108 | width: "100%", 109 | height: "calc(100% - 48px)", 110 | borderRadius: "0px", 111 | } 112 | : { height: "80%", width: "70%", borderRadius: "5px" }; 113 | 114 | // Check if the component is minimized or not and change opacity accordingly 115 | let minimize = 116 | component.minimized === true 117 | ? { opacity: 0, width: "0px", height: "0px" } 118 | : { opacity: 1 }; 119 | 120 | // Adding a custom opacity for terminal 121 | let opacity = 122 | component.id === "terminal" && component.minimized === false 123 | ? { opacity: 0.9 } 124 | : component.minimized === true 125 | ? { opacity: 0 } 126 | : { opacity: 1 }; 127 | 128 | return ( 129 | 130 | 137 |
146 | 147 | {component.name} 148 | 149 | 153 | 154 | 155 | [maximizeWindow(), UpdatePosition(component)]} 157 | onClick={() => [maximizeWindow(), UpdatePosition(component)]} 158 | > 159 | {component.maximized === true ? : } 160 | 161 | 162 | 163 | 164 |
165 | 166 | {apps[component.id]( 167 | component, 168 | data, 169 | createFolder, 170 | updateFile, 171 | openModal, 172 | openTerminalModal, 173 | closeModal 174 | )} 175 | 176 |
177 |
178 | ); 179 | }; 180 | 181 | const Container = styled.div` 182 | display: flex; 183 | flex-direction: column; 184 | justify-content: center; 185 | align-content: center; 186 | position: fixed; 187 | width: 70%; 188 | height: 80%; 189 | left: 15%; 190 | top: calc(10% - 40px); 191 | background-color: ${(props) => props.theme.colors.secondary}; 192 | border-radius: 5px; 193 | transition: height 300ms, width 300ms, opacity 250ms; 194 | `; 195 | 196 | const Header = styled.div` 197 | display: flex; 198 | background-color: ${(props) => props.theme.colors.highlight}cc; 199 | `; 200 | 201 | const Title = styled.div` 202 | flex: 1; 203 | padding: 5px 8px; 204 | font-weight: 600; 205 | `; 206 | 207 | const CloseButton = styled.div` 208 | padding: 5px 12px; 209 | display: flex; 210 | justify-content: center; 211 | align-items: center; 212 | border-top-right-radius: 5px; 213 | &:hover { 214 | background-color: #e61531; 215 | } 216 | `; 217 | 218 | const MaximizeButton = styled.div` 219 | padding: 5px 12px; 220 | display: flex; 221 | justify-content: center; 222 | align-items: center; 223 | &:hover { 224 | background-color: ${(props) => props.theme.colors.highlight}; 225 | } 226 | `; 227 | 228 | const MinimizeButton = styled.div` 229 | padding: 5px 12px; 230 | display: flex; 231 | justify-content: center; 232 | align-items: center; 233 | 234 | &:hover { 235 | background-color: ${(props) => props.theme.colors.highlight}; 236 | } 237 | `; 238 | 239 | const Content = styled.div` 240 | flex: 1; 241 | overflow: hidden; 242 | `; 243 | 244 | export default Modal; 245 | -------------------------------------------------------------------------------- /src/Index.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Exo:400,500,600,700'); 2 | @import url('https://fonts.googleapis.com/css?family=Fira+Code:400,500,600,700&display=swap'); 3 | 4 | html { 5 | scroll-behavior: smooth; 6 | } 7 | 8 | body { 9 | margin: 0; 10 | padding: 0; 11 | font-family: Helvetica; 12 | -webkit-touch-callout: none; 13 | -webkit-user-select: none; 14 | user-select: none; 15 | margin: 0; 16 | background-color: #282c34; 17 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 18 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 19 | sans-serif; 20 | } 21 | 22 | :root { 23 | --background-primary: #282c34; 24 | --background-secondary: #21252b; 25 | --background-light: #333842; 26 | --font-color: white; 27 | --highlight-color: #3bce85; 28 | --scroll-primary: #21252b; 29 | --scroll-secondary: #3a3f47; 30 | --scroll-hover: #414855; 31 | --items-about-hover: #dbdbdb; 32 | } 33 | 34 | ::-webkit-scrollbar { 35 | width: 8px; 36 | } 37 | 38 | ::-webkit-scrollbar-track { 39 | background: #21252b; 40 | } 41 | 42 | ::-webkit-scrollbar-thumb { 43 | background: #3a3f47; 44 | border-radius: 8px; 45 | } 46 | 47 | ::-webkit-scrollbar-thumb:hover { 48 | background: #414855; 49 | } -------------------------------------------------------------------------------- /src/Utils/Style.js: -------------------------------------------------------------------------------- 1 | export const darkTheme = { 2 | fonts: { 3 | body: `"sans-serif"`, 4 | }, 5 | colors: { 6 | primary: "#282c34", // Medium 7 | secondary: "#21252b", // Dark 8 | light: "#333842", // Light 9 | highlight: "#3bce85", 10 | font: "#ffffff", 11 | secondaryFont: "#99aab5", 12 | }, 13 | typography: { 14 | xs: { 15 | fontSize: "12px", 16 | lineHeight: 1.7, 17 | }, 18 | s: { 19 | fontSize: "14px", 20 | lineHeight: 1.6, 21 | }, 22 | m: { 23 | fontSize: "16px", 24 | lineHeight: 1.6, 25 | }, 26 | l: { 27 | fontSize: "18px", 28 | lineHeight: 1.5, 29 | }, 30 | xl: { 31 | fontSize: "20px", 32 | lineHeight: 1.4, 33 | }, 34 | "2xl": { 35 | fontSize: "24px", 36 | lineHeight: 1.3, 37 | }, 38 | "3xl": { 39 | fontSize: "30px", 40 | lineHeight: 1.2, 41 | }, 42 | "4xl": { 43 | fontSize: "36px", 44 | lineHeight: 1.2, 45 | }, 46 | "5xl": { 47 | fontSize: "48px", 48 | lineHeight: 1.1, 49 | }, 50 | }, 51 | }; 52 | 53 | export const lightTheme = { 54 | fonts: { 55 | body: `"sans-serif"`, 56 | }, 57 | colors: { 58 | primary: "#fafafa", // Medium 59 | secondary: "#eaeaeb", // Dark 60 | light: "#f1f1f1", // Light 61 | highlight: "#f67852", 62 | font: "#000000", 63 | secondaryFont: "#99aab5", 64 | }, 65 | typography: { 66 | xs: { 67 | fontSize: "12px", 68 | lineHeight: 1.7, 69 | }, 70 | s: { 71 | fontSize: "14px", 72 | lineHeight: 1.6, 73 | }, 74 | m: { 75 | fontSize: "16px", 76 | lineHeight: 1.6, 77 | }, 78 | l: { 79 | fontSize: "18px", 80 | lineHeight: 1.5, 81 | }, 82 | xl: { 83 | fontSize: "20px", 84 | lineHeight: 1.4, 85 | }, 86 | "2xl": { 87 | fontSize: "24px", 88 | lineHeight: 1.3, 89 | }, 90 | "3xl": { 91 | fontSize: "30px", 92 | lineHeight: 1.2, 93 | }, 94 | "4xl": { 95 | fontSize: "36px", 96 | lineHeight: 1.2, 97 | }, 98 | "5xl": { 99 | fontSize: "48px", 100 | lineHeight: 1.1, 101 | }, 102 | }, 103 | }; 104 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./Index.css"; 4 | import { App } from "./App.jsx"; 5 | 6 | ReactDOM.render( 7 | 8 | 9 | , 10 | document.getElementById("root") 11 | ); 12 | --------------------------------------------------------------------------------