interface DropdownItem {
    value: string;
    text: string;
    html?: HTMLElement
}

interface DropdownOptions {
    textkey?: string;
    valuekey?: string;
    htmlkey?: string;
    maxlength?: Number;
    multiselect?: boolean;
    selected?: string;
    selectedlist?: Array<string>;
    disabled?: boolean;
    input?: boolean;
    search?: boolean;
    searchkeys?: Array<string>;
    searchplaceholder?: string;
    tabindex?: Number;
    placeholder?: string;
    slidefixed?: boolean;
    parent?: HTMLElement;
}

interface Dropdown {
    sourceFilter: () => Array<DropdownItem | any>;
    onselected: (item: DropdownItem | any) => void;
    onselectedlist: (list: Array<DropdownItem | any>) => void;
    onexpanded: () => void;

    get disabled(): boolean;
    set disabled(flag: boolean);
    get source(): Array<DropdownItem | any>;
    set source(list: Array<DropdownItem | any>): void;
    readonly multiselect: boolean;
    readonly selected: DropdownItem | any;
    readonly selectedlist: Array<DropdownItem | any>;
    create(): HTMLElement;
    select(selected: string, silence?: boolean): void;
    selectlist(selectedlist: Array<string>, silence?: boolean): void;
}

declare var Dropdown: {
    prototype: Dropdown;
    new(options?: DropdownOptions): Dropdown;

    resolve(dom?: HTMLElement): HTMLElement;
}

export default Dropdown;