-
-
+
+
{kicker}
-
+
{title}
-
-
+
+
{description ?? (typeof title === 'string' ? title : kicker)}
-
+
);
}
@@ -75,8 +99,9 @@ export function ModalHeader(props: ModalHeaderBaseProps) {
return (
);
}
@@ -85,8 +110,31 @@ export function ModalDestructiveHeader(props: ModalHeaderBaseProps) {
return (
+ );
+}
+
+function ConfirmHeader(props: ModalHeaderBaseProps) {
+ return (
+
+ );
+}
+
+function ConfirmDestructiveHeader(props: ModalHeaderBaseProps) {
+ return (
+
);
}
@@ -120,3 +168,85 @@ export function ModalFooter({ primary, secondary, hint, hintAccent }: ModalFoote
);
}
+
+type ConfirmSize = 'sm' | 'md';
+
+interface ConfirmModalProps {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+ variant?: 'default' | 'destructive';
+ size?: ConfirmSize;
+ kicker: string;
+ title: React.ReactNode;
+ description?: string;
+ hint?: React.ReactNode;
+ confirmLabel: React.ReactNode;
+ cancelLabel?: React.ReactNode;
+ confirming?: boolean;
+ onConfirm: () => void | Promise