본문으로 건너뛰기
피드백 / progress

Progress

측정 가능한 비동기 작업의 진척 바 — determinate / indeterminate.
피드백progressInteractiveprogress진행률진척progressbar
01 · Specimen

먼저 보고, 그다음 계약을 읽습니다

측정 가능한 비동기 작업의 진척 바 — determinate / indeterminate.

Workbench 불러오는 중…
Component intent의도와 경계 읽기

value 가 숫자면 0~max 사이 채움(translateX 로 indicator 이동), null 이면 indeterminate 로 좌→우 sweep 애니메이션(진척률 모름). variant 로 결과 색(success/danger)을 표현해 4-state 의 완료/실패도 같은 바로 시각화한다. Radix Progress 래퍼라 role/aria-value* 가 자동으로 붙는다. multi-step agent(예: 18섹션 IC 메모 7/18)·파일 업로드·배치 작업에 쓴다.

02 · Use

예제

SSOT에 등록된 실제 API 기준 snippet입니다. standalone 배지만 독립 실행 단위이며, fragment는 주변 state·handler 문맥을 생략합니다.

01determinate (7/18)tsxfragment
determinate (7/18)
import { Progress } from "@axe/ui";<Progress value={7} max={18} aria-label="IC 메모 생성 진척" />
02indeterminate + 결과 색tsxfragment
indeterminate + 결과 색
import { Progress } from "@axe/ui";export function Example() {  return (    <>      {/* 진척률 모름 (sweep) */}      <Progress value={null} aria-label="토큰 갱신 중" />      {/* 완료/실패 결과 색 */}      <Progress value={100} variant="success" aria-label="완료" />      <Progress value={40} variant="danger" aria-label="중단됨" />    </>  );}
03CSS-only (비-React, 60%)htmlfragment
CSS-only (비-React, 60%)
<div class="axe-progress" role="progressbar"     aria-valuemin="0" aria-valuemax="100" aria-valuenow="60"     aria-label="업로드 진척">  <div class="axe-progress__indicator" style="transform: translateX(-40%)"></div></div>
03 · React

Props

TSX 소스가 진실입니다. 주요 export 컴포넌트의 public API만 노출합니다.

이름타입필수기본값설명
valuenumber | nullnull0 ~ max 진척값. null 이면 indeterminate(sweep). 범위를 벗어나면 0~max 로 clamp.
maxnumber100분모(진척의 100% 기준).
variant"default" | "success" | "danger""default"indicator 색. default=--accent · success=--success · danger=--danger.
...restOmit<React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>, "value">className 병합, 나머지는 Radix Progress.Root(루트 div)로 전파 — 접근 이름을 위한 aria-label/aria-labelledby 등을 여기로 넘긴다.
04 · Any stack

.axe-* 클래스 계약

React 밖에서도 같은 표면을 그리는 공개 계약입니다. stable은 minor 버전 안에서 이름을 바꾸지 않습니다.

클래스안정성용도
.axe-progressstable트랙 루트 — 높이 6px·subtle 배경·pill radius·overflow hidden.
.axe-progress__indicatorstable채움 바 — accent 배경, translateX 로 진척 표현(transition).
.axe-progress--successstablesuccess 변형 — indicator = --success.
.axe-progress--dangerstabledanger 변형 — indicator = --danger.
.axe-progress--indeterminatestableindeterminate 변형 — indicator 를 33% 폭 sweep 으로 전환.
비-React 소비 노트
순수 CSS 로 재현 가능 — .axe-progress + .axe-progress__indicator 에 인라인 transform: translateX(-(100-pct)%) 로 채우고, role/aria-value* 는 마크업에서 직접 부여한다. 스타일(indicators.css)은 components.css 가 @import 하므로 별도 로드 불요.
05 · Inclusive

접근성

키보드, ARIA, 구현 노트를 함께 검토합니다.

ARIA

Radix 가 role="progressbar" + aria-valuemin=0 · aria-valuemax=max · aria-valuenow(=value, indeterminate 면 생략) · aria-valuetext(기본 "N%", indeterminate 면 생략) · data-state(loading|complete|indeterminate)를 붙인다.

Notes

비대화 요소라 키보드 상호작용 없음. Radix 는 접근 이름을 자동 생성하지 않으므로 aria-label 또는 연결 라벨(aria-labelledby)을 반드시 준다. prefers-reduced-motion 시 indicator transition·sweep 정지(indeterminate 는 전체 폭 0.6 opacity 로 정적 표시).

06 · Judgment

권장 · 지양

권장
  • 진척률을 알면 determinate(value 숫자)로 — 사용자가 남은 양을 가늠하게 한다.
  • aria-label 등 접근 이름을 항상 준다(무엇의 진척인지).
지양
  • 진척률을 모르는데 determinate 로 가짜 퍼센트를 만들지 말 것 — value=null(indeterminate) 또는 Spinner.
  • variant 를 진행 중 장식으로 쓰지 말 것 — success/danger 는 실제 완료/실패 결과일 때만.
검색창을 열면 컴포넌트 인덱스를 불러옵니다.