import type { SelectOption } from "./Select.types";
/**
 * Props for the useSelectState hook
 */
export interface UseSelectStateProps<T = any> {
    /** Array of available options */
    options: SelectOption<T>[];
    /** Currently selected value (controlled) */
    value?: T;
    /** Callback when selection changes */
    onChange?: (value: T) => void;
    /** Whether filtering/search is enabled */
    searchable?: boolean;
    /** Whether new options can be created */
    creatable?: boolean;
    /** Callback when creating a new option */
    onCreateOption?: (inputValue: string) => void;
    /** Label template for create option */
    createLabel?: string | ((inputValue: string) => string);
    /** Whether typeahead is enabled (default: true) */
    enableTypeahead?: boolean;
    /** Enable multi-select mode */
    multiple?: boolean;
}
/**
 * Return type for the useSelectState hook
 */
export interface UseSelectStateReturn<T = any> {
    isOpen: boolean;
    setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;
    highlightedIndex: number;
    setHighlightedIndex: React.Dispatch<React.SetStateAction<number>>;
    searchValue: string;
    setSearchValue: React.Dispatch<React.SetStateAction<string>>;
    selectedValue: T | undefined;
    setSelectedValue: React.Dispatch<React.SetStateAction<T | undefined>>;
    typeaheadValue: string;
    setTypeaheadValue: React.Dispatch<React.SetStateAction<string>>;
    typeaheadTimeoutRef: React.MutableRefObject<NodeJS.Timeout | null>;
    filteredOptions: SelectOption<T>[];
    selectedOption: SelectOption<T> | undefined;
    hasCreateOption: boolean;
    selectOption: (value: T, isCreateAction?: boolean) => void;
    getOptionByValue: (searchValue: T) => SelectOption<T> | undefined;
    multiple: boolean;
    selectedValues: T[];
    isValueSelected: (value: T) => boolean;
    removeValue: (value: T) => void;
    triggerRef: React.MutableRefObject<HTMLElement | null>;
    optionsRef: React.MutableRefObject<HTMLDivElement | null>;
    options: SelectOption<T>[];
}
/**
 * useSelectState
 *
 * A headless hook that manages all state for select/dropdown components.
 * This hook can be used by Select, Combobox, MultiSelect, TagInput, etc.
 *
 * @example
 * ```tsx
 * const selectState = useSelectState({
 *   options,
 *   value,
 *   onChange,
 *   searchable: true,
 * });
 *
 * // Use in your component:
 * const { isOpen, setIsOpen, filteredOptions, selectOption } = selectState;
 * ```
 */
export declare function useSelectState<T = any>({ options, value, onChange, searchable, creatable, onCreateOption, createLabel, enableTypeahead, multiple, }: UseSelectStateProps<T>): UseSelectStateReturn<T>;
