UNPKG

@frontity/twentytwenty-theme

Version:

The WordPress Twenty Twenty starter theme for Frontity

150 lines (128 loc) 3.33 kB
import { connect, styled } from "frontity"; import Link from "./link"; import Navigation from "./navigation/navigation"; import SearchButton from "./search/search-button"; import SearchModal from "./search/search-modal"; import MobileSearchButton from "./mobile/search-button"; import MobileMenuButton from "./mobile/menu-button"; import MobileMenuModal from "./mobile/menu-modal"; const Header = ({ state }) => { const { title, description } = state.frontity; const { headerBg } = state.theme.colors; return ( <PageHeader bg={headerBg} id="site-header"> <HeaderInner> <TitleWrapper> {/* Search button on mobile */} {state.theme.showSearchInHeader && <MobileSearchButton />} {/* Heading and Description of the site */} <TitleGroup> <SiteTitle> <StyledLink link="/">{title}</StyledLink> </SiteTitle> <SiteDescription>{description}</SiteDescription> </TitleGroup> {/* Mobile menu button and modal */} <MobileMenuButton /> <MobileMenuModal /> </TitleWrapper> <HeaderNavigationWrapper> {/* Desktop navigation links */} <Navigation /> {/* Desktop search button */} {state.theme.showSearchInHeader && <SearchButton />} </HeaderNavigationWrapper> </HeaderInner> {/* Global search modal */} <SearchModal /> </PageHeader> ); }; // Connect the Header component to get access to the `state` in it's `props` export default connect(Header); const TitleGroup = styled.div` @media (min-width: 1000px) { align-items: baseline; display: flex; flex-wrap: wrap; justify-content: flex-start; margin: -1rem 0 0 -2.4rem; } `; const TitleWrapper = styled.div` align-items: center; display: flex; justify-content: center; padding: 0 4rem; text-align: center; width: 100%; @media (min-width: 1000px) { width: auto; margin-right: 4rem; max-width: 50%; padding: 0; text-align: left; } `; const PageHeader = styled.header` z-index: 1; background: ${(props) => props.bg}; position: relative; `; const HeaderInner = styled.div` align-items: center; display: flex; justify-content: space-between; padding: 2.8rem 0; max-width: 168rem; z-index: 100; margin-left: auto; margin-right: auto; @media (min-width: 700px) { width: calc(100% - 8rem); } `; const SiteTitle = styled.h1` font-size: 2.1rem; font-weight: 600; line-height: 1; margin: 0; @media (min-width: 1000px) { margin: 1rem 0 0 2.4rem; } @media (min-width: 700px) { font-size: 2.4rem; font-weight: 700; } `; const SiteDescription = styled.div` margin: 0; margin-top: 1rem; color: #6d6d6d; font-size: 1.8rem; font-weight: 500; display: none; letter-spacing: -0.0311em; transition: all 0.15s linear; @media (min-width: 1000px) { margin: 1rem 0 0 2.4rem; } @media (min-width: 700px) { display: block; } `; const StyledLink = styled(Link)` text-decoration: none; color: inherit; display: block; &:hover { text-decoration: underline; } `; const HeaderNavigationWrapper = styled.div` display: none; @media (min-width: 1000px) { align-items: center; display: flex; } `;