import * as React from 'react' type Callback = () => void export interface DownshiftState { highlightedIndex: number | null inputValue: string | null isOpen: boolean selectedItem: Item | null } export enum StateChangeTypes { unknown = '__autocomplete_unknown__', mouseUp = '__autocomplete_mouseup__', itemMouseEnter = '__autocomplete_item_mouseenter__', keyDownArrowUp = '__autocomplete_keydown_arrow_up__', keyDownArrowDown = '__autocomplete_keydown_arrow_down__', keyDownEscape = '__autocomplete_keydown_escape__', keyDownEnter = '__autocomplete_keydown_enter__', clickItem = '__autocomplete_click_item__', blurInput = '__autocomplete_blur_input__', changeInput = '__autocomplete_change_input__', keyDownSpaceButton = '__autocomplete_keydown_space_button__', clickButton = '__autocomplete_click_button__', blurButton = '__autocomplete_blur_button__', controlledPropUpdatedSelectedItem = '__autocomplete_controlled_prop_updated_selected_item__', touchStart = '__autocomplete_touchstart__', } export interface DownshiftProps { initialSelectedItem?: Item initialInputValue?: string initialHighlightedIndex?: number | null initialIsOpen?: boolean defaultHighlightedIndex?: number | null defaultIsOpen?: boolean itemToString?: (item: Item | null) => string selectedItemChanged?: (prevItem: Item, item: Item) => boolean getA11yStatusMessage?: (options: A11yStatusMessageOptions) => string onChange?: ( selectedItem: Item, stateAndHelpers: ControllerStateAndHelpers, ) => void onSelect?: ( selectedItem: Item, stateAndHelpers: ControllerStateAndHelpers, ) => void onStateChange?: ( options: StateChangeOptions, stateAndHelpers: ControllerStateAndHelpers, ) => void onInputValueChange?: ( inputValue: string, stateAndHelpers: ControllerStateAndHelpers, ) => void stateReducer?: ( state: DownshiftState, changes: StateChangeOptions, ) => Partial> itemCount?: number highlightedIndex?: number | null inputValue?: string | null isOpen?: boolean selectedItem?: Item | null children?: ChildrenFunction id?: string inputId?: string labelId?: string menuId?: string getItemId?: (index?: number) => string environment?: Environment onOuterClick?: (stateAndHelpers: ControllerStateAndHelpers) => void onUserAction?: ( options: StateChangeOptions, stateAndHelpers: ControllerStateAndHelpers, ) => void suppressRefError?: boolean } export interface Environment { addEventListener: typeof window.addEventListener removeEventListener: typeof window.removeEventListener document: Document } export interface A11yStatusMessageOptions { highlightedIndex: number | null inputValue: string isOpen: boolean itemToString: (item: Item) => string previousResultCount: number resultCount: number highlightedItem: Item selectedItem: Item } export interface StateChangeOptions extends Partial> { type: StateChangeTypes } type StateChangeFunction = ( state: DownshiftState, ) => Partial> export interface GetRootPropsOptions { refKey: string } export interface GetInputPropsOptions extends React.HTMLProps { disabled?: boolean } export interface GetLabelPropsOptions extends React.HTMLProps {} export interface GetToggleButtonPropsOptions extends React.HTMLProps { disabled?: boolean } export interface GetMenuPropsOptions extends React.HTMLProps { refKey?: string ['aria-label']?: string } export interface GetPropsCommonOptions { suppressRefError?: boolean } export interface GetItemPropsOptions extends React.HTMLProps { index?: number item: Item isSelected?: boolean disabled?: boolean } export interface PropGetters { getRootProps: ( options?: GetRootPropsOptions, otherOptions?: GetPropsCommonOptions, ) => any getToggleButtonProps: (options?: GetToggleButtonPropsOptions) => any getLabelProps: (options?: GetLabelPropsOptions) => any getMenuProps: ( options?: GetMenuPropsOptions, otherOptions?: GetPropsCommonOptions, ) => any getInputProps: (options?: T) => T & GetInputPropsOptions getItemProps: (options: GetItemPropsOptions) => any } export interface Actions { reset: ( otherStateToSet?: Partial>, cb?: Callback, ) => void openMenu: (cb?: Callback) => void closeMenu: (cb?: Callback) => void toggleMenu: ( otherStateToSet?: Partial>, cb?: Callback, ) => void selectItem: ( item: Item, otherStateToSet?: Partial>, cb?: Callback, ) => void selectItemAtIndex: ( index: number, otherStateToSet?: Partial>, cb?: Callback, ) => void selectHighlightedItem: ( otherStateToSet?: Partial>, cb?: Callback, ) => void setHighlightedIndex: ( index: number, otherStateToSet?: Partial>, cb?: Callback, ) => void clearSelection: (cb?: Callback) => void clearItems: () => void setItemCount: (count: number) => void unsetItemCount: () => void setState: ( stateToSet: Partial> | StateChangeFunction, cb?: Callback, ) => void // props itemToString: (item: Item) => string } export type ControllerStateAndHelpers = DownshiftState & PropGetters & Actions export type ChildrenFunction = ( options: ControllerStateAndHelpers, ) => React.ReactNode export type DownshiftInterface = React.ComponentClass< DownshiftProps > & { stateChangeTypes: { unknown: StateChangeTypes.unknown mouseUp: StateChangeTypes.mouseUp itemMouseEnter: StateChangeTypes.itemMouseEnter keyDownArrowUp: StateChangeTypes.keyDownArrowUp keyDownArrowDown: StateChangeTypes.keyDownArrowDown keyDownEscape: StateChangeTypes.keyDownEscape keyDownEnter: StateChangeTypes.keyDownEnter clickItem: StateChangeTypes.clickItem blurInput: StateChangeTypes.blurInput changeInput: StateChangeTypes.changeInput keyDownSpaceButton: StateChangeTypes.keyDownSpaceButton clickButton: StateChangeTypes.clickButton blurButton: StateChangeTypes.blurButton controlledPropUpdatedSelectedItem: StateChangeTypes.controlledPropUpdatedSelectedItem touchStart: StateChangeTypes.touchStart } } declare const Downshift: DownshiftInterface export default Downshift export function resetIdCounter(): void