import { Placement, SizeTokenValue, PropsWithChildren, QA } from '../common'; import { CSSProperties, HTMLAttributes, ReactNode, RefObject } from 'react'; import { UseFloatingOptions, UseFloatingReturn } from '../Dropdown'; export type ModalHeaderProps = { /** Подпись */ caption?: ReactNode; /** Иконка */ icon?: ReactNode; /** Обработчик закрытия * * Показывает крестик при передаче */ onClose?: () => void; } & QA & HTMLAttributes; export type ModalContentProps = { /** Не показывать границы между header и footer при overflow */ noBorderScroll?: boolean; } & QA & HTMLAttributes; export type ModalProps = { /** Открыто */ isOpen: boolean; /** Обработчик закрытия */ onClose?: () => void; /** Рендер в root или рядом * * Несовместим с isMounted */ isPortal?: boolean; /** Не анмаунтить компонент, скрывая через display: none * * Несовместим с isPortal */ isMounted?: boolean; /** Размер * * SizeTokenValue или кастомный */ size?: SizeTokenValue | CSSProperties['width']; /** Закрывать по нажатию Esc */ closeOnEscape?: boolean; /** Закрывать по нажатию на бэкграунд */ closeOnOverlay?: boolean; /** Расположение */ placement?: Placement | `${Placement}`; /** Элемент от которого показывать модалку * * При передаче модалка откроется без layout, в положении placement */ targetRef?: RefObject; /** Коллбэк принимающий инстанс floating ui * * Используется в специфических ситуациях */ setFloating?: (floating: UseFloatingReturn) => void; } & QA & PropsWithChildren & Pick & Pick & Pick, 'className'>;