import * as React from "react"; import * as Constants from "~/common/constants"; import * as SVG from "~/common/svg"; import WebsitePrototypeWrapper from "~/components/core/WebsitePrototypeWrapper"; import WebsiteHeader from "~/components/core/WebsiteHeader"; import { useRouter } from 'next/router' import Link from "next/link"; import { css } from "@emotion/react"; import { useEventListener } from "~/common/hooks"; const STYLES_ROOT = css` width: 100%; height: 100%; min-height: 100vh; background-color: ${Constants.semantic.bgGrayLight}; color: ${Constants.semantic.textBlack}; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow: hidden; `; const STYLES_CONTAINER = css` max-width: 700px; margin: 0 auto; padding-top: min(2.6vw, 200px); @media (max-width: ${Constants.sizes.mobile}px) { max-width: 480px; padding: 32px 16px; } `; const STYLES_HEADING = css` font-family: ${Constants.font.semiBold}; flex-shrink: 0; flex-shrink: 0; min-width: 50%; max-width: 100%; line-height: min(30px, 3vw); font-size: min(36px, 3.6vw); letter-spacing: -0.035em; margin-bottom: 20px; @media (max-width: ${Constants.sizes.mobile}px) { font-size: 24px; line-height: 32px; margin-bottom: 12px; } @keyframes heading-fade-in { 0% { opacity: 0%; transform: translateY(50%); } 100% { opacity: 100%; transform: translateY(0%); } } animation: heading-fade-in 200ms ease-in-out; `; const STYLES_BODY = css` font-family: ${Constants.font.medium}; font-size: 18px; line-height: 28px; letter-spacing: -0.015em; min-height: 84px; margin-bottom: min(0.3vw, 80px); @keyframes body-fade-in { 0% { opacity: 0%; transform: translateY(10%); } 50% { opacity: 0%; transform: translateY(10%); } 100% { opacity: 100%; transform: translateY(0%); } } animation: body-fade-in 350ms ease-in-out; @media (max-width: ${Constants.sizes.mobile}px) { font-size: 17px; line-height: 24px; letter-spacing: -0.01em; } `; const STYLES_JUMPER = css` @keyframes jumper-fade-in { 0% { opacity: 95%; } 100% { opacity: 100%; } } animation: jumper-fade-in 200ms ease-in-out; } @media (max-width: ${Constants.sizes.mobile}px) { display: none; } `; const STYLES_FLEX = css` margin-top: min(1.5vw, 80px); width: 100%; max-width: 700px; display: flex; align-items: center; justify-content: center; @media (max-width: ${Constants.sizes.tablet}px) { max-width: 100%; } `; const STYLES_BUTTON = css` cursor: poitner; display: inline-flex; flex-grow: 0; justify-content: center; align-items: center; height: 40px; width: 40px; border-radius: 8px; text-decoration: none; cursor: pointer; border: 1.25px solid ${Constants.semantic.borderGray}; color: ${Constants.semantic.textBlack}; :hover { background-color: ${Constants.semantic.textGray}; color: ${Constants.semantic.textWhite}; } `; const STYLES_IMGGUIDE = css` display: block; height: 498px; border-radius: 8px; margin-left: -190px; @keyframes guide-fade-in { 0% { opacity: 0%; transform: translateY(5%); } 50% { opacity: 0%; transform: translateY(5%); } 100% { opacity: 100%; transform: translateY(0%); } } animation: guide-fade-in 500ms ease-in-out; @media (max-width: ${Constants.sizes.mobile}px) { width: 100%; height: auto; margin-left: 0; border-radius: 4px; } `; const STYLES_MOBILEGUIDE = css` display: none; @media (max-width: ${Constants.sizes.mobile}px) { display: block; width: 100%; height: auto; margin: 20px 0 64px 0; @keyframes mobile-fade-in { 0% { opacity: 0%; transform: translateY(5%); } 50% { opacity: 0%; transform: translateY(5%); } 100% { opacity: 100%; transform: translateY(0%); } } animation: mobile-fade-in 700ms ease-in-out; } `; export const useGuideKeyCommands = (next, prev) => { const router = useRouter(); const handleKeyUp = (e) => { const input = document.querySelectorAll("input"); for (let elem of input) { if (document.activeElement === elem) { return; } } const textarea = document.querySelectorAll("textarea"); for (let elem of textarea) { if (document.activeElement === elem) { return; } } switch (e.key) { case "ArrowRight": if (next) router.replace(next); break; case "ArrowLeft": if (prev) router.replace(prev); break; } }; useEventListener({ type: "keyup", handler: handleKeyUp }); }; export default function Guide({ title, description, url, image, heading, body, jumper, imageguide, mobileguide, prev, next, ...props }) { useGuideKeyCommands(next, prev); return (
{heading}
{body}
{jumper &&
{jumper}
} {imageguide && } {mobileguide && }
); }