Tabs

Tabs

같은 맥락의 콘텐츠를 탭으로 전환하는 클라이언트 컴포넌트입니다. 라인·카드·필 스킨, 균등 분할·네비 스크롤 레이아웃, 아이콘·배지를 지원합니다.

기본 (라인)

tabs_line이 기본 스킨입니다. role="tablist" · role="tab" · role="tabpanel"과 aria-selected, aria-controls로 접근성을 보장하며 방향키·Home·End 키로 탭을 전환합니다.

동적 패널

mode="dynamic"은 탭 메뉴만 나열하고 패널은 하나입니다. 탭 클릭 시 panel 내용이 전환됩니다.

프로젝트 개요와 목표를 설명하는 영역입니다.

TabMenu로 선언한 동적 패널 — 활동

슬라이드 인디케이터

indicator="slide"로 선택 탭 아래(또는 pill 배경) 인디케이터가 부드럽게 이동합니다. line·pill 스킨과 조합합니다.

균등 분할

layout="equal"로 탭 바 전체 너비에 탭을 균등 분할합니다. 라벨이 길면 말줄임됩니다.

네비 스크롤

layout="scroll"은 탭이 넘칠 때 좌·우 버튼으로 스크롤합니다. 넘치지 않으면 버튼이 숨겨집니다.

카드

tabs_card로 카드형 탭과 패널을 연결합니다. 폼·설정 화면에 적합합니다.

tabs_pill로 세그먼트 컨트롤 형태의 탭을 만듭니다. 뷰 전환·필터에 사용합니다.

크기

tabs_sm · tabs_lg로 탭 바 스케일을 조절합니다.

아이콘

tabs_icon으로 탭 앞에 아이콘을 배치합니다.

배지

탭 버튼에 배지를 넣어 알림 수·상태를 표시합니다.

추가 액션

tabs_extra로 탭 바 오른쪽에 버튼·링크 등 보조 액션을 배치합니다.

스크롤바

scrollable과 layout="auto"를 함께 쓰면 스크롤바가 표시됩니다. 버튼 네비게이션은 layout="scroll"을 사용하세요.

비활성

disabled 속성 또는 is-disabled 클래스로 탭을 비활성화합니다.

수직

tabs_vertical로 사이드바 형태의 탭을 구성합니다. 라인·카드 스킨과 조합할 수 있습니다.

API · Tabs Props

Prop타입기본값설명
mode'panels' | 'dynamic'panelspanels: 탭별 패널 · dynamic: 단일 패널 콘텐츠 전환
valuestring | numbermode=dynamic 선택 탭 key (제어)
defaultValuestring | numbermode=dynamic 초기 선택 탭 key (비제어)
onChange(key: string) => void탭 전환 콜백
variant'line' | 'card' | 'pill'linetabs_line · tabs_card · tabs_pill
indicator'static' | 'slide'staticline·pill 인디케이터. slide는 선택 탭으로 이동 애니메이션
layout'auto' | 'equal' | 'scroll'autoauto: 콘텐츠 너비 · equal: 100% 균등 분할 · scroll: 좌우 네비 스크롤
size'sm' | 'md' | 'lg'mdtabs_sm · tabs_lg
verticalbooleanfalsetabs_vertical
scrollablebooleanfalselayout=auto일 때 가로 스크롤바 표시 (tabs_scrollable)
ariaLabelstringtablist aria-label. vertical에 따라 aria-orientation 자동 설정
itemsArray<{ key?, label, content?, active?, disabled? }>선언적 탭. panels: content로 패널 생성 · dynamic: label만 사용
extraReactNode탭 바 우측 영역 (tabs_extra)
panelReactNode | Functionmode=dynamic 단일 패널 본문
childrenReactNodeTabPanel · TabMenu 나열 (items prop 대체)
classNamestring루트 요소 추가 클래스
ripplebooleantrue클릭 파장(ripple). true 시 자식 클릭 표면에 data-ripple · false 시 data-no-ripple으로 하위 전체 비활성

API · TabPanel Props

Prop타입기본값설명
labelstring탭 버튼 텍스트 (필수)
activebooleanfalse초기 선택 탭
disabledbooleanfalseis-disabled
iconReactNode탭 버튼 아이콘
badgeReactNode탭 버튼 배지
childrenReactNode패널 본문 (tabs_panel)

API · TabMenu Props

Prop타입기본값설명
labelstring탭 버튼 텍스트 (필수)
valuestringmode=dynamic value / onChange key
activebooleanfalse초기 선택 탭
disabledbooleanfalseis-disabled

API · Tabs Children

Prop / Children설명
childrenTabPanel · TabMenu 나열
extra탭 바 우측 (tabs_extra)
panelmode=dynamic 패널 렌더 함수/노드

API · TabPanel Children

Prop / Children설명
children패널 본문
icon탭 버튼 아이콘
badge탭 버튼 배지

API · TabMenu Children

Prop / Children설명
icon탭 버튼 아이콘
badge탭 버튼 배지

클래스 · 속성

React 컴포넌트가 렌더하는 OOCSS 클래스입니다. HTML 마크업으로 직접 작성할 때 동일하게 조합합니다.

클래스설명
tabs · tabs_bar · tabs_list · tabs_tab루트·탭 바·목록·탭 버튼
tabs_label · tabs_extra · tabs_panels · tabs_panel라벨·추가·패널 영역
tabs_line · tabs_card · tabs_pill스타일 변형
tabs_indicator-slide슬라이드 인디케이터 (indicator="slide")
tabs_indicator이동하는 인디케이터 요소
tabs_equal · tabs_scroll-nav · tabs_dynamic균등 분할·네비 스크롤·동적 패널
tabs_list-wrap · tabs_scroll-viewport · tabs_nav목록 래퍼·스크롤 뷰포트·좌우 네비 버튼
tabs_sm · tabs_lg · tabs_vertical · tabs_scrollable크기·레이아웃
is-active · is-disabled탭·패널 상태
data-tabs키보드·포커스 동작 식별자
role="tablist" · role="tab" · role="tabpanel"접근성
data-ripple클릭 파장 활성. data-ripple="surface"는 절대 위치 보조 버튼용
data-ripple="false"해당 요소 ripple 비활성
data-no-ripple하위 전체 ripple 비활성

디자인 토큰

토큰기본값설명
--tabs-gap · --tabs-padding탭 간격·패딩
--tabs-nav-size네비 스크롤 버튼 크기
--tabs-indicator-height · --tabs-indicator-transitionline 변형 인디케이터·슬라이드 전환
--tabs-panel-padding패널 패딩