import React, { Dispatch, MutableRefObject, SetStateAction } from 'react';
import { KEYS } from './constants';
export type KeysType = (typeof KEYS)[keyof typeof KEYS];
export type ListNavigationAdapter<T> = {
    getItem: (list: T) => ListItem;
    getFocusableItems: (list: ListItem[]) => ListItem[];
};
export type ListItemMapper<T> = (list: T) => ListItem;
export type ListItemFocusableFilter = (list: ListItem[]) => ListItem[];
export type ListItemId = string | number;
export type ListItemsMap = Map<ListItemId, ListItem>;
export type ListItem = {
    id: ListItemId;
    isDisabled: boolean;
    isFocused: boolean;
    isSelected: boolean;
};
export type ListNavigationContextState = {
    focused: ListItem | null;
    lastFocused: ListItemId | null;
    lastFocusedIsPresent: boolean;
    selected: ListItemId[];
    isDisabled: boolean;
    items: ListItem[];
    setItems: Dispatch<SetStateAction<ListItem[]>>;
    itemsMap: ListItemsMap;
    refs: MutableRefObject<Map<ListItemId, HTMLElement>>;
    setFocused: (id: ListItemId) => void;
    setBlurred: (id: ListItemId) => void;
    toggleSelected: (id: ListItemId) => void;
    listId: number;
};
export type ListNavigationHookProps = {
    adapter: ListNavigationAdapter<any>;
    list: any[];
    container: React.MutableRefObject<Element>;
    isDisabled?: boolean;
    listId: number;
};
export type NavigationActionFn = (params: NavigationActionFnArgs) => void;
export type NavigationActionFnArgs = {
    item: ListItem;
    context: ListNavigationContextState;
    onToggleSelected: (isSelected: boolean) => void;
    isSelected: boolean;
};
