Design System
  • Home
  • Components
  • Tokens
  • Guidelines
  • Button

    Button 컴포넌트는 다양한 variant와 size 옵션을 통해 버튼의 스타일을 변경할 수 있는 React 컴포넌트입니다. Radix UI의 Slot 기능을 활용하여 구현되었습니다.

    • 다양한 스타일 옵션을 제공합니다
    • 접근성을 고려한 설계를 제공합니다
    • 여러 크기 옵션을 지원합니다

    Installation

    이 컴포넌트를 사용하려면 아래 명령어를 통해 패키지를 설치합니다.

    npx @jongh/cli add button

    Usage

    Button 컴포넌트는 다양한 variant와 size 옵션을 제공하여 버튼을 쉽게 스타일링할 수 있습니다.

    Props

    기본적인 HTML button 태그의 모든 속성을 지원하며, 추가로 다음 Props를 제공합니다:

    • variant ("default" | "destructive" | "outline" | "secondary" | "ghost" | "link"): 버튼의 시각적 스타일을 설정합니다. 기본값: "default"
    • size ("default" | "sm" | "lg" | "icon"): 버튼의 크기를 설정합니다. 기본값: "default"
    • asChild (boolean): true일 경우, 버튼의 스타일을 자식 요소에 적용합니다. Radix UI의 Slot 패턴을 사용합니다. 기본값: false

    Variant

    variant prop은 버튼의 스타일을 설정합니다. 다음 옵션이 있습니다:

    • default: 기본 스타일, 주요 작업을 위한 버튼입니다.
    • destructive: 위험/경고를 나타내는 버튼입니다.
    • outline: 테두리만 있는 버튼입니다.
    • secondary: 보조 작업을 위한 버튼입니다.
    • ghost: 배경색이 없는 버튼으로, 호버 시에만 배경이 표시됩니다.
    • link: 링크 스타일 버튼으로, 텍스트와 같은 모양입니다.

    Size

    size prop은 버튼의 크기를 설정합니다:

    • default: 기본 크기입니다.
    • sm: 작은 크기로, 공간이 제한된 UI에 적합합니다.
    • lg: 큰 크기로, 강조가 필요한 버튼에 적합합니다.
    • icon: 아이콘 버튼으로, 너비와 높이가 동일합니다.

    Accessibility

    Button 컴포넌트는 기본적으로 HTML button 요소를 사용하여 키보드 접근성과 스크린 리더 호환성을 제공합니다.

    • 기본적으로 키보드의 Enter 또는 Space 키로 활성화할 수 있습니다.
    • 적절한 role="button"이 설정되어 있습니다.
    • disabled 속성 사용 시 적절한 시각적/기능적 비활성화가 적용됩니다.

    Example

    기본 사용 예시

    import { Button } from "@/components/button"
    
    const ButtonExample = () => (
      <div>
        <Button variant="default">Primary Button</Button>
        <Button variant="destructive">Destructive Button</Button>
        <Button variant="outline">Outline Button</Button>
        <Button variant="secondary">Secondary Button</Button>
        <Button variant="ghost">Ghost Button</Button>
        <Button variant="link">Link Button</Button>
      </div>
    )

    다양한 크기 예시

    import { Button } from "@/components/button"
    
    const ButtonSizeExample = () => (
      <div>
        <Button size="default">Default Size</Button>
        <Button size="sm">Small Size</Button>
        <Button size="lg">Large Size</Button>
        <Button size="icon">Icon</Button>
      </div>
    )

    asChild 사용 예시

    import { Button } from "@/components/button"
    import { Link } from "react-router-dom"
    
    const ButtonAsChildExample = () => (
      <Button asChild variant="link">
        <Link to="/dashboard">Dashboard로 이동</Link>
      </Button>
    )

    더 자세한 내용

    Radix UI의 Slot 패턴에 대한 자세한 내용은 Radix UI Slot 공식 문서를 참조하세요.