Tabs · Docs

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

Components

Tabs

Docs

API 사용가이드입니다. 변형·프리뷰는 Overview를 참고하세요.

API

탭은 Tabs · TabsList · TabsTrigger · TabsContent 합성 컴포넌트로 구성합니다. variant는 Tabs에 지정하면 자식에게 전달됩니다. Trigger마다 className으로 너비·아이콘 등을 자유롭게 제어할 수 있습니다.

import {
  Tabs,
  TabsList,
  TabsTrigger,
  TabsContent,
} from "@/components/tabs";

<Tabs defaultValue="account" variant="outlined" className="w-full">
  <TabsList>
    <TabsTrigger value="account">계정</TabsTrigger>
    <TabsTrigger value="password">비밀번호</TabsTrigger>
  </TabsList>
  <TabsContent value="account">계정 정보를 수정합니다.</TabsContent>
  <TabsContent value="password">비밀번호를 변경합니다.</TabsContent>
</Tabs>

{/* 활성 색 + hover/pressed 커스텀 */}
<TabsTrigger
  value="billing"
  className="hover:bg-emerald-100 active:bg-emerald-200 active:text-emerald-800"
  selectedClassName="data-[state=active]:bg-emerald-50 data-[state=active]:text-emerald-700 data-[state=active]:border-emerald-500"
>
  결제
</TabsTrigger>

Props

NameTypeDefaultDescription
Tabs.variant
"outlined" | "underlined" | "solid" | "chip""outlined"탭 그룹 시각 스타일. Context로 List·Trigger에 전달됩니다.
Tabs.value
string제어 모드 활성 탭 value. onValueChange와 함께 사용합니다.
Tabs.defaultValue
string비제어 초기 활성 탭.
TabsTrigger.valueRequired
string탭 식별자. 같은 value의 TabsContent와 연결됩니다.
TabsTrigger.selectedClassName
string선택 탭 스타일. data-[state=active]:… 유틸로 전달. 있으면 기본 primary 선택을 대체합니다.
TabsTrigger.disabled
boolean탭을 비활성화하고 키보드 이동에서 건너뜁니다.
TabsContent.valueRequired
string표시 조건이 되는 탭 식별자. Trigger.value와 일치시킵니다.
className
string각 컴포넌트에 추가 클래스. Trigger에 flex-1(동일 너비), hover:bg-… · active:bg-…(hover/pressed 커스텀), List에 overflow-x-auto(가로 스크롤) 등을 조합합니다.

Events

NameSignatureDescription
onValueChange(value: string) => void활성 탭이 바뀔 때 호출됩니다. (Tabs에 지정)

Notes

  • 소비 앱 필수: React 19, Tailwind CSS v4, ClaBi tokens.css(+ @theme 매핑), clsx, @radix-ui/react-tabs.
  • clsx 패키지가 필수입니다. className 병합에 import { clsx } from "clsx" 를 사용합니다.
  • 내부적으로 @radix-ui/react-tabs를 사용합니다. 소비 앱에도 해당 패키지가 필요합니다.
  • 상태 공유·화살표 키 이동·Home/End·disabled 건너뛰기·aria 연결은 Radix가 처리합니다.
  • TabsTrigger·TabsContent는 반드시 Tabs 안에 두고, 같은 value로 짝지어 사용하세요.