import * as React from 'react'; import { AnyRef, Environment, GetPropsCommonOptions, Overwrite } from '../../downshift.types'; export interface UseMultipleSelectionState { selectedItems: Item[]; activeIndex: number; } export declare enum UseMultipleSelectionStateChangeTypes { SelectedItemClick = "__selected_item_click__", SelectedItemKeyDownDelete = "__selected_item_keydown_delete__", SelectedItemKeyDownBackspace = "__selected_item_keydown_backspace__", SelectedItemKeyDownNavigationNext = "__selected_item_keydown_navigation_next__", SelectedItemKeyDownNavigationPrevious = "__selected_item_keydown_navigation_previous__", DropdownKeyDownNavigationPrevious = "__dropdown_keydown_navigation_previous__", DropdownKeyDownBackspace = "__dropdown_keydown_backspace__", DropdownClick = "__dropdown_click__", FunctionAddSelectedItem = "__function_add_selected_item__", FunctionRemoveSelectedItem = "__function_remove_selected_item__", FunctionSetSelectedItems = "__function_set_selected_items__", FunctionSetActiveIndex = "__function_set_active_index__", FunctionReset = "__function_reset__" } export interface UseMultipleSelectionProps { selectedItems?: Item[]; initialSelectedItems?: Item[]; defaultSelectedItems?: Item[]; itemToKey?: (item: Item | null) => any; getA11yStatusMessage?: (options: UseMultipleSelectionState) => string; stateReducer?: (state: UseMultipleSelectionState, actionAndChanges: UseMultipleSelectionStateChangeOptions) => Partial>; activeIndex?: number; initialActiveIndex?: number; defaultActiveIndex?: number; onActiveIndexChange?: (changes: UseMultipleSelectionActiveIndexChange) => void; onSelectedItemsChange?: (changes: UseMultipleSelectionSelectedItemsChange) => void; onStateChange?: (changes: UseMultipleSelectionStateChange) => void; keyNavigationNext?: string; keyNavigationPrevious?: string; environment?: Environment; } export interface UseMultipleSelectionStateChangeOptions extends UseMultipleSelectionDispatchAction { changes: Partial>; } export interface UseMultipleSelectionDispatchAction { type: UseMultipleSelectionStateChangeTypes; index?: number; selectedItem?: Item | null; selectedItems?: Item[]; activeIndex?: number; } export interface UseMultipleSelectionStateChange extends Partial> { type: UseMultipleSelectionStateChangeTypes; } export interface UseMultipleSelectionActiveIndexChange extends UseMultipleSelectionStateChange { activeIndex: number; } export interface UseMultipleSelectionSelectedItemsChange extends UseMultipleSelectionStateChange { selectedItems: Item[]; } export interface A11yRemovalMessage { itemToString: (item: Item) => string; resultCount: number; activeSelectedItem: Item; removedSelectedItem: Item; activeIndex: number; } export interface UseMultipleSelectionGetSelectedItemPropsOptions extends React.HTMLProps { refKey?: string; ref?: AnyRef; index?: number; selectedItem: Item; } export interface UseMultipleSelectionGetSelectedItemReturnValue { ref?: AnyRef; tabIndex: 0 | -1; onClick: React.MouseEventHandler; onKeyDown: React.KeyboardEventHandler; } export interface UseMultipleSelectionGetDropdownPropsOptions extends React.HTMLProps { preventKeyAction?: boolean; refKey?: string; ref?: AnyRef; } export interface UseMultipleSelectionGetDropdownReturnValue { ref?: AnyRef; onClick?: React.MouseEventHandler; onKeyDown?: React.KeyboardEventHandler; } export interface UseMultipleSelectionPropGetters { getDropdownProps: (options?: UseMultipleSelectionGetDropdownPropsOptions & Options, extraOptions?: GetPropsCommonOptions) => Omit, 'preventKeyAction'>; getSelectedItemProps: (options: UseMultipleSelectionGetSelectedItemPropsOptions & Options) => Omit, 'index' | 'selectedItem'>; } export interface UseMultipleSelectionActions { reset: () => void; addSelectedItem: (item: Item) => void; removeSelectedItem: (item: Item) => void; setSelectedItems: (items: Item[]) => void; setActiveIndex: (index: number) => void; } export type UseMultipleSelectionReturnValue = UseMultipleSelectionState & UseMultipleSelectionPropGetters & UseMultipleSelectionActions; export interface UseMultipleSelectionInterface { (props?: UseMultipleSelectionProps): UseMultipleSelectionReturnValue; stateChangeTypes: { SelectedItemClick: UseMultipleSelectionStateChangeTypes.SelectedItemClick; SelectedItemKeyDownDelete: UseMultipleSelectionStateChangeTypes.SelectedItemKeyDownDelete; SelectedItemKeyDownBackspace: UseMultipleSelectionStateChangeTypes.SelectedItemKeyDownBackspace; SelectedItemKeyDownNavigationNext: UseMultipleSelectionStateChangeTypes.SelectedItemKeyDownNavigationNext; SelectedItemKeyDownNavigationPrevious: UseMultipleSelectionStateChangeTypes.SelectedItemKeyDownNavigationPrevious; DropdownKeyDownNavigationPrevious: UseMultipleSelectionStateChangeTypes.DropdownKeyDownNavigationPrevious; DropdownKeyDownBackspace: UseMultipleSelectionStateChangeTypes.DropdownKeyDownBackspace; DropdownClick: UseMultipleSelectionStateChangeTypes.DropdownClick; FunctionAddSelectedItem: UseMultipleSelectionStateChangeTypes.FunctionAddSelectedItem; FunctionRemoveSelectedItem: UseMultipleSelectionStateChangeTypes.FunctionRemoveSelectedItem; FunctionSetSelectedItems: UseMultipleSelectionStateChangeTypes.FunctionSetSelectedItems; FunctionSetActiveIndex: UseMultipleSelectionStateChangeTypes.FunctionSetActiveIndex; FunctionReset: UseMultipleSelectionStateChangeTypes.FunctionReset; }; } export declare const useMultipleSelection: UseMultipleSelectionInterface;