diff --git a/components/ui/dialog.tsx b/components/ui/dialog.tsx
index bb589d7d6..531caca5e 100644
--- a/components/ui/dialog.tsx
+++ b/components/ui/dialog.tsx
@@ -112,27 +112,46 @@ export function Dialog({
const blockOutside = preventOutsideClose || dirty;
- const body = (
+ const heading = (
+ <>
+
+ {title}
+
+ {description && (
+
+ {description}
+
+ )}
+ >
+ );
+
+ const footerRow = footer && (
+ {footer}
+ );
+
+ // With an icon the title, text and body sit in one column beside it (a
+ // destructive confirm). Without one, the title stays put while a long
+ // body scrolls under it. The spacing is the same either way.
+ const body = icon ? (
<>
-
+
{icon}
-
-
- {title}
-
- {description && (
-
- {description}
-
- )}
+
+ {heading}
{children}
- {footer && (
-
{footer}
- )}
+ {footerRow}
+ >
+ ) : (
+ <>
+
{heading}
+
+ {children}
+
+ {footerRow}
>
);