diff --git a/components/Footer.tsx b/components/Footer.tsx
index 347d724..06093bf 100644
--- a/components/Footer.tsx
+++ b/components/Footer.tsx
@@ -12,16 +12,16 @@ const Footer = () => {
diff --git a/components/Navbar.tsx b/components/Navbar.tsx
index 8a5232d..7001545 100644
--- a/components/Navbar.tsx
+++ b/components/Navbar.tsx
@@ -1,15 +1,25 @@
-const Navbar = () => (
-
-
-
-);
+import { useTheme } from "next-themes";
+import { FaMoon, FaSun } from "react-icons/fa";
+
+const Navbar = () => {
+ const { theme, setTheme } = useTheme();
+ const switchTheme = () => setTheme(theme == "dark" ? "light" : "dark");
-const darkButton = () => {};
+ return (
+
+
+
+ );
+};
export default Navbar;
diff --git a/components/Projects.tsx b/components/Projects.tsx
index ba1466a..a4e4f99 100644
--- a/components/Projects.tsx
+++ b/components/Projects.tsx
@@ -51,8 +51,8 @@ const Projects = () => (
Keyzo
Keyzo is an electron-based program written in
JavaScript and CSS but I am planning on moving to
-
TypeScript . It's main use is to bring every keybind you will every need into a single program, with a
- simple and neat interface.
+
TypeScript . It's main use is to bring every keybind you will every need into a single program, with
+ a simple and neat interface.
Website
diff --git a/package-lock.json b/package-lock.json
index 45675d7..80578c9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,10 +11,10 @@
"axios": "^0.21.1",
"next": "10.0.8",
"next-iron-session": "^4.1.12",
+ "next-themes": "^0.0.12",
"react": "17.0.1",
"react-dom": "17.0.1",
"react-icons": "^4.2.0",
- "react-lazyload": "^3.2.0",
"sass": "^1.32.8"
},
"devDependencies": {
@@ -252,9 +252,9 @@
}
},
"node_modules/@types/node": {
- "version": "14.14.32",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.32.tgz",
- "integrity": "sha512-/Ctrftx/zp4m8JOujM5ZhwzlWLx22nbQJiVqz8/zE15gOeEW+uly3FSX4fGFpcfEvFzXcMCJwq9lGVWgyARXhg==",
+ "version": "14.14.33",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz",
+ "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==",
"dev": true
},
"node_modules/@types/prop-types": {
@@ -576,9 +576,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001197",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001197.tgz",
- "integrity": "sha512-8aE+sqBqtXz4G8g35Eg/XEaFr2N7rd/VQ6eABGBmNtcB8cN6qNJhMi6oSFy4UWWZgqgL3filHT8Nha4meu3tsw=="
+ "version": "1.0.30001198",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001198.tgz",
+ "integrity": "sha512-r5GGgESqOPZzwvdLVER374FpQu2WluCF1Z2DSiFJ89KSmGjT0LVKjgv4NcAqHmGWF9ihNpqRI9KXO9Ex4sKsgA=="
},
"node_modules/chalk": {
"version": "2.4.2",
@@ -864,11 +864,19 @@
}
},
"node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dependencies": {
- "ms": "2.0.0"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/define-properties": {
@@ -924,9 +932,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.3.683",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.683.tgz",
- "integrity": "sha512-8mFfiAesXdEdE0DhkMKO7W9U6VU/9T3VTWwZ+4g84/YMP4kgwgFtQgUxuu7FUMcvSeKSNhFQNU+WZ68BQTLT5A=="
+ "version": "1.3.685",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.685.tgz",
+ "integrity": "sha512-C3oFZNkJ8lz85ADqr3hzpjBc2ciejMRN2SCd/D0hwcqpr6MGxfdN/j89VN6l+ERTuCUvhg0VYsf40Q4qTz4bhQ=="
},
"node_modules/elliptic": {
"version": "6.5.4",
@@ -1624,9 +1632,9 @@
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/nanoid": {
"version": "3.1.20",
@@ -1730,27 +1738,16 @@
"node": ">=0.11.0"
}
},
- "node_modules/next-iron-session/node_modules/debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node_modules/next-themes": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.0.12.tgz",
+ "integrity": "sha512-127ZeerlF/GC17TMVkZkarj3f01weI03b+Ne1xHmmaRs9ouYXVkgyAd60GHRzUnCFVo1NKLcZe0Pr8OnTzrxwQ==",
+ "peerDependencies": {
+ "next": "*",
+ "react": "*",
+ "react-dom": "*"
}
},
- "node_modules/next-iron-session/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
"node_modules/node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
@@ -2194,15 +2191,6 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
- "node_modules/react-lazyload": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/react-lazyload/-/react-lazyload-3.2.0.tgz",
- "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw==",
- "peerDependencies": {
- "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0",
- "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
- }
- },
"node_modules/react-refresh": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
@@ -2417,6 +2405,19 @@
"debug": "2"
}
},
+ "node_modules/stream-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/stream-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -2940,9 +2941,9 @@
"integrity": "sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw=="
},
"@types/node": {
- "version": "14.14.32",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.32.tgz",
- "integrity": "sha512-/Ctrftx/zp4m8JOujM5ZhwzlWLx22nbQJiVqz8/zE15gOeEW+uly3FSX4fGFpcfEvFzXcMCJwq9lGVWgyARXhg==",
+ "version": "14.14.33",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.33.tgz",
+ "integrity": "sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==",
"dev": true
},
"@types/prop-types": {
@@ -3211,9 +3212,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001197",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001197.tgz",
- "integrity": "sha512-8aE+sqBqtXz4G8g35Eg/XEaFr2N7rd/VQ6eABGBmNtcB8cN6qNJhMi6oSFy4UWWZgqgL3filHT8Nha4meu3tsw=="
+ "version": "1.0.30001198",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001198.tgz",
+ "integrity": "sha512-r5GGgESqOPZzwvdLVER374FpQu2WluCF1Z2DSiFJ89KSmGjT0LVKjgv4NcAqHmGWF9ihNpqRI9KXO9Ex4sKsgA=="
},
"chalk": {
"version": "2.4.2",
@@ -3461,11 +3462,11 @@
"integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og=="
},
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.2"
}
},
"define-properties": {
@@ -3513,9 +3514,9 @@
"integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
},
"electron-to-chromium": {
- "version": "1.3.683",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.683.tgz",
- "integrity": "sha512-8mFfiAesXdEdE0DhkMKO7W9U6VU/9T3VTWwZ+4g84/YMP4kgwgFtQgUxuu7FUMcvSeKSNhFQNU+WZ68BQTLT5A=="
+ "version": "1.3.685",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.685.tgz",
+ "integrity": "sha512-C3oFZNkJ8lz85ADqr3hzpjBc2ciejMRN2SCd/D0hwcqpr6MGxfdN/j89VN6l+ERTuCUvhg0VYsf40Q4qTz4bhQ=="
},
"elliptic": {
"version": "6.5.4",
@@ -4016,9 +4017,9 @@
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"nanoid": {
"version": "3.1.20",
@@ -4087,23 +4088,14 @@
"cookie": "^0.4.1",
"debug": "^4.3.1",
"iron-store": "^1.3.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
}
},
+ "next-themes": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.0.12.tgz",
+ "integrity": "sha512-127ZeerlF/GC17TMVkZkarj3f01weI03b+Ne1xHmmaRs9ouYXVkgyAd60GHRzUnCFVo1NKLcZe0Pr8OnTzrxwQ==",
+ "requires": {}
+ },
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
@@ -4468,12 +4460,6 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
- "react-lazyload": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/react-lazyload/-/react-lazyload-3.2.0.tgz",
- "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw==",
- "requires": {}
- },
"react-refresh": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
@@ -4644,6 +4630,21 @@
"integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
"requires": {
"debug": "2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
}
},
"string_decoder": {
diff --git a/package.json b/package.json
index 67feed2..670cd75 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
"axios": "^0.21.1",
"next": "10.0.8",
"next-iron-session": "^4.1.12",
+ "next-themes": "^0.0.12",
"react": "17.0.1",
"react-dom": "17.0.1",
"react-icons": "^4.2.0",
@@ -21,4 +22,4 @@
"@types/react": "^17.0.3",
"typescript": "^4.2.3"
}
-}
\ No newline at end of file
+}
diff --git a/pages/_app.tsx b/pages/_app.tsx
index f6e80e5..91f8eee 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -1,10 +1,16 @@
+import { ThemeProvider } from "next-themes";
+
import "../styles/milligram.min.css";
import "../styles/raleway.css";
import "../styles/sass/index.scss";
function App({ Component, pageProps }) {
- return ;
+ return (
+
+
+
+ );
}
export default App;
diff --git a/styles/sass/binas.scss b/styles/sass/binas.scss
index 6236877..29b563e 100644
--- a/styles/sass/binas.scss
+++ b/styles/sass/binas.scss
@@ -2,7 +2,7 @@
padding-top: 6rem;
img {
- border: 0.1rem solid #d1d1d1;
+ border: 0.1rem solid var(--borders);
border-radius: 5px;
max-width: 100vw;
diff --git a/styles/sass/contact.scss b/styles/sass/contact.scss
index 51fded5..3f539e4 100644
--- a/styles/sass/contact.scss
+++ b/styles/sass/contact.scss
@@ -3,10 +3,18 @@
font-size: 4rem;
text-align: center;
margin-bottom: 3rem;
- border-top: 0.1rem solid #f4f5f6;
+ border-top: 0.1rem solid var(--borders);
padding-top: 4rem;
}
+ input,
+ textarea,
+ select {
+ border-color: var(--borders);
+ color: var(--foreground);
+ background-color: var(--secondary);
+ }
+
font-family: "Raleway";
#message {
diff --git a/styles/sass/footer.scss b/styles/sass/footer.scss
index 84b8a68..1230a28 100644
--- a/styles/sass/footer.scss
+++ b/styles/sass/footer.scss
@@ -1,6 +1,6 @@
.footer {
- background-color: #f4f5f6;
- border-top: 0.1rem solid #d1d1d1;
+ background-color: var(--background);
+ border-top: 0.1rem solid var(--borders);
padding: 3rem;
diff --git a/styles/sass/index.scss b/styles/sass/index.scss
index 0a21c58..eaf1041 100644
--- a/styles/sass/index.scss
+++ b/styles/sass/index.scss
@@ -1,3 +1,27 @@
+:root {
+ --background: white;
+ --secondary: #f4f5f6;
+ --borders: #e4e4e4;
+ --foreground: #606c76;
+}
+
+[data-theme="dark"] {
+ .profile {
+ filter: invert(1);
+ }
+
+ --background: #212123;
+ --secondary: #1c1c1c;
+ --borders: #3c3838;
+ --foreground: rgb(236, 235, 235);
+}
+
+body {
+ margin: 0;
+ background-color: var(--background);
+ color: var(--foreground);
+}
+
@import "nav.scss";
@import "landing.scss";
@import "project.scss";
@@ -7,7 +31,3 @@
@import "binas.scss";
@import "upload.scss";
@import "page.scss";
-
-body {
- margin: 0;
-}
diff --git a/styles/sass/landing.scss b/styles/sass/landing.scss
index 06437fc..2dfb8d6 100644
--- a/styles/sass/landing.scss
+++ b/styles/sass/landing.scss
@@ -1,5 +1,5 @@
.landing {
- background: #f4f5f6;
+ background: var(--secondary);
margin-top: 6rem;
.container {
diff --git a/styles/sass/nav.scss b/styles/sass/nav.scss
index 21e7b82..7b4b56e 100644
--- a/styles/sass/nav.scss
+++ b/styles/sass/nav.scss
@@ -1,7 +1,7 @@
.navigation {
z-index: 1;
- background-color: #f4f5f6;
- border-bottom: 0.1rem solid #d1d1d1;
+ background-color: var(--secondary);
+ border-bottom: 0.1rem solid var(--borders);
position: fixed;
top: 0;
@@ -16,9 +16,31 @@
.items {
float: right;
+ display: flex;
+ justify-content: center;
+
+ .moon {
+ display: none;
+ }
+
+ .dark-switch {
+ font-size: 2rem;
+ margin-left: 1rem;
+ margin-top: 0.25rem;
+ }
a {
margin-left: 1rem;
}
}
}
+
+[data-theme="dark"] {
+ .sun {
+ display: none;
+ }
+
+ .moon {
+ display: inline-block !important;
+ }
+}
diff --git a/styles/sass/project.scss b/styles/sass/project.scss
index a6dbfe8..492b3c3 100644
--- a/styles/sass/project.scss
+++ b/styles/sass/project.scss
@@ -9,7 +9,7 @@
margin-top: 3rem;
.project {
- border-top: 0.1rem solid #f4f5f6;
+ border-top: 0.1rem solid var(--borders);
padding: 5rem 0;