import m from 'mithril';
import PopperJS, { Boundary } from 'popper.js';
import { IAttrs, Style } from '../../_shared';
import { AbstractComponent } from '../abstract-component';
import { IOverlayableAttrs } from '../overlay';
import { PopoverInteraction, PopoverPosition } from './popoverTypes';
export interface IPopoverAttrs extends IOverlayableAttrs, IAttrs {
/**
* Set the bounding box.
* see Here for more details
* @default 'window'
*/
boundariesEl?: Boundary | Element;
/** Close the popover on inner content click */
closeOnContentClick?: boolean;
/** Inner content */
content: m.Children;
/** Initial open when in uncontrolled mode */
defaultIsOpen?: boolean;
/**
* Toggles arrow visiblity
* @default true
*/
hasArrow?: boolean;
/**
* Duration of close delay on hover interaction
* @default 100
*/
hoverCloseDelay?: number;
/**
* Duration of open delay on hover interaction
* @default 0
*/
hoverOpenDelay?: number;
/**
* Trigger interaction to toggle visiblity
* @default 'click'
*/
interactionType?: PopoverInteraction;
/**
* Toggles visibility;
* Specifying this attr will place the Popover in controlled mode
* and will invoke the `onInteraction` callback for each open/close state change
*/
isOpen?: boolean;
/**
* Options to pass to the PopperJS instance;
* see HERE for more details
*/
modifiers?: PopperJS.Modifiers;
/**
* Position relative to trigger element
* @default 'bottom'
*/
position?: PopoverPosition;
/** Callback invoked in controlled mode when a popover action will modify the open state */
onInteraction?: (nextOpenState: boolean, e: Event) => void;
/**
* Toggles visibilty when trigger is keyboard focused;
* Only works when interactionType is hover or hover-trigger
*/
openOnTriggerFocus?: boolean;
/** Overlay HTML container class */
overlayClass?: string;
/** Overlay HTML container styles */
overlayStyle?: Style;
/** Trigger element */
trigger: m.Vnode;
/**
* Class added to trigger element on interaction
* @default 'cui-active'
*/
triggerActiveClass?: string;
}
export interface IPopoverTriggerAttrs extends IAttrs {
onclick?(e: Event): void;
onmouseenter?(e: MouseEvent): void;
onmouseleave?(e: MouseEvent): void;
onfocus?(e: Event): void;
onblur?(e: Event): void;
[htmlAttrs: string]: any;
}
export declare class Popover extends AbstractComponent {
private isOpen;
private popper?;
private trigger;
getDefaultAttrs(): IPopoverAttrs;
oninit(vnode: m.Vnode): void;
onbeforeupdate(vnode: m.Vnode, old: m.VnodeDOM): void;
onupdate(): void;
onremove(): void;
view(): m.Vnode;
private handleOpened;
private handleClosed;
private handleOverlayClose;
private createPopper;
private destroyPopper;
private setTriggerAttrs;
private handleInteraction;
private handlePopoverClick;
private handleTriggerClick;
private handleTriggerFocus;
private handleTriggerBlur;
private handleTriggerMouseEnter;
private handleTriggerMouseLeave;
private isHoverInteraction;
private isClickInteraction;
private get isControlled();
private getContentOffset;
}