import { Renderer2 } from '@angular/core';

/**
 * @copyright Valor Software
 * @copyright Angular ng-bootstrap team
 */
declare class Trigger {
    open: string;
    close?: string;
    constructor(open: string, close?: string);
    isManual(): boolean;
}

/**
 * @copyright Valor Software
 * @copyright Angular ng-bootstrap team
 */

type BsEventCallback = (event?: any) => boolean | void;
interface ListenOptions {
    target?: HTMLElement;
    targets?: HTMLElement[];
    triggers?: string;
    outsideClick?: boolean;
    outsideEsc?: boolean;
    show?: BsEventCallback;
    hide?: BsEventCallback;
    toggle?: BsEventCallback;
}
declare function parseTriggers(triggers?: string, aliases?: any): Trigger[];
declare function listenToTriggers(renderer: Renderer2, target: any, triggers: string, showFn: BsEventCallback, hideFn: BsEventCallback, toggleFn: BsEventCallback): () => void;
declare function listenToTriggersV2(renderer: Renderer2, options: ListenOptions): () => void;
declare function registerOutsideClick(renderer: Renderer2, options: ListenOptions): Function;
declare function registerEscClick(renderer: Renderer2, options: ListenOptions): Function;

type AvailableBsVersions = 'bs4' | 'bs5';
interface IObjectKeys {
    [key: string]: boolean;
}
interface IBsVersion extends IObjectKeys {
    isBs4: boolean;
    isBs5: boolean;
}
declare enum BsVerions {
    isBs4 = "bs4",
    isBs5 = "bs5"
}
declare function setTheme(theme: AvailableBsVersions): void;
declare function getBsVer(): IBsVersion;
declare function currentBsVersion(): AvailableBsVersions;

interface ListNode<T> {
    value: T;
    next?: ListNode<T>;
    previous?: ListNode<T>;
}
declare class LinkedList<T> {
    length: number;
    protected head?: ListNode<T>;
    protected tail?: ListNode<T>;
    protected current?: ListNode<T>;
    protected asArray: T[];
    get(position: number): T | undefined;
    add(value: T, position?: number): void;
    remove(position?: number): void;
    set(position: number, value: T): void;
    toArray(): T[];
    findAll(fn: (value: T, index: number) => boolean): {
        index: number;
        value: T;
    }[];
    push(...args: T[]): number;
    pop(): T | undefined;
    unshift(...args: T[]): number;
    shift(): T | undefined;
    forEach(fn: (value: T, index: number) => void): void;
    indexOf(value: T): number;
    some(fn: (value: T) => boolean): boolean;
    every(fn: (value: T) => boolean): boolean;
    toString(): string;
    find(fn: (value: T, index: number) => boolean): T | void;
    findIndex(fn: (value: T, index: number) => boolean): number;
    protected getNode(position: number): ListNode<T> | undefined;
    protected createInternalArrayRepresentation(): void;
}

declare function OnChange(): any;

declare class Utils {
    static reflow(element: any): void;
    static getStyles(elem: any): any;
    static stackOverflowConfig(): {
        crossorigin?: string;
        integrity?: string;
        cdnLink: string;
    };
}

/**
 * @license
 * Copyright Google Inc. All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */
/**
 * JS version of browser APIs. This library can only run in the browser.
 */
declare const win: any;

declare const document: any;

declare function warnOnce(msg: string): void;

export { BsVerions, LinkedList, OnChange, Trigger, Utils, currentBsVersion, document, getBsVer, listenToTriggers, listenToTriggersV2, parseTriggers, registerEscClick, registerOutsideClick, setTheme, warnOnce, win as window };
export type { AvailableBsVersions, BsEventCallback, IBsVersion, ListenOptions };
