import { type HTMLAttributes, type ReactNode } from 'react';
/**
* CMP-0010 Dialog — Radix-free modal shell.
* Portals to `document.body` so `fixed inset-0` is not clipped by ancestors with
* `container-type` / transform / filter (e.g. Card `rp-card-container`).
* Wave A harden: focus trap, restore, busy Escape/backdrop, scroll lock, labelledby, inert.
* Short enter/exit via motion tokens; Confirm inherits this surface.
*/
export interface DialogProps {
readonly open: boolean;
readonly onClose: () => void;
readonly title?: string;
readonly children: ReactNode;
readonly closeOnOverlayClick?: boolean;
readonly closeLabel?: string;
readonly className?: string;
/** Optional class for the fixed full-viewport shell (backdrop + panel host). */
readonly shellClassName?: string;
/**
* Additive props for the role=dialog|alertdialog panel only (e.g. data-scan-mode).
* Never use panelAttrs — panelProps is the sole escape hatch.
*/
readonly panelProps?: Omit, 'role' | 'children' | 'aria-modal'> & {
readonly 'data-scan-mode'?: string;
};
readonly testId?: string;
/** When true, Escape and backdrop dismiss are no-ops; close control is disabled. */
readonly busy?: boolean;
/** Alias of busy (ConfirmDialog / pending flows). */
readonly pending?: boolean;
/** Optional description id for aria-describedby. */
readonly describedBy?: string;
/** role="alertdialog" for destructive confirms. */
readonly role?: 'dialog' | 'alertdialog';
/** Hide the built-in title row (caller supplies labelled chrome). */
readonly hideHeader?: boolean;
/** Stable id for title element; auto-generated when omitted. */
readonly titleId?: string;
}
export declare function Dialog({ open, onClose, title, children, closeOnOverlayClick, closeLabel, className, shellClassName, panelProps, testId, busy, pending, describedBy, role, hideHeader, titleId: titleIdProp, }: DialogProps): JSX.Element | null;
//# sourceMappingURL=Dialog.d.ts.map