import * as Popper from '@popperjs/core'; export type BasePlacement = Popper.BasePlacement; export type Placement = Popper.Placement; export type Content = | string | Element | DocumentFragment | ((ref: Element) => string | Element | DocumentFragment); export type SingleTarget = Element; export type MultipleTargets = string | Element[] | NodeList; export type Targets = SingleTarget | MultipleTargets; export interface ReferenceElement extends Element { _tippy?: Instance; } export interface PopperElement extends HTMLDivElement { _tippy?: Instance; } export interface LifecycleHooks { onAfterUpdate( instance: Instance, partialProps: Partial ): void; onBeforeUpdate( instance: Instance, partialProps: Partial ): void; onCreate(instance: Instance): void; onDestroy(instance: Instance): void; onHidden(instance: Instance): void; onHide(instance: Instance): void | false; onMount(instance: Instance): void; onShow(instance: Instance): void | false; onShown(instance: Instance): void; onTrigger(instance: Instance, event: Event): void; onUntrigger(instance: Instance, event: Event): void; onClickOutside(instance: Instance, event: Event): void; } export interface RenderProps { allowHTML: boolean; animation: string | boolean; arrow: boolean | string | SVGElement | DocumentFragment; content: Content; inertia: boolean; maxWidth: number | string; role: string; theme: string; zIndex: number; } export interface GetReferenceClientRect { (): ClientRect | DOMRect; contextElement?: Element; } export interface Props extends LifecycleHooks, RenderProps { animateFill: boolean; appendTo: 'parent' | Element | ((ref: Element) => Element); aria: { content?: 'auto' | 'describedby' | 'labelledby' | null; expanded?: 'auto' | boolean; }; delay: number | [number | null, number | null]; duration: number | [number | null, number | null]; followCursor: boolean | 'horizontal' | 'vertical' | 'initial'; getReferenceClientRect: null | GetReferenceClientRect; hideOnClick: boolean | 'toggle'; ignoreAttributes: boolean; inlinePositioning: boolean; interactive: boolean; interactiveBorder: number; interactiveDebounce: number; moveTransition: string; offset: | [number, number] | (({ placement, popper, reference, }: { placement: Placement; popper: Popper.Rect; reference: Popper.Rect; }) => [number, number]); placement: Placement; plugins: Plugin[]; popperOptions: Partial; render: | (( instance: Instance ) => { popper: PopperElement; onUpdate?: (prevProps: Props, nextProps: Props) => void; }) | null; showOnCreate: boolean; sticky: boolean | 'reference' | 'popper'; touch: boolean | 'hold' | ['hold', number]; trigger: string; triggerTarget: Element | Element[] | null; } export interface DefaultProps extends Omit { delay: number | [number, number]; duration: number | [number, number]; } export interface Instance { clearDelayTimeouts(): void; destroy(): void; disable(): void; enable(): void; hide(): void; hideWithInteractivity(event: MouseEvent): void; id: number; plugins: Plugin[]; popper: PopperElement; popperInstance: Popper.Instance | null; props: TProps; reference: ReferenceElement; setContent(content: Content): void; setProps(partialProps: Partial): void; show(): void; state: { isEnabled: boolean; isVisible: boolean; isDestroyed: boolean; isMounted: boolean; isShown: boolean; }; unmount(): void; } export interface TippyStatics { readonly currentInput: {isTouch: boolean}; readonly defaultProps: DefaultProps; setDefaultProps(partialProps: Partial): void; } export interface Tippy extends TippyStatics { (targets: SingleTarget, optionalProps?: Partial): Instance; } export interface Tippy extends TippyStatics { (targets: MultipleTargets, optionalProps?: Partial): Instance< TProps >[]; } declare const tippy: Tippy; // ============================================================================= // Addon types // ============================================================================= export interface DelegateInstance extends Instance { destroy(shouldDestroyTargetInstances?: boolean): void; } export interface Delegate { ( targets: SingleTarget, props: Partial & {target: string} ): DelegateInstance; } export interface Delegate { ( targets: MultipleTargets, props: Partial & {target: string} ): DelegateInstance[]; } export type CreateSingletonProps = TProps & { overrides: Array; }; export type CreateSingletonInstance = Instance< TProps > & { setInstances(instances: Instance[]): void; show(target?: ReferenceElement | Instance | number): void; showNext(): void; showPrevious(): void; }; export type CreateSingleton = ( tippyInstances: Instance[], optionalProps?: Partial> ) => CreateSingletonInstance>; declare const delegate: Delegate; declare const createSingleton: CreateSingleton; // ============================================================================= // Plugin types // ============================================================================= export interface Plugin { name?: string; defaultValue?: any; fn(instance: Instance): Partial>; } export interface AnimateFill extends Plugin { name: 'animateFill'; defaultValue: false; } export interface FollowCursor extends Plugin { name: 'followCursor'; defaultValue: false; } export interface InlinePositioning extends Plugin { name: 'inlinePositioning'; defaultValue: false; } export interface Sticky extends Plugin { name: 'sticky'; defaultValue: false; } declare const animateFill: AnimateFill; declare const followCursor: FollowCursor; declare const inlinePositioning: InlinePositioning; declare const sticky: Sticky; // ============================================================================= // Misc types // ============================================================================= export interface HideAllOptions { duration?: number; exclude?: Instance | ReferenceElement; } export type HideAll = (options?: HideAllOptions) => void; declare const hideAll: HideAll; declare const roundArrow: string; export default tippy; export { hideAll, delegate, createSingleton, animateFill, followCursor, inlinePositioning, sticky, roundArrow, };