import type React from 'react';
import type { Props } from '../_utils/types';
export declare type ModalPlacement = 'top' | 'center';
export declare type ModalWidth = 'sm' | 'md' | 'lg' | 'xl';
/**
 * Additional UI/UX to dismiss. (In addition to the Esc key)
 *  - `x` Close Button in the Modal Header
 *  - `scrim` Overlay dimmed scrim
 *  - `footer-button` Cancel Button in the Modal Footer Actions
 */
export declare type ModalOptionalCloseStartegy = 'x' | 'footer-button' | 'scrim';
declare type ModalCloseStragety = 'esc' | ModalOptionalCloseStartegy;
declare type ModalOnClose = (event: React.MouseEvent<HTMLDivElement> | React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLElement>, how: ModalCloseStragety) => void;
export interface ModalCloseContextApi {
    /**
     * Escape key will always close a dialog. This adds additional UI or UX to close.
     */
    howToClose: ModalOptionalCloseStartegy[] | undefined;
    onClose: ModalOnClose | undefined;
}
export interface ModalCloseableHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
    /**
     * @deprecated @experimental Changes the UI of modal to work on mobile breakpoints, to be used on Helix Header ONLY
     * @defaultValue false
     * @since 12.8.0
     */
    compact?: boolean;
    qa?: {
        closeButton?: string;
    };
}
export interface ModalProps extends Props {
    'aria-describedby'?: string;
    'aria-details'?: string;
    /**
     * @a11y Automatially created when using `Modal.Heading`. The `role='dialog'` MUST be labelled. Prefer `aria-labelledby` over `aria-label`.
     * @since 11.12.0
     */
    'aria-labelledby'?: string;
    /**
     * @a11y `role='dialog'` MUST be labelled. Prefer `aria-labelledby` over `aria-label`.
     * If using an `aria-label` instead of a node, be sure give the modal an `id` so
     * other regions can reference it.
     * @since 11.12.0
     */
    'aria-label'?: string;
    /**
     * @deprecated @experimental Changes the UI of modal to work on mobile breakpoints, to be used on Helix Header ONLY
     * @defaultValue false
     * @since 12.8.0
     */
    compact?: boolean;
    /**
     * This adds additional UI or UX to close. Escape key will always close a dialog, see `onClose`.
     *
     * NOTE 'footer-button': Footer Cancel button still requires at least a rendered self closing `Modal.FooterButtons`.
     *
     * NOTE 'x': The X button still requires a rendered `Modal.Header` component.
     * @defaultValue []
     * @since 11.12.0
     */
    howToClose?: ModalOptionalCloseStartegy[];
    /**
     * Aligns with `role` and `ref` location.
     */
    id?: string;
    /**
     * Callback for clicking the overlay
     * @since 10.19.0
     */
    onClickOverlay?: (event: React.MouseEvent<HTMLDivElement>) => void;
    /**
     * When a user closes the Modal by some approved `howToClose` method or the Escape key. This also opts-in to dialog focus management.
     * @a11y Future default! Moves focus into and cycles focus in the Modal, and returning focus
     * to the trigger when closed. Also enables the Escape key to close the Modal.
     * @since 11.6.0
     */
    onClose?: ModalOnClose;
    /**
     * Modal open state
     * @defaultValue false
     * @since 10.19.0
     */
    open?: boolean;
    /**
     * Enable dialog props. REQUIRES `onClose` to enable Escape key and focus management. MUST be labelled, prefer `aria-labelledby` over `aria-label`.
     */
    role?: 'dialog';
    /**
     * Vertical placement of the modal.
     * Positioning modal at the top ensures that variable height modal won't shift position during content loading,
     * providing a more stable user experience.
     * @defaultValue center
     * @since 10.19.0
     */
    placement?: ModalPlacement;
    /**
     * Sets a width on the container and uses next centering.
     * Future will default to `md`
     * @since 10.19.0
     */
    width?: ModalWidth;
}
export interface ModalContainerProps extends Props {
    /**
     * @deprecated @experimental Changes the UI of modal to work on mobile breakpoints, to be used on Helix Header ONLY
     * @defaultValue false
     * @since 12.8.0
     */
    compact?: boolean;
    /**
     * @since 10.19.0
     */
    placement: ModalPlacement;
    /**
     * @since 10.19.0
     */
    width?: ModalWidth;
}
export interface ConfirmModalProps extends Omit<ModalProps, 'onClose'> {
    /**
     * Headline message
     * @since 10.19.0
     */
    headline?: string;
    /**
     * The dismiss onClick callback
     * @since 10.19.0
     */
    onClose?: (event: React.MouseEvent<HTMLButtonElement>) => void;
}
/**
 * NOTE: Using howToClose 'x' requires the `Modal.Header` component.
 * @a11y This component is a not semantic heading! For that, see `Modal.Heading`.
 */
export interface ModalCloseableHeaderProps extends Props {
    /**
     * @since 10.19.0
     */
    onClose?: (event: React.MouseEvent<HTMLButtonElement>) => void;
    /**
     * @since 10.19.0
     */
    qa?: {
        closeButton?: string;
    };
}
export interface ModalBodyProps extends React.HTMLAttributes<HTMLDivElement> {
    /**
     * @deprecated @experimental Changes the UI of modal to work on mobile breakpoints, to be used on Helix Header ONLY
     * @defaultValue false
     * @since 12.8.0
     */
    compact?: boolean;
    /**
     * Removes left, right paddings from the modal body when true
     * @defaultValue false
     * @since 10.19.0
     */
    noSideSpacing?: boolean;
}
export {};
