import { type ReactNode } from "react";
import { type IAccessibilityConfigBase } from "../../typings/accessibility.js";
interface IUiDialogContext {
    titleId: string;
    descriptionId: string;
    /**
     * Called by `UiDialogBody` from `useLayoutEffect` on mount; returns a
     * cleanup to call on unmount. The modal counts mounted bodies so
     * `aria-describedby` is set when at least one body is rendered and
     * cleared when the last one unmounts.
     */
    registerBody: () => () => void;
}
/**
 * @internal
 */
export declare function useUiDialogContext(): IUiDialogContext | null;
/**
 * @internal
 */
export interface IUiModalDialogProps {
    /** Dialog content composed by the caller — typically `UiDialogHeader`,
     *  an optional `UiDialogBody`, and `UiDialogFooter`. */
    children: ReactNode;
    /** Whether the modal is shown. */
    isOpen: boolean;
    /** Fires when the user dismisses via Esc, backdrop click, or `onClose` from inside. */
    onClose: () => void;
    /** Card width in px. Defaults to 540. */
    width?: number;
    /**
     * Overrides for the dialog landmark's accessible name. Usually unnecessary —
     * the landmark auto-wires `aria-labelledby` to the `UiDialogHeader` title
     * via context. For headerless dialogs, pass `ariaLabel`; to point at an
     * external title, pass `ariaLabelledBy`.
     */
    accessibilityConfig?: Pick<IAccessibilityConfigBase, "ariaLabel" | "ariaLabelledBy">;
    /** Test id forwarded to the overlay element. */
    dataTestId?: string;
}
/**
 * Modal dialog — portal, dimmed backdrop, card chrome (radius, shadow, fill,
 * padding), focus management, dismiss-on-outside / Esc, and the dialog
 * landmark (`role="dialog"`, `aria-modal="true"`). Compose `UiDialogHeader`,
 * an optional `UiDialogBody`, and `UiDialogFooter` as children.
 *
 * @internal
 */
export declare function UiModalDialog({ children, isOpen, onClose, width, accessibilityConfig, dataTestId }: IUiModalDialogProps): import("react/jsx-runtime").JSX.Element | null;
export {};
//# sourceMappingURL=UiModalDialog.d.ts.map