diff --git a/src/components/Markdown/styles.tsx b/src/components/Markdown/styles.tsx
index caef2c2..9c6b4ad 100644
--- a/src/components/Markdown/styles.tsx
+++ b/src/components/Markdown/styles.tsx
@@ -66,4 +66,8 @@ export const MarkdownWrapper = styled.div`
h6 {
${modularScaleCSS(1)};
}
+
+ pre[class*="language-"] {
+ overflow-x: scroll;
+ }
`
diff --git a/src/components/MobileHeader/index.tsx b/src/components/MobileHeader/index.tsx
new file mode 100644
index 0000000..d316039
--- /dev/null
+++ b/src/components/MobileHeader/index.tsx
@@ -0,0 +1,18 @@
+import React from "react"
+import * as SC from "./styles"
+
+interface IMobileHeaderProps {
+ openMenu: () => void
+}
+
+export function MobileHeader({ openMenu }: IMobileHeaderProps) {
+ return (
+
+
+
+
+ Resources
+
+
+ )
+}
diff --git a/src/components/MobileHeader/styles.tsx b/src/components/MobileHeader/styles.tsx
new file mode 100644
index 0000000..52f6226
--- /dev/null
+++ b/src/components/MobileHeader/styles.tsx
@@ -0,0 +1,64 @@
+import styled from "styled-components"
+import { fontFamily } from "../../design/typography"
+import Logo from "../../images/tph-logo.svg"
+
+export const MobileHeaderWrapper = styled.div`
+ z-index: 50;
+ background: rgba(255, 255, 255, 0.8);
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ padding: 16px 32px;
+ display: none;
+ align-items: center;
+ font-weight: 700;
+ font-family: ${fontFamily.header};
+ font-size: 22px;
+
+ @media screen and (max-width: 767px) {
+ display: flex;
+ }
+`
+
+export const LogoWrapper = styled.div`
+ width: 35px;
+ height: 35px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background: #222;
+ border-radius: 7px;
+ margin-right: 8px;
+`
+
+export const StyledLogo = styled(Logo)`
+ height: 25px;
+`
+
+export const Burger = styled.div`
+ margin-left: auto;
+ width: 16px;
+ height: 9px;
+ padding: 8px;
+ position: relative;
+ cursor: pointer;
+
+ &::before,
+ &::after {
+ position: absolute;
+ content: "";
+ height: 2px;
+ width: 16px;
+ background: #222;
+ margin: 0 auto;
+ }
+
+ &::before {
+ top: 8px;
+ }
+
+ &::after {
+ bottom: 8px;
+ }
+`
diff --git a/src/components/ResourceBreadcrumb/styles.tsx b/src/components/ResourceBreadcrumb/styles.tsx
index 458b295..ebc8d3b 100644
--- a/src/components/ResourceBreadcrumb/styles.tsx
+++ b/src/components/ResourceBreadcrumb/styles.tsx
@@ -4,6 +4,11 @@ import styled from "styled-components"
export const ResourceBreadcrumbWrapper = styled.div`
display: flex;
align-items: flex-start;
+
+ @media screen and (max-width: 767px) {
+ flex-wrap: wrap;
+ margin-bottom: 16px;
+ }
`
export const LinkWrapper = styled.div`
diff --git a/src/components/ResourceHeader/index.tsx b/src/components/ResourceHeader/index.tsx
index e388b7c..c73bcba 100644
--- a/src/components/ResourceHeader/index.tsx
+++ b/src/components/ResourceHeader/index.tsx
@@ -65,9 +65,9 @@ export function ResourceHeader({
{title}
-
- {authors.length} contributor{authors.lenght > 1 && "s"}
+ {authors.length} contributor
+ {authors.lenght > 1 && "s"}
{dateToHuman}
diff --git a/src/components/ResourceHeader/styles.tsx b/src/components/ResourceHeader/styles.tsx
index 8a716eb..a73c25e 100644
--- a/src/components/ResourceHeader/styles.tsx
+++ b/src/components/ResourceHeader/styles.tsx
@@ -11,6 +11,11 @@ export const ResourceHeaderWrapper = styled.div`
export const Top = styled.div`
display: flex;
align-items: center;
+
+ @media screen and (max-width: 767px) {
+ flex-direction: column;
+ align-items: flex-start;
+ }
`
export const Title = styled.h1`
@@ -22,10 +27,23 @@ export const Title = styled.h1`
`
export const Meta = styled.div`
+ display: flex;
+ align-items: center;
+
& + &::before {
content: "•";
margin: 0 8px;
}
+
+ @media screen and (max-width: 767px) {
+ & + & {
+ margin-top: 8px;
+ }
+
+ & + &::before {
+ display: none;
+ }
+ }
`
const ExtraLinks = styled.div`
diff --git a/src/components/ResourcesLayout/index.tsx b/src/components/ResourcesLayout/index.tsx
index 46b302f..06bcc9e 100644
--- a/src/components/ResourcesLayout/index.tsx
+++ b/src/components/ResourcesLayout/index.tsx
@@ -5,23 +5,39 @@
* See: https://www.gatsbyjs.org/docs/use-static-query/
*/
-import React, { PropsWithChildren } from "react"
+import React, { PropsWithChildren, useState } from "react"
import { GlobalStyles } from "../../globalStyles"
import { SidebarProvider } from "../../SidebarProvider"
+import { MobileHeader } from "../MobileHeader"
import { ResourcesSidebar } from "../ResourcesSidebar"
import * as SC from "./styles"
export function ResourcesLayout({ children }: PropsWithChildren<{}>) {
+ const [activeMobileMenu, setActiveMobileMenu] = useState(false)
+
+ function openMenu() {
+ setActiveMobileMenu(true)
+ }
+
+ function closeMenu() {
+ setActiveMobileMenu(false)
+ }
+
return (
-
+
+
{children}
+
)
}
diff --git a/src/components/ResourcesLayout/styles.tsx b/src/components/ResourcesLayout/styles.tsx
index 232913d..edccb12 100644
--- a/src/components/ResourcesLayout/styles.tsx
+++ b/src/components/ResourcesLayout/styles.tsx
@@ -6,9 +6,35 @@ export const Main = styled.div`
min-height: 100vh;
`
+export const Overlay = styled.div`
+ z-index: 99;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ transition: background-color 0.3s;
+ background-color: rgba(0, 0, 0, 0);
+ pointer-events: none;
+
+ @media screen and (min-width: 768px) {
+ display: none;
+ }
+
+ &.is-open {
+ pointer-events: auto;
+ background-color: rgba(0, 0, 0, 0.2);
+ }
+`
+
export const MainContent = styled.main`
flex: 1 1 auto;
margin-top: 128px;
+ width: calc(100% - 320px);
+
+ @media screen and (max-width: 767px) {
+ width: 100%;
+ }
& > :first-child {
margin-top: 0;
@@ -21,5 +47,7 @@ export const MainContent = styled.main`
export const Container = styled.div`
width: 650px;
+ max-width: calc(100% - 64px);
+ padding: 0 32px;
margin: 0 auto;
`
diff --git a/src/components/ResourcesSidebar/index.tsx b/src/components/ResourcesSidebar/index.tsx
index a905160..f9d33d6 100644
--- a/src/components/ResourcesSidebar/index.tsx
+++ b/src/components/ResourcesSidebar/index.tsx
@@ -117,12 +117,12 @@ function MenuItem({ children, to }: PropsWithChildren<{ to: string }>) {
)
}
-export function ResourcesSidebar() {
+export function ResourcesSidebar(props: React.HTMLAttributes) {
const resources = useStaticQuery(ALL_RESOURCES)
const tree = useBuildTree(resources)
return (
-
+
diff --git a/src/components/ResourcesSidebar/styles.tsx b/src/components/ResourcesSidebar/styles.tsx
index 834d481..964d002 100644
--- a/src/components/ResourcesSidebar/styles.tsx
+++ b/src/components/ResourcesSidebar/styles.tsx
@@ -6,6 +6,23 @@ export const ResourcesSidebarWrapper = styled.div`
box-sizing: border-box;
flex: 0 0 320px;
background: #f9f9f9;
+
+ @media screen and (max-width: 767px) {
+ z-index: 100;
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ /* TODO: maybe find a less "awkward" way to animate this */
+ left: calc(-100% - 100px);
+ right: calc(100% - 0px);
+ transition: left 0.3s, right 0.3s;
+ }
+
+ &.is-open {
+ left: 0;
+ right: 100px;
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
+ }
`
export const Children = styled.div`