Collapse
접기/펼치기 가능한 섹션을 제공하는 접이식 패널 컴포넌트
개요
Collapse는 Foundation Accordion을 래핑하여 여러 CollapseItem을 감싸는 컨테이너입니다. 열린 아이템 상태를 value: string[] 배열로 제어하며, 다중 열기와 아코디언(단일 열기) 모드를 모두 지원합니다.
주요 특징
- ✅ 다중/단일 열기: accordion prop으로 한 번에 하나의 아이템만 열리도록 제한
- ✅ Controlled/Uncontrolled: value·defaultValue·onChange로 열림 상태 제어
- ✅ 아이콘 위치: iconPosition으로 화살표 아이콘 좌/우 배치
- ✅ 아이콘 전용 토글: arrowOnly로 화살표 클릭 시에만 접기/펼치기 동작
- ✅ 개별 제어: 아이템별 disabled·visible 지원
- ✅ 디자인 토큰: Foundation Accordion 토큰 시스템 호환
기본 사용
Collapse 안에 CollapseItem을 배치하고 defaultValue로 초기 열림 아이템을 지정합니다. 기본은 다중 열기 모드입니다.
Preview
섹션 A의 내용입니다.
아코디언 모드
accordion을 true로 설정하면 한 번에 하나의 아이템만 열립니다.
Preview
A 내용
열림 상태 제어 (Controlled)
value와 onChange로 열린 아이템을 외부에서 제어합니다. 외부 조건에 따라 아이템을 자동으로 열거나 닫을 수 있습니다.
Preview
아이콘 위치
iconPosition으로 접기/펼치기 화살표 아이콘의 위치를 지정합니다. 기본값은 "right"입니다.
Preview
아이콘 전용 토글 (arrowOnly)
arrowOnly를 true로 설정하면 제목 클릭은 무시되고 화살표 아이콘 클릭 시에만 토글됩니다.
Preview
제목 클릭은 무시됩니다
비활성 아이템
disabled인 아이템은 클릭이 동작하지 않고 비활성 스타일이 적용됩니다.
Preview
API Reference
Collapse Props
| Prop | Type | Default | Description |
|---|---|---|---|
value | string[] | - | 열린 아이템 키 목록 (controlled) |
defaultValue | string[] | - | 초기 열린 아이템 키 목록 (uncontrolled) |
accordion | boolean | false | true이면 한 번에 하나의 아이템만 열림 |
visible | boolean | true | 표시 여부 (false → 렌더 안 함) |
className | string | - | 컨테이너 CSS 클래스 |
style | CSSProperties | - | 인라인 스타일 |
children | ReactNode | - | CollapseItem 목록 |
CollapseItem Props
| Prop | Type | Default | Description |
|---|---|---|---|
itemKey | string | (필수) | 아이템 식별 키 (Collapse value에 사용) |
title | ReactNode | - | 헤더 제목 (ReactNode로 자유 구성 가능) |
iconPosition | "left" | "right" | "right" | 접기/펼치기 화살표 아이콘 위치 |
arrowOnly | boolean | false | true이면 화살표 아이콘 클릭 시에만 토글 |
disabled | boolean | - | 비활성화 (클릭 무시 + 비활성 스타일) |
visible | boolean | true | 표시 여부 (false → 해당 아이템 렌더 안 함) |
className | string | - | 아이템 컨테이너 CSS 클래스 |
triggerClassName | string | - | 헤더(트리거) CSS 클래스 |
contentClassName | string | - | 본문 콘텐츠 CSS 클래스 |
children | ReactNode | - | 본문 콘텐츠 |
Events
| Event | Type | Description |
|---|---|---|
onChange | (value: string[]) => void | 열린 아이템 상태 변경 콜백 |
접근성
권장 사항
- ✅ 트리거가 button +
aria-expanded로 노출됨 (Foundation Accordion 제공) - ✅ disabled 아이템 트리거에
aria-disabled자동 적용 - ✅ arrowOnly 모드의 화살표 트리거에
aria-label자동 제공 - ❌ 아이템 제목 없이 본문만 제공하지 않기 (헤더가 토글 진입점)
관련 컴포넌트
- Foundation Accordion: 기본 Accordion 컴포넌트
- Tabs: 콘텐츠 영역 전환 탭 컴포넌트
Last updated on