# Dialog > Modal window for confirmations and focused tasks. Import from `@aspyn-io/kit`. Scaffold source: `npx shadcn@latest add https://design.aspyn.io/r/dialog.json` ## Install ```tsx import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, DialogClose, } from "@aspyn-io/kit"; ``` ### Destructive confirmation The standard confirm pattern for irreversible actions. ```tsx Delete workspace? This permanently deletes the workspace and all of its data. ``` ### Scrollable body Long content? Wrap the middle in an overflow container so the header and footer stay pinned while it scrolls. ```tsx Terms of service Updated August 2026.
{/* any amount of content: scrolls between pinned header/footer */}
``` ### Form in a dialog ```tsx Rename project
``` ### Custom close button Hide the built-in corner X with showCloseButton={false} and provide your own DialogClose. ```tsx Invite teammates Send an invite to join this workspace. ``` ### No close button Force an explicit choice: hide the corner X so Escape/overlay still close, but the primary path is a footer action. ```tsx Session expired Sign in again to continue. ``` ## Notes - Focus is trapped inside the dialog and returned to the trigger on close (Radix). - Escape and clicking the overlay close it; DialogTitle is required for accessible naming. - For controlled dialogs (e.g. close after async save), use open + onOpenChange.