Radio
단일 선택을 위한 라디오 버튼 컴포넌트입니다.
개요
Radio는 여러 옵션 중 하나만 선택할 수 있는 컴포넌트입니다. RadioGroup으로 묶어서 사용하며, 카드 스타일도 지원합니다.
주요 특징:
- 라디오 그룹
- 카드 스타일 라디오
- 3가지 Size (sm, md, lg)
- Disabled 상태
사용 사례:
- 결제 방법 선택
- 배송 옵션 선택
- 성별 선택
- 단일 옵션 선택
설치
npx @vortex/cli add radio-group --package foundation기본 사용법
import { RadioGroup, RadioGroupItem } from "@vortex/ui-foundation";
export default function Example() {
return (
<RadioGroup defaultValue="1">
<div className="flex items-center space-x-sm">
<RadioGroupItem value="1" id="r1" />
<label htmlFor="r1">옵션 1</label>
</div>
<div className="flex items-center space-x-sm">
<RadioGroupItem value="2" id="r2" />
<label htmlFor="r2">옵션 2</label>
</div>
</RadioGroup>
);
}Variants (변형)
기본 라디오
<RadioGroup value={value} onValueChange={setValue}>
<RadioGroupItem value="option1">옵션 1</RadioGroupItem>
<RadioGroupItem value="option2">옵션 2</RadioGroupItem>
<RadioGroupItem value="option3">옵션 3</RadioGroupItem>
</RadioGroup>카드 스타일
<RadioGroup value={value} onValueChange={setValue}>
<div className="border rounded-lg p-md cursor-pointer hover:bg-gray-50">
<RadioGroupItem value="card1" />
<h4>카드 옵션 1</h4>
<p className="text-sm text-gray-600">설명 텍스트</p>
</div>
<div className="border rounded-lg p-md cursor-pointer hover:bg-gray-50">
<RadioGroupItem value="card2" />
<h4>카드 옵션 2</h4>
<p className="text-sm text-gray-600">설명 텍스트</p>
</div>
</RadioGroup>Sizes (크기)
<RadioGroupItem size="sm" value="1">Small</RadioGroupItem>
<RadioGroupItem size="md" value="2">Medium</RadioGroupItem>
<RadioGroupItem size="lg" value="3">Large</RadioGroupItem>Props API
| Prop | Type | Default | Description |
|---|---|---|---|
| value | string | - | 선택된 값 |
| defaultValue | string | - | 기본 선택 값 |
| disabled | boolean | false | 비활성화 상태 |
| size | ’sm’ | ‘md’ | ‘lg' | 'md’ | 크기 |
| onValueChange | (value) => void | - | 값 변경 핸들러 |
| className | string | - | 추가 CSS 클래스 |
접근성
Radio 컴포넌트는 WCAG 2.1 AA 기준을 준수합니다.
ARIA 속성:
role="radio"(자동 적용)aria-checked(선택 상태)
키보드 네비게이션:
↑/↓: 이전/다음 옵션 선택Space: 현재 옵션 선택Tab: 다음 그룹으로 이동
예제
예제 1: 결제 방법 선택
export default function PaymentMethod() {
const [method, setMethod] = useState("card");
return (
<RadioGroup value={method} onValueChange={setMethod}>
<div className="space-y-md">
<div className="border rounded-lg p-md">
<RadioGroupItem value="card" id="card" />
<label htmlFor="card">신용카드</label>
</div>
<div className="border rounded-lg p-md">
<RadioGroupItem value="bank" id="bank" />
<label htmlFor="bank">계좌이체</label>
</div>
<div className="border rounded-lg p-md">
<RadioGroupItem value="mobile" id="mobile" />
<label htmlFor="mobile">휴대폰 결제</label>
</div>
</div>
</RadioGroup>
);
}관련 컴포넌트
Last updated on