import { default as PropTypes } from 'prop-types';
export default Dialog;
export type MuiDialogProps = import('@mui/material').DialogProps;
export type PaperStyle = import('@mui/material').PaperProps & {
    minWidth?: number | string;
    minHeight?: number | string;
};
export type UxDialogProps = {
    /**
     * - The content of the dialog.
     */
    children: React.ReactNode;
    /**
     * - The title of the dialog.
     */
    title?: React.ReactNode;
    /**
     * - Content to be displayed before the dialog title.
     */
    prepend?: React.ReactNode;
    /**
     * - Content to be displayed in the top toolbar of the dialog.
     */
    toolbar?: React.ReactNode;
    /**
     * - Content to be displayed in the bottom actions toolbar of the dialog.
     */
    actions?: React.ReactNode;
    /**
     * - Whether or not to show the close button.
     */
    showCloseButton?: boolean | undefined;
    /**
     * - The position of the actions toolbar.
     */
    actionsPosition?: "left" | "right" | "center" | undefined;
    /**
     * - Props to be passed down to the dialog paper.
     */
    PaperProps?: PaperStyle | undefined;
    slotProps?: {
        content: object;
    } | undefined;
    /**
     * - Callback function fired when the dialog is closed.
     */
    onClose?: ((event: React.SyntheticEvent, reason: string) => void) | undefined;
};
export type DialogProps = Omit<MuiDialogProps, "title" | "children" | "onClose" | "PaperProps" | "slotProps"> & UxDialogProps;
/**
 * @typedef {import('@mui/material').DialogProps} MuiDialogProps
 * @typedef {import('@mui/material').PaperProps & {
 *   minWidth?: number | string,
 *   minHeight?: number | string,
 * }} PaperStyle
 */
/**
  @typedef  {Object} UxDialogProps
  @property {React.ReactNode} children - The content of the dialog.
  @property {React.ReactNode} [title] - The title of the dialog.
  @property {React.ReactNode} [prepend] - Content to be displayed before the dialog title.
  @property {React.ReactNode} [toolbar] - Content to be displayed in the top toolbar of the dialog.
  @property {React.ReactNode} [actions] - Content to be displayed in the bottom actions toolbar of the dialog.
  @property {boolean} [showCloseButton=true] - Whether or not to show the close button.
  @property {'left'|'center'|'right'} [actionsPosition='right'] - The position of the actions toolbar.
  @property {PaperStyle} [PaperProps] - Props to be passed down to the dialog paper.
  @property {{content: object, content: object}} [slotProps]
  @property {(event: React.SyntheticEvent, reason: string) => void} [onClose] - Callback function fired when the dialog is closed.
*/
/**
 * @typedef {Omit<MuiDialogProps, 'title' | 'children' | 'onClose' | 'PaperProps' | 'slotProps'> & UxDialogProps} DialogProps
 */
/**
 * Dialog
 *
 * - 固定尺寸或特殊的尺寸控制需求, 可使用 PaperProps.style (不再提供 width/height 等 props)
 *   注意: 当设置明确的 width 时, 可能需要同时设置 maxWidth=false (mui dialog 默认 maxWidth=sm, 设置的 width 可能受限)
 * - 添加默认最小尺寸 (300x300), 在需要 先展示 loading 再展示异步数据 的时候避免 loading 阶段窗口过小
 */
/**
 * @description
 * @param {DialogProps} props
 * @return {React.ReactComponentElement<any, DialogProps>}
 */
declare function Dialog({ children, title, prepend, toolbar, actions, showCloseButton, actionsPosition, PaperProps, slotProps, ...rest }: DialogProps): React.ReactComponentElement<any, DialogProps>;
declare namespace Dialog {
    namespace propTypes {
        let children: PropTypes.Validator<NonNullable<PropTypes.ReactNodeLike>>;
        let title: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        let prepend: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        let toolbar: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        let actions: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        let showCloseButton: PropTypes.Requireable<boolean>;
        let actionsPosition: PropTypes.Requireable<string>;
        let PaperProps: PropTypes.Requireable<object>;
        let slotProps: PropTypes.Requireable<PropTypes.InferProps<{
            content: PropTypes.Requireable<object>;
            header: PropTypes.Requireable<object>;
        }>>;
        let onClose: PropTypes.Requireable<(...args: any[]) => any>;
    }
}
