# 컴포넌트 스펙 모든 컴포넌트는 `cn()` 유틸리티(`src/utils/cn.ts`)를 사용하고, CSS 변수 토큰을 통해 색상을 지정한다. --- ## Button ### 변형 (Variant) | Variant | 배경 | 텍스트 | 테두리 | 용도 | |---------|------|--------|--------|------| | `primary` | `--color-primary` | white | none | 주요 CTA | | `secondary` | `--color-secondary` | `--color-secondary-text` | none | 보조 액션 | | `accent` | `--color-accent` | `--color-accent-text` | none | 포인트 액션 | | `outline` | transparent | `--color-primary` | `--color-primary` | 조용한 강조 | | `ghost` | transparent | `--color-text-secondary` | none | 최소 강조 | | `danger` | `--color-danger` | white | none | 삭제, 경고 | ### 사이즈 | Size | padding | font-size | height | border-radius | |------|---------|-----------|--------|---------------| | `sm` | `px-3 py-1.5` | `text-sm` | 32px | `rounded-md` | | `md` | `px-4 py-2` | `text-base` | 40px | `rounded-lg` | | `lg` | `px-6 py-3` | `text-lg` | 48px | `rounded-lg` | ### 상태 - **disabled**: `opacity-50 cursor-not-allowed pointer-events-none` - **loading**: 스피너 아이콘 표시, 텍스트 유지, disabled 처리 - **hover**: 각 variant에 맞는 `-hover` 토큰 적용 - **active**: 각 variant에 맞는 `-active` 토큰 적용 - **focus-visible**: `ring-2 ring-[var(--color-primary)] ring-offset-2` ### 구현 예시 ```tsx const buttonVariants = { primary: 'bg-[var(--color-primary)] text-white hover:bg-[var(--color-primary-hover)] active:bg-[var(--color-primary-active)]', secondary: 'bg-[var(--color-secondary)] text-[var(--color-secondary-text)] hover:bg-[var(--color-secondary-hover)]', accent: 'bg-[var(--color-accent)] text-[var(--color-accent-text)] hover:bg-[var(--color-accent-hover)]', outline: 'border border-[var(--color-primary)] text-[var(--color-primary)] hover:bg-[var(--color-primary-subtle)]', ghost: 'text-[var(--color-text-secondary)] hover:bg-[var(--color-bg-surface)] hover:text-[var(--color-text-primary)]', danger: 'bg-[var(--color-danger)] text-white hover:opacity-90', }; ``` --- ## Badge 상태, 카테고리, 태그 표시에 사용한다. ### 변형 | Variant | 배경 | 텍스트 | |---------|------|--------| | `default` | `--color-bg-elevated` | `--color-text-primary` | | `primary` | `--color-primary-subtle` | `--color-primary-text` | | `success` | #DCFCE7 | #166534 | | `warning` | #FEF9C3 | #854D0E | | `danger` | #FEE2E2 | #991B1B | | `info` | #E0F2FE | #075985 | ### 스펙 - 패딩: `px-2 py-0.5` - 폰트: `text-xs font-medium` - 모양: `rounded-full` (pill) 또는 `rounded-md` (square) --- ## Card 콘텐츠를 담는 기본 컨테이너. ### 구조 ```html
부제목
도움말 텍스트