RadioCard
RadioCard는 RadioGroup과 함께 사용하는 카드 형태의 라디오 버튼 컴포넌트입니다. 선택 가능한 옵션을 카드 UI로 표현하여 더 직관적인 사용자 경험을 제공합니다.import { HStack, RadioCard, RadioGroup } from '@vapor-ui/core';
export default function DefaultRadioCard() {
return (
<RadioGroup.Root name="themes">
<HStack gap="$100">
<RadioCard value="light">Light Theme</RadioCard>
<RadioCard value="dark">Dark Theme</RadioCard>
<RadioCard value="system" disabled>
System (Disabled)
</RadioCard>
</HStack>
</RadioGroup.Root>
);
}Property
Size
RadioCard의 크기를 설정합니다.
import { HStack, RadioCard, RadioGroup } from '@vapor-ui/core';
export default function RadioCardSize() {
return (
<div className="space-y-6">
<RadioGroup.Root name="size-md" size="md">
<RadioGroup.Label>Medium</RadioGroup.Label>
<HStack gap="$100">
<RadioCard value="md1">Medium Option 1</RadioCard>
<RadioCard value="md2">Medium Option 2</RadioCard>
</HStack>
</RadioGroup.Root>
<RadioGroup.Root name="size-lg" size="lg">
<RadioGroup.Label>Large</RadioGroup.Label>
<HStack gap="$100">
<RadioCard value="lg1">Large Option 1</RadioCard>
<RadioCard value="lg2">Large Option 2</RadioCard>
</HStack>
</RadioGroup.Root>
</div>
);
}Disabled
사용자가 상호작용할 수 없는 상태입니다. 액션을 수행하기 위한 특정 조건을 충족하지 않았거나 일시적으로 기능을 제한하려는 상황에서 사용합니다.
import { HStack, RadioCard, RadioGroup } from '@vapor-ui/core';
export default function RadioCardDisabled() {
return (
<div className="space-y-6">
<RadioGroup.Root name="disabled-group" disabled>
<RadioGroup.Label>전체 그룹 비활성화</RadioGroup.Label>
<HStack gap="$100">
<RadioCard value="option1">Option 1</RadioCard>
<RadioCard value="option2">Option 2</RadioCard>
<RadioCard value="option3">Option 3</RadioCard>
</HStack>
</RadioGroup.Root>
<RadioGroup.Root name="individual-disabled">
<RadioGroup.Label>개별 카드 비활성화</RadioGroup.Label>
<HStack gap="$100">
<RadioCard value="enabled1">Enabled Option</RadioCard>
<RadioCard value="disabled1" disabled>
Disabled Option
</RadioCard>
<RadioCard value="enabled2">Another Enabled Option</RadioCard>
</HStack>
</RadioGroup.Root>
</div>
);
}Read Only
읽기 전용 상태로, 사용자가 값을 변경할 수 없지만 현재 선택된 상태를 확인할 수 있습니다.
import { HStack, RadioCard, RadioGroup } from '@vapor-ui/core';
export default function RadioCardReadonly() {
return (
<div className="space-y-6">
<RadioGroup.Root name="readonly-group" readOnly defaultValue="selected">
<RadioGroup.Label>읽기 전용 상태</RadioGroup.Label>
<HStack gap="$100">
<RadioCard value="unselected">Unselected Option</RadioCard>
<RadioCard value="selected">Selected Option (Read Only)</RadioCard>
<RadioCard value="another">Another Option</RadioCard>
</HStack>
</RadioGroup.Root>
<RadioGroup.Root name="normal-group" defaultValue="selected-normal">
<RadioGroup.Label>일반 상태 (비교용)</RadioGroup.Label>
<HStack gap="$100">
<RadioCard value="unselected-normal">Unselected Option</RadioCard>
<RadioCard value="selected-normal">Selected Option (Editable)</RadioCard>
<RadioCard value="another-normal">Another Option</RadioCard>
</HStack>
</RadioGroup.Root>
</div>
);
}Examples
Simple Usage
RadioGroup.Root와 함께 사용합니다.
import { useState } from 'react';
import { HStack, RadioCard, RadioGroup } from '@vapor-ui/core';
export default function RadioCardSimple() {
const [value, setValue] = useState('option1');
return (
<div className="space-y-4">
<p className="text-sm text-gray-600">선택된 값: {value}</p>
<RadioGroup.Root
name="simple-radio-card"
value={value}
onValueChange={(newValue) => setValue(newValue as string)}
>
<HStack gap="$100">
<RadioCard value="option1">First Option</RadioCard>
<RadioCard value="option2">Second Option</RadioCard>
<RadioCard value="option3">Third Option</RadioCard>
</HStack>
</RadioGroup.Root>
</div>
);
}Direction
VStack과 HStack을 사용하여 세로 및 가로 방향으로 배치합니다.
import { HStack, RadioCard, RadioGroup, VStack } from '@vapor-ui/core';
export default function RadioCardDirection() {
return (
<div className="space-y-6">
<RadioGroup.Root name="orientation-vertical">
<RadioGroup.Label>Vertical (기본값)</RadioGroup.Label>
<VStack gap="$100">
<RadioCard value="v1">Option 1</RadioCard>
<RadioCard value="v2">Option 2</RadioCard>
<RadioCard value="v3">Option 3</RadioCard>
</VStack>
</RadioGroup.Root>
<RadioGroup.Root name="orientation-horizontal">
<RadioGroup.Label>Horizontal</RadioGroup.Label>
<HStack gap="$100">
<RadioCard value="h1">Option 1</RadioCard>
<RadioCard value="h2">Option 2</RadioCard>
<RadioCard value="h3">Option 3</RadioCard>
</HStack>
</RadioGroup.Root>
</div>
);
}Props Table
RadioCard
Loading component documentation...