import type { AriaAttributes, HTMLAttributes } from 'react';
import React from 'react';
import type { ThemeIn } from '../../lib/theming/Theme';
import type { CommonProps } from '../../internal/CommonWrapper';
import { ModalFooter } from './ModalFooter';
import { ModalHeader } from './ModalHeader';
import { ModalBody } from './ModalBody';
export type MobileModalAppearance = 'auto' | 'top' | 'center' | 'bottom' | 'fullscreen-spacing' | 'fullscreen';
export interface ModalProps extends CommonProps, Pick<HTMLAttributes<unknown>, 'role'>, Pick<AriaAttributes, 'aria-label' | 'aria-labelledby'> {
    /** Отключает событие `onClose` и блокирует кнопку закрытия модального окна. */
    disableClose?: boolean;
    /** Выравнивает модальное окно по верху страницы. */
    alignTop?: boolean;
    /** Оставляет модальное окно открытым, когда пользователь кликнул на фон вне модального окна. */
    ignoreBackgroundClick?: boolean;
    /** Скрывает крестик для закрытия модального окна. */
    noClose?: boolean;
    /** Ширина модального окна. */
    width?: number | string;
    /** Событие закрытия модального окна. Вызывается при клике на фон или крестик, и при нажатии Esc. */
    onClose?: () => void;
    /** Выключает ограничение на фокус. По умолчанию модальное окно не позволяет установить фокус за переделами своего содержимого.
     *
     * По умолчанию `"true"` для Internet Explorer 11. */
    disableFocusLock?: boolean;
    /** Объект с переменными темы. Он будет объединён с темой из `<ThemeContext>`.
     *
     * Общие переменные темы и переменные для модального окна (с префиксом modal) смотрите на странице [ThemePlayground](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_information-themeplayground--docs).
     */
    theme?: ThemeIn;
    /** Задаёт внешний вид модального окна в мобильном режиме. Работает с версией темы >= 5_2.
     *  - `"auto"` — если футера нет, модальное окно распологается в центре экрана, если есть — модальное окно растягивается на весь экран с отступами и закругленными краями.
     *  - `"top"` — модальное окно располагается сверху независимо от наличия футера.
     *  - `"center"` — модальное окно располагается в центре независимо от наличия футера.
     *  - `"bottom"` — модальное окно располагается снизу независимо от наличия футера.
     *  - `"fullscreen-spacing"` — модальное окно растягивается на весь экран с отступами и закругленными краями.
     *  - `"fullscreen"` — модальное окно растягивается на весь экран.
     *  @default auto
     */
    mobileAppearance?: MobileModalAppearance;
}
export interface ModalState {
    stackPosition: number;
    hasBackground: boolean;
    horizontalScroll: boolean;
    hasHeader: boolean;
    hasFooter: boolean;
    hasPanel: boolean;
}
export declare const ModalDataTids: {
    readonly container: "modal-container";
    readonly content: "modal-content";
    readonly close: "modal-close";
};
export declare const ModalZIndexPriority: {
    readonly Cross: 2;
    readonly Content: 1;
};
type DefaultProps = Required<Pick<ModalProps, 'disableFocusLock' | 'role' | 'mobileAppearance'>>;
/** Модальное окно — это эмуляция диалогового окна браузера, оно появляется поверх страницы в ответ на действия пользователя и блокирует доступ к основному содержимому страницы.
 *
 * Составной компонент, включает в себя:
 * - «шапку» [Modal.Header](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalheader--docs), состоящую из заголовка и крестика закрытия окна;
 * - контент-зону [Modal.Body](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalbody--docs);
 * - футер [Modal.Footer](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_overlay-modal-modalfooter--docs).
 */
export declare class Modal extends React.Component<ModalProps, ModalState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static Header: typeof ModalHeader;
    static Body: typeof ModalBody;
    static Footer: typeof ModalFooter;
    static defaultProps: DefaultProps;
    private getProps;
    state: ModalState;
    private theme;
    private stackSubscription;
    private containerNode;
    private mouseDownTarget;
    private mouseUpTarget;
    componentDidMount(): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
    private getMobileContainerClassName;
    private renderMain;
    private requestClose;
    private refContainer;
    private handleStackChange;
    private handleContainerMouseDown;
    private handleContainerMouseUp;
    private handleContainerClick;
    private handleKeyDown;
    private checkHorizontalScrollAppearance;
    private throttledCheckHorizontalScroll;
    private handleResize;
    private setHasHeader;
    private setHasFooter;
    private setHasPanel;
}
export {};
