Alert Dialog
사용자의 확인이 반드시 필요한 경우 강력한 표현 및 경고 수단으로 활용하는 컴포넌트예요.
Dialog
작업 수행, 정보 조회, 폼 입력처럼 사용자가 콘텐츠와 상호작용해야 한다면 Dialog를 사용해요.
설치
pnpm dlx shadcn@latest add https://rebar.conmarket-landing.workers.dev/r/alert-dialog.jsonradix-ui, class-variance-authority 를 설치하고, Action Button 을 먼저 추가한 뒤 아래 코드를 components/ui/alert-dialog.tsx 에 복사해요.
Anatomy
Alert Dialog는 Backdrop(Overlay)와 Dialog Content가 결합된 형태로 하나의 컴포넌트로 제공돼요.
- Backdrop: 뒤쪽 화면을 어둡게 처리해 시선을 Dialog에 모아요.
- Header: 제목(Title)과 설명(Description)으로 구성돼요.
- Footer: 액션 버튼(Action, Cancel)이 배치돼요.
<AlertDialog>
<AlertDialogTrigger />
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle />
<AlertDialogDescription />
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel />
<AlertDialogAction />
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>Properties
Layout
Action Button 가로 배열을 기본으로 제공해요. 버튼 라벨이 길어 한 줄에 들어가지 않으면 자동으로 세로 배열로 전환돼요(layout="responsive"). 처음부터 세로로 쌓으려면 layout="vertical" 을 사용해요.
Show Title
상황에 따라서 제목을 표시하지 않을 수 있어요. 이때도 스크린 리더가 Dialog의 목적을 알 수 있도록 AlertDialogTitle 에 sr-only 를 지정해 남겨 두는 것을 권장해요.
Single Action
확인만 필요한 안내라면 액션 버튼 하나만 배치할 수 있어요.
Controlled
Trigger 외의 방식으로 열고 닫으려면 open 과 onOpenChange 로 상태를 제어해요. AlertDialogAction 의 onClick 에서 event.preventDefault() 를 호출하면 Dialog가 닫히지 않아요.
Guidelines
알림 또는 확인이 필요한 상황에서 사용
Alert Dialog는 사용자가 반드시 알아야 할 정보나 옵션 선택이 필요한 경우 사용해요. 기본적으로 Neutral 사용을 권장하지만, 제품의 핵심 가치와 맞닿아 있는 정보를 안내하는 경우 Brand를 사용할 수 있어요.
경고가 필요한 상황에서 사용
데이터 삭제, 사용자가 작성한 내용이 지워질 수 있는 경우, 설정 초기화 등 사용자가 행동한 무언가가 유실될 수 있는 상황에서는 Critical로 표현해요. 경고가 필요한 액션을 의미하는 버튼이 Critical로 표시되어야 해요.
되돌릴 수 없는 액션을 의미하는 버튼에 Critical을 지정해요.
Critical Action Button은 경고가 필요한 액션에 지정되어야 해요.
긴 버튼 라벨을 사용하는 경우
긴 Action Button 라벨이 필요하거나 번역했을 때 의도치 않게 길어지는 경우 버튼 레이아웃이 넘칠 수 있어요.
Alert Dialog Footer는 Responsive-wrapping 컨테이너를 제공하기 때문에 정해진 로직에 따라 자동으로 레이아웃이 전환돼요. 두 버튼 중 하나라도 절반 너비를 넘으면 주요 액션이 위로 가도록 세로로 배치돼요.
Nonpreferred 레이아웃 사용하기 (사용 시 주의)
Primary Action Button과 Secondary Action Button 사이에 중요도 차이가 큰 경우 보조 액션을 Ghost 버튼으로 낮춘 레이아웃을 사용할 수 있어요.
중요도는 현재 맥락에서 강조가 필요한 정도를 기준으로 판단해야 해요. 다만 도메인마다 맥락이 다르기 때문에 자체적으로 판단이 필요해요. 무분별하게 사용하기보다는 경고보다 약한 강조의 의미로 사용해요.
임의로 다양한 콘텐츠를 조합하는 경우
Alert Dialog는 경고, 알림을 목적으로 표시되는 컴포넌트라서 사용처에서 임의로 수정하거나 변형해서 활용하는 것을 금지해요. 제공되는 구성(Header, Footer)과 속성을 그대로 사용해요.
제공되는 형태 그대로 사용하고 정렬을 항상 유지해요.
임의로 커스텀하거나 콘텐츠 정렬을 변경하지 마세요.
Alert Dialog vs. Menu Sheet
Alert Dialog와 Menu Sheet는 유사한 UI이지만, 사용 목적과 제공하는 기능에 차이가 있어요. Menu Sheet는 Alert Dialog와 달리 바깥을 탭하면 닫을 수 있어요.
| 구분 | Alert Dialog | Menu Sheet |
|---|---|---|
| 목적 | 반드시 선택이 필요, 되돌릴 수 없는 액션에 대한 안내 | 사용할 수 있는 여러 개의 메뉴와 액션을 제공 |
| 제공 액션 개수 | 2개 이하 (닫기 포함) | 2개 이상 (닫기 포함) |
| 액션 구성 | 양자택일 (삭제 여부 / 이탈 여부 등) | 여러 개로 구성 |
| 내용 표시 여부 | 액션에 대한 부연 설명이 반드시 필요 | 설명이 필요 없을 수 있음 |
| 표시 위치 | 화면 정중앙 | 화면 하단 |
| 닫기 액션 | 명시적인 닫기, 취소 등 버튼을 탭해야 닫힘 | 닫기 등의 버튼이나 바깥 영역을 탭해도 닫힘 |
Props
AlertDialog
Prop
Type
AlertDialogContent
Prop
Type
AlertDialogFooter
Prop
Type
AlertDialogAction · AlertDialogCancel
Action Button 의 모든 Props를 받아요. 누르면 Dialog가 닫혀요.
Prop
Type