본문으로 건너뛰기
피드백 / status-banner

StatusBanner

폼/영역 옆에 고정되는 동적 상태 전이 알림 — SR 자동 발화.
피드백status-bannerStatic specimenstatus bannerstatus-banner상태 배너inline
01 · Specimen

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

폼/영역 옆에 고정되는 동적 상태 전이 알림 — SR 자동 발화.

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

저장됨·차단됨·분할 중·에러 같은 *동적* 상태 전이를 inline 한 자리에 알린다. Callout(정적 안내, role="note")과 달리 <output> 루트에 role="status"/"alert" 를 부여해 스크린리더가 자동 발화한다 — error/blocked 는 assertive(alert), 나머지는 polite(status). variant 가 좌측 4px accent bar 색과 기본 아이콘(✓/⊘/⋯/ⓘ/⚠/✕)을 정하고, autoHideMs 로 N ms 후 자동 unmount, dismissible 로 수동 닫기를 켠다. Toast(우상단 floating 스택)와 달리 폼 바로 아래 등 제자리에 머문다.

02 · Use

예제

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

01저장됨(polite, 2초 후 자동 사라짐)tsxfragment
저장됨(polite, 2초 후 자동 사라짐)
import { StatusBanner } from "@axe/ui";<StatusBanner variant="saved" title="저장됨" autoHideMs={2000} />
02에러(assertive, 수동 닫기)tsxfragment
에러(assertive, 수동 닫기)
import { StatusBanner } from "@axe/ui";<StatusBanner  variant="error"  title="차단됨"  description="tail-mass 가 책 P90 을 초과합니다."  dismissible  onDismiss={clearError}/>
03CSS-only (비-React)htmlfragment
CSS-only (비-React)
<output class="axe-status-banner axe-status-banner--error" role="alert">  <span class="axe-status-banner__icon" aria-hidden="true">✕</span>  <div class="axe-status-banner__body">    <div class="axe-status-banner__title">차단됨</div>    <div class="axe-status-banner__description">tail-mass 가 책 P90 을 초과합니다.</div>  </div></output>
03 · React

Props

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

이름타입필수기본값설명
variant"saved" | "blocked" | "splitting" | "info" | "success" | "warning" | "error"필수상태 종류 — 좌측 bar 색·기본 아이콘·발화 강도를 결정. error/blocked 는 assertive(alert), 그 외 polite(status).
titleReact.ReactNode굵은 제목 줄(.axe-status-banner__title). 있을 때만 렌더. HTMLAttributes 의 title 은 이 prop 으로 대체.
descriptionReact.ReactNode보조 설명(.axe-status-banner__description). 있을 때만 렌더.
dismissiblebooleantrue 면 우측에 닫기(✕) 버튼을 표시 — 클릭 시 unmount + onDismiss 호출.
onDismiss() => void수동 닫기(✕) 클릭 시 호출.
autoHideMsnumber지정 시 N ms 후 자동 unmount(+ onAutoHide). 미지정이면 영구 표시.
onAutoHide() => voidautoHideMs 로 자동 사라질 때 호출.
childrenReact.ReactNodetitle/description 아래 body 안에 추가로 렌더(예: 액션 버튼).
...restOmit<React.HTMLAttributes<HTMLOutputElement>, "title">className 병합, 나머지는 루트 <output> 으로 전파.
04 · Any stack

.axe-* 클래스 계약

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

클래스안정성용도
.axe-status-bannerstable루트 <output> — flex row·subtle 배경·좌측 4px bar·enter 애니메이션.
.axe-status-banner__iconstable좌측 아이콘 박스(20px, aria-hidden). variant 색 상속.
.axe-status-banner__bodystable제목+설명+children 컨테이너(flex 1).
.axe-status-banner__titlestable굵은 제목 줄(semibold).
.axe-status-banner__descriptionstable설명 문단(secondary).
.axe-status-banner__dismissstable우측 닫기(✕) 버튼 — focus-visible outline.
.axe-status-banner--savedstablesaved 변형 — success bar + success-soft 배경.
.axe-status-banner--successstablesuccess 변형 — success bar + success-soft 배경.
.axe-status-banner--splittingstablesplitting 변형 — warning bar + 아이콘 회전(spin).
.axe-status-banner--warningstablewarning 변형 — warning bar + warning-soft 배경.
.axe-status-banner--blockedstableblocked 변형 — danger bar + danger-soft 배경.
.axe-status-banner--errorstableerror 변형 — danger bar + danger-soft 배경.
.axe-status-banner--infostableinfo 변형 — accent bar + accent-soft 배경.
비-React 소비 노트
정적 마크업은 순수 CSS 로 재현 가능하나 role(error/blocked→alert, 그 외→status)을 직접 부여해야 하고, autoHideMs/dismissible/가시성 토글은 React 전용이라 CSS-only 로는 재현 불가. 스타일(chat-ext.css)은 components.css 가 @import 하므로 별도 로드 불요.
05 · Inclusive

접근성

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

Keyboard
  • dismissible 버튼은 네이티브 <button> — Enter/Space 로 닫기
ARIA

루트가 <output> 이며 error/blocked 는 role="alert"(암묵적 aria-live="assertive"+atomic), 그 외는 role="status"(암묵적 polite). aria-live 를 명시로 중복 부여하지 않는다(일부 SR 이중 발화 방지). 아이콘은 aria-hidden, 닫기 버튼 aria-label="닫기".

Notes

prefers-reduced-motion 시 등장 애니메이션과 splitting 아이콘 회전이 정지. autoHideMs 는 setTimeout 기반이라 언마운트로만 사라지며(가시성 토글 아님), 되돌리려면 재마운트.

06 · Judgment

권장 · 지양

권장
  • 동적 상태 전이(저장/차단/실패)에 쓰고, 사용자 행동을 즉시 막는 실패에만 error/blocked(assertive).
  • 성공 통지는 autoHideMs 로 잠깐 띄우고 자동 정리.
지양
  • 정적 페이지 안내는 StatusBanner 로 하지 말 것 — 그건 Callout(role="note").
  • 우상단 floating 스택 통지에 쓰지 말 것 — 그건 Toast.
검색창을 열면 컴포넌트 인덱스를 불러옵니다.