Skip to content

Commit 432276f

Browse files
authored
Merge pull request #16 from DevKor-github/feat/#14/dropdown
feat: dropdown ๊ตฌํ˜„๊ตฌํ˜„
2 parents ce224cb + 466ff6d commit 432276f

5 files changed

Lines changed: 85 additions & 1 deletion

File tree

โ€Žsrc/assets/icons/Arrow.tsxโ€Ž

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const Arrow = () => {
2+
return (
3+
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="13" viewBox="0 0 12 13" fill="none">
4+
<path
5+
d="M10.0152 4.24986C9.89675 4.13147 9.73615 4.06496 9.5687 4.06496C9.40125 4.06496 9.24065 4.13147 9.12222 4.24986L5.99626 7.37582L2.8703 4.24986C2.75119 4.13482 2.59167 4.07117 2.42609 4.07261C2.26051 4.07405 2.10212 4.14046 1.98504 4.25755C1.86795 4.37464 1.80154 4.53303 1.8001 4.69861C1.79866 4.86419 1.86231 5.02371 1.97734 5.14281L5.54978 8.71525C5.66821 8.83364 5.82881 8.90015 5.99626 8.90015C6.16371 8.90015 6.32431 8.83364 6.44274 8.71525L10.0152 5.14281C10.1336 5.02438 10.2001 4.86379 10.2001 4.69633C10.2001 4.52888 10.1336 4.36828 10.0152 4.24986Z"
6+
fill="currentColor"
7+
/>
8+
</svg>
9+
);
10+
};
11+
export default Arrow;

โ€Žsrc/common/components/Chip/style.css.tsโ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const Container = cva({
1111
width: 'fit-content',
1212
fontSize: '0.875rem',
1313
fontWeight: 400,
14+
cursor: 'pointer',
1415
},
1516
variants: {
1617
color: {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { PropsWithChildren } from 'react';
2+
3+
import * as s from './style.css';
4+
import Arrow from '@/assets/icons/Arrow';
5+
6+
interface Props extends PropsWithChildren {
7+
active: boolean;
8+
onClick?: () => void;
9+
}
10+
11+
const SelectButton = ({ children, active, onClick }: Props) => {
12+
// TODO: ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ”๋€Œ๊ฒŒ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ถ”๊ฐ€
13+
return (
14+
<button className={s.Container({ color: active ? 'main' : 'gray' })} onClick={onClick}>
15+
{children}
16+
<div className={s.Icon({ direction: active ? 'up' : 'down' })}>
17+
<Arrow />
18+
</div>
19+
</button>
20+
);
21+
};
22+
export default SelectButton;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { cva } from '@styled-system/css';
2+
3+
export const Container = cva({
4+
base: {
5+
borderRadius: 'full',
6+
padding: '0.375rem 0.375rem 0.375rem 0.625rem',
7+
display: 'flex',
8+
alignItems: 'center',
9+
justifyContent: 'center',
10+
gap: '0.25rem',
11+
fontSize: '0.75rem',
12+
fontWeight: 500,
13+
cursor: 'pointer',
14+
color: '100',
15+
},
16+
variants: {
17+
color: {
18+
main: {
19+
border: '1px solid',
20+
borderColor: 'main-54',
21+
bgColor: 'main-26',
22+
},
23+
gray: {
24+
bgColor: 'systemGray5',
25+
},
26+
},
27+
},
28+
});
29+
30+
export const Icon = cva({
31+
base: {
32+
color: '54',
33+
},
34+
variants: {
35+
direction: {
36+
up: {
37+
transform: 'rotate(180deg)',
38+
},
39+
down: {
40+
transform: 'rotate(0deg)',
41+
},
42+
},
43+
},
44+
});

โ€Žsrc/pages/HomePage/index.tsxโ€Ž

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1-
import { useFlow } from '@/libs/routes/stack';
1+
import { useState } from 'react';
22
import type { ActivityComponentType } from '@stackflow/react';
3+
import { useFlow } from '@/libs/routes/stack';
34

45
// CSS ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
56
import * as s from './style.css';
67

78
import AppScreenWithSafeArea from '@/common/components/AppScreenWithSafeArea';
89
import Chip from '@/common/components/Chip';
10+
import SelectButton from '@/common/components/SelectButton';
911
import TestAPIButton from '@/common/components/TestAPIButton';
1012

1113
const HomePage: ActivityComponentType = () => {
1214
const { push } = useFlow();
15+
const [active, setActive] = useState(false);
1316
return (
1417
<AppScreenWithSafeArea>
1518
<h1 className={s.Title}>๋ฆฌํ”ผ์นด ์งฑ</h1>
@@ -22,6 +25,9 @@ const HomePage: ActivityComponentType = () => {
2225
<button onClick={() => push('PostPage', {})}>์ด๋™</button>
2326
</div>
2427
<Chip color="main">์ถ•๊ตฌ</Chip>
28+
<SelectButton active={active} onClick={() => setActive(!active)}>
29+
์ข…๋ชฉ
30+
</SelectButton>
2531
</AppScreenWithSafeArea>
2632
);
2733
};

0 commit comments

Comments
ย (0)