import * as React from 'react'; import { PartialGlobalDefaultTheme } from '../../utils/useTheme'; import { COMPONENTS_NAMESPACES } from '../../constants'; import { CustomRender, CustomEventHandler } from '../../commonTypes'; import { DivRefCurrent } from '../Div'; import { WINDOW_SIZES } from './constants'; export declare type WindowSizeType = keyof typeof WINDOW_SIZES; export interface ModalProps { /** Классы переданные через _ */ [x: string]: unknown; /** Alert unique ID key */ activeAlertKey?: string | null; /** Дочерние элементы */ children?: React.ReactNode; /** Имена классов */ className?: string; /** Кастомный рендер для иконки закрытия */ iconRender?: CustomRender; /** Признак состояния. Обязательное, т.к. всегда нужен стейт для отслеживания состояния */ isOpen: boolean; /** Обработчик закрытия модалки по клику на оверлей, нажатию на крестик или нажатию Escape */ onClose?: (ev: React.MouseEvent | React.KeyboardEvent) => void; /** Наличие кнопки закрытия окна и обработчик */ onCloseButtonClick?: CustomEventHandler>; /** Закрытие окна по escape и обработчик */ onEscapePress?: CustomEventHandler>; /** Обработчик клика за пределами модального окна */ onOverlayClick?: CustomEventHandler>; /** Реф */ ref?: React.Ref; /** Размер окна. * Имеет три стандартных значения sm=480, md=608, lg=868. * Если не задан, то устанавливается значение md=608 */ size?: WindowSizeType; /** Темизация компонента */ theme?: PartialGlobalDefaultTheme[typeof COMPONENTS_NAMESPACES.modal]; /** Кастомный рендер для wrapper */ wrapperRender?: CustomRender; } export declare type ModalWindowProps = ModalProps & { innerRef?: React.Ref; }; export interface ModalElementsProps { [x: string]: unknown; children?: React.ReactNode; className?: string; wrapperRender?: CustomRender>; } export interface ModalAlertProps { [x: string]: unknown; /** Alert unique ID key */ alertKey: string; children?: React.ReactNode; className?: string; /** Alert close handler */ onClose?: () => void; } export interface ModalContextType { /** Alert unique ID key */ activeAlertKey?: string | null; bodyClassName: string; footerClassName: string; headerClassName: string; } export interface ModalRefCurrent { wrapper: HTMLDivElement | null; } export interface CustomElements { Icon: React.FC; Wrapper: React.FC; } export interface WrapperProps extends ModalElementsProps { onClick?: React.MouseEventHandler; ref?: React.Ref; } export interface IconProps extends ModalElementsProps { onClick?: React.MouseEventHandler; }