Toggle · Docs

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

Components

Toggle

Docs

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

API

단일 Toggle 스위치입니다. value · defaultValue · onValueChange는 boolean이며 true=On, false=Off입니다. Select/Radio의 value/onValueChange 패턴과 동일합니다.

import { Toggle } from "@/components/toggle";
import { Label } from "@/components/label";

const [enabled, setEnabled] = useState(false);

{/* 비제어 — defaultValue true = 초기 On. 좌·우 레이블 없음 */}
<Toggle defaultValue name="notify" />

{/* 상단 타이틀 — Label + htmlFor 권장 */}
<div className="flex flex-col gap-[var(--gap-8)]">
  <Label htmlFor="marketing">마케팅 알림</Label>
  <Toggle id="marketing" name="marketing" />
</div>

{/* 좌·우 레이블 — 필요할 때만 전달 */}
<Toggle
  value={enabled}
  onValueChange={setEnabled}
  onLabel="On"
  offLabel="Off"
/>

{/* 크기 — medium(기본) 32/16 · large 50/24 */}
<Toggle size="medium" defaultValue />
<Toggle size="large" defaultValue />

{/* On 색 커스텀 — Pagination selectedClassName과 동일 */}
<Toggle defaultValue selectedClassName="bg-emerald-500" />
<Toggle defaultValue selectedClassName="bg-[var(--status-success)]" />
<Toggle defaultValue selectedClassName="bg-[#10b981]" />
<Toggle defaultValue selectedClassName="bg-[rgba(239,68,68,0.9)]" />

{/* Disabled — disabled만 (기본 Off) */}
<Toggle disabled />

{/* Selected + Disabled — defaultValue + disabled */}
<Toggle defaultValue disabled />

Props

NameTypeDefaultDescription
size
"medium" | "large""medium"스위치 크기. medium은 트랙 너비 32·썸 16×16, large는 트랙 너비 50·썸 24×24.
value
boolean제어 모드 상태. true = On, false = Off. onValueChange와 함께 사용합니다.
selectedClassName
stringOn일 때 트랙 className. 미전달 시 primary. Tailwind·토큰·arbitrary(hex/rgba) 모두 가능. Pagination selectedClassName과 동일 패턴.
disabled
boolean비활성화. disabled만이면 Disabled(Off). defaultValue와 함께면 Selected + Disabled(muted).
name
string폼 제출 시 필드 키.
inputValue
string"on"폼 제출 문자열(켜졌을 때만). boolean value와 구분해 사용합니다.
onLabel / offLabel
ReactNode좌·우 레이블. 미전달 시 표시하지 않습니다. 상단 타이틀은 Label 컴포넌트(+ htmlFor)를 권장합니다.
showLabels
booleantruefalse면 onLabel/offLabel이 있어도 좌·우 레이블을 숨깁니다. 전달된 레이블만 표시하는 것이 기본입니다.
className
string루트(label) 추가 클래스. 레이아웃용 (예: mr-auto).

Events

NameSignatureDescription
onValueChange(value: boolean) => void상태가 바뀔 때 호출됩니다. true = On, false = Off.
onChange(event: ChangeEvent<HTMLInputElement>) => voidnative checkbox onChange (필요 시).

Notes

  • 소비 앱 필수: React 19, Tailwind CSS v4, ClaBi tokens.css(+ @theme 매핑), clsx.
  • clsx 패키지가 필수입니다. className 병합에 import { clsx } from "clsx" 를 사용합니다.
  • value/defaultValue/onValueChange의 boolean은 true=On, false=Off입니다.
  • size 기본값은 medium(트랙 32 · 썸 16). large는 트랙 50 · 썸 24입니다.
  • 좌·우 onLabel/offLabel은 기본 없음. 상단 타이틀은 @/components/label 의 Label + htmlFor를 권장합니다.
  • On 색 기본은 primary. 커스텀은 selectedClassName(bg-emerald-500 · bg-[var(--…)] · bg-[#hex] · bg-[rgba(…)]).
  • disabled만이면 Disabled(Off). Selected + Disabled는 defaultValue + disabled입니다 (Checkbox/Radio와 동일).
  • native <input type="checkbox" role="switch"> 기반입니다.