본문으로 건너뛰기

ProgressLinear

진행률을 가로 막대로 표시합니다. 세 가지 progress 컴포넌트 중 가장 널리 쓰이는 형태입니다.

tsx
import { ProgressLinear } from 'neba';

<ProgressLinear value={64} label="에셋 업로드 중" showValue />
<ProgressLinear />

Props

Prop타입기본값설명
valuenumber | nullnullmin과 max 사이의 진행도. null(기본값)은 진행도를 아직 모르는 상태이며, 빈 막대가 아니라 미정 표시로 그려집니다
minnumber0범위의 시작
maxnumber100범위의 끝
size공통'xs' | 'sm' | 'md' | 'lg' | 'xl''md'홈의 두께. 막대에서 크기를 가지는 것은 이것뿐입니다
color공통'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info''primary'의미론적 색 역할
labelReactNode무엇을 기다리는지. 값과 함께 스크린 리더가 읽습니다
showValuebooleanfalse도형 옆에 값을 글자로 보여 줍니다. format이 없으면 범위에 대한 백분율입니다
formatIntl.NumberFormatOptions값을 어떻게 쓸지. 없으면 min…max에 대한 백분율, 설명되지 않은 범위에서 유일하게 성립하는 표기입니다
thicknessnumber홈의 두께를 픽셀로 직접 정합니다. size는 옆에 붙는 글자 크기를 계속 맡습니다

<div>의 native 속성은 root로 전달됩니다. colorchildren만 위 표와 이름이 겹쳐 제외됩니다.

value의 기본값은 null이며, 진행률을 알 수 없는 indeterminate 상태를 뜻합니다. 짧은 조각이 막대 위를 반복해 지나갑니다. 0을 주면 "아직 아무것도 진행되지 않음"이라는 다른 의미가 되므로 구분해서 쓰세요.

예시

size

thickness

size는 라이브러리의 사다리 위 한 단계이고, thickness는 픽셀 값입니다. 페이지가 그 숫자 하나를 위해 존재할 때 쓰는 prop입니다. 바뀌는 것은 홈의 두께뿐이고, 옆에 붙는 라벨의 타입 스케일은 size가 계속 맡습니다.

tsx
<ProgressLinear value={62} thickness={12} />

min · max · format

표시되는 백분율은 100이 아니라 minmax 구간에 대한 비율입니다. showValue로 값을 옆에 띄우고, formatIntl.NumberFormat 옵션을 주면 바이트나 파일 수, 금액처럼 숫자 자체를 보여 줄 수 있습니다.

모션 줄이기

prefers-reduced-motion에서도 indeterminate 애니메이션이 멈추지는 않습니다. 대신 지나가던 조각이 사라지고 막대 전체가 색으로 맥동합니다.

접근성

  • role="progressbar"와 값·범위 속성이 적용되고, indeterminate일 때는 aria-valuenow가 빠집니다.
  • label이 accessible name이 되고, aria-valuetext는 화면에 표시된 값과 같은 내용을 전달합니다.

Released under the MIT License