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 "@vibe/icon-button"; 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; /** * Additional action button inside the search input. */ renderAction?: React.ReactElement; /** * If true, hides the additional action when the user types in the search input. */ hideRenderActionOnInput?: boolean; } declare const Combobox: React.ForwardRefExoticComponent>; export default Combobox;