import type { DialogHTMLAttributes, ReactNode, Ref } from "react";
type Width = 400 | 560 | 720;
export interface DialogProps extends Omit, "title" | "onClose" | "open"> {
/** Controlled open state; syncs to showModal()/close(). */
open: boolean;
/** Called on every dismissal attempt with its source; the consumer flips `open`. */
onClose: (reason: "esc" | "backdrop" | "close-button") => void;
/** Heading; renders an wired to aria-labelledby. Without it, pass aria-label. */
title?: ReactNode;
/** Action row (Buttons — one accent per group, danger for destructive). */
footer?: ReactNode;
/** Panel width in px (400 | 560 | 720). @default 560 */
width?: Width;
/** false = no close button, Esc and backdrop swallowed — footer is the only exit. @default true */
dismissible?: boolean;
/** Forwarded ref to the underlying