UNPKG

downshift

Version:

🏎 A set of primitives to build simple, flexible, WAI-ARIA compliant React autocomplete, combobox or select dropdown components.

267 lines (266 loc) 12.8 kB
import * as React from 'react'; import { AnyRef, Environment, GetPropsCommonOptions, Overwrite } from '../../downshift.types'; export interface UseSelectState<Item> { highlightedIndex: number; selectedItem: Item | null; isOpen: boolean; inputValue: string; } export declare enum UseSelectStateChangeTypes { ToggleButtonClick = "__togglebutton_click__", ToggleButtonKeyDownArrowDown = "__togglebutton_keydown_arrow_down__", ToggleButtonKeyDownArrowUp = "__togglebutton_keydown_arrow_up__", ToggleButtonKeyDownCharacter = "__togglebutton_keydown_character__", ToggleButtonKeyDownEscape = "__togglebutton_keydown_escape__", ToggleButtonKeyDownHome = "__togglebutton_keydown_home__", ToggleButtonKeyDownEnd = "__togglebutton_keydown_end__", ToggleButtonKeyDownEnter = "__togglebutton_keydown_enter__", ToggleButtonKeyDownSpaceButton = "__togglebutton_keydown_space_button__", ToggleButtonKeyDownPageUp = "__togglebutton_keydown_page_up__", ToggleButtonKeyDownPageDown = "__togglebutton_keydown_page_down__", ToggleButtonBlur = "__togglebutton_blur__", MenuMouseLeave = "__menu_mouse_leave__", ItemMouseMove = "__item_mouse_move__", ItemClick = "__item_click__", FunctionToggleMenu = "__function_toggle_menu__", FunctionOpenMenu = "__function_open_menu__", FunctionCloseMenu = "__function_close_menu__", FunctionSetHighlightedIndex = "__function_set_highlighted_index__", FunctionSelectItem = "__function_select_item__", FunctionSetInputValue = "__function_set_input_value__", FunctionReset = "__function_reset__" } export type UseSelectToggleButtonClickAction = { type: UseSelectStateChangeTypes.ToggleButtonClick; }; export type UseSelectToggleButtonKeyDownArrowDownAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownArrowDown; altKey: boolean; }; export type UseSelectToggleButtonKeyDownArrowUpAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownArrowUp; altKey: boolean; }; export type UseSelectToggleButtonKeyDownCharacterAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownCharacter; key: string; }; export type UseSelectToggleButtonKeyDownEscapeAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownEscape; }; export type UseSelectToggleButtonKeyDownHomeAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownHome; }; export type UseSelectToggleButtonKeyDownEndAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownEnd; }; export type UseSelectToggleButtonKeyDownEnterAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownEnter; }; export type UseSelectToggleButtonKeyDownSpaceButtonAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownSpaceButton; }; export type UseSelectToggleButtonKeyDownPageUpAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownPageUp; }; export type UseSelectToggleButtonKeyDownPageDownAction = { type: UseSelectStateChangeTypes.ToggleButtonKeyDownPageDown; }; export type UseSelectToggleButtonBlurAction = { type: UseSelectStateChangeTypes.ToggleButtonBlur; }; export type UseSelectMenuMouseLeaveAction = { type: UseSelectStateChangeTypes.MenuMouseLeave; }; export type UseSelectItemMouseMoveAction = { type: UseSelectStateChangeTypes.ItemMouseMove; index: number; disabled: boolean; }; export type UseSelectItemClickAction = { type: UseSelectStateChangeTypes.ItemClick; index: number; }; export type UseSelectFunctionToggleMenuAction = { type: UseSelectStateChangeTypes.FunctionToggleMenu; }; export type UseSelectFunctionOpenMenuAction = { type: UseSelectStateChangeTypes.FunctionOpenMenu; }; export type UseSelectFunctionCloseMenuAction = { type: UseSelectStateChangeTypes.FunctionCloseMenu; }; export type UseSelectFunctionSetHighlightedIndexAction = { type: UseSelectStateChangeTypes.FunctionSetHighlightedIndex; highlightedIndex: number; }; export type UseSelectFunctionSelectItemAction<Item> = { type: UseSelectStateChangeTypes.FunctionSelectItem; selectedItem: Item | null; }; export type UseSelectFunctionSetInputValueAction = { type: UseSelectStateChangeTypes.FunctionSetInputValue; inputValue: string; }; export type UseSelectFunctionResetAction = { type: UseSelectStateChangeTypes.FunctionReset; }; export type UseSelectReducerAction<Item> = UseSelectToggleButtonClickAction | UseSelectToggleButtonKeyDownArrowDownAction | UseSelectToggleButtonKeyDownArrowUpAction | UseSelectToggleButtonKeyDownCharacterAction | UseSelectToggleButtonKeyDownEscapeAction | UseSelectToggleButtonKeyDownHomeAction | UseSelectToggleButtonKeyDownEndAction | UseSelectToggleButtonKeyDownEnterAction | UseSelectToggleButtonKeyDownSpaceButtonAction | UseSelectToggleButtonKeyDownPageUpAction | UseSelectToggleButtonKeyDownPageDownAction | UseSelectToggleButtonBlurAction | UseSelectMenuMouseLeaveAction | UseSelectItemMouseMoveAction | UseSelectItemClickAction | UseSelectFunctionToggleMenuAction | UseSelectFunctionOpenMenuAction | UseSelectFunctionCloseMenuAction | UseSelectFunctionSetHighlightedIndexAction | UseSelectFunctionSelectItemAction<Item> | UseSelectFunctionSetInputValueAction | UseSelectFunctionResetAction; export interface UseSelectProps<Item> { items: Item[]; isItemDisabled?(item: Item, index: number): boolean; itemToString?: (item: Item | null) => string; itemToKey?: (item: Item | null) => any; getA11yStatusMessage?: (options: UseSelectState<Item>) => string; highlightedIndex?: number; initialHighlightedIndex?: number; defaultHighlightedIndex?: number; isOpen?: boolean; initialIsOpen?: boolean; defaultIsOpen?: boolean; selectedItem?: Item | null; initialSelectedItem?: Item | null; defaultSelectedItem?: Item | null; id?: string; labelId?: string; menuId?: string; toggleButtonId?: string; getItemId?: (index: number) => string; scrollIntoView?: (node: HTMLElement, menuNode: HTMLElement) => void; stateReducer?: (state: UseSelectState<Item>, actionAndChanges: UseSelectStateChangeOptions<Item>) => Partial<UseSelectState<Item>>; onSelectedItemChange?: (changes: UseSelectSelectedItemChange<Item>) => void; onIsOpenChange?: (changes: UseSelectIsOpenChange<Item>) => void; onHighlightedIndexChange?: (changes: UseSelectHighlightedIndexChange<Item>) => void; onStateChange?: (changes: UseSelectStateChange<Item>) => void; environment?: Environment; } export type UseSelectMergedProps<Item> = Omit<UseSelectProps<Item>, 'itemToString' | 'itemToKey' | 'stateReducer' | 'scrollIntoView' | 'isItemDisabled'> & Required<Pick<UseSelectProps<Item>, 'itemToString' | 'itemToKey' | 'stateReducer' | 'scrollIntoView' | 'isItemDisabled'>>; export interface UseSelectStateChangeOptions<Item> extends UseSelectDispatchAction<Item> { changes: Partial<UseSelectState<Item>>; props: UseSelectMergedProps<Item>; } export interface UseSelectDispatchAction<Item> { type: UseSelectStateChangeTypes; altKey?: boolean; key?: string; index?: number; highlightedIndex?: number; selectedItem?: Item | null; inputValue?: string; } export interface UseSelectStateChange<Item> extends Partial<UseSelectState<Item>> { type: UseSelectStateChangeTypes; } export interface UseSelectSelectedItemChange<Item> extends UseSelectStateChange<Item> { selectedItem: Item | null; } export interface UseSelectHighlightedIndexChange<Item> extends UseSelectStateChange<Item> { highlightedIndex: number; } export interface UseSelectIsOpenChange<Item> extends UseSelectStateChange<Item> { isOpen: boolean; } export interface UseSelectGetMenuPropsOptions extends React.HTMLProps<HTMLElement> { refKey?: string; ref?: AnyRef; } export interface UseSelectGetMenuPropsReturnValue { 'aria-labelledby': string | undefined; id: string; onMouseLeave: React.MouseEventHandler; ref?: AnyRef; role: 'listbox'; } export type UseSelectGetMenuProps = <Options>(options?: UseSelectGetMenuPropsOptions & Options, otherOptions?: GetPropsCommonOptions) => Overwrite<UseSelectGetMenuPropsReturnValue, Options>; export interface UseSelectGetToggleButtonPropsOptions extends React.HTMLProps<HTMLElement> { refKey?: string; ref?: AnyRef; onPress?: (event: React.BaseSyntheticEvent) => void; } export interface UseSelectGetToggleButtonPropsReturnValue { 'aria-activedescendant': string; 'aria-controls': string; 'aria-expanded': boolean; 'aria-haspopup': 'listbox'; 'aria-labelledby': string | undefined; id: string; onBlur?: React.FocusEventHandler; onClick?: React.MouseEventHandler; onKeyDown?: React.KeyboardEventHandler; onPress?: (event: React.BaseSyntheticEvent) => void; ref?: AnyRef; role: 'combobox'; tabIndex: 0; } export type UseSelectGetToggleButtonProps = <Options>(options?: UseSelectGetToggleButtonPropsOptions & Options, otherOptions?: GetPropsCommonOptions) => Overwrite<UseSelectGetToggleButtonPropsReturnValue, Options>; export interface UseSelectGetLabelPropsOptions extends React.HTMLProps<HTMLLabelElement> { } export interface UseSelectGetLabelPropsReturnValue { htmlFor: string; id: string; onClick: React.MouseEventHandler; } export type UseSelectGetLabelProps = <Options>(options?: UseSelectGetLabelPropsOptions & Options) => Overwrite<UseSelectGetLabelPropsReturnValue, Options>; export interface UseSelectGetItemPropsOptions<Item> extends React.HTMLProps<HTMLElement> { item?: Item; index?: number; refKey?: string; ref?: AnyRef; onPress?: (event: React.BaseSyntheticEvent) => void; } export interface UseSelectGetItemPropsReturnValue { 'aria-disabled': boolean; 'aria-selected': boolean; id: string; onClick?: React.MouseEventHandler; onMouseDown?: React.MouseEventHandler; onMouseMove?: React.MouseEventHandler; onPress?: React.MouseEventHandler; ref?: AnyRef; role: 'option'; } export type UseSelectGetItemProps<Item> = <Options>(options: UseSelectGetItemPropsOptions<Item> & Options) => Omit<Overwrite<UseSelectGetItemPropsReturnValue, Options>, 'index' | 'item'>; export interface UseSelectPropGetters<Item> { getToggleButtonProps: UseSelectGetToggleButtonProps; getLabelProps: UseSelectGetLabelProps; getMenuProps: UseSelectGetMenuProps; getItemProps: UseSelectGetItemProps<Item>; } export interface UseSelectActions<Item> { reset: () => void; openMenu: () => void; closeMenu: () => void; toggleMenu: () => void; selectItem: (item: Item | null) => void; setHighlightedIndex: (index: number) => void; setInputValue: (inputValue: string) => void; } export type UseSelectReturnValue<Item> = UseSelectState<Item> & UseSelectPropGetters<Item> & UseSelectActions<Item>; export interface UseSelectInterface { <Item>(props: UseSelectProps<Item>): UseSelectReturnValue<Item>; stateChangeTypes: { ToggleButtonClick: UseSelectStateChangeTypes.ToggleButtonClick; ToggleButtonKeyDownArrowDown: UseSelectStateChangeTypes.ToggleButtonKeyDownArrowDown; ToggleButtonKeyDownArrowUp: UseSelectStateChangeTypes.ToggleButtonKeyDownArrowUp; ToggleButtonKeyDownCharacter: UseSelectStateChangeTypes.ToggleButtonKeyDownCharacter; ToggleButtonKeyDownEscape: UseSelectStateChangeTypes.ToggleButtonKeyDownEscape; ToggleButtonKeyDownHome: UseSelectStateChangeTypes.ToggleButtonKeyDownHome; ToggleButtonKeyDownEnd: UseSelectStateChangeTypes.ToggleButtonKeyDownEnd; ToggleButtonKeyDownEnter: UseSelectStateChangeTypes.ToggleButtonKeyDownEnter; ToggleButtonKeyDownSpaceButton: UseSelectStateChangeTypes.ToggleButtonKeyDownSpaceButton; ToggleButtonKeyDownPageUp: UseSelectStateChangeTypes.ToggleButtonKeyDownPageUp; ToggleButtonKeyDownPageDown: UseSelectStateChangeTypes.ToggleButtonKeyDownPageDown; ToggleButtonBlur: UseSelectStateChangeTypes.ToggleButtonBlur; MenuMouseLeave: UseSelectStateChangeTypes.MenuMouseLeave; ItemMouseMove: UseSelectStateChangeTypes.ItemMouseMove; ItemClick: UseSelectStateChangeTypes.ItemClick; FunctionToggleMenu: UseSelectStateChangeTypes.FunctionToggleMenu; FunctionOpenMenu: UseSelectStateChangeTypes.FunctionOpenMenu; FunctionCloseMenu: UseSelectStateChangeTypes.FunctionCloseMenu; FunctionSetHighlightedIndex: UseSelectStateChangeTypes.FunctionSetHighlightedIndex; FunctionSelectItem: UseSelectStateChangeTypes.FunctionSelectItem; FunctionSetInputValue: UseSelectStateChangeTypes.FunctionSetInputValue; FunctionReset: UseSelectStateChangeTypes.FunctionReset; }; } export declare const useSelect: UseSelectInterface;