Dialog
Dialog는 페이지 위에 모달 형태로 정보를 표시하거나 작업을 수행하도록 하는 컴포넌트입니다.import { Button, Dialog } from '@vapor-ui/core';
export default function DefaultDialog() {
return (
<Dialog.Root>
<Dialog.Trigger render={<Button />}>클릭</Dialog.Trigger>
<Dialog.Popup>
<Dialog.Header>
<Dialog.Title>알림</Dialog.Title>
<Dialog.Close aria-label="Close" />
</Dialog.Header>
<Dialog.Body>
<Dialog.Description>
여기에 다이얼로그 본문 내용이 들어갑니다.
</Dialog.Description>
</Dialog.Body>
<Dialog.Footer style={{ marginLeft: 'auto' }}>
<Button colorPalette="primary">확인</Button>
</Dialog.Footer>
</Dialog.Popup>
</Dialog.Root>
);
}Property
Size
Dialog의 크기를 설정합니다.
import { Button, Dialog } from '@vapor-ui/core';
export default function DialogSize() {
return (
<div className="flex gap-4">
<Dialog.Root size="md">
<Dialog.Trigger render={<Button>Medium Dialog</Button>} />
<Dialog.Popup>
<Dialog.Header>
<Dialog.Title>Medium Size</Dialog.Title>
</Dialog.Header>
<Dialog.Body>
<Dialog.Description>Medium 크기의 다이얼로그입니다.</Dialog.Description>
</Dialog.Body>
<Dialog.Footer>
<Dialog.Close render={<Button variant="ghost">취소</Button>} />
<Button>확인</Button>
</Dialog.Footer>
</Dialog.Popup>
</Dialog.Root>
<Dialog.Root size="lg">
<Dialog.Trigger render={<Button>Large Dialog</Button>} />
<Dialog.Popup>
<Dialog.Header>
<Dialog.Title>Large Size</Dialog.Title>
</Dialog.Header>
<Dialog.Body>
<Dialog.Description>Large 크기의 다이얼로그입니다.</Dialog.Description>
</Dialog.Body>
<Dialog.Footer>
<Dialog.Close render={<Button variant="ghost">취소</Button>} />
<Button>확인</Button>
</Dialog.Footer>
</Dialog.Popup>
</Dialog.Root>
<Dialog.Root size="xl">
<Dialog.Trigger render={<Button>Extra Large Dialog</Button>} />
<Dialog.Popup>
<Dialog.Header>
<Dialog.Title>Extra Large Size</Dialog.Title>
</Dialog.Header>
<Dialog.Body>
<Dialog.Description>
Extra Large 크기의 다이얼로그입니다.
</Dialog.Description>
</Dialog.Body>
<Dialog.Footer>
<Dialog.Close render={<Button variant="ghost">취소</Button>} />
<Button>확인</Button>
</Dialog.Footer>
</Dialog.Popup>
</Dialog.Root>
</div>
);
}Modal Behavior
Dialog의 모달 동작을 설정합니다.
import { Button, Dialog } from '@vapor-ui/core';
export default function DialogModal() {
return (
<div className="flex gap-4">
<Dialog.Root modal={true}>
<Dialog.Trigger render={<Button>Modal Dialog</Button>} />
<Dialog.Popup>
<Dialog.Header>
<Dialog.Title>Modal Dialog</Dialog.Title>
</Dialog.Header>
<Dialog.Body>
<Dialog.Description>
포커스가 다이얼로그 내부에 제한됩니다.
</Dialog.Description>
</Dialog.Body>
<Dialog.Footer>
<Dialog.Close render={<Button>확인</Button>} />
</Dialog.Footer>
</Dialog.Popup>
</Dialog.Root>
<Dialog.Root modal={false}>
<Dialog.Trigger render={<Button>Non-Modal Dialog</Button>} />
<Dialog.Popup>
<Dialog.Header>
<Dialog.Title>Non-Modal Dialog</Dialog.Title>
</Dialog.Header>
<Dialog.Body>
<Dialog.Description>
배경의 다른 요소들과 상호작용할 수 있습니다.
</Dialog.Description>
</Dialog.Body>
<Dialog.Footer>
<Dialog.Close render={<Button>확인</Button>} />
</Dialog.Footer>
</Dialog.Popup>
</Dialog.Root>
</div>
);
}Examples
Custom Usage
Dialog 컴포넌트의 다양한 구성 패턴입니다.
import { Button, Dialog } from '@vapor-ui/core';
export default function Flexible() {
return (
<Dialog.Root size="lg" closeOnClickOverlay={false}>
<Dialog.Trigger render={<Button variant="outline">확인 다이얼로그</Button>} />
<Dialog.PortalPrimitive>
<Dialog.OverlayPrimitive />
<Dialog.PopupPrimitive>
<Dialog.Header>
<Dialog.Title>작업 확인</Dialog.Title>
</Dialog.Header>
<Dialog.Body>
<Dialog.Description>
이 작업을 진행하시겠습니까? 이 작업은 되돌릴 수 없습니다.
</Dialog.Description>
</Dialog.Body>
<Dialog.Footer>
<Dialog.Close render={<Button variant="ghost">취소</Button>} />
<Dialog.Close render={<Button colorPalette="danger">삭제</Button>} />
</Dialog.Footer>
</Dialog.PopupPrimitive>
</Dialog.PortalPrimitive>
</Dialog.Root>
);
}Props Table
Dialog.Root
Loading component documentation...
Dialog.Popup
Loading component documentation...
Dialog.PortalPrimitive
Loading component documentation...
Dialog.OverlayPrimitive
Loading component documentation...
Dialog.PopupPrimitive
Loading component documentation...
Dialog.Trigger
Loading component documentation...
Dialog.Close
Loading component documentation...
Dialog.Title
Loading component documentation...
Dialog.Description
Loading component documentation...
Dialog.Header
Loading component documentation...
Dialog.Body
Loading component documentation...
Dialog.Footer
Loading component documentation...