File tree Expand file tree Collapse file tree 3 files changed +132
-0
lines changed
packages/design-system/src/components Expand file tree Collapse file tree 3 files changed +132
-0
lines changed Original file line number Diff line number Diff line change 1+ import type { Meta , StoryObj } from '@storybook/react-vite' ;
2+ import Chip from './Chip' ;
3+
4+ const meta : Meta < typeof Chip > = {
5+ title : 'Components/Chip' ,
6+ component : Chip ,
7+ tags : [ 'autodocs' ] ,
8+ args : {
9+ category : 'Frontend' ,
10+ color : 'red' ,
11+ } ,
12+ argTypes : {
13+ category : {
14+ control : 'text' ,
15+ description : '칩에 표시할 텍스트' ,
16+ } ,
17+ color : {
18+ control : { type : 'select' } ,
19+ options : [
20+ 'red' ,
21+ 'purple' ,
22+ 'navyblue' ,
23+ 'skyblue' ,
24+ 'emerald' ,
25+ 'navygreen' ,
26+ 'khaki' ,
27+ 'orange' ,
28+ 'amber' ,
29+ 'maroon' ,
30+ ] ,
31+ description : '카테고리 색상' ,
32+ } ,
33+ } ,
34+ parameters : {
35+ layout : 'centered' ,
36+ docs : {
37+ description : {
38+ component :
39+ '카테고리를 색상별로 표시하는 Chip 컴포넌트. cva로 색상 variants를 스위칭합니다.' ,
40+ } ,
41+ } ,
42+ } ,
43+ } ;
44+
45+ export default meta ;
46+ type Story = StoryObj < typeof Chip > ;
47+
48+ export const Default : Story = { } ;
49+
50+ export const AllColors : Story = {
51+ args : { category : 'Category' } ,
52+ render : ( args ) => {
53+ const colors = [
54+ 'red' ,
55+ 'purple' ,
56+ 'navyblue' ,
57+ 'skyblue' ,
58+ 'emerald' ,
59+ 'navygreen' ,
60+ 'khaki' ,
61+ 'orange' ,
62+ 'amber' ,
63+ 'maroon' ,
64+ ] as const ;
65+
66+ return (
67+ < div style = { { display : 'grid' , gap : '8px' } } >
68+ { colors . map ( ( color ) => (
69+ < div
70+ key = { color }
71+ style = { { display : 'flex' , alignItems : 'center' , gap : 8 } }
72+ >
73+ < Chip { ...args } color = { color } />
74+ < code style = { { fontSize : 12 } } > { color } </ code >
75+ </ div >
76+ ) ) }
77+ </ div >
78+ ) ;
79+ } ,
80+ parameters : {
81+ docs : {
82+ description : { story : '팔레트 뷰: 모든 색상 변형을 한 번에 미리보기' } ,
83+ } ,
84+ } ,
85+ } ;
Original file line number Diff line number Diff line change 1+ import { cva } from 'class-variance-authority' ;
2+ type ChipColor =
3+ | 'red'
4+ | 'purple'
5+ | 'navyblue'
6+ | 'skyblue'
7+ | 'emerald'
8+ | 'navygreen'
9+ | 'khaki'
10+ | 'orange'
11+ | 'amber'
12+ | 'maroon' ;
13+
14+ interface ChipProps {
15+ color : ChipColor ;
16+ category : string ;
17+ }
18+ const ChipColorVariants = cva (
19+ 'caption2-sb rounded-[0.4rem] px-[0.8rem] py-[0.39rem]' ,
20+ {
21+ variants : {
22+ color : {
23+ red : 'bg-category-red-bg text-category-red-text' ,
24+ purple : 'bg-category-purple-bg text-category-purple-text' ,
25+ navyblue : 'bg-category-navyblue-bg text-category-navyblue-text' ,
26+ skyblue : 'bg-category-skyblue-bg text-category-skyblue-text' ,
27+ emerald : 'bg-category-emerald-bg text-category-emerald-text' ,
28+ navygreen : 'bg-category-navygreen-bg text-category-navygreen-text' ,
29+ khaki : 'bg-category-khaki-bg text-category-khaki-text' ,
30+ orange : 'bg-category-orange-bg text-category-orange-text' ,
31+ amber : 'bg-category-amber-bg text-category-amber-text' ,
32+ maroon : 'bg-category-maroon-bg text-category-maroon-text' ,
33+ } ,
34+ } ,
35+ defaultVariants : {
36+ color : 'red' ,
37+ } ,
38+ }
39+ ) ;
40+ const Chip = ( { color, category } : ChipProps ) => {
41+ return (
42+ < span className = { ChipColorVariants ( { color : color } ) } > { category } </ span >
43+ ) ;
44+ } ;
45+
46+ export default Chip ;
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ export { default as Button } from './button/Button';
22export { Switch } from './switch/Switch' ;
33export { default as Badge } from './badge/Badge' ;
44export { default as Input } from './input/Input' ;
5+ export { default as Chip } from './chip/Chip' ;
56export { default as Level } from './level/Level' ;
67export { Textarea } from './textarea/Textarea' ;
78export { Progress } from './progress/Progress' ;
You can’t perform that action at this time.
0 commit comments