import React from "react";
import { type ElementContent, type VibeComponentProps } from "../../types";
import { type IComboboxCategoryMap, type IComboboxOption } from "./components/ComboboxConstants";
import { type ComboboxSizes } from "./Combobox.types";
import type IconButton from "../IconButton/IconButton";
import type MenuButton from "../MenuButton/MenuButton";
import { type SubIcon } from "@vibe/icon";
export interface ComboboxProps extends VibeComponentProps {
    /**
     * Class name applied to each option item.
     */
    optionClassName?: string;
    /**
     * Class name applied to the search wrapper.
     */
    searchWrapperClassName?: string;
    /**
     * Class name applied to the sticky category header.
     */
    stickyCategoryClassName?: string;
    /**
     * Placeholder text displayed in the search input.
     */
    placeholder?: string;
    /**
     * Message displayed when no results are found.
     */
    noResultsMessage?: string;
    /**
     * If true, the combobox is disabled.
     */
    disabled?: boolean;
    /**
     * The list of available options.
     */
    options?: IComboboxOption[];
    /**
     * The list of available categories.
     */
    categories?: IComboboxCategoryMap;
    /**
     * If true, displays a divider between category sections.
     */
    withCategoriesDivider?: boolean;
    /**
     * The size of the combobox.
     */
    size?: ComboboxSizes;
    /**
     * The height of each option item.
     */
    optionLineHeight?: number;
    /**
     * The height of the options list.
     */
    optionsListHeight?: number;
    /**
     * If true, the search input is focused when the component mounts.
     */
    autoFocus?: boolean;
    /**
     * Callback fired when the "Add new" button is clicked.
     */
    onAddNew?: (value: string) => void;
    /**
     * Label displayed for the "Add new" button.
     */
    addNewLabel?: ((label: string) => ElementContent) | string;
    /**
     * Custom filter function for searching options.
     */
    filter?: (filterValue: string, options: IComboboxOption[]) => IComboboxOption[];
    /**
     * The default search input
     */
    defaultFilter?: string;
    /**
     * If true, disables filtering.
     */
    disableFilter?: boolean;
    /**
     * Controlled search input value.
     */
    filterValue?: string;
    /**
     * Callback fired when the search input value changes.
     */
    onFilterChanged?: (value: string) => void;
    /**
     * If true, displays a loading state.
     */
    loading?: boolean;
    /**
     * Callback fired when an option is hovered.
     */
    onOptionHover?: (event: React.MouseEvent, index: number, option: IComboboxOption) => void;
    /**
     * Callback fired when the mouse leaves an option.
     */
    onOptionLeave?: () => void;
    /**
     * If true, automatically scrolls to the selected option.
     */
    shouldScrollToSelectedItem?: boolean;
    /**
     * Custom renderer for when no results are found.
     */
    noResultsRenderer?: () => JSX.Element;
    /**
     * If true, keeps categories visible when scrolling.
     */
    stickyCategories?: boolean;
    /**
     * If true, visually focuses the first item by default.
     */
    defaultVisualFocusFirstIndex?: boolean;
    /**
     * If true, clears the search input when an option is selected.
     */
    clearFilterOnSelection?: boolean;
    /**
     * Custom renderer for options.
     */
    optionRenderer?: (option: IComboboxOption) => JSX.Element;
    /**
     * Maximum number of options displayed before scrolling.
     */
    maxOptionsWithoutScroll?: number;
    /**
     * If true, renders only visible options for performance optimization.
     */
    renderOnlyVisibleOptions?: boolean;
    /**
     * Callback fired when an option is clicked.
     */
    onClick?: (optionData: IComboboxOption) => void;
    /**
     * Custom search icon.
     */
    searchIcon?: SubIcon;
    /**
     * ARIA label for the search input.
     */
    searchInputAriaLabel?: string;
    /**
     * The debounce rate for filtering.
     */
    debounceRate?: number;
    /**
     * Ref for the search input element.
     */
    searchInputRef?: React.RefObject<HTMLInputElement>;
    /**
     * Additional action button inside the search input.
     */
    renderAction?: React.ReactElement<typeof IconButton | typeof MenuButton>;
    /**
     * If true, hides the additional action when the user types in the search input.
     */
    hideRenderActionOnInput?: boolean;
}
declare const _default: React.ForwardRefExoticComponent<ComboboxProps & React.RefAttributes<HTMLElement>> & {
    sizes: {
        readonly SMALL: "small";
        readonly MEDIUM: "medium";
        readonly LARGE: "large";
    };
    iconTypes: typeof import("./components/ComboboxConstants").ComboboxOptionIconType;
};
export default _default;
