diff --git a/src/assets/icons/ab-logo.svg b/src/assets/icons/ab-logo.svg new file mode 100644 index 0000000..0a5495f --- /dev/null +++ b/src/assets/icons/ab-logo.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/apple-login.svg b/src/assets/icons/apple-login.svg deleted file mode 100644 index fbf3c24..0000000 --- a/src/assets/icons/apple-login.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/apple.svg b/src/assets/icons/apple.svg new file mode 100644 index 0000000..ec2ec43 --- /dev/null +++ b/src/assets/icons/apple.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/src/assets/icons/google-login.svg b/src/assets/icons/google-login.svg deleted file mode 100644 index 113056f..0000000 --- a/src/assets/icons/google-login.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/assets/icons/google.svg b/src/assets/icons/google.svg new file mode 100644 index 0000000..0829b36 --- /dev/null +++ b/src/assets/icons/google.svg @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/icons/index.ts b/src/assets/icons/index.ts index 6d6353c..7181bbf 100644 --- a/src/assets/icons/index.ts +++ b/src/assets/icons/index.ts @@ -1,10 +1,11 @@ +import ABLogoIcon from './ab-logo.svg?react'; import ABIcon from './ab.svg?react'; import AlarmIcon from './alarm-default.svg?react'; import NewAlarmIcon from './alarm-new.svg?react'; -import AppleLoginIcon from './apple-login.svg?react'; -import GoogleLoginIcon from './google-login.svg?react'; +import AppleIcon from './apple.svg?react'; +import GoogleIcon from './google.svg?react'; import SelectedHomeIcon from './home-selected.svg?react'; -import KakaoLoginIcon from './kakao-login.svg?react'; +import KakaoIcon from './kakao.svg?react'; import LeftDoubleArrowIcon from './left-double-arrow.svg?react'; import MeatballIcon from './meatball.svg?react'; import PlusBoxIcon from './plus-box.svg?react'; @@ -14,18 +15,19 @@ import RightDoubleArrowIcon from './right-double-arrow.svg?react'; import WriteBoxIcon from './write-box.svg?react'; export { - SelectedHomeIcon, ABIcon, - PlusBoxIcon, - WriteBoxIcon, - ProfileIcon, + ABLogoIcon, AlarmIcon, + AppleIcon, + GoogleIcon, + KakaoIcon, + LeftDoubleArrowIcon, + MeatballIcon, NewAlarmIcon, + PlusBoxIcon, + ProfileIcon, RightChevronIcon, - KakaoLoginIcon, - AppleLoginIcon, - GoogleLoginIcon, - LeftDoubleArrowIcon, RightDoubleArrowIcon, - MeatballIcon, + SelectedHomeIcon, + WriteBoxIcon, }; diff --git a/src/assets/icons/kakao-login.svg b/src/assets/icons/kakao-login.svg deleted file mode 100644 index 01481e5..0000000 --- a/src/assets/icons/kakao-login.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/assets/icons/kakao.svg b/src/assets/icons/kakao.svg new file mode 100644 index 0000000..d4fa6d9 --- /dev/null +++ b/src/assets/icons/kakao.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/components/commons/Flex/Flex.tsx b/src/components/commons/Flex/Flex.tsx new file mode 100644 index 0000000..1da5aa4 --- /dev/null +++ b/src/components/commons/Flex/Flex.tsx @@ -0,0 +1,68 @@ +import React from 'react'; +import styled, { css } from 'styled-components'; + +interface FlexProps { + justifyContent?: React.CSSProperties['justifyContent']; + alignItems?: React.CSSProperties['alignItems']; + gap?: React.CSSProperties['gap']; + padding?: React.CSSProperties['padding']; + margin?: React.CSSProperties['margin']; + borderRadius?: React.CSSProperties['borderRadius']; + children: React.ReactNode; +} + +export const Row = (props: FlexProps) => { + const { children, justifyContent = 'space-between', alignItems = 'center', ...rest } = props; + + return ( + + {children} + + ); +}; + +export const Col = (props: FlexProps) => { + const { children, justifyContent = 'space-between', alignItems = 'center', ...rest } = props; + + return ( + + {children} + + ); +}; + +interface StyledFlexProps extends Omit { + flexDirection: React.CSSProperties['flexDirection']; +} + +const Flex = styled.div` + display: flex; + flex-direction: ${(props) => props.flexDirection}; + align-items: ${(props) => props.alignItems}; + justify-content: ${(props) => props.justifyContent}; + ${({ gap }) => + gap && + css` + gap: ${gap}; + `} + ${({ padding }) => + padding && + css` + padding: ${padding}; + `} + ${({ margin }) => + margin && + css` + margin: ${margin}; + `} + ${({ borderRadius }) => + borderRadius && + css` + border-radius: ${borderRadius}; + `} +`; diff --git a/src/components/commons/Layout/Layout.styles.tsx b/src/components/commons/Layout/Layout.styles.tsx index 7f3e3b4..6461b97 100644 --- a/src/components/commons/Layout/Layout.styles.tsx +++ b/src/components/commons/Layout/Layout.styles.tsx @@ -8,7 +8,6 @@ export const Main = styled.main` height: 100vh; margin: 0 auto; overflow-y: scroll; - background-color: #fff; &::-webkit-scrollbar { display: none; diff --git a/src/components/commons/Text/Text.tsx b/src/components/commons/Text/Text.tsx index 93d2e5c..6c81943 100644 --- a/src/components/commons/Text/Text.tsx +++ b/src/components/commons/Text/Text.tsx @@ -2,13 +2,14 @@ import React from 'react'; import styled, { css } from 'styled-components'; export interface TextProps { + size: number; + children: React.ReactNode; tagName?: keyof JSX.IntrinsicElements; - color?: React.CSSProperties['color']; weight?: React.CSSProperties['fontWeight']; - size?: number; + color?: React.CSSProperties['color']; align?: React.CSSProperties['textAlign']; lineHeight?: React.CSSProperties['lineHeight']; - children: React.ReactNode; + noWrap?: boolean; } const getFontSize = (sizeInPx: number) => `${sizeInPx / 10}rem`; @@ -18,8 +19,9 @@ const Text = React.memo((props: TextProps) => { tagName = 'div', color = '#ffffff', align = 'start', - lineHeight = 'normal', - weight, + lineHeight = '140%', + noWrap = false, + weight = 400, size, children, } = props; @@ -32,6 +34,7 @@ const Text = React.memo((props: TextProps) => { size={size} align={align} lineHeight={lineHeight} + noWrap={noWrap} > {children} @@ -39,7 +42,6 @@ const Text = React.memo((props: TextProps) => { }); const Tag = styled.div` - line-height: 140%; ${({ lineHeight }) => lineHeight && css` @@ -65,6 +67,11 @@ const Tag = styled.div` css` font-size: ${getFontSize(size)}; `} + ${({ noWrap }) => + noWrap && + css` + white-space: nowrap; + `} `; export default Text; diff --git a/src/routes/Auth/login/Login.styles.tsx b/src/routes/Auth/login/Login.styles.tsx index 0d70dbe..117693d 100644 --- a/src/routes/Auth/login/Login.styles.tsx +++ b/src/routes/Auth/login/Login.styles.tsx @@ -5,19 +5,33 @@ export const Container = styled.div` background-color: ${(props) => props.theme.colors.navy}; `; -export const LoginButtonContainer = styled.button` +export const LogoContainer = styled.div` + display: flex; + justify-content: center; + padding-top: 118px; + padding-bottom: 35px; +`; + +export const Divider = styled.div` + width: 100%; + height: 1px; + background-color: ${(props) => props.theme.colors.white_60}; +`; + +export const LoginButtonContainer = styled.div` position: absolute; - bottom: 150px; + bottom: 104px; display: flex; flex-direction: column; - gap: 15px; + gap: 17px; justify-content: flex-end; width: 100%; + padding: 0 20px; cursor: pointer; `; export const LoginButton = styled.button` width: 100%; - height: 57px; cursor: pointer; + border-radius: 10px; `; diff --git a/src/routes/Auth/login/Login.tsx b/src/routes/Auth/login/Login.tsx index b4be034..2024e21 100644 --- a/src/routes/Auth/login/Login.tsx +++ b/src/routes/Auth/login/Login.tsx @@ -1,8 +1,20 @@ -import React, { useState } from 'react'; +import React from 'react'; -import { AppleLoginIcon, GoogleLoginIcon, KakaoLoginIcon } from '@icons/index'; +import { Row } from '@components/commons/Flex/Flex'; +import Layout from '@components/commons/Layout/Layout'; +import Text from '@components/commons/Text/Text'; -import { Container, LoginButton, LoginButtonContainer } from './Login.styles'; +import { colors } from '@styles/theme'; + +import { ABLogoIcon, AppleIcon, GoogleIcon, KakaoIcon } from '@icons/index'; + +import { + Container, + Divider, + LoginButton, + LoginButtonContainer, + LogoContainer, +} from './Login.styles'; const Login = () => { const KakaoRestApiKey = import.meta.env.VITE_KAKAO_OAUTH_KEY; @@ -22,19 +34,55 @@ const Login = () => { }; return ( - - - - - - - - - - - - - + + +
+ + + + + 세상의 모든 질문, +
AB로 답하다 +
+
+ + + + + 간편 가입하기 + + + + + + + + 카카오로 계속하기 + +
+ + + + + + + 구글로 계속하기 + +
+ + + + + + + 애플로 계속하기 + +
+ + + + + ); }; export default Login; diff --git a/src/routes/index.tsx b/src/routes/index.tsx index cf5c95f..a61963d 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -1,8 +1,6 @@ import React from 'react'; import { RouteObject, RouterProvider, createBrowserRouter } from 'react-router-dom'; -import Layout from '@components/commons/Layout/Layout'; - import GoogleLogin from './Auth/google/GoogleLogin'; import KakaoLogin from './Auth/kakao/KakaoLogin'; import Login from './Auth/login/Login';