A modal dialog component that displays content in an overlay window.
import {
Dialog,
DialogTrigger,
DialogHeader,
DialogBody,
DialogFooter,
} from '@backstage/ui';
<DialogTrigger>
<Button>Open Dialog</Button>
<Dialog>
<DialogHeader>Title</DialogHeader>
<DialogBody>Content</DialogBody>
<DialogFooter>
<Button variant="secondary" slot="close">Close</Button>
</DialogFooter>
</Dialog>
</DialogTrigger>Wraps a trigger element and the dialog content to handle open/close state.
| Prop | Type | Default | Responsive |
|---|---|---|---|
| children | ReactNode | - | No |
| isOpen | boolean | - | No |
| defaultOpen | boolean | - | No |
| onOpenChange | (isOpen: boolean) => void | - | No |
The main dialog container that renders as a modal overlay.
| Prop | Type | Default | Responsive |
|---|---|---|---|
| children | ReactNode | - | No |
| isOpen | boolean | - | No |
| defaultOpen | boolean | - | No |
| onOpenChange | (isOpen: boolean) => void | - | No |
| width | numberstring | - | No |
| height | numberstring | - | No |
| className | string | - | No |
| style | CSSProperties | - | No |
Displays the dialog title with a built-in close button.
| Prop | Type | Default | Responsive |
|---|---|---|---|
| children | ReactNode | - | No |
| className | string | - | No |
| style | CSSProperties | - | No |
The main content area of the dialog with optional scrolling.
| Prop | Type | Default | Responsive |
|---|---|---|---|
| children | ReactNode | - | No |
| height | numberstring | - | No |
| className | string | - | No |
| style | CSSProperties | - | No |
Contains action buttons or other footer content.
| Prop | Type | Default | Responsive |
|---|---|---|---|
| children | ReactNode | - | No |
| className | string | - | No |
| style | CSSProperties | - | No |
If you want to close the dialog while pressing a button, you can use the slot="close" prop on the button.
<Button slot="close">Close</Button>Dialog with a fixed height body that scrolls when content overflows.
Dialog containing form elements for user input.
You can also control the dialog using your own states.
const [isOpen, setIsOpen] = useState(false);
<Dialog isOpen={isOpen} onOpenChange={setIsOpen}>
<DialogHeader>Create New User</DialogHeader>
<DialogBody>
Your content
</DialogBody>
<DialogFooter>
<Button variant="secondary" slot="close">Cancel</Button>
<Button variant="primary" slot="close">Create User</Button>
</DialogFooter>
</Dialog>Our theming system is based on a mix between CSS classes, CSS variables and data attributes. If you want to customise this component, you can use one of these class names below.
bui-DialogOverlaybui-Dialogbui-DialogHeaderbui-DialogHeaderTitlebui-DialogBodybui-DialogFooter