import React, { CSSProperties } from 'react'; declare type ScrollToIndexFunctionType = (optionIndex: number) => void; declare type OnChangeFunctionType = Function; declare type IndexForHighlight = number | ((oldIndex: number) => number); declare type SetHandlerArg = boolean | number | T; declare type SetHandler = (arg: SetHandlerArg) => void; export declare type Option = { label: string; item: T; group?: string; optionForCreate?: boolean; }; export interface SelectProps { options: T[]; value: T[] | null; multi?: boolean; onChange: OnChangeFunctionType; optionsRef: React.MutableRefObject; controlRef: React.MutableRefObject; scrollToIndex?: ScrollToIndexFunctionType; disabled?: boolean; filterFn?(options: T[], searchValue: string): T[]; getOptionLabel(option: T): string; onCreate?(s: string): void; getGroupOptions?(group: T): T[]; onSelectOption?(): void; } export interface OptionProps extends React.HTMLAttributes { index: number; style?: CSSProperties; className?: string; onClick?(e: React.SyntheticEvent): void; onMouseEnter?(e: React.SyntheticEvent): void; } export declare type GetOptionPropsResult = { onClick(e: React.SyntheticEvent): void; onMouseEnter(e: React.SyntheticEvent): void; } & JSX.IntrinsicElements['div']; declare type NativeInputProps = JSX.IntrinsicElements['input']; interface ToggleProps extends NativeInputProps { refKey?: string; ref?: React.MutableRefObject; } interface GetTogglePropsResult extends React.HTMLProps { disabled?: boolean; } declare type UseSelectResult = { searchValue?: string; isOpen: boolean; highlightedIndex: number; visibleOptions: Option[]; value: T[] | null; selectIndex: SetHandler; removeValue?: SetHandler; setOpen(isOpen: boolean): void; setSearch?(value: string): void; highlightIndex(index: IndexForHighlight, scrollToHighlighted: boolean): void; getToggleProps(props?: ToggleProps): GetTogglePropsResult; getOptionProps(props: OptionProps): GetOptionPropsResult; }; export declare function useSelect(params: SelectProps): UseSelectResult; export {};