Skip to Content

Timeline

시간 순서에 따라 항목을 카드 형태로 표시하는 타임라인 컴포넌트입니다.


개요

Timeline 컴포넌트는 Collapsible 영역 안에 시간순 카드 목록을 표시하며, 무한 스크롤로 추가 데이터를 로드할 수 있습니다.

주요 특징

  • 시간순 카드: 각 항목을 날짜·제목·내용 구조의 카드로 표시
  • 접기/펼치기: Collapsible 영역으로 콘텐츠 접기·펼치기 지원
  • 무한 스크롤: 스크롤 하단 도달 시 onLoadMore 콜백으로 추가 데이터 로드
  • 로딩 상태: loading prop으로 로딩 오버레이 표시
  • 빈 데이터 상태: 데이터가 없을 때 안내 메시지 표시
  • 영역별 스타일: timestampStyle, titleStyle, contentStyle로 커스터마이징

기본 사용

<Timeline>titleitems 배열을 전달합니다.

import { Timeline } from "@vortex/ui-cals" const items = [ { timestamp: "2025-06-20 14:30", title: "배포 완료", content: "v1.19.0 프로덕션 배포가 완료되었습니다." }, { timestamp: "2025-06-18 10:00", title: "QA 통과", content: "모든 테스트 케이스가 통과되었습니다." }, { timestamp: "2025-06-15 09:00", title: "개발 착수", content: "Timeline 컴포넌트 개발을 시작했습니다." }, ] <Timeline title="프로젝트 이력" items={items} />

빈 데이터 상태

items가 빈 배열이면 emptyText가 표시됩니다.

<Timeline title="빈 타임라인" items={[]} emptyText="조회 결과가 없습니다" />

로딩 상태

loading prop으로 로딩 인디케이터를 표시합니다.

<Timeline title="로딩 중" items={items} loading />

접기/펼치기

defaultCollapsed로 초기 접힘 상태를, collapseDisabled로 접기 잠금을 설정합니다.

{/* 초기 접힘 */} <Timeline title="기본 접힘" items={items} defaultCollapsed /> {/* 접기 잠금 (항상 열림) */} <Timeline title="접기 잠금" items={items} collapseDisabled />

무한 스크롤

onLoadMorehasMore를 사용하여 스크롤 하단 도달 시 추가 데이터를 로드합니다.

const [items, setItems] = useState(initialItems) const [hasMore, setHasMore] = useState(true) <Timeline title="무한 스크롤" items={items} hasMore={hasMore} onLoadMore={() => { fetchMore().then((newItems) => { setItems((prev) => [...prev, ...newItems]) if (newItems.length === 0) setHasMore(false) }) }} height="300px" />

영역별 스타일

timestampStyle, titleStyle, contentStyle로 각 영역의 폰트·색상을 커스터마이징합니다.

<Timeline title="커스텀 스타일" items={items} timestampStyle={{ color: "#6366f1", fontWeight: "bold" }} titleStyle={{ color: "#0f172a", fontSize: "1rem" }} contentStyle={{ fontStyle: "italic", color: "#64748b" }} />

API Reference

Props

PropTypeDefaultDescription
titlestring-Collapsible 헤더에 표시할 제목
itemsTimelineItem[][]타임라인 데이터 배열
loadingbooleanfalse로딩 상태 표시
hasMorebooleanfalse추가 데이터 존재 여부 (false면 무한 스크롤 중단)
pageSizenumber10한 번에 로드할 데이터 수 (정보성)
collapseDisabledbooleanfalse접기/펼치기 잠금
defaultCollapsedbooleanfalse초기 접힘 상태 (true=닫힘)
fullSizebooleanfalse부모 컨테이너 크기에 맞춤
visiblebooleantrue표시 여부 (false → 렌더 안 함)
heightstring | number'250px'스크롤 영역 높이
emptyTextstring'데이터가 없습니다'빈 상태 텍스트
backgroundColorstring-콘텐츠 영역 배경색
timestampStyleCSSProperties-날짜 영역 스타일
titleStyleCSSProperties-제목 영역 스타일
contentStyleCSSProperties-내용 영역 스타일
onLoadMore() => void-스크롤 하단 도달 시 추가 데이터 로드 콜백
classNamestring-컨테이너 CSS 클래스
styleCSSProperties-인라인 스타일

TimelineItem

FieldTypeRequiredDescription
timestampstring날짜/시간 문자열
titlestring제목
contentstring내용

접근성

권장 사항

  • ✅ 타임라인 항목이 ol > li 시맨틱 마크업으로 렌더링
  • ✅ Foundation Collapsible 활용으로 키보드 접근성(Enter/Space) 자동 지원
  • ✅ 접기/펼치기 트리거에 aria-expanded 자동 적용
Last updated on