import * as i0 from '@angular/core';
import { OnDestroy, ElementRef, NgZone } from '@angular/core';

/**
 * Optimization for Treeshaking: https://angular.io/guide/lightweight-injection-tokens
 */
declare abstract class NgClickOutsideExcludeToken {
    abstract isExclude(target: any): boolean;
}
/**
 * Directive to exclude elements from the click-outside
 */
declare class NgClickOutsideExcludeDirective extends NgClickOutsideExcludeToken {
    /**
     * A comma-separated string of DOM element queries to exclude when clicking outside of the element.
     * For example: `[exclude]="'button,.btn-primary'"`.
     */
    clickOutsideExclude: i0.InputSignal<string>;
    private document;
    excludeCheck(): HTMLElement[];
    isExclude(target: any): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgClickOutsideExcludeDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgClickOutsideExcludeDirective, "[clickOutsideExclude]", never, { "clickOutsideExclude": { "alias": "clickOutsideExclude"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 * Directive to detect clicks outside of the current element
 *
 * ```typescript
 * @Component({
 *   selector: 'app',
 *   template: `
 *     <div (clickOutside)="onClickedOutside($event)">Click outside this</div>
 *   `
 * })
 * export class AppComponent {
 *   onClickedOutside(e: Event) {
 *     console.log('Clicked outside:', e);
 *   }
 * }
 * ```
 */
declare class NgClickOutsideDirective implements OnDestroy {
    /**
     * Enables directive.
     */
    clickOutsideEnabled: i0.InputSignalWithTransform<boolean, unknown>;
    /**
     * A comma-separated list of events to cause the trigger.
     * ### For example, for additional mobile support:
     * `[clickOutsideEvents]="'click,touchstart'"`
     */
    clickOutsideEvents: i0.InputSignalWithTransform<string[], string | string[]>;
    /**
     * Outside Click Event
     */
    clickOutside: i0.OutputEmitterRef<Event>;
    excludeDirective: NgClickOutsideExcludeToken | null;
    protected _el: ElementRef<any>;
    protected _ngZone: NgZone;
    private document;
    lastRemoved?: Node[];
    mutationObserver?: MutationObserver;
    constructor();
    ngOnDestroy(): void;
    protected _init(): void;
    protected _initOnClickBody(): void;
    protected _emit(ev: Event): void;
    protected initListener(): void;
    private initMutationObserver;
    protected _initClickOutsideListener(): void;
    protected _removeClickOutsideListener(): void;
    private _onClickBody;
    protected gotRemoved(target: Node, list?: Node[] | undefined): boolean;
    private resetLastRemovedList;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgClickOutsideDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgClickOutsideDirective, "[clickOutside]:not([delayClickOutsideInit]):not([attachOutsideOnClick])", never, { "clickOutsideEnabled": { "alias": "clickOutsideEnabled"; "required": false; "isSignal": true; }; "clickOutsideEvents": { "alias": "clickOutsideEvents"; "required": false; "isSignal": true; }; }, { "clickOutside": "clickOutside"; }, never, never, true, never>;
}

/**
 * Directive only starts after a single click and the outside click event handler
 * will then be removed after a click outside has occurred.
 */
declare class NgClickOutsideAttachOutsideDirective extends NgClickOutsideDirective implements OnDestroy {
    /**
     * By default, the outside click event handler is automatically attached.
     *
     * Explicitely setting this to `true`sets the handler after the element is clicked. The outside click event handler
     * will then be removed after a click outside has occurred.
     */
    attachOutsideOnClick: i0.InputSignalWithTransform<boolean, unknown>;
    constructor();
    ngOnDestroy(): void;
    protected _init(): void;
    protected _emit(ev: Event): void;
    protected _initAttachOutsideOnClickListener(): void;
    protected _removeAttachOutsideOnClickListener(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgClickOutsideAttachOutsideDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgClickOutsideAttachOutsideDirective, "[clickOutside][attachOutsideOnClick]", never, { "attachOutsideOnClick": { "alias": "attachOutsideOnClick"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 * Click oustside Directive but with an setTimeout on the listener
 * This may help for items that are conditionally shown ([see issue #13](https://github.com/arkon/ng-click-outside/issues/13)).
 */
declare class NgClickOutsideDelayOutsideDirective extends NgClickOutsideDirective {
    /**
     * Delays the initialization of the click outside handler.
     * This may help for items that are conditionally shown ([see issue #13](https://github.com/arkon/ng-click-outside/issues/13)).
     */
    delayClickOutsideInit: i0.InputSignalWithTransform<boolean, unknown>;
    protected _initOnClickBody(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgClickOutsideDelayOutsideDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgClickOutsideDelayOutsideDirective, "[clickOutside][delayClickOutsideInit]", never, { "delayClickOutsideInit": { "alias": "delayClickOutsideInit"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 *  emits an event when user clicks outside of applications' window while it's visible.
 *  Especially useful if page contains iframes.
 */
declare class NgClickOutsideEmitOnBlurDirective implements OnDestroy {
    private _ngZone;
    private document;
    blurWindow: i0.OutputEmitterRef<Event>;
    constructor();
    ngOnDestroy(): void;
    private _initWindowBlurListener;
    /**
     * Resolves problem with outside click on iframe
     * @see https://github.com/arkon/ng-click-outside/issues/32
     */
    private _onWindowBlur;
    private _removeWindowBlurListener;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgClickOutsideEmitOnBlurDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgClickOutsideEmitOnBlurDirective, "[clickOutsideEmitOnBlur]", never, {}, { "blurWindow": "blurWindow"; }, never, never, true, never>;
}

export { NgClickOutsideAttachOutsideDirective, NgClickOutsideDelayOutsideDirective, NgClickOutsideDirective, NgClickOutsideEmitOnBlurDirective, NgClickOutsideExcludeDirective, NgClickOutsideExcludeToken };
