Skip to content

Commit 3cd6ff2

Browse files
committed
feat: 언어 선택기 및 로그인 버튼 컴포넌트 추가
1 parent ad3afcf commit 3cd6ff2

File tree

5 files changed

+77
-16
lines changed

5 files changed

+77
-16
lines changed

emotion.d.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
import "@emotion/react";
22
import { Theme as MuiTheme } from "@mui/material/styles";
33

4+
declare module "@mui/material/styles" {
5+
interface PaletteColor {
6+
nonFocus?: string;
7+
}
8+
interface SimplePaletteColorOptions {
9+
nonFocus?: string;
10+
}
11+
}
12+
413
declare module "@emotion/react" {
514
export interface Theme extends MuiTheme {}
615
}

src/components/layout/Header/index.tsx

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import styled from "@emotion/styled";
22
import { useMenu } from "../../../hooks/useMenu";
3+
import LanguageSelector from "../LanguageSelector";
4+
import LoginButton from "../LoginButton";
35

46
interface SubMenuItem {
57
text: string;
@@ -71,17 +73,8 @@ export default function Header({ menus }: HeaderProps) {
7173
</HeaderNav>
7274
</nav>
7375
<HeaderLeft>
74-
<HeaderItem>
75-
<img
76-
src="src/assets/langIcon.png"
77-
width={25}
78-
height={25}
79-
alt="langIcon"
80-
/>
81-
<span>KO</span>
82-
<span>EN</span>
83-
</HeaderItem>
84-
<div>로그인</div>
76+
<LanguageSelector />
77+
<LoginButton />
8578
</HeaderLeft>
8679
</HeaderContainer>
8780
);
@@ -133,11 +126,11 @@ const HeaderLeft = styled.div`
133126
gap: 1.125rem;
134127
`;
135128

136-
const HeaderItem = styled.div`
137-
display: flex;
138-
align-items: center;
139-
gap: 0.625rem;
140-
`;
129+
// const HeaderItem = styled.div`
130+
// display: flex;
131+
// align-items: center;
132+
// gap: 0.625rem;
133+
// `;
141134

142135
const SubMenu = styled.ul`
143136
position: absolute;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import styled from "@emotion/styled";
2+
import { useState } from "react";
3+
4+
export default function LanguageSelector() {
5+
const [selectedLang, setSelectedLang] = useState<"KO" | "EN">("KO");
6+
7+
return (
8+
<LanguageContainer>
9+
<img
10+
src="src/assets/langIcon.png"
11+
width={25}
12+
height={25}
13+
alt="langIcon"
14+
/>
15+
<LanguageItem
16+
isSelected={selectedLang === "KO"}
17+
onClick={() => setSelectedLang("KO")}
18+
>
19+
KO
20+
</LanguageItem>
21+
<LanguageItem
22+
isSelected={selectedLang === "EN"}
23+
onClick={() => setSelectedLang("EN")}
24+
>
25+
EN
26+
</LanguageItem>
27+
</LanguageContainer>
28+
);
29+
}
30+
31+
const LanguageContainer = styled.div`
32+
display: flex;
33+
align-items: center;
34+
gap: 0.6rem;
35+
`;
36+
37+
const LanguageItem = styled.div<{ isSelected: boolean }>`
38+
cursor: pointer;
39+
color: ${({ isSelected, theme }) =>
40+
isSelected ? theme.palette.primary.dark : theme.palette.primary.nonFocus};
41+
transition: color 0.2s ease;
42+
`;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import styled from "@emotion/styled";
2+
3+
export default function LoginButton() {
4+
return <LoginButtonStyled>로그인</LoginButtonStyled>;
5+
}
6+
7+
const LoginButtonStyled = styled.button`
8+
background: none;
9+
border: none;
10+
color: ${({ theme }) => theme.palette.primary.dark};
11+
font-size: 0.875rem;
12+
font-weight: 500;
13+
cursor: pointer;
14+
padding: 0;
15+
transition: color 0.2s ease;
16+
`;

src/styles/globalStyles.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const muiTheme = createTheme({
1111
main: "#259299",
1212
light: "#B6D8D7",
1313
dark: "#126D7F",
14+
nonFocus: "#7AB2B3",
1415
},
1516
secondary: {
1617
main: "#259299",

0 commit comments

Comments
 (0)