Toast
잠깐 떴다 사라지는 알림이다. 사용자의 행동을 요구하지 않는다. 결정을 요구한다면 Confirm 을 쓴다.
import { Toast, ToastHost, useToast } from "@nui-kit/react";
// 서브패스로 좁힐 때
import { Toast } from "@nui-kit/react/toast";
import "@nui-kit/react/styles/toast.css"; // 온디맨드일 때// app/layout.tsx 를 ToastHost 로 감싼 뒤
const toast = useToast();
toast.open({ message: "저장되었습니다." });기본
toast.open({ message: "저장되었습니다." });기본 지속시간 2400ms
지속시간
toast.open({ message: "저장 실패", tone: "error", duration: 0 });duration — 0 이하면 자동으로 닫히지 않는다
여러 개 쌓기
토스트는 스택으로 쌓이고 아래에서 위로 정렬된다. closeAll() 로 한 번에 닫을 수 있다.
// ToastHost 를 앱 최상단에 한 번 놓는다
<ToastHost>{children}</ToastHost>스택 동작
접근성
tone="default"→role="status"+aria-live="polite"— 읽던 것을 끊지 않는다tone="error"→role="alert"+aria-live="assertive"— 즉시 읽힌다- 토스트 레이어는
pointer-events: none이라 뒤 화면 조작을 막지 않는다. 카드 자체만 클릭을 받는다
토스트는 포커스를 가져가지 않는다. 반드시 읽혀야 하는 내용이라면 토스트 대신
Alert 을 쓴다 — 사라져 버리면 놓친다.커스터마이징
색은 컴포넌트별로 열지 않는다. 배경만 바꾸면 글자가 따라오지 않아 대비가 깨진다. className 으로 배경과 글자를 함께 지정한다.
Toast 는 border 를 쓰지 않으므로 두께 변수도 없다 — 안 쓰는 변수는 죽은 토큰이 된다.
| 컴포넌트 | 변수 | 기본값 | 비고 |
|---|---|---|---|
| Toast | --nui-toast--radius | var(--nui-radius-2) | — |
| --nui-toast--width | min(100%, 26.25rem) | — |
API
| 이름 | 타입 | 기본값 | 설명 |
|---|---|---|---|
message * | ReactNode | — | — |
open * | boolean | — | — |
className | string | — | — |
duration | number | — | 자동으로 닫히기까지의 시간(ms). 0 이하면 자동으로 닫히지 않는다 |
onExited | () => void | — | — |
onOpenComplete | () => void | — | — |
onRequestClose | () => void | — | — |
tone | ToastTone | — | — |
ToastProps 에서 자동 생성됨 (components/Toast/Toast.types.ts).