diff --git a/src/App.tsx b/src/App.tsx index 7654d85..47ea1eb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,11 +2,13 @@ import { ThemeProvider } from "styled-components"; import theme from "@styles/theme"; import GlobalStyle from "@styles/global"; +import Router from "./Router"; function App() { return ( + ); } diff --git a/src/components/button/Button.tsx b/src/components/button/Button.tsx new file mode 100644 index 0000000..fb67757 --- /dev/null +++ b/src/components/button/Button.tsx @@ -0,0 +1,44 @@ +// Button.tsx + +import React from "react"; +import styled from "styled-components"; + +const Btn = styled.button` + width: 350px; + height: 60px; + display: flex; + justify-content: center; + align-items: center; + color: #343a40; + text-align: center; + font-size: 20px; + font-style: normal; + font-weight: 500; + line-height: 20px; + letter-spacing: -0.5px; + border-radius: 10px; + background: #99bc85; + cursor: pointer; + border: none; + margin: 10px auto; +`; + +interface ButtonProps { + link: string; + name: string; + type: string; +} + +const Button: React.FC = ({ link, name, type }) => { + const handleClick = () => { + window.location.href = link; + }; + + return ( + + {name} + + ); +}; + +export default Button; diff --git a/src/components/input/DateInput.tsx b/src/components/input/DateInput.tsx new file mode 100644 index 0000000..bab66c6 --- /dev/null +++ b/src/components/input/DateInput.tsx @@ -0,0 +1,28 @@ +// DateInput.tsx +import React from "react"; +import * as S from "./style"; + +const DateInput: React.FC = () => { + return ( + + + 생년월일 + * + + + + + + + + + + + + + + + ); +}; + +export default DateInput; diff --git a/src/components/input/Input.tsx b/src/components/input/Input.tsx new file mode 100644 index 0000000..076363e --- /dev/null +++ b/src/components/input/Input.tsx @@ -0,0 +1,32 @@ +// Input.tsx +import React from "react"; +import * as S from "./style"; + +interface InputProps { + width?: string; + label: string; + essential: boolean; + hint: string; +} + +const Input: React.FC = ({ + width = "340px", + label, + essential = true, + hint, +}) => { + return ( + + + {label} + {essential && *} + + {hint && {hint}} + + + + + ); +}; + +export default Input; diff --git a/src/components/input/style.ts b/src/components/input/style.ts new file mode 100644 index 0000000..b12efe4 --- /dev/null +++ b/src/components/input/style.ts @@ -0,0 +1,72 @@ +import styled from "styled-components"; + +interface InputWrapProps { + width?: string; +} + +export const InputContainer = styled.div` + display: flex; + flex-direction: column; +`; + +export const InputTitleWrapper = styled.div` + display: flex; + align-items: center; + gap: 5px; +`; + +export const InputTitle = styled.label` + color: #343a40; + + font-size: 12px; + font-style: normal; + font-weight: 500; + line-height: 22px; + letter-spacing: -0.1px; +`; + +export const EssentialIcon = styled.span` + color: #f5535e; + + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 18px; + letter-spacing: -0.1px; +`; + +export const InputHint = styled.p` + color: #868e96; + + font-size: 10px; + font-style: normal; + font-weight: 500; + line-height: 18px; + letter-spacing: -0.1px; +`; + +export const InputWrap = styled.div` + width: ${({ width }) => width || "340px"}; + height: 40px; + border-radius: 8px; + border: 1px solid #ced4da; + background: #fff; +`; + +export const TextInput = styled.input` + width: 100%; + color: #495057; + font-size: 12px; + font-style: normal; + font-weight: 500; + letter-spacing: -0.1px; + outline: none; + padding: 10px 12px; + border-radius: 8px; +`; + +// DateInput.tsx +export const DateInputWrap = styled.div` + display: flex; + gap: 17px; +`; diff --git a/src/components/login/HintText.tsx b/src/components/login/HintText.tsx new file mode 100644 index 0000000..ff73c49 --- /dev/null +++ b/src/components/login/HintText.tsx @@ -0,0 +1,39 @@ +import styled from "styled-components"; + +const HintTextWrapper = styled.div` + width: 100%; + display: flex; + flex-direction: column; + gap: 10px; +`; + +const HintTextHeadline2 = styled.h2` + color: #343a40; + text-align: center; + font-family: Pretendard; + font-size: 28px; + font-style: normal; + font-weight: 600; + line-height: 40px; + letter-spacing: -0.5px; +`; + +const HintTextP1 = styled.p` + color: #868e96; + text-align: center; + font-family: Pretendard; + font-size: 14px; + font-style: normal; + font-weight: 500; + line-height: 22px; /* 157.143% */ + letter-spacing: -0.1px; +`; + +export default function HintText() { + return ( + + 당신의 정보를 입력해주세요. + 팀을 참가할 때 간단한 정보를 입력받아요. + + ); +} diff --git a/src/pages/login/Login.tsx b/src/pages/login/Login.tsx new file mode 100644 index 0000000..926e161 --- /dev/null +++ b/src/pages/login/Login.tsx @@ -0,0 +1,46 @@ +// Login.tsx +import Input from "@components/input/Input"; +import DateInput from "@components/input/DateInput"; +import HintText from "@components/login/HintText"; +import React from "react"; +import styled from "styled-components"; +import Button from "@components/button/Button"; + +const Container = styled.div` + height: calc(100vh - 80px); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 60px; +`; + +const InputForm = styled.form` + display: flex; + flex-direction: column; + gap: 16px; +`; + +const ButtonLayout = styled.div` + position: relative; + bottom: 10px; +`; + +const Login: React.FC = () => { + return ( + <> + + + + + + + + +