import { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedOverlayPositionChange, ConnectedPosition, ScrollStrategy, ScrollStrategyOptions, VerticalConnectionPos } from '@angular/cdk/overlay';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, OnInit, Renderer2, SimpleChanges, TemplateRef } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { I18nInterface, I18nService } from 'ng-devui/i18n';
import { AppendToBodyDirection, AppendToBodyScrollStrategyType, DevConfigService } from 'ng-devui/utils';
import { WindowRef } from 'ng-devui/window-ref';
import { Observable, Subscription } from 'rxjs';
import * as i0 from "@angular/core";
export declare class SelectComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy, OnChanges {
    private doc;
    private renderer;
    private windowRef;
    private changeDetectorRef;
    private i18n;
    private ngZone;
    private el;
    private devConfigService;
    private scrollStrategyOption;
    /**
     * 【必选】下拉选项资源，支持Array<string>, Array<{key: value}>
     */
    options: any[];
    /**
     * 【可选】是否支持过滤搜索
     */
    isSearch: boolean;
    /**
     * 【可选】是否支持聚焦自动展开下拉
     */
    toggleOnFocus: boolean;
    /**
     * 【可选】下拉菜单高度，建议使用px作为高度单位
     */
    scrollHight: string;
    /**
     * 【可选】下拉高亮css
     */
    highlightItemClass: string;
    /**
     * 【当传入资源（options）类型为Array<{key: value}，必选】针对传入资源options的每项对应字段做过滤操作
     */
    filterKey: string;
    /**
     * 【当传入资源（options）类型为Array<{key: value}，可选】选项与选中值类型不一致时用于指定赋值属性
     */
    valueKey: string;
    /**
     * 【可选】是否支持多选
     */
    multiple: boolean;
    /**
     * 【可选】是否支持全选
     */
    isSelectAll: boolean;
    /**
     * 【可选】是否可以输入
     */
    readonly: boolean;
    /**
     * 【可选】下拉选框尺寸
     */
    size: '' | 'sm' | 'lg';
    /**
     * 【可选】是否appendToBody
     */
    appendToBody: boolean;
    /**
     * 【可选】cdk模式overlay Positions的控制
     */
    appendToBodyDirections: Array<AppendToBodyDirection | ConnectedPosition>;
    appendToBodyScrollStrategy: AppendToBodyScrollStrategyType;
    /**
     * 【可选】cdk模式origin width
     */
    width: number;
    /**
     * 【可选】模板高度
     */
    templateItemSize: number;
    /**
     * 【可选】是否禁用下拉框
     */
    disabled: boolean;
    /**
     * 【可选】下拉默认显示文字
     */
    placeholder: string;
    searchPlaceholder: 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;
    color: any;
    /**
     *  【可选】启用数据懒加载，默认不启用
     */
    enableLazyLoad: boolean;
    /**
     * 是否虚拟滚动
     */
    virtualScroll: any;
    /**
     * 非必填，如传入，会忽略ContentChild
     */
    inputItemTemplate: TemplateRef<any>;
    extraConfig: {
        labelization?: {
            enable: boolean;
            overflow?: 'normal' | 'scroll-y' | 'multiple-line' | string;
            containerMaxHeight?: string;
            /**
             * @deprecated
             */
            containnerMaxHeight?: string;
            labelMaxWidth?: string;
            maxTags?: number;
        };
        selectedItemWithTemplate?: {
            enable: boolean;
        };
        enableFocusFirstFilteredOption?: boolean;
        [feature: 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' | 'left' | 'top';
    autoScrollIntoActive: boolean;
    autoFocus: boolean;
    notAutoScroll: boolean;
    loadingTemplateRef: TemplateRef<any>;
    showItemTitle: boolean;
    showAnimation: boolean;
    styleType: string;
    showGlowStyle: boolean;
    beforeChange: (index: any, option: any, action: any) => boolean | Promise<boolean> | Observable<boolean>;
    /**
     * select下拉toggle事件，值为true或false
     */
    toggleChange: EventEmitter<boolean>;
    loadMore: EventEmitter<any>;
    /**
     * 输出函数，当选中某个选项项后，将会调用此函数，参数为当前选择项的值。如果需要获取所有选择状态的值，请参考(ngModelChange)方法
     */
    valueChange: EventEmitter<any>;
    itemTemplate: TemplateRef<any>;
    selectWrapper: ElementRef;
    selectInputElement: ElementRef;
    selectMenuElement: ElementRef;
    selectBoxElement: ElementRef;
    selectInputWithTemplateElement: ElementRef;
    selectInputWithLabelElement: ElementRef;
    filterInputElement: ElementRef;
    dropdownUl: ElementRef;
    connectedOverlay: CdkConnectedOverlay;
    virtualScrollViewport: CdkVirtualScrollViewport;
    get hasGlowStyle(): boolean;
    set isOpen(value: boolean);
    get isOpen(): boolean;
    get isClearIconShow(): any;
    get showMoreTags(): any;
    get moreTagsNum(): string;
    _inputValue: any;
    _isOpen: boolean;
    allChecked: boolean;
    halfChecked: boolean;
    isMouseEvent: boolean;
    showLoading: boolean;
    startAnimation: boolean;
    limitMaxHeight: boolean;
    availableOptions: any[];
    multiItems: any[];
    value: any;
    filter: string;
    activeIndex: number;
    selectIndex: number;
    popDirection: 'top' | 'bottom';
    menuPosition: VerticalConnectionPos;
    i18nCommonText: I18nInterface['common'];
    i18nSubscription: Subscription;
    document: Document;
    dropDownWidth: number;
    scrollHeightNum: number;
    lastCloseScrollHeight: number;
    minBuffer: number;
    maxBuffer: number;
    scrollStrategy: ScrollStrategy;
    cdkConnectedOverlayOrigin: CdkOverlayOrigin;
    overlayPositions: Array<ConnectedPosition>;
    virtualScrollViewportSizeMightChange: boolean;
    virtualScrollItemSize: any;
    CONTAINER_MARGINS: number;
    ANIMATION_DELAY: number;
    get showSelectAll(): boolean;
    private sourceSubscription;
    private filterSubscription;
    private resetting;
    private onChange;
    private onTouch;
    constructor(doc: any, renderer: Renderer2, windowRef: WindowRef, changeDetectorRef: ChangeDetectorRef, i18n: I18nService, ngZone: NgZone, el: ElementRef, devConfigService: DevConfigService, scrollStrategyOption: ScrollStrategyOptions);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    ngOnChanges(changes: SimpleChanges): void;
    setPositions(): void;
    setI18nText(): void;
    getVirtualScrollHeight(len: any, size: any): string;
    get realVirtualScrollItemSize(): any;
    resetSource(): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    registerFilterChange(): void;
    searchInputValueChangeEvent(): void;
    writeValue(value: any): void;
    writeIntoInput(value: any): void;
    setAvailableOptions(): void;
    getMultipleSelectedOption(): void;
    getSingleSelectedOption(): void;
    getOption(data: any, value: any, hasOption?: any): any;
    getOptionIndex(option: any): number;
    getValue: (item: any, key: any) => string;
    scrollIntoActive(): void;
    canChange(option: any, index: any, action: string): Promise<boolean>;
    choose: (option: any, index: any, $event?: Event, operate?: string) => void;
    updateCdkConnectedOverlayOrigin(): void;
    resetScrollTop(isClose?: boolean): 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, isSearchInput?: boolean): void;
    getSelectedItem: () => any;
    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;
    setAllChecked(): void;
    forceSearchNext(): void;
    valueClear($event: any): void;
    resetStatus(): void;
    clearText(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SelectComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "d-select", ["select"], { "options": { "alias": "options"; "required": false; }; "isSearch": { "alias": "isSearch"; "required": false; }; "toggleOnFocus": { "alias": "toggleOnFocus"; "required": false; }; "scrollHight": { "alias": "scrollHight"; "required": false; }; "highlightItemClass": { "alias": "highlightItemClass"; "required": false; }; "filterKey": { "alias": "filterKey"; "required": false; }; "valueKey": { "alias": "valueKey"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "isSelectAll": { "alias": "isSelectAll"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "size": { "alias": "size"; "required": false; }; "appendToBody": { "alias": "appendToBody"; "required": false; }; "appendToBodyDirections": { "alias": "appendToBodyDirections"; "required": false; }; "appendToBodyScrollStrategy": { "alias": "appendToBodyScrollStrategy"; "required": false; }; "width": { "alias": "width"; "required": false; }; "templateItemSize": { "alias": "templateItemSize"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "searchFn": { "alias": "searchFn"; "required": false; }; "valueParser": { "alias": "valueParser"; "required": false; }; "formatter": { "alias": "formatter"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "overview": { "alias": "overview"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "color": { "alias": "color"; "required": false; }; "enableLazyLoad": { "alias": "enableLazyLoad"; "required": false; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; }; "inputItemTemplate": { "alias": "inputItemTemplate"; "required": false; }; "extraConfig": { "alias": "extraConfig"; "required": false; }; "optionDisabledKey": { "alias": "optionDisabledKey"; "required": false; }; "optionImmutableKey": { "alias": "optionImmutableKey"; "required": false; }; "noResultItemTemplate": { "alias": "noResultItemTemplate"; "required": false; }; "keepMultipleOrder": { "alias": "keepMultipleOrder"; "required": false; }; "customViewTemplate": { "alias": "customViewTemplate"; "required": false; }; "customViewDirection": { "alias": "customViewDirection"; "required": false; }; "autoScrollIntoActive": { "alias": "autoScrollIntoActive"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "notAutoScroll": { "alias": "notAutoScroll"; "required": false; }; "loadingTemplateRef": { "alias": "loadingTemplateRef"; "required": false; }; "showItemTitle": { "alias": "showItemTitle"; "required": false; }; "showAnimation": { "alias": "showAnimation"; "required": false; }; "styleType": { "alias": "styleType"; "required": false; }; "showGlowStyle": { "alias": "showGlowStyle"; "required": false; }; "beforeChange": { "alias": "beforeChange"; "required": false; }; }, { "toggleChange": "toggleChange"; "loadMore": "loadMore"; "valueChange": "valueChange"; }, ["itemTemplate"], never, false, never>;
}
