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