diff --git a/src/assets/images/symbol.png b/src/assets/images/symbol.png new file mode 100644 index 00000000..dc4a4eec Binary files /dev/null and b/src/assets/images/symbol.png differ diff --git a/src/components/sign-in/SocialLoginModal/SocialLoginModal.styles.ts b/src/components/sign-in/SocialLoginModal/SocialLoginModal.styles.ts new file mode 100644 index 00000000..154cd343 --- /dev/null +++ b/src/components/sign-in/SocialLoginModal/SocialLoginModal.styles.ts @@ -0,0 +1,15 @@ +import styled from 'styled-components'; + +export const ModalContent = styled.div` + display: flex; + flex-direction: column; + gap: 1px; +`; + +export const Title = styled.h2` + font-size: 20px; + font-weight: bold; + text-align: center; + margin-bottom: 16px; + color: #333; +`; \ No newline at end of file diff --git a/src/components/sign-in/SocialLoginModal/SocialLoginModal.tsx b/src/components/sign-in/SocialLoginModal/SocialLoginModal.tsx new file mode 100644 index 00000000..6155eb3d --- /dev/null +++ b/src/components/sign-in/SocialLoginModal/SocialLoginModal.tsx @@ -0,0 +1,21 @@ +import CustomModal from "../../global/CustomModal"; +import { SocialLoginButton } from "../../global/SocialLoginButton"; +import { ModalContent, Title } from "./SocialLoginModal.styles"; + + + +interface SocialLoginModalProps { + onClose: () => void; +} + +export default function SocialLoginModal({ onClose }: SocialLoginModalProps) { + return ( + + + + + + + + ); +} \ No newline at end of file diff --git a/src/components/sign-in/SocialLoginModal/index.ts b/src/components/sign-in/SocialLoginModal/index.ts new file mode 100644 index 00000000..70f145d6 --- /dev/null +++ b/src/components/sign-in/SocialLoginModal/index.ts @@ -0,0 +1 @@ +export { default } from './SocialLoginModal'; diff --git a/src/page/intro/index.styles.ts b/src/page/intro/index.styles.ts new file mode 100644 index 00000000..e611971d --- /dev/null +++ b/src/page/intro/index.styles.ts @@ -0,0 +1,42 @@ +import { styled } from "styled-components"; + +export const PageWrapper = styled.div` + display: flex; + flex-direction: column; + padding-top: 70px; + height: 100vh; // 전체 높이 사용 +`; + +export const ContentWrapper = styled.div` + flex: 1; // 남은 공간 모두 사용 + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 0 24px; // 좌우 패딩 +`; + +export const ButtonWrapper = styled.div` + padding: 24px; + background: white; +`; + +export const TitleWrapper = styled.div` + margin-bottom: 16px; +` + +export const Title = styled.h1` + font-size: 24px; + font-weight: 600; + color: #333; +`; + +export const HighlightedText = styled.span` + color: #007bff; /* 강조 색상 */ +`; + +export const Logo = styled.img` + width: 120px; + height: auto; + margin: 20px 0; +`; \ No newline at end of file diff --git a/src/page/intro/index.tsx b/src/page/intro/index.tsx new file mode 100644 index 00000000..8fd93512 --- /dev/null +++ b/src/page/intro/index.tsx @@ -0,0 +1,27 @@ +import symbol from '../../assets/images/symbol.png' +import { CustomButton } from '../../components/global/CustomButton'; +import { ButtonWrapper, ContentWrapper, HighlightedText, Logo, PageWrapper, Title } from './index.styles'; + + +const Intro = () => { + return ( + + + + 당신의 + <HighlightedText> 반려견</HighlightedText> + 의 모든 날들이 + + + <HighlightedText>아름답도록</HighlightedText> + + + + + 시작하기 + + + ); +}; + +export default Intro; diff --git a/src/page/sign-in/index.styles.ts b/src/page/sign-in/index.styles.ts new file mode 100644 index 00000000..fd2ec7fc --- /dev/null +++ b/src/page/sign-in/index.styles.ts @@ -0,0 +1,32 @@ +import { styled } from "styled-components"; + +export const PageWrapper = styled.div` + display: flex; + flex-direction: column; + padding-top: 70px; + height: 100vh; +`; + +export const ContentWrapper = styled.div` + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 0 24px; +`; + +const Title = styled.h1` + font-size: 24px; + font-weight: 600; + color: #333; +`; + +const HighlightedText = styled.span` + color: #007bff; +`; + +export const ButtonWrapper = styled.div` + padding: 24px; + background: white; +`; diff --git a/src/page/sign-in/index.tsx b/src/page/sign-in/index.tsx new file mode 100644 index 00000000..d167ae3e --- /dev/null +++ b/src/page/sign-in/index.tsx @@ -0,0 +1,42 @@ +import { CustomButton } from "../../components/global/CustomButton"; +import SocialLoginModal from "../../components/sign-in/SocialLoginModal/SocialLoginModal"; +import { useState } from "react"; +import { ButtonWrapper, ContentWrapper, PageWrapper } from "./index.styles"; +import { HighlightedText, Title } from "../intro/index.styles"; + +export default function SignIn() { + const [isModalVisible, setIsModalVisible] = useState(false); + + const handleGeneralSignUp = () => { + setIsModalVisible(true); + }; + + const handleCloseModal = () => { + setIsModalVisible(false); + }; + + return ( + + + + <HighlightedText>퓨티</HighlightedText> + 에 오신 것을 환영해요 + +
+ 퓨티는 반려견에게 딱! 맞는 관리를 위한 서비스예요 +
+
+ + + 일반 회원 가입 + + + 미용사 회원 가입 + + + {isModalVisible && ( + + )} +
+ ); +} \ No newline at end of file diff --git a/src/router.tsx b/src/router.tsx index 87723d5f..a8102dab 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -1,5 +1,7 @@ import { createBrowserRouter } from "react-router-dom"; import App from "./App"; +import Intro from "./page/intro"; +import SignIn from "./page/sign-in"; import SignUp from "./page/sign-up"; export const router = createBrowserRouter([ @@ -8,9 +10,17 @@ export const router = createBrowserRouter([ element: , children: [ { - path: "signup", + path: "sign-in", + element: + }, + { + path: "sign-up", element: , }, + { + path: "intro", + element: + } ], }, ]);