import React, { useState } from "react";
import styled from "@emotion/styled";
import { useColorMode } from "theme-ui";
import mediaqueries from "@styles/media";
import { copyToClipboard } from "@utils";
const ShareDarkModeOffIcon: React.FC<{}> = () => (
);
const ShareDarkModeOnIcon: React.FC<{}> = () => (
);
const DarkModeToggle: React.FC<{}> = () => {
const [colorMode, setColorMode] = useColorMode();
const isDark = colorMode === `dark`;
function toggleColorMode(event) {
event.preventDefault();
setColorMode(isDark ? `light` : `dark`);
}
return (
);
};
const SharePageButton: React.FC<{}> = () => {
const [hasCopied, setHasCopied] = useState(false);
const [colorMode] = useColorMode();
const isDark = colorMode === `dark`;
function copyToClipboardOnClick() {
if (hasCopied) return;
copyToClipboard(window.location.href);
setHasCopied(true);
setTimeout(() => {
setHasCopied(false);
}, 1000);
}
const Icon = isDark ? ShareDarkModeOffIcon : ShareDarkModeOnIcon;
return (
Copied
);
};
const ArticleControls: React.FC<{}> = () => {
return (
);
};
export default ArticleControls;
const NavControls = styled.div`
display: flex;
align-items: center;
justify-content: center;
`;
const ToolTip = styled.div<{ isDark: boolean; hasCopied: boolean }>`
position: absolute;
padding: 4px 13px;
background: ${p => (p.isDark ? "#000" : "rgba(0,0,0,0.1)")};
color: ${p => (p.isDark ? "#fff" : "#000")};
border-radius: 5px;
font-size: 14px;
top: -35px;
opacity: ${p => (p.hasCopied ? 1 : 0)};
transform: ${p => (p.hasCopied ? "translateY(-3px)" : "none")};
transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;
&::after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: -6px;
margin: 0 auto;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid ${p => (p.isDark ? "#000" : "rgba(0,0,0,0.1)")};
}
`;
const IconWrapper = styled.button`
opacity: 0.5;
position: relative;
z-index: 200000000;
border-radius: 5px;
width: 40px;
height: 25px;
display: flex;
align-items: center;
justify-content: center;
transition: opacity 0.3s ease;
margin-left: 30px;
&:hover {
opacity: 1;
}
${mediaqueries.tablet`
display: inline-flex;
transform: scale(0.9);
margin: 0 15px;
&:hover {
opacity: 0.5;
}
`}
`;
// This is based off a codepen! Much appreciated to: https://codepen.io/aaroniker/pen/KGpXZo
const MoonOrSun = styled.div<{ isDark: boolean }>`
position: relative;
width: 24px;
height: 24px;
border-radius: 50%;
border: ${p => (p.isDark ? "4px" : "2px")} solid
${p => p.theme.colors.primary};
background: ${p => p.theme.colors.primary};
transform: scale(${p => (p.isDark ? 0.55 : 1)});
transition: all 0.45s ease;
overflow: ${p => (p.isDark ? "visible" : "hidden")};
&::before {
content: "";
position: absolute;
right: -9px;
top: -9px;
height: 24px;
width: 24px;
border: 2px solid ${p => p.theme.colors.primary};
border-radius: 50%;
transform: translate(${p => (p.isDark ? "14px, -14px" : "0, 0")});
opacity: ${p => (p.isDark ? 0 : 1)};
transition: transform 0.45s ease;
}
&::after {
content: "";
width: 8px;
height: 8px;
border-radius: 50%;
margin: -4px 0 0 -4px;
position: absolute;
top: 50%;
left: 50%;
box-shadow: 0 -23px 0 ${p => p.theme.colors.primary},
0 23px 0 ${p => p.theme.colors.primary},
23px 0 0 ${p => p.theme.colors.primary},
-23px 0 0 ${p => p.theme.colors.primary},
15px 15px 0 ${p => p.theme.colors.primary},
-15px 15px 0 ${p => p.theme.colors.primary},
15px -15px 0 ${p => p.theme.colors.primary},
-15px -15px 0 ${p => p.theme.colors.primary};
transform: scale(${p => (p.isDark ? 1 : 0)});
transition: all 0.35s ease;
${p => mediaqueries.tablet`
transform: scale(${p.isDark ? 0.92 : 0});
`}
}
`;
const MoonMask = styled.div<{ isDark: boolean }>`
position: absolute;
right: -1px;
top: -8px;
height: 24px;
width: 24px;
border-radius: 50%;
border: 0;
background: ${p => p.theme.colors.background};
transform: translate(${p => (p.isDark ? "14px, -14px" : "0, 0")});
opacity: ${p => (p.isDark ? 0 : 1)};
transition: transform 0.45s ease, ${p => p.theme.colorModeTransition};
`;