Radio · Docs

스토리북 개발자들을 위한 내부 문서

Components

Radio

Docs

Radio API 사용가이드입니다. 조합 예시는 Overview를 참고하세요.

API

RadioGroup · Radio · RadioItem을 조합합니다. size는 medium(기본) · large. 레이블은 RadioItem children 또는 @/components/label의 Label(htmlFor)과 조합합니다.

import { RadioGroup, Radio, RadioItem } from "@/components/radio";
import { Label } from "@/components/label";

{/* RadioItem — 레이블 포함 · size 기본 medium */}
<RadioGroup
  name="plan"
  defaultValue="free"
  className="flex flex-col gap-[var(--padding-12)]"
>
  <RadioItem value="free">Free</RadioItem>
  <RadioItem value="pro">Pro</RadioItem>
</RadioGroup>

{/* large */}
<RadioGroup
  name="plan-lg"
  size="large"
  defaultValue="free"
  className="flex flex-col gap-[var(--padding-12)]"
>
  <RadioItem value="free">Free</RadioItem>
  <RadioItem value="pro">Pro</RadioItem>
</RadioGroup>

{/* Radio + Label — htmlFor로 연결 */}
<RadioGroup
  name="theme"
  defaultValue="light"
  className="flex flex-col gap-[var(--padding-12)]"
>
  <div className="flex items-center gap-[var(--gap-8)]">
    <Radio id="theme-light" value="light" />
    <Label htmlFor="theme-light">Light</Label>
  </div>
  <div className="flex items-center gap-[var(--gap-8)]">
    <Radio id="theme-dark" value="dark" />
    <Label htmlFor="theme-dark">Dark</Label>
  </div>
</RadioGroup>

Props

NameTypeDefaultDescription
Radio.valueRequired
string옵션 값. native value와 동일합니다.
RadioGroup.value
string제어 모드 선택값. 있으면 checked로 제어합니다. onValueChange와 함께 사용합니다.
RadioGroup.defaultValue
string비제어 초기 선택값. 해당 value Radio에 defaultChecked를 연결합니다 (native와 동일).
RadioGroup.name
string폼 제출 시 필드 키. native name과 동일합니다. 생략 시 자동 생성.
RadioGroup.size
"medium" | "large""medium"컨트롤 크기. medium 16px · large 20px. 개별 Radio/RadioItem size가 있으면 그쪽이 우선합니다.
RadioGroup.disabled
boolean그룹 전체 비활성화. 자식 Radio에 disabled를 전달합니다.
RadioGroup.className
string레이아웃용. 예: flex flex-col gap-… / flex flex-row flex-wrap gap-…
Radio.size
"medium" | "large""medium"개별 크기. 미전달 시 그룹 size(또는 medium).
Radio.defaultChecked
boolean비제어 초기 선택. 그룹 defaultValue 대신 개별 Radio에 직접 줄 수 있습니다.
Radio.checked
boolean제어 모드 선택. 단독 사용 시 native checked와 동일합니다.
Radio.disabled
boolean개별 비활성화. disabled만이면 Disabled(미선택), 선택 후 disabled면 Selected + Disabled.
Radio.required
booleannative required. Overview는 제출 시 앱 검증(FieldError) 데모를 보여 줍니다.
RadioItem
Radio + labelRadio와 children 레이블을 한 줄로 묶습니다. itemClassName으로 래퍼를 조정합니다.
Label (from @/components/label)
native <label>htmlFor로 Radio id와 연결합니다. Radio 패키지와 분리되어 있어 단독 import합니다.

Events

NameSignatureDescription
RadioGroup.onValueChange(value: string) => void선택값이 바뀔 때 호출됩니다. 제어/비제어 모두에서 사용 가능합니다.
Radio.onChange(event: ChangeEvent<HTMLInputElement>) => voidnative onChange. 그룹 사용 시에도 함께 호출됩니다.

Notes

  • 소비 앱 필수: React 19, Tailwind CSS v4, ClaBi tokens.css(+ @theme 매핑), clsx.
  • clsx 패키지가 필수입니다. className 병합에 import { clsx } from "clsx" 를 사용합니다.
  • native <input type="radio"> 기반입니다. value가 없으면 비제어(defaultValue/defaultChecked), 있으면 제어입니다.
  • size는 medium(기본) · large입니다. 반응형(md:) 크기 전환은 없습니다. className에 size-* / w-* / h-*가 있으면 그 크기가 우선합니다.
  • disabled만이면 Disabled(미선택). Selected + Disabled는 defaultValue(또는 checked)로 선택한 뒤 disabled합니다.
  • Label은 @/components/label입니다. radio 폴더는 label에 의존하지 않습니다.