File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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 ;
Original file line number Diff line number Diff line change 1+ import type { PropsWithChildren } from 'react' ;
2+ import * as s from './style.css' ;
3+
4+ interface Props extends PropsWithChildren {
5+ color ?: 'gray' | 'main' ;
6+ onClick ?: ( ) => void ;
7+ }
8+ const Chip = ( { children, color = 'gray' , onClick } : Props ) => {
9+ return (
10+ < div className = { s . Container ( { color } ) } onClick = { onClick } >
11+ { children }
12+ </ div >
13+ ) ;
14+ } ;
15+ export default Chip ;
Original file line number Diff line number Diff line change 1+ import { cva } from '@styled-system/css' ;
2+
3+ export const Container = cva ( {
4+ base : {
5+ padding : '0.5rem 0.75rem' ,
6+ display : 'flex' ,
7+ alignItems : 'center' ,
8+ justifyContent : 'center' ,
9+ gap : '0.25rem' ,
10+ rounded : 'full' ,
11+ width : 'fit-content' ,
12+ fontSize : '0.875rem' ,
13+ fontWeight : 400 ,
14+ cursor : 'pointer' ,
15+ } ,
16+ variants : {
17+ color : {
18+ main : {
19+ backgroundColor : 'main-26' ,
20+ border : '1px solid' ,
21+ borderColor : 'main-54' ,
22+ color : '100' ,
23+ } ,
24+ gray : {
25+ backgroundColor : 'systemGray5' ,
26+ color : '80' ,
27+ } ,
28+ } ,
29+ } ,
30+ } ) ;
Original file line number Diff line number Diff line change 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 ;
Original file line number Diff line number Diff line change 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+ } ) ;
Original file line number Diff line number Diff line change 1- import { useFlow } from '@/libs/routes/stack ' ;
1+ import { useState } from 'react ' ;
22import type { ActivityComponentType } from '@stackflow/react' ;
3+ import { useFlow } from '@/libs/routes/stack' ;
34
45// CSS 사용하는 컴포넌트에서는 이런 식으로 불러오기
56import * as s from './style.css' ;
67
78import AppScreenWithSafeArea from '@/common/components/AppScreenWithSafeArea' ;
9+ import Chip from '@/common/components/Chip' ;
10+ import SelectButton from '@/common/components/SelectButton' ;
811import TestAPIButton from '@/common/components/TestAPIButton' ;
912
1013const HomePage : ActivityComponentType = ( ) => {
1114 const { push } = useFlow ( ) ;
15+ const [ active , setActive ] = useState ( false ) ;
1216 return (
1317 < AppScreenWithSafeArea >
1418 < h1 className = { s . Title } > 리피카 짱</ h1 >
@@ -20,6 +24,10 @@ const HomePage: ActivityComponentType = () => {
2024 < TestAPIButton />
2125 < button onClick = { ( ) => push ( 'PostPage' , { } ) } > 이동</ button >
2226 </ div >
27+ < Chip color = "main" > 축구</ Chip >
28+ < SelectButton active = { active } onClick = { ( ) => setActive ( ! active ) } >
29+ 종목
30+ </ SelectButton >
2331 </ AppScreenWithSafeArea >
2432 ) ;
2533} ;
You can’t perform that action at this time.
0 commit comments