Controlled open state
Drive the dialog with your own React state.
Controlled open state rendered preview
State: closed
Molecules
Modal window overlay for rich focused tasks and forms.
pnpm add @quinkit/uiimport { Dialog } from "@quinkit/ui";Live previews · code · themes · viewport · dark mode
Drive the dialog with your own React state.
State: closed
A pending state prevents double submissions before confirming.
Collect and submit data without leaving the current page.
Long content scrolls while the header and footer stay fixed.
Emphasize risky actions with destructive styling.
Dialog is a Radix-powered modal molecule for focused tasks, confirmations, forms, and short workflows.
It provides accessible trigger, content, title, description, footer, and close primitives while using the UI library semantic tokens for dark mode, themes, and palettes.
| Component | Purpose |
|---|---|
Dialog | Root state container. Supports controlled and uncontrolled usage. |
DialogTrigger | Opens the dialog. Use asChild with Button for design-system styling. |
DialogContent | Modal panel rendered in a portal with overlay. |
DialogHeader | Layout wrapper for title and description. |
DialogTitle | Accessible dialog name. Prefer one per dialog. |
DialogDescription | Accessible supporting description. |
DialogFooter | Layout wrapper for actions. |
DialogClose | Closes the dialog. Use asChild for custom buttons. |
DialogTitle for the accessible dialog name.DialogDescription for supporting instructions where useful.aria-label on DialogContent only when no visible title is appropriate.bg-popover, text-popover-foreground, border-border, and bg-background/80 tokens.motion-reduce:animate-none.Dialog adheres to WAI-ARIA design patterns for accessible web components.
Keyboard Navigation
Tab / Shift + Tab — Focuses control and moves between interactive elements.Space / Enter — Triggers action or toggles selection.Escape — Closes open popovers, overlays, or dropdown menus.ARIA Standards
aria-* attributes.ring-ring) visible in both light & dark mode.Add a shadcn-compatible bridge file to your project that re-exports from @quinkit/ui.
npx shadcn@latest add https://quinkit-ui.vercel.app/r/dialog.json