import { ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, OnInit, AfterViewInit, Renderer2, SimpleChanges, TemplateRef } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { Observable, Subscription } from 'rxjs';
import { WindowRef } from '@duoduo-oba/ng-devui/window-ref';
import { I18nService, I18nInterface } from '@duoduo-oba/ng-devui/i18n';
import { VerticalConnectionPos, ConnectedOverlayPositionChange, CdkOverlayOrigin, CdkConnectedOverlay } from '@angular/cdk/overlay';
export declare class SelectComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy, OnChanges {
    private renderer;
    private windowRef;
    private changeDetectorRef;
    private i18n;
    private ngZone;
    isOpen: boolean;
    /**
     * 【必选】下拉选项资源，支持Array<string>, Array<{key: value}>
     */
    options: any[];
    /**
     * 【可选】是否支持过滤搜索
     */
    isSearch: boolean;
    /**
     * 【可选】是否支持聚焦自动展开下拉
     */
    toggleOnFocus: boolean;
    /**
     * 【可选】下拉菜单高度，建议使用px作为高度单位
     */
    scrollHight: string;
    /**
     * 【可选】下拉高亮css
     */
    hightLightItemClass: string;
    /**
     * 【当传入资源（options）类型为Array<{key: value}，必选】针对传入资源options的每项对应字段做过滤操作
     */
    filterKey: string;
    /**
     * 【可选】是否支持多选
     */
    multiple: boolean;
    /**
     * 【可选】是否支持全选
     */
    isSelectAll: boolean;
    /**
     * 【可选】是否可以输入
     */
    readonly: boolean;
    /**
     * 【可选】下拉选框尺寸
     */
    size: '' | 'sm' | 'lg';
    /**
     * 【可选】是否appendToBody
     */
    appendToBody: boolean;
    /**
     * 【可选】cdk模式origin width
     */
    width: number;
    /**
     * 【可选】模板高度
     */
    templateItemSize: number;
    /**
     * 【可选】是否禁用下拉框
     */
    disabled: boolean;
    /**
     * 【可选】下拉默认显示文字
     */
    placeholder: string;
    /**
     * 【可选】搜索函数，当需要自定义下拉选择过滤规则时可以使用
     *  请保证返回值有id和option字段，id是确保尤其多选的时候能正确索引对应选项
     *  简单实现参考：
     *  search = (term) => {
     *    return of(
     *     [Lily, May, Jorsh, Shiwa, Nanth]
     *     .map((option, index) => ({id: index, option: option}))
     *     .filter(item => item.option.name.toLowerCase().indexOf(term.toLowerCase()) !== -1)
     *   );
     *  }
     */
    searchFn: (term: string) => Observable<Array<{
        id: string | number;
        option: any;
    }>>;
    /**
     * 【可选】决定选择框文字如何显示，默认显示filterKey字段或者本身的值
     */
    valueParser: (item: any) => any;
    /**
     * 【可选】决定下拉框没项文字如何显示，默认显示filterKey字段或者本身的值
     */
    formatter: (item: any) => string;
    direction: 'up' | 'down' | 'auto';
    overview: 'border' | 'underlined';
    /**
     *  【可选】是否开启clear功能（是否开启只对单选生效）
     */
    allowClear: boolean;
    readonly isClearIconShow: any;
    color: any;
    /**
     *  【可选】启用数据懒加载，默认不启用
     */
    enableLazyLoad: boolean;
    /**
     * 是否虚拟滚动
     */
    virtualScroll: any;
    /**
     * 非必填，如传入，会忽略ContentChild
     */
    inputItemTemplate: TemplateRef<any>;
    itemTemplate: TemplateRef<any>;
    /**
     * 输出函数，当选中某个选项项后，将会调用此函数，参数为当前选择项的值。如果需要获取所有选择状态的值，请参考(ngModelChange)方法
     */
    valueChange: EventEmitter<any>;
    i18nCommonText: I18nInterface['common'];
    i18nSubscription: Subscription;
    /**
     * select下拉toggle事件，值为true或false
     */
    toggleChange: EventEmitter<any>;
    loadMore: EventEmitter<any>;
    extraConfig: {
        labelization?: {
            enable: boolean;
            overflow?: 'normal' | 'scroll-y' | 'multiple-line' | string;
            containnerMaxHeight?: string;
            labelMaxWidth?: string;
        };
        selectedItemWithTemplate?: {
            enable: boolean;
        };
        [featrue: string]: any;
    };
    /**
     * 【当传入资源（options）类型为Array<{key: value}，必选】针对传入资源options的每项对应字段做禁用操作的key
     */
    optionDisabledKey: string;
    /**
     * 【当传入资源（options）类型为Array<{key: value}，必选】针对传入资源options的每项对应字段禁止变更的key
     */
    optionImmutableKey: string;
    /**
     * 【可选】配置无数据展示
     */
    noResultItemTemplate: TemplateRef<any>;
    /**
     * 【可选】配置多选的时候是否维持原数组排序还是用户选择的顺序排序，默认是用户顺序
     */
    keepMultipleOrder: 'origin' | 'user-select';
    customViewTemplate: TemplateRef<any>;
    /**
     * customViewTemplate的方向，支持下方和右方
     */
    customViewDirection: 'bottom' | 'right';
    autoFocus: boolean;
    notAutoScroll: boolean;
    selectInputElement: ElementRef;
    selectMenuElement: ElementRef;
    selectBoxElement: ElementRef;
    selectInputWithTemplateElement: ElementRef;
    selectInputWithLabelElement: ElementRef;
    filterInputElement: ElementRef;
    dropdownUl: ElementRef;
    connectedOverlay: CdkConnectedOverlay;
    showLoading: boolean;
    _isOpen: boolean;
    menuPosition: VerticalConnectionPos;
    halfChecked: boolean;
    allChecked: boolean;
    isMouseEvent: boolean;
    filter: string;
    activeIndex: number;
    availableOptions: any[];
    multiItems: any[];
    popDirection: 'top' | 'bottom';
    selectIndex: number;
    _inputValue: any;
    virtualScrollItemSize: any;
    cdkConnectedOverlayOrigin: CdkOverlayOrigin;
    private sourceSubscription;
    private filterSubscription;
    value: any;
    private resetting;
    private onChange;
    private onTouch;
    constructor(renderer: Renderer2, windowRef: WindowRef, changeDetectorRef: ChangeDetectorRef, i18n: I18nService, ngZone: NgZone);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    ngOnChanges(changes: SimpleChanges): void;
    setI18nText(): void;
    getVirtualScrollHeight(len: any, size: any): string;
    getVirtualScrollItemSize(size: any): any;
    resetSource(): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    registerFilterChange(): void;
    searchInputValueChangeEvent(): void;
    writeValue(obj: any): void;
    writeIntoInput(value: any): void;
    setAvailableOptions(): void;
    choose: (option: any, index: any, $event?: Event) => void;
    updateCdkConnectedOverlayOrigin(): void;
    autoToggle($event: any): void;
    setMouseEventTrue(event: any): void;
    setMouseEventFalse(event: any): void;
    toggle(): void;
    isBottomRectEnough(): boolean;
    setDocumentClickListener(): void;
    onDocumentClick: ($event: Event) => void;
    onEscKeyup($event: any): void;
    handleKeyUpEvent($event: any): void;
    handleKeyDownEvent($event: any): void;
    scrollToActive(): void;
    handleKeyEnterEvent($event: any): void;
    removeItem(item: any, $event: any): void;
    selectAll(): void;
    trackByFn(index: any, item: any): any;
    trackByOptionPointer(index: any, item: any): any;
    loadMoreEvent(event: any): void;
    loadFinish(): void;
    loadStart(): void;
    onPositionChange(position: ConnectedOverlayPositionChange): void;
    animationEnd($event: any): void;
    setChecked(selectedItem: any): void;
    showSelectAll(): boolean;
    forceSearchNext(): void;
    valueClear($event: any): void;
    resetStatus(): void;
}
