import { OnDestroy, ElementRef } from '@angular/core';
import { AbstractSubscriptionDirective } from '@dereekb/dbx-core';
import { NgPopoverCloseEvent, NgPopoverRef } from 'ng-overlay-container';
import * as i0 from "@angular/core";
/**
 * Abstract class for showing and handling a popover ref.
 */
export declare abstract class AbstractPopoverRefDirective<T = unknown, R = unknown> extends AbstractSubscriptionDirective {
    private _popoverRef?;
    showPopover(origin?: ElementRef): void;
    private _showPopoverRef;
    protected abstract _makePopoverRef(origin?: ElementRef): NgPopoverRef<T, R>;
    protected _afterOpened(popoverRef: NgPopoverRef<T, R>): void;
    protected _afterClosed(value: NgPopoverCloseEvent<R>): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AbstractPopoverRefDirective<any, any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractPopoverRefDirective<any, any>, never, never, {}, {}, never, never, false, never>;
}
/**
 * {@link AbstractPopoverRefDirective} extension that includes open/closed events.
 */
export declare abstract class AbstractPopoverRefWithEventsDirective<T = unknown, R = unknown> extends AbstractPopoverRefDirective<T, R> implements OnDestroy {
    readonly popoverOpened: import("@angular/core").OutputEmitterRef<NgPopoverRef<T, R>>;
    readonly popoverClosed: import("@angular/core").OutputEmitterRef<NgPopoverCloseEvent<R>>;
    protected _afterOpened(popoverRef: NgPopoverRef<T, R>): void;
    protected _afterClosed(event: NgPopoverCloseEvent<R>): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<AbstractPopoverRefWithEventsDirective<any, any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractPopoverRefWithEventsDirective<any, any>, never, never, {}, { "popoverOpened": "popoverOpened"; "popoverClosed": "popoverClosed"; }, never, never, false, never>;
}
