import BaseFoundation, { DefaultAdapter } from '../base/foundation';
import { BasicOptionProps } from './optionFoundation';
export interface SelectAdapter<P = Record<string, any>, S = Record<string, any>> extends DefaultAdapter<P, S> {
    getTriggerWidth(): number;
    updateFocusState(focus: boolean): void;
    focusTrigger(): void;
    unregisterClickOutsideHandler(): void;
    setOptionWrapperWidth(width: string | number): void;
    getOptionsFromChildren(): BasicOptionProps[];
    updateOptions(options: BasicOptionProps[]): void;
    rePositionDropdown(): void;
    updateFocusIndex(index: number): void;
    updateSelection(selection: Map<any, any>): void;
    openMenu(cb?: () => void): void;
    notifyDropdownVisibleChange(visible: boolean): void;
    registerClickOutsideHandler(event: any): void;
    toggleInputShow(show: boolean, cb: () => void): void;
    closeMenu(): void;
    notifyCreate(option: BasicOptionProps): void;
    getMaxLimit(): number;
    getSelections(): Map<any, any>;
    notifyMaxLimit(arg: BasicOptionProps): void;
    notifyClear(): void;
    updateInputValue(inputValue: string): void;
    focusInput(): void;
    focusDropdownInput(): void;
    notifySearch(inputValue: string, event?: any): void;
    registerKeyDown(handler: () => void): void;
    unregisterKeyDown(): void;
    notifyChange(value: string | BasicOptionProps | (string | BasicOptionProps)[]): void;
    notifySelect(value: BasicOptionProps['value'], option: BasicOptionProps): void;
    notifyDeselect(value: BasicOptionProps['value'], option: BasicOptionProps): void;
    notifyBlur(event: any): void;
    notifyFocus(event: any): void;
    notifyListScroll(event: any): void;
    notifyMouseLeave(event: any): void;
    notifyMouseEnter(event: any): void;
    updateHovering(isHover: boolean): void;
    updateScrollTop(index?: number): void;
    updateOverflowItemCount(count: number): void;
    getContainer(): any;
    getFocusableElements(node: any): any[];
    getActiveElement(): any;
    setIsFocusInContainer(isFocusInContainer: boolean): void;
    getIsFocusInContainer(): boolean;
    on(eventName: string, eventCallback: () => void): void;
    off(eventName: string): void;
    emit(eventName: string): void;
    once(eventName: string, eventCallback: () => void): void;
}
type LabelValue = string | number;
type PropValue = LabelValue | Record<string, any>;
export default class SelectFoundation extends BaseFoundation<SelectAdapter> {
    constructor(adapter: SelectAdapter);
    _keydownHandler: (...arg: any[]) => void | null;
    init(): void;
    focus(): void;
    _focusTrigger(): void;
    destroy(): void;
    _setDropdownWidth(): void;
    _collectOptions(): BasicOptionProps[];
    _setDefaultSelection(originalOptions: BasicOptionProps[]): void;
    handleOptionListChange(): void;
    handleOptionListChangeHadDefaultValue(): void;
    handleValueChange(value: PropValue): void;
    _update(propValue: PropValue, originalOptions: BasicOptionProps[]): void;
    _updateSingle(propValue: PropValue, originalOptions: BasicOptionProps[]): Map<any, any>;
    _updateMultiple(propValue: PropValue[], originalOptions: BasicOptionProps[]): Map<any, any>;
    _isMultiple(): any;
    _isDisabled(): any;
    _isFilterable(): boolean;
    handleClick(e: any): void;
    open(acInput?: string, originalOptions?: BasicOptionProps[]): void;
    toggle2SearchInput(isShow: boolean): void;
    close(closeConfig?: {
        event?: any;
        closeCb?: () => void;
        notToggleInput?: boolean;
    }): void;
    onSelect(option: BasicOptionProps, optionIndex: number, event: MouseEvent | KeyboardEvent): void;
    _handleSingleSelect({ value, label, ...rest }: BasicOptionProps, event: any): void;
    _handleMultipleSelect({ value, label, ...rest }: BasicOptionProps, event: MouseEvent | KeyboardEvent): void;
    clearSelected(): void;
    updateOptionsActiveStatus(selections: Map<any, any>, options?: BasicOptionProps[]): void;
    removeTag(item: BasicOptionProps): void;
    clearInput(event?: any): void;
    focusInput(): void;
    handleInputChange(sugInput: string, event: any): void;
    _filterOption(originalOptions: BasicOptionProps[], sugInput: string): BasicOptionProps[];
    _createOptionByInput(allowCreate: boolean, optionsAfterFilter: BasicOptionProps[], sugInput: string): BasicOptionProps[];
    bindKeyBoardEvent(): void;
    unBindKeyBoardEvent(): void;
    _handleKeyDown(event: KeyboardEvent): void;
    handleContainerKeyDown(event: any): void;
    _getEnableFocusIndex(offset: number): void;
    _handleArrowKeyDown(offset: number): void;
    _handleTabKeyDown(event: any): void;
    _handlePanelOpenTabKeyDown(focusableElements: any[], event: any): void;
    _handlePanelOpenShiftTabKeyDown(focusableElements: any[], event: any): void;
    _handleEnterKeyDown(event: KeyboardEvent): void;
    _handleBackspaceKeyDown(): void;
    _notifyChange(selections: Map<any, any>): void;
    _removeInternalKey(option: BasicOptionProps): {
        [x: string]: any;
        value?: string | number;
        label?: string | number | unknown;
        children?: unknown;
        disabled?: boolean;
        showTick?: boolean;
        className?: string;
        style?: Record<string, any>;
    };
    _notifySelect(value: BasicOptionProps['value'], option: BasicOptionProps): void;
    _notifyDeselect(value: BasicOptionProps['value'], option: BasicOptionProps): void;
    _diffSelections(selections: Map<any, any>, oldSelections: Map<any, any>, isMultiple: boolean): boolean;
    _notifyChangeWithObject(selections: Map<any, any>): void;
    _notifyBlur(e: FocusEvent): void;
    _notifyFocus(e: FocusEvent): void;
    handleMouseEnter(e: MouseEvent): void;
    handleMouseLeave(e: MouseEvent): void;
    handleClearClick(e: MouseEvent): void;
    handleKeyPress(e: KeyboardEvent): void;
    handleClearBtnEnterPress(e: KeyboardEvent): void;
    handleOptionMouseEnter(optionIndex: number): void;
    handleListScroll(e: any): void;
    handleTriggerFocus(e: any): void;
    handleTriggerBlur(e: FocusEvent): void;
    handleInputBlur(e: any): void;
    selectAll(): void;
    /**
     * Check whether the props
     *  -defaultValue/value in multiple selection mode is array
     * @param {Object} props
     */
    checkMultipleProps(props?: Record<string, any>): void;
    updateScrollTop(): void;
    updateOverflowItemCount(selectionLength: number, overFlowCount?: number): void;
    updateIsFullTags(): void;
    handlePopoverClose(): void;
    handleSlotMouseEnter(): void;
}
export {};
