import { HTMLAttributes, ReactNode } from 'react';
export type AlertDialogResponseVariant = "default" | "suggested" | "destructive";
export interface AlertDialogResponse {
    /**
     * Unique identifier returned via `onResponse`.
     * Use `"cancel"` by convention for the dismissive action.
     */
    id: string;
    /** Button label. */
    label: string;
    /** Visual emphasis. Defaults to `"default"`. */
    variant?: AlertDialogResponseVariant;
    /** Disables the button. */
    disabled?: boolean;
}
export interface DialogButton {
    /** Button label. */
    label: string;
    /** Visual variant. Defaults to `"default"`. */
    variant?: "default" | "suggested" | "destructive";
    /** Called when the button is clicked. */
    onClick: () => void;
    /** Whether the button is disabled. */
    disabled?: boolean;
}
export interface DialogProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
    /** Whether the dialog is visible. */
    open: boolean;
    /** Dialog heading. */
    title?: ReactNode;
    /** Body content. */
    children?: ReactNode;
    /** Action buttons (standard dialog API). */
    buttons?: DialogButton[];
    /** Called on Escape or backdrop click. */
    onClose?: () => void;
    /** Whether clicking the backdrop closes the dialog. Defaults to `true`. */
    closeOnBackdrop?: boolean;
    /**
     * ARIA role. Use `"alertdialog"` for confirmations and destructive warnings —
     * screen readers announce it immediately. Defaults to `"dialog"`.
     *
     * When using `role="alertdialog"`, prefer the `responses`/`onResponse` API
     * over `buttons`/`onClick` for semantic clarity.
     */
    role?: "dialog" | "alertdialog";
    /**
     * Response buttons (AlertDialog API). Alternative to `buttons` — each
     * response has a semantic `id` returned via `onResponse`.
     * Escape and backdrop click fire the first non-destructive response.
     */
    responses?: AlertDialogResponse[];
    /**
     * Called with the `id` of the response button clicked.
     * Required when `responses` is provided.
     */
    onResponse?: (id: string) => void;
}
/**
 * Blocking modal dialog following the Adwaita pattern.
 *
 * **Standard** — `title` + `children` + `buttons[]`.
 *
 * **Alert** — add `role="alertdialog"` + `responses[]` + `onResponse`.
 * Uses a semantic response id instead of per-button `onClick`.
 * Escape / backdrop fire the first non-destructive response.
 * Mirrors `AdwAlertDialog`.
 *
 * For the app-info dialog, use `<AboutDialog />` instead.
 *
 * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Dialog.html
 * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.AlertDialog.html
 */
export declare function Dialog({ open, title, children, buttons, onClose, closeOnBackdrop, role, responses, onResponse, className, ...props }: DialogProps): import("react/jsx-runtime").JSX.Element | null;
