Dialog
A modal dialog that interrupts the user with important content and expects a response.
Installation
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@gradeui/ui"Usage
Examples
Add Project
Confirmation Dialog
Settings Dialog
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| open | boolean | - | The controlled open state of the dialog. |
| defaultOpen | boolean | false | The default open state when uncontrolled. |
| onOpenChange | (open: boolean) => void | - | Callback when the open state changes. |
Accessibility
- Built on Radix UI Dialog for full accessibility
- Focus is trapped within the dialog
- Escape key closes the dialog
- Background scroll is locked when open
- Announces content to screen readers
Sidecar
The Markdown sidecar Studio (and the Grade MCP server, when it ships) reads to understand this component — frontmatter, when- to-use guidance, and canonical examples. Authored once at packages/ui/components/ui/dialog.md and shipped inside the published @gradeui/ui tarball.
---
name: Dialog
import: "@gradeui/ui"
subcomponents: [DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, DialogClose]
props:
- Dialog: open?, onOpenChange? — Radix controlled/uncontrolled pattern
- DialogTrigger: asChild? (wrap a Button)
- DialogContent: accepts native div HTML attrs
- DialogFooter: used for action rows
when_to_use: Modal interruptions — confirmations, focused forms, detail views. Dialog is the right primitive for Apple HIG / React Native "Alert" (modal) semantics. For non-blocking inline messaging use Callout; for transient notifications use Toaster (Sonner). Always include DialogTitle (a11y requirement).
composes_with: [Button (as DialogTrigger asChild, and inside DialogFooter), Input/Textarea/Select inside DialogContent]
aliases: [modal, popup, overlay, alert, system alert, alert dialog, modal dialog, confirm dialog, react native modal, rn alert]
---
```jsx
<Dialog>
<DialogTrigger asChild><Button>Delete</Button></DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Delete project?</DialogTitle>
<DialogDescription>This cannot be undone.</DialogDescription>
</DialogHeader>
<DialogFooter>
<Button variant="outline">Cancel</Button>
<Button variant="destructive">Delete</Button>
</DialogFooter>
</DialogContent>
</Dialog>
```