diff --git a/package.json b/package.json index 280449c..c273ffa 100644 --- a/package.json +++ b/package.json @@ -7,11 +7,14 @@ "@emotion/styled": "^10.0.10", "babel-plugin-emotion": "^10.0.9", "date-fns": "^1.30.1", + "emotion-theming": "^10.0.10", "firebase": "^5.9.0", "react": "^16.8.4", "react-dom": "^16.8.4", + "react-feather": "^1.1.6", "react-router-dom": "^5.0.0", - "react-scripts": "2.1.8" + "react-scripts": "2.1.8", + "recompose": "^0.30.0" }, "scripts": { "start": "react-scripts start", diff --git a/src/App.js b/src/App.js index 287c657..e9e5e7e 100644 --- a/src/App.js +++ b/src/App.js @@ -1,9 +1,10 @@ import React, { Component } from "react"; import { BrowserRouter as Router, Route } from "react-router-dom"; import styled from "@emotion/styled"; +import { ThemeProvider } from "emotion-theming"; -import logo from "./logo.svg"; import "./App.css"; +import theme from "./styles/theme"; import Navbar from "./components/Navbar"; import Day from "./components/screens/Day"; import Month from "./components/screens/Month"; @@ -21,23 +22,28 @@ const RouteLayout = styled.div` class App extends Component { state = { - authUser: JSON.parse(localStorage.getItem("authUser")) + authUser: JSON.parse(localStorage.getItem("authUser")), + selectedTheme: "LIGHT" }; render() { - const { authUser } = this.state; + const { authUser, selectedTheme } = this.state; + + const currentTheme = theme[selectedTheme]; return ( - - - - - - - - - - - + + + + + + + + + + + + + ); } } diff --git a/src/components/Icon/Icon.js b/src/components/Icon/Icon.js new file mode 100644 index 0000000..b49da3c --- /dev/null +++ b/src/components/Icon/Icon.js @@ -0,0 +1,27 @@ +import React from "react"; +import styled from "@emotion/styled"; +import { Book, Calendar, Circle, User } from "react-feather"; + +const IconBase = styled.div` + display: flex; + justify-content: center; + align-items: center; + background-color: none; + border-radius: 12px; + padding: 5px; + transition: 0.1s all ease-in-out; + &:hover { + background-color: yellow; + } +`; + +const Icon = ({ name }) => ( + + {name === "Book" && } + {name === "Calendar" && } + {name === "Circle" && } + {name === "User" && } + +); + +export default Icon; diff --git a/src/components/Icon/index.js b/src/components/Icon/index.js new file mode 100644 index 0000000..86b8c41 --- /dev/null +++ b/src/components/Icon/index.js @@ -0,0 +1,2 @@ +import Icon from "./Icon"; +export default Icon; diff --git a/src/components/Navbar/Navbar.js b/src/components/Navbar/Navbar.js index ddacbe9..8acfc05 100644 --- a/src/components/Navbar/Navbar.js +++ b/src/components/Navbar/Navbar.js @@ -1,14 +1,17 @@ import React from "react"; import { Link } from "react-router-dom"; import styled from "@emotion/styled"; +import { compose } from "recompose"; +import { withTheme } from "emotion-theming"; -import { todayUrl, yearUrl, urls } from "../../utils/date"; +import { todayUrl, yearUrl } from "../../utils/date"; +import Icon from "../Icon"; import SignOut from "../SignOut"; import { withAuthentication } from "../session"; const Header = styled.div` - background-color: #fafbfc; + background-color: ${props => props.theme.colors.background}; height: 60px; display: grid; grid-template-areas: "... nav ..."; @@ -32,7 +35,7 @@ const NavIcons = styled.div` } `; -const Navbar = ({ authUser }) => ( +const Navbar = ({ authUser, theme }) => (
); -export default withAuthentication(Navbar); +export default compose( + withAuthentication, + withTheme +)(Navbar); diff --git a/src/components/Seek/Seek.js b/src/components/Seek/Seek.js index 6409171..b589105 100644 --- a/src/components/Seek/Seek.js +++ b/src/components/Seek/Seek.js @@ -8,13 +8,15 @@ const SeekHeader = styled.header` flex-direction: row; justify-content: space-between; align-items: center; - margin-top: ${SIZES.normal}; `; const SeekH1 = styled.h1` display: block; font-size: ${SIZES.normal}; `; const SeekArrows = styled.div``; +const SeekHr = styled.hr` + margin: 0; +`; const Seek = ({ title = "", prev = "", next = "" }) => ( @@ -22,7 +24,7 @@ const Seek = ({ title = "", prev = "", next = "" }) => ( {title} asdf -
+
); diff --git a/src/index.js b/src/index.js index 6fce011..aeb67da 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,6 @@ import React from "react"; import ReactDOM from "react-dom"; + import "./index.css"; import App from "./App"; import * as serviceWorker from "./serviceWorker"; @@ -7,7 +8,6 @@ import Firebase, { FirebaseContext } from "./components/firebase"; ReactDOM.render( - {" "} , document.getElementById("root") diff --git a/src/styles/theme.js b/src/styles/theme.js new file mode 100644 index 0000000..4ac0715 --- /dev/null +++ b/src/styles/theme.js @@ -0,0 +1,22 @@ +const theme = { + LIGHT: { + colors: { + primary: "#2E3136", + secondary: "#999", + tertiary: "#C4C4C4", + quarternary: "#EAEAEA", + background: "#FAFBFC" + } + }, + DARK: { + colors: { + primary: "#F3F6F8", + secondary: "#9Ba3B0", + tertiary: "#6F7682", + quarternary: "#3E4B62", + background: "#2E3136" + } + } +}; + +export default theme; diff --git a/yarn.lock b/yarn.lock index c099c72..2696991 100644 --- a/yarn.lock +++ b/yarn.lock @@ -823,7 +823,7 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@^7.1.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2": version "7.4.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.2.tgz#f5ab6897320f16decd855eed70b705908a313fe8" integrity sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA== @@ -2473,6 +2473,11 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +change-emitter@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3575,6 +3580,15 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emotion-theming@^10.0.10: + version "10.0.10" + resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.10.tgz#efe8751119751bdc70fdc1795fe4cde0fb0cf14c" + integrity sha512-E4SQ3Y91avxxydDgubi/po/GaC5MM1XHm8kcClKg1PA/TeOye0PiLBzAzlgt9dBzDRV9+qHDunsayPvzVYIYng== + dependencies: + "@emotion/weak-memoize" "0.2.2" + hoist-non-react-statics "^3.3.0" + object-assign "^4.1.1" + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -4130,7 +4144,7 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.0: +fbjs@^0.8.0, fbjs@^0.8.1: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -4803,7 +4817,12 @@ hoek@4.x.x: resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== -hoist-non-react-statics@^3.1.0: +hoist-non-react-statics@^2.3.1: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== + +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== @@ -8449,6 +8468,11 @@ react-error-overlay@^5.1.4: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.4.tgz#88dfb88857c18ceb3b9f95076f850d7121776991" integrity sha512-fp+U98OMZcnduQ+NSEiQa4s/XMsbp+5KlydmkbESOw4P69iWZ68ZMFM5a2BuE0FgqPBKApJyRuYHR95jM8lAmg== +react-feather@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/react-feather/-/react-feather-1.1.6.tgz#2a547e3d5cd5e383d3da0128d593cbdb3c1b32f7" + integrity sha512-iCofWhTjX+vQwvDmg7o6vg0XrUg1c41yBDZG+l83nz1FiCsleJoUgd3O+kHpOeWMXuPrRIFfCixvcqyOLGOgIg== + react-is@^16.6.0, react-is@^16.7.0: version "16.8.5" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.5.tgz#c54ac229dd66b5afe0de5acbe47647c3da692ff8" @@ -8459,6 +8483,11 @@ react-is@^16.8.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.4.tgz#90f336a68c3a29a096a3d648ab80e87ec61482a2" integrity sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA== +react-lifecycles-compat@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + react-router-dom@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.0.0.tgz#542a9b86af269a37f0b87218c4c25ea8dcf0c073" @@ -8624,6 +8653,18 @@ realpath-native@^1.0.0: dependencies: util.promisify "^1.0.0" +recompose@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" + integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== + dependencies: + "@babel/runtime" "^7.0.0" + change-emitter "^0.1.2" + fbjs "^0.8.1" + hoist-non-react-statics "^2.3.1" + react-lifecycles-compat "^3.0.2" + symbol-observable "^1.0.4" + recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -9645,6 +9686,11 @@ svgo@^1.0.0, svgo@^1.1.1: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-observable@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"