import { WidgetBase } from '@dojo/framework/core/WidgetBase';
import { DNode } from '@dojo/framework/core/interfaces';
import { ThemedMixin, ThemedProperties } from '@dojo/framework/core/mixins/Themed';
import { FocusMixin, FocusProperties } from '@dojo/framework/core/mixins/Focus';
import { CustomAriaProperties, InputProperties } from '../common/interfaces';
/**
 * @type SelectProperties
 *
 * Properties that can be set on a Select component
 *
 * @property getOptionDisabled Function that accepts an option's data and index and returns a boolean
 * @property getOptionId       Function that accepts an option's data and index and returns a string id
 * @property getOptionLabel    Function that accepts an option's data and returns a DNode label
 * @property getOptionText     Function that accepts an option's data and returns a string, used for matching an option on keydown
 * @property getOptionSelected Function that accepts an option's data and index and returns a boolean
 * @property getOptionValue    Function that accepts an option's data and index and returns a string value
 * @property options           Array of any type of data for the options
 * @property placeholder       Optional placeholder text, only valid for custom select widgets (useNativeElement must be false or undefined)
 * @property useNativeElement  Use the native <select> element if true
 * @property value           The current value
 */
export interface SelectProperties<T = any> extends ThemedProperties, InputProperties, FocusProperties, CustomAriaProperties {
    getOptionDisabled?(option: T, index: number): boolean;
    getOptionId?(option: T, index: number): string;
    getOptionLabel?(option: T): DNode;
    getOptionText?(option: T): string;
    getOptionSelected?(option: T, index: number): boolean;
    getOptionValue?(option: T, index: number): string;
    helperText?: string;
    options?: T[];
    placeholder?: string;
    useNativeElement?: boolean;
    onBlur?(key?: string | number): void;
    onChange?(option: T, key?: string | number): void;
    onFocus?(key?: string | number): void;
    value?: string;
    labelHidden?: boolean;
    label?: string;
}
declare const Select_base: import("@dojo/framework/core/interfaces").Constructor<ThemedMixin<{}>> & typeof WidgetBase & import("@dojo/framework/core/interfaces").Constructor<FocusMixin>;
export declare class Select<T = any> extends Select_base<SelectProperties<T>> {
    private _focusedIndex;
    private _focusNode;
    private _ignoreBlur;
    private _open;
    private _baseId;
    private _inputText;
    private _resetInputTextTimer;
    private _getOptionLabel;
    private _getOptionSelected;
    private _getSelectedIndexOnInput;
    private _onBlur;
    private _onFocus;
    private _onNativeChange;
    private _openSelect;
    private _closeSelect;
    private _onDropdownKeyDown;
    private _onTriggerClick;
    private _onTriggerBlur;
    private _onTriggerKeyDown;
    private _onTriggerMouseDown;
    private _onListboxBlur;
    protected renderExpandIcon(): DNode;
    protected renderNativeSelect(): DNode;
    protected renderCustomSelect(): DNode;
    protected renderCustomTrigger(): DNode[];
    protected render(): DNode;
}
export default Select;
