import { ChangeDetectorRef, ElementRef, EventEmitter, Injector, OnChanges, OnDestroy, OnInit, Renderer2, TemplateRef } from '@angular/core';
import { ControlValueAccessor, FormControl } from '@angular/forms';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { UniqueIdService } from '@ironsource/fusion-ui/services/unique-id';
import { ClonePipe } from '@ironsource/fusion-ui/pipes/clone';
import { FilterByFieldPipe } from '@ironsource/fusion-ui/pipes/collection';
import { DynamicComponentConfiguration } from '@ironsource/fusion-ui/components/dynamic-components/common/entities';
import { SharedEventsService } from '@ironsource/fusion-ui/services/events-handler';
import { IconData } from '@ironsource/fusion-ui/components/icon/v1';
import { DropdownService } from '@ironsource/fusion-ui/components/dropdown/service';
import { DropdownOption } from '@ironsource/fusion-ui/components/dropdown-option/entities';
import { DropdownSearchComponent } from '@ironsource/fusion-ui/components/dropdown-search';
import { DropdownSelectComponent } from '@ironsource/fusion-ui/components/dropdown-select';
import { DropdownSelectConfigurations } from '@ironsource/fusion-ui/components/dropdown-select/entities';
import { BackendPagination, ClosedOptions, DropdownPlaceholderConfiguration } from '@ironsource/fusion-ui/components/dropdown/entities';
import { ApiBase } from '@ironsource/fusion-ui/components/api-base';
import { DropdownTestIdModifiers } from '@ironsource/fusion-ui/entities';
import { TestIdsService } from '@ironsource/fusion-ui/services/test-ids';
import * as i0 from "@angular/core";
export declare abstract class DropdownBaseComponent extends ApiBase implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {
    /** @ignore */
    dropdownService: DropdownService;
    protected uniqueIdService: UniqueIdService;
    protected element: ElementRef;
    protected renderer: Renderer2;
    protected filterByFieldPipe: FilterByFieldPipe;
    /** @ignore */
    cdr: ChangeDetectorRef;
    protected clonePipe: ClonePipe;
    protected sharedEventsService: SharedEventsService;
    protected injector: Injector;
    testId: string;
    set options(value: DropdownOption[]);
    /** @ignore */
    set optionsGroups(value: Array<any>);
    /** @ignore */
    optionsChange: EventEmitter<DropdownOption[]>;
    /** @ignore */
    selected: DropdownOption[];
    /** @ignore */
    selectedChange: EventEmitter<DropdownOption[]>;
    /** @internal */
    placeholderPrefix: string;
    /** @internal */
    searchPlaceholder: string;
    /** @internal */
    placeholderWidth: string;
    /** @ignore - add to story later*/
    dynamicPlaceholder: DynamicComponentConfiguration;
    /**
     * @deprecated since version 6.0.0
     * @ignore
     */
    icon: IconData;
    /** @internal */
    filterIconName: string;
    /** @internal */
    isIconRightPosition: boolean;
    /** @internal */
    isDisabled: boolean;
    /** @internal */
    readonly: boolean;
    /** @internal */
    search: boolean;
    /** @internal */
    autoComplete: boolean;
    /** @internal */
    mappingOptions: any;
    /** @internal */
    limitOptions: number;
    /** @internal */
    set placeholderLocation(location: 'right' | 'left');
    /** @internal */
    set loading(value: boolean);
    /** @ignore */
    strictSearch: boolean;
    /** @ignore */
    arrowNavigation: boolean;
    /** @internal */
    set error(error: string);
    get error(): string;
    /** @ignore */
    set optionsTitle(value: string);
    /** @ignore */
    get optionsTitle(): string;
    /** @ignore */
    optionRightHoverText: any;
    /** @ignore */
    changeConfirmation: () => Promise<boolean>;
    /** @ignore */
    optionCloseIcon: boolean;
    /** @ignore */
    helper: string;
    /** @ignore */
    set backendPagination(value: BackendPagination);
    /** @ignore */
    isTabMode: boolean;
    /** @ignore */
    isMultiRawDisplay: boolean;
    /** @internal */
    set placeholder(value: string | DropdownPlaceholderConfiguration);
    /** @ignore */
    optionsRenderByHover: boolean;
    /** @internal */
    searchByProperties?: string[];
    /** @internal */
    searchChange: EventEmitter<any>;
    /** @internal */
    searchClear: EventEmitter<any>;
    /** @internal */
    optionCloseIconClicked: EventEmitter<any>;
    /** @internal */
    closed: EventEmitter<ClosedOptions>;
    /** @ignore */
    optionsHolderElRef: ElementRef;
    /** @ignore */
    searchComponent: DropdownSearchComponent;
    /** @ignore */
    selectComponent: DropdownSelectComponent;
    /** @ignore */
    chipContent: TemplateRef<any>;
    /** @ignore */
    trigger: ElementRef;
    /** @ignore */
    onDestroy$: Subject<void>;
    /** @ignore */
    forcePlaceholderOnSelection: boolean;
    /** @ignore */
    placeholderText: string;
    /** @ignore */
    placeholderIcon: IconData;
    /** @ignore */
    isOpen$: BehaviorSubject<boolean>;
    /** @ignore */
    id: any;
    /** @ignore */
    searchValue: FormControl<any>;
    /** @ignore */
    subject: Subject<unknown>;
    /** @ignore */
    labelImageSrc: string;
    /** @ignore */
    labelFlag: string;
    /** @ignore */
    isPredefinedTags: boolean;
    /** @ignore */
    isNotFoundPredefined: boolean;
    /** @ignore */
    isLoadingManuallyChanged: boolean;
    /** @ignore */
    pagination: {
        latestScrollHeight: any;
        counter: number;
        lastCounter: number;
        percentScrollDown: number;
        oneTimeFlagScroll: boolean;
    };
    /** @ignore */
    placeholder$: BehaviorSubject<string>;
    /** @ignore */
    searchPlaceholder$: BehaviorSubject<string>;
    /** @ignore */
    backendPaginationChanged$: Subject<any>;
    /** @ignore */
    displayedOptions$: BehaviorSubject<DropdownOption[]>;
    /** @ignore */
    displayedOptionsObservable$: Observable<DropdownOption[]>;
    /** @ignore */
    dropdownArrowIconName: {
        iconName: string;
        iconVersion: string;
    };
    /** @ignore */
    isAllSelected: boolean;
    /** @ignore */
    isIndeterminate: boolean;
    /** @ignore */
    optionSelected$: BehaviorSubject<any>;
    /** @ignore */
    chipDefaultContent: string;
    private _optionsTitle;
    protected _error: string;
    private _isLocatedRight;
    private _isLocatedLeft;
    private initPlaceholder;
    protected isDisabledForm: boolean;
    private initIcon;
    protected focusedLI: number;
    private loadingState;
    private backendPaginationState;
    private backendPaginationTotalResult;
    private backendPaginationPageNumber;
    private filteredOptionsState;
    protected optionsState: DropdownOption[];
    /** @ignore */
    dropdownSelectConfigurations$: BehaviorSubject<DropdownSelectConfigurations>;
    private parentWithOverflow;
    testIdDropdownModifiers: typeof DropdownTestIdModifiers;
    testIdsService: TestIdsService;
    get testAttribute(): string;
    get filteredOptions(): DropdownOption[];
    get hasScroll(): boolean;
    get isLocatedLeft(): boolean;
    get isLocatedRight(): boolean;
    get loading(): boolean;
    get options(): DropdownOption[];
    get isMulti(): boolean;
    constructor(
    /** @ignore */
    dropdownService: DropdownService, uniqueIdService: UniqueIdService, element: ElementRef, renderer: Renderer2, filterByFieldPipe: FilterByFieldPipe, 
    /** @ignore */
    cdr: ChangeDetectorRef, clonePipe: ClonePipe, sharedEventsService: SharedEventsService, injector: Injector);
    ngOnInit(): void;
    /** @ignore */
    getDropdownSelectConfigurations(): DropdownSelectConfigurations;
    ngOnDestroy(): void;
    ngOnChanges(changes: any): void;
    /** @ignore */
    initListeners(): void;
    /**
     * Subscribe for that search text as been changed
     * @ignore
     */
    onSearchChange(): void;
    /**
     * Open dropdown windows
     * @ignore
     */
    openDropdown(event: MouseEvent): void;
    private _onDropdownOpened;
    /**
     * Close dropdwn windows
     * @ignore
     */
    closeDropdown({ clickOutside }?: ClosedOptions): void;
    /**
     * Set a label to dropdown main button
     * @ignore
     */
    setLabel(): void;
    /** @ignore */
    getHolderCSSClasses(): string[];
    /** @ignore */
    parseOptions(options: DropdownOption[]): DropdownOption[];
    /** @ignore */
    isSelected(option: any): boolean;
    /**
     * Add arrows key navigation for the drop-down
     * @ignore
     */
    keyEvent(event: KeyboardEvent): void;
    /** @ignore */
    onScroll($event: any): void;
    /**
     * select / remove option from selected list
     * @ignore
     */
    changeSelected({ option, $event }: {
        option?: any;
        $event?: any;
    }): void;
    /** @ignore */
    changeConfig(val: string): void;
    /** @ignore */
    valueSelected(): Observable<{
        value: any;
        isSelected: boolean;
    }>;
    /** @ignore */
    open(): void;
    /** @ignore */
    onCloseIconClicked(option: DropdownOption): void;
    private doChanges;
    /**
     * clear all options and notify.
     * @ignore
     */
    clearOptions(): void;
    /**
     * event from directive on outside component click
     * @ignore
     */
    onOutsideClick(target?: any): void;
    private getFirstSelectedLabel;
    private cloneOptions;
    private setLIFocused;
    private setOptionsAndLabel;
    private onBackendPaginationChanged;
    private onScrollReachEnd;
    private sortOptions;
    private isScrollReachEnd;
    /**
     * Calculate if need  options open above
     */
    protected calcOptionHolderPosition(): void;
    /**
     * Find first parent element with style overflow in 'auto', 'hidden', 'scroll'
     * - childEl
     */
    private getParentWithOverflow;
    protected resetOptionsStyle(): void;
    /**
     * Method to call when the component value has changes.
     * @ignore
     */
    propagateChange: (_: DropdownOption[]) => void;
    /**
     * update value from model to the component
     * @ignore
     */
    writeValue(value: any): void;
    /** @ignore */
    registerOnChange(fn: any): void;
    /** @ignore */
    registerOnTouched(): void;
    /** @ignore */
    setDisabledState?(isDisabled: boolean): void;
    private getDisplayedOptionsObservable;
    private apiBaseListeners;
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownBaseComponent, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownBaseComponent, never, never, { "testId": { "alias": "testId"; "required": false; }; "options": { "alias": "options"; "required": false; }; "optionsGroups": { "alias": "optionsGroups"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "placeholderPrefix": { "alias": "placeholderPrefix"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "placeholderWidth": { "alias": "placeholderWidth"; "required": false; }; "dynamicPlaceholder": { "alias": "dynamicPlaceholder"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "filterIconName": { "alias": "filterIconName"; "required": false; }; "isIconRightPosition": { "alias": "isIconRightPosition"; "required": false; }; "isDisabled": { "alias": "isDisabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "search": { "alias": "search"; "required": false; }; "autoComplete": { "alias": "autoComplete"; "required": false; }; "mappingOptions": { "alias": "mappingOptions"; "required": false; }; "limitOptions": { "alias": "limitOptions"; "required": false; }; "placeholderLocation": { "alias": "placeholderLocation"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "strictSearch": { "alias": "strictSearch"; "required": false; }; "arrowNavigation": { "alias": "arrowNavigation"; "required": false; }; "error": { "alias": "error"; "required": false; }; "optionsTitle": { "alias": "optionsTitle"; "required": false; }; "optionRightHoverText": { "alias": "optionRightHoverText"; "required": false; }; "changeConfirmation": { "alias": "changeConfirmation"; "required": false; }; "optionCloseIcon": { "alias": "optionCloseIcon"; "required": false; }; "helper": { "alias": "helper"; "required": false; }; "backendPagination": { "alias": "backendPagination"; "required": false; }; "isTabMode": { "alias": "isTabMode"; "required": false; }; "isMultiRawDisplay": { "alias": "isMultiRawDisplay"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "optionsRenderByHover": { "alias": "optionsRenderByHover"; "required": false; }; "searchByProperties": { "alias": "searchByProperties"; "required": false; }; }, { "optionsChange": "optionsChange"; "selectedChange": "selectedChange"; "searchChange": "searchChange"; "searchClear": "searchClear"; "optionCloseIconClicked": "optionCloseIconClicked"; "closed": "closed"; }, never, never, false, never>;
}
