Dialog
모달 대화상자 컴포넌트입니다. 네이티브 <dialog> 기반으로 Esc 키와 백드롭 클릭으로 닫을 수 있습니다.
Import
import {
Dialog, DialogTrigger, DialogContent, DialogClose,
DialogHeader, DialogTitle, DialogDescription, DialogFooter,
} from '@choblue/ui/dialog'기본 사용
<Dialog>
<DialogTrigger asChild>
<Button>다이얼로그 열기</Button>
</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>다이얼로그 제목</DialogTitle>
<DialogDescription>다이얼로그 설명입니다.</DialogDescription>
</DialogHeader>
<div className="p-6 pt-0">
<p>다이얼로그 본문 내용입니다.</p>
</div>
<DialogFooter>
<DialogClose asChild>
<Button variant="outline">취소</Button>
</DialogClose>
<DialogClose asChild>
<Button>확인</Button>
</DialogClose>
</DialogFooter>
</DialogContent>
</Dialog>서브 컴포넌트
| 컴포넌트 | 엘리먼트 | 설명 |
|---|---|---|
Dialog | Provider | 상태 관리 컨테이너 |
DialogTrigger | <button> | 다이얼로그를 여는 버튼 (asChild 지원) |
DialogContent | <dialog> | 네이티브 모달 본문 |
DialogClose | <button> | 다이얼로그를 닫는 버튼 (asChild 지원) |
DialogHeader | <div> | 헤더 레이아웃 |
DialogTitle | <h2> | 제목 |
DialogDescription | <p> | 설명 텍스트 |
DialogFooter | <div> | 하단 액션 레이아웃 |
Dialog Props
| Prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
open | boolean | - | 제어 모드 열림 상태 |
onOpenChange | (open: boolean) => void | - | 상태 변경 핸들러 |
DialogTrigger / DialogClose Props
| Prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
asChild | boolean | false | 자식 요소에 props를 위임 (Slot 패턴) |
useConfirm (Imperative API)
onClick 핸들러에서 Promise 기반으로 확인 다이얼로그를 호출할 수 있습니다.
Import
import { ConfirmProvider, useConfirm } from '@choblue/ui/dialog'기본 사용
앱 루트에 ConfirmProvider를 배치한 뒤, useConfirm 훅으로 confirm 함수를 가져옵니다.
const confirm = useConfirm();
const handleClick = async () => {
const ok = await confirm({
title: "계속하시겠습니까?",
description: "이 작업은 되돌릴 수 없습니다.",
});
if (ok) { /* confirmed */ }
};Danger variant
variant: "danger"를 전달하면 확인 버튼이 danger 스타일로 렌더링됩니다.
const ok = await confirm({
title: "상품 삭제",
description: "이 상품이 영구적으로 삭제됩니다.",
confirmText: "삭제",
cancelText: "유지",
variant: "danger",
});ConfirmOptions
| Prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
title | string | (필수) | 다이얼로그 제목 |
description | string | - | 부가 설명 |
confirmText | string | "확인" | 확인 버튼 텍스트 |
cancelText | string | "취소" | 취소 버튼 텍스트 |
variant | "default" | "danger" | "default" | 확인 버튼 스타일 |
render | (props: ConfirmRenderProps) => ReactNode | - | 커스텀 콘텐츠 렌더 함수 |
커스텀 콘텐츠 (render)
render 함수를 전달하면 다이얼로그 내용을 자유롭게 구성할 수 있습니다.
const ok = await confirm({
render: ({ confirm, cancel }) => (
<>
<DialogHeader>
<DialogTitle>상품 삭제</DialogTitle>
<DialogDescription>
이 상품이 영구적으로 삭제됩니다.
</DialogDescription>
</DialogHeader>
<div className="p-6 pt-0">
<ProductCard />
</div>
<DialogFooter>
<Button variant="outline" onClick={cancel}>취소</Button>
<Button variant="danger" onClick={confirm}>삭제</Button>
</DialogFooter>
</>
),
});
render가 전달되면title,description,confirmText,cancelText,variant는 무시됩니다.
ConfirmRenderProps
| Prop | 타입 | 설명 |
|---|---|---|
confirm | () => void | 확인 처리 (Promise를 true로 resolve) |
cancel | () => void | 취소 처리 (Promise를 false로 resolve) |
Last updated on