본문으로 건너뛰기
ODS

Button

사용자의 행동을 실행하는 기본 인터랙션 컴포넌트예요. 크기·스타일·상태 조합으로 다양한 맥락을 지원해요. 순수 표현 컴포넌트라 서버 컴포넌트(RSC)에서도 바로 쓸 수 있어요.

사용법

tsx
import { Button } from '@openiot/ui'

export function Example() {
  return <Button variant="primary" size="md">버튼</Button>
}

Variant

5가지 스타일·톤. 기본값은 primary 예요.

tsx
<Button variant="primary">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="destructive">Destructive</Button>

Size

sm(32) · md(40) · lg(48). 기본값은 md.

아이콘

아이콘은 children 으로 배치해요. 아이콘만 쓰면 iconOnly 로 정사각 버튼을 만들고 aria-label 을 꼭 넣어요.

tsx
<Button>
  <Icon icon={Plus} size={18} /> 추가
</Button>

<Button iconOnly aria-label="추가">
  <Icon icon={Plus} size={18} />
</Button>

Loading

loading 은 스피너를 표시하고 버튼을 자동으로 비활성화해요.

상태

Hover·Pressed 는 interaction 오버레이로 표현돼요(마우스를 올려보세요). Disabled 는 회색으로 바뀌어요.

asChild (링크처럼)

asChild<Link>·<a> 를 버튼 스타일로 렌더해요.

Props

PropTypeDefault설명
variant'primary' | 'secondary' | 'outline' | 'ghost' | 'destructive''primary'스타일·톤 (Filled·Mono·Outlined·Ghost·Danger)
size'sm' | 'md' | 'lg''md'높이 32 / 40 / 48px
loadingbooleanfalse스피너 표시 + 자동 비활성화
iconOnlybooleanfalse아이콘만 있는 정사각 버튼
asChildbooleanfalseRadix Slot 으로 자식(예: <Link>)에 스타일 위임
disabledboolean네이티브 비활성
...propsButtonHTMLAttributes<HTMLButtonElement>나머지 모든 네이티브 button 속성