diff --git a/src/components/Nav.js b/src/components/Nav.js
index c1cab7d4..b1a9a12a 100644
--- a/src/components/Nav.js
+++ b/src/components/Nav.js
@@ -2,7 +2,7 @@ import React, { memo } from 'react'
import Link from 'next/link'
import { useRouter } from 'next/router'
-export default memo(() => {
+export default memo(({ themeToggler }) => {
const router = useRouter()
return (
@@ -25,6 +25,8 @@ export default memo(() => {
css
+
+
)
})
diff --git a/src/helpers/styles.js b/src/helpers/styles.js
index a9e8e45f..0e37fb3e 100644
--- a/src/helpers/styles.js
+++ b/src/helpers/styles.js
@@ -2,38 +2,12 @@ import 'highlight.js/styles/xcode.css'
import '@exampledev/new.css/new.css'
import styled, { createGlobalStyle } from 'styled-components'
-/* @media (prefers-color-scheme: dark) {
- :root {
- --nc-tx-1: #ffffff;
- --nc-tx-2: #eeeeee;
- --nc-bg-1: #000000;
- --nc-bg-2: #111111;
- --nc-bg-3: #222222;
- --nc-lk-1: #00BFFF;
- --nc-lk-2: #0D98BA;
- --nc-lk-tx: #FFFFFF;
- --nc-ac-1: #7928CA;
- --nc-ac-tx: #FFFFFF;
- --custom-bk-code: #ccc;
- --custom-tx-code: #888
- }
-} */
-
export const GlobalStyle = createGlobalStyle`
:root {
- --nc-tx-1: rgb(40, 40, 40);
- --nc-tx-2: rgb(66, 78, 88);
- --nc-lk-1: rgb(155, 77, 202);
- --nc-lk-2: rgb(96, 108, 118);
- --nc-lk-tx: #FFFFFF;
- --nc-bg-1: #FFFFFF;
- --nc-bg-2: #F8F8F8;
- --nc-bg-3: #FFFFFF;
- --nc-ac-1: rgb(155, 77, 202);
- --nc-ac-tx: #fff;
- --custom-bk-code: #f0f0f0
+ ${({ theme }) => theme.variables};
}
+
body {
font-family: 'HelveticaNeue-Light', 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial,
'Lucida Grande', sans-serif;
@@ -74,9 +48,19 @@ export const GlobalStyle = createGlobalStyle`
export default styled.div`
nav {
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+
+ @media (max-width: 640px) {
+ align-items: flex-start;
+ flex-direction: column;
+ }
+
box-sizing: border-box;
width: 100%;
padding: 1rem;
+ position: relative;
@media screen and (min-width: 30em) {
padding: 2rem;
@@ -120,6 +104,23 @@ export default styled.div`
transition: opacity 0.15s ease-in;
text-decoration: underline;
}
+ button {
+ color: var(--nc-lk-2);
+ font-size: 12px;
+
+ &,
+ :hover,
+ :active,
+ :focus {
+ opacity: 0.7;
+ margin-left: auto;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 25px;
+ overflow: hidden;
+ background-color: transparent;
+ }
+ }
}
h1,
diff --git a/src/helpers/use-dark-mode.js b/src/helpers/use-dark-mode.js
new file mode 100644
index 00000000..0fee4f1d
--- /dev/null
+++ b/src/helpers/use-dark-mode.js
@@ -0,0 +1,26 @@
+import { useCallback, useState } from 'react'
+
+const preference =
+ typeof window !== 'undefined' &&
+ window.matchMedia &&
+ window.matchMedia('(prefers-color-scheme: dark)').matches
+ ? 'dark'
+ : 'light'
+
+const saved =
+ typeof window !== 'undefined' && window.localStorage.getItem('theme')
+
+export const useDarkMode = () => {
+ const [theme, setTheme] = useState(saved ? saved : preference)
+
+ const themeToggler = useCallback(() => {
+ setTheme(theme => {
+ const newTheme = theme === 'light' ? 'dark' : 'light'
+ typeof window !== 'undefined' &&
+ window.localStorage.setItem('theme', newTheme)
+ return newTheme
+ })
+ }, [])
+
+ return [theme, themeToggler]
+}
diff --git a/src/pages/_app.js b/src/pages/_app.js
index f2d05ece..0d8bbe43 100644
--- a/src/pages/_app.js
+++ b/src/pages/_app.js
@@ -1,16 +1,48 @@
import React from 'react'
+import { ThemeProvider } from 'styled-components'
+import { useDarkMode } from '../helpers/use-dark-mode'
import AppStyles, { GlobalStyle } from '../helpers/styles'
import Nav from '../components/Nav'
-const App = ({ Component, pageProps }) => (
- <>
-