import React from 'react'; import { PopupPlacement } from '../Popup'; import { QAProps } from '../types'; import './Popover.css'; export interface PopoverButtonProps { text: string; onClick: (event: React.MouseEvent) => void; } interface PopoverExternalProps { /** content over which the tooltip is shown */ children?: React.ReactNode; /** tooltip's title */ title?: string; /** tooltip's content */ content?: React.ReactNode; /** tooltip's html content to be rendered via `dangerouslySetInnerHTML` */ htmlContent?: string; /** css class for `content` */ contentClassName?: string; /** the button will be rendered if the following object is passed
* ```{ text: 'Button', onClick: () => callbackOnClick() }``` */ tooltipActionButton?: PopoverButtonProps; /** the same as `tooltipActionButton` */ tooltipCancelButton?: PopoverButtonProps; /** tooltip's offset relative to the control */ tooltipOffset?: [number, number]; tooltipClassName?: string; /** css className for the control */ className?: string; /** Allows to use custom anchor and disables `openByHover` and `onClick` for the component */ anchorRef?: React.RefObject; /** If specified, will be called when the anchor is clicked. If function * returns `true', the tooltip is opened. If it returns `false', the tooltip won't be opened. */ onClick?: (event: React.MouseEvent) => boolean | Promise; /** Might be useful for the delayed rendering of the tooltip's content. */ onOpenChange?: (open: boolean) => void; /** Custom handler for the close icon's click. */ onCloseClick?: (event: React.MouseEvent) => void; } export declare enum PopoverBehavior { Immediate = "immediate", Delayed = "delayed", DelayedClosing = "delayedClosing" } interface PopoverWithBehavior { /** How the tooltip opens/closes when `openOnHover` is enabled (without * delay / with delay / delay only on close). Will not be applied if * `delayOpening` or `delayClosing` are passed. */ behavior: PopoverBehavior; delayOpening?: never; delayClosing?: never; } declare type PopoverWithDelays = { behavior?: never; /** Tune how much tooltip's opening is delayed when `openOnHover` is enabled. * It is recommended to use `behavior` */ delayOpening?: number; /** Tune how much tooltip's closing is delayed when `autoclosable` is enabled. * It is recommended to use `behavior` */ delayClosing?: number; }; declare type PopoverBehaviorProps = PopoverWithBehavior | PopoverWithDelays; interface PopoverDefaultProps { /** Set the control's offset
```{ top: 0, left: 0 }``` */ offset: { top?: number; left?: number; }; /** Links under the content, expects objects like
* ```{ text: 'Link 1', href: 'https://yandex.ru'}``` or
* ```{ text: 'Link 2', onClick: () => callbackOnLinkClick() }``` */ links: Array<{ text: string; href?: string; target?: '_self' | '_blank'; onClick?: (event: React.MouseEvent) => void; }>; /** the directions for opening the tooltip */ placement: PopupPlacement; /** whether the tooltip has tail */ hasArrow: boolean; /** whether the tooltip opens when hovered */ openOnHover: boolean; /** whether the tooltip automatically closes when cursor moves outside it */ autoclosable: boolean; /** tooltip's theme */ theme: 'info' | 'special' | 'announcement'; /** tooltip's size */ size: 's' | 'l'; /** Whether the tooltip has close icon */ hasClose: boolean; /** Whether the tooltip should render initially open */ initialOpen: boolean; /** Whether the tooltip should render disabled */ disabled: boolean; /** Force styles for links */ forceLinksAppearance: boolean; } export declare type PopoverProps = PopoverExternalProps & PopoverBehaviorProps & Partial; interface PopoverState { open: boolean; } export declare class Popover extends React.Component { static defaultProps: PopoverDefaultProps; state: PopoverState; private controlRef; private delayOpening; private delayClosing; private closedManually; private delayByBehavior; private shouldBeOpen; componentDidUpdate(prevProps: PopoverProps): void; componentWillUnmount(): void; render(): JSX.Element; openTooltip: () => void; closeTooltip: () => void; private setTooltipOpen; private get delay(); private openTooltipDelayed; private closeTooltipDelayed; private unsetOpeningTimeout; private unsetClosingTimeout; private renderTooltip; private renderTitle; private renderContent; private renderLinks; private renderButtons; private renderButton; private renderClose; private getButtonView; private toggleTooltip; private onMouseEnter; private onMouseLeave; private onClick; private onCloseClick; } export {};