/** * @license *------------------------------------------------------------------------------------------- * Copyright © 2026 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the package root for more information *------------------------------------------------------------------------------------------- */ import { ComboBox } from './ComboBox.js'; import { FilterChangeEvent, ChangeEvent, OpenEvent, CloseEvent, FocusEvent, BlurEvent, PageChangeEvent } from './../common/events.js'; import { AdaptiveModeContextType, CustomComponent, DropDownsClassStructure, FormComponentProps, SVGIcon } from '@progress/kendo-react-common'; import { VirtualizationSettings, DropDownsPopupSettings } from '../common/settings.js'; import { ListItemProps } from '../common/ListItem.js'; import { ListGroupItemProps } from '../common/ListGroupItem.js'; import { GroupStickyHeaderProps } from '../common/GroupStickyHeader.js'; /** * Represents the object of the `FilterChange` ComboBox event. */ export interface ComboBoxFilterChangeEvent extends FilterChangeEvent { } /** * Represents the object of the `change` ComboBox event. */ export interface ComboBoxChangeEvent extends ChangeEvent { } /** * Represents the object of the `open` ComboBox event. */ export interface ComboBoxOpenEvent extends OpenEvent { } /** * Represents the object of the `close` ComboBox event. */ export interface ComboBoxCloseEvent extends CloseEvent { } /** * Represents the object of the `focus` ComboBox event. */ export interface ComboBoxFocusEvent extends FocusEvent { } /** * Represents the object of the `blur` ComboBox event. */ export interface ComboBoxBlurEvent extends BlurEvent { } /** * Represents the object of the `PageChange` ComboBox event. */ export interface ComboBoxPageChangeEvent extends PageChangeEvent { } /** * Represents the props of the [KendoReact ComboBox component](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox). */ export interface ComboBoxProps extends FormComponentProps { /** * Sets the data of the ComboBox ([more information and examples](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/binding)). * * @example * ```jsx * * ``` */ data?: any[]; /** * Sets the opened and closed state of the ComboBox. * * @example * ```jsx * * ``` */ opened?: boolean; /** * The styles that are applied to the ComboBox. * * @example * ```jsx * * ``` */ style?: React.CSSProperties; /** * Sets the value of the ComboBox ([more information and examples](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/binding)). * * @example * ```jsx * * ``` */ value?: any; /** * Sets the default value of the ComboBox. Similar to the native `select` HTML element. * * @example * ```jsx * * ``` */ defaultValue?: any; /** * Sets additional classes to the ComboBox. * * @example * ```jsx * * ``` */ className?: string; /** * Sets CSS classes to the expand `icon` DOM element. * * @example * ```jsx * * ``` */ iconClassName?: string; /** * Sets the specified SVG icon. * * @example * ```jsx * * ``` */ svgIcon?: SVGIcon; /** * If `clearButton` is set to `true`, the ComboBox renders a button on hovering over the component. Clicking this button resets the value of the ComboBox to `undefined` and triggers the `change` event. * * @example * ```jsx * * ``` */ clearButton?: boolean; /** * The hint that is displayed when the ComboBox is empty. * * @example * ```jsx * * ``` */ placeholder?: string; /** * Sets the title attribute to the underlying input element of the ComboBox. * * @example * ```jsx * * ``` */ title?: string; /** * Enables the auto-completion of the text based on the first data item ([see example](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/suggestions)). * * @example * ```jsx * * ``` */ suggest?: boolean; /** * Specifies whether the ComboBox allows user-defined values that are not present in the dataset ([see example](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/custom-values)). Defaults to `false`. * * @example * ```jsx * * ``` */ allowCustom?: boolean; /** * Specifies whether the ComboBox text matching should be case-insensitive when selecting values on blur or Enter key. * When set to `true`, typing "football" will match and select "Football" from the list. * Defaults to `false` (case-sensitive matching). * * @example * ```jsx * * ``` */ ignoreCase?: boolean; /** * Sets the disabled state of the ComboBox. * * @example * ```jsx * * ``` */ disabled?: boolean; /** * Represents the `dir` HTML attribute. * * @example * ```jsx * * ``` */ dir?: string; /** * Enables the filtering functionality of the ComboBox ([more information and examples](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/filtering)). * * @example * ```jsx * * ``` */ filterable?: boolean; /** * Sets the value of ComboBox input. Useful for making the ComboBox input a [controlled component](https://react.dev/learn/sharing-state-between-components#controlled-and-uncontrolled-components). * * @example * ```jsx * * ``` */ filter?: string | null; /** * Sets the value of the adaptive filtering input of the ComboBox. * * @example * ```jsx * * ``` */ adaptiveFilter?: string; /** * Sets the loading state of the ComboBox ([see example](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/filtering#toc-basic-configuration)). * * @example * ```jsx * * ``` */ loading?: boolean; /** * Specifies the `tabIndex` of the ComboBox. * * @example * ```jsx * * ``` * * @remarks * This property is related to accessibility. */ tabIndex?: number; /** * Specifies the `accessKey` of the ComboBox. * * @example * ```jsx * * ``` * * @remarks * This property is related to accessibility. */ accessKey?: string; /** * Sets the data item field that represents the item text. If the data contains only primitive values, do not define it. * * @example * ```jsx * * ``` */ textField?: string; /** * Sets the data item field that represents the start of a group. Applicable to objects data. * * @example * ```jsx * * ``` */ groupField?: string; /** * @hidden Used to indicate if the ComboBox is with multiple columns */ isMultiColumn?: boolean; /** * Sets the key for comparing the data items of the ComboBox. If `dataItemKey` is not set, the ComboBox compares the items by reference ([see example](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/binding#toc-datasets-of-objects)). * * @example * ```jsx * * ``` */ dataItemKey?: string; /** * Renders a floating label for the ComboBox. * * @example * ```jsx * * ``` */ label?: string; /** * Configures the popup of the ComboBox. * * @example * ```jsx * * ``` */ popupSettings?: DropDownsPopupSettings; /** * Configures the virtual scrolling of the ComboBox ([more information and examples](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/virtualization)). * * @example * ```jsx * * ``` */ virtual?: VirtualizationSettings; /** * Specifies the id of the component. * * @example * ```jsx * * ``` */ id?: string; /** * Identifies the element(s) which will describe the component, similar to [HTML aria-describedby attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-describedby_attribute). * For example these elements could contain error or hint message. * * @example * ```jsx * * ``` * * @remarks * This property is related to accessibility. */ ariaDescribedBy?: string; /** * Identifies the element(s) which will label the component. * * @example * ```jsx * * ``` * * @remarks * This property is related to accessibility. */ ariaLabelledBy?: string; /** * The accessible label of the component. * * @example * ```jsx * * ``` * * @remarks * This property is related to accessibility. */ ariaLabel?: string; /** * If set, the ComboBox will use it to get the focused item index. * * Default functionality returns the first item which starts with the input text. * * @example * ```jsx * const focusedItemIndex = (data, inputText, textField) => { * let text = inputText.toLowerCase(); * return data.findIndex(item => * String(textField ? item[textField] : item).toLowerCase().includes(text)); * }; * * * ``` */ focusedItemIndex?: (data: any, inputText: string, textField?: string) => number; /** * Fires each time the popup of the ComboBox is about to open. * * @example * ```jsx * console.log('Popup opened', event)} /> * ``` */ onOpen?: (event: ComboBoxOpenEvent) => void; /** * Fires each time the popup of the ComboBox is about to close. * * @example * ```jsx * console.log('Popup closed', event)} /> * ``` */ onClose?: (event: ComboBoxCloseEvent) => void; /** * Fires each time the user focuses the ComboBox. * * @example * ```jsx * console.log('ComboBox focused', event)} /> * ``` */ onFocus?: (event: ComboBoxFocusEvent) => void; /** * Fires each time the ComboBox gets blurred. * * @example * ```jsx * console.log('ComboBox blurred', event)} /> * ``` */ onBlur?: (event: ComboBoxBlurEvent) => void; /** * Fires each time the value of the ComboBox is about to change ([see examples](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/binding)). * * @example * ```jsx * console.log('Value changed', event)} /> * ``` */ onChange?: (event: ComboBoxChangeEvent) => void; /** * Fires each time the user types in the filter input ([see examples](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/filtering#toc-basic-configuration)). You can filter the source based on the passed filtration value. * * @example * ```jsx * console.log('Filter changed', event)} /> * ``` */ onFilterChange?: (event: ComboBoxFilterChangeEvent) => void; /** * Fires when both the virtual scrolling of the ComboBox is enabled and the component requires data for another page ([more information and examples](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/virtualization)). * * @example * ```jsx * console.log('Page changed', event)} /> * ``` */ onPageChange?: (event: ComboBoxPageChangeEvent) => void; /** * Fires when the ComboBox input element is about to be rendered. Use it to override the default appearance of the component. * * @example * ```jsx * {rendering}} /> * ``` */ valueRender?: (rendering: React.ReactElement) => React.ReactNode; /** * Fires when a ComboBox list item is about to be rendered ([see example](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/custom-rendering#toc-items)). Used to override the default appearance of the list items. * * @example * ```jsx *
  • {itemProps.dataItem}
  • } /> * ``` */ itemRender?: (li: React.ReactElement, itemProps: ListItemProps) => React.ReactNode; /** * Fires when a ComboBox group header item is about to be rendered. Used to override the default appearance of the group's headers when the component is configured in `modern` group mode. * * @example * ```jsx *
  • {itemProps.dataItem}
  • } /> * ``` */ groupHeaderItemRender?: (li: React.ReactElement, itemProps: ListGroupItemProps) => React.ReactNode; /** * Fires when a ComboBox sticky group header item is about to be rendered. Used to override the default appearance of the sticky group header of the component. * * @example * ```jsx *
    {stickyHeaderProps.group}
    } /> * ``` */ groupStickyHeaderItemRender?: (div: React.ReactElement, stickyHeaderProps: GroupStickyHeaderProps) => React.ReactNode; /** * Fires when the element which indicates no data in the popup is about to be rendered. Used to override the default appearance of the element. * * @example * ```jsx *
    No data available
    } /> * ``` */ listNoDataRender?: (element: React.ReactElement) => React.ReactNode; /** * @hidden */ onGroupScroll?: (event: { group?: string; }) => void; /** * @hidden */ onListScroll?: (event: React.UIEvent) => void; /** * Sets the header component of the ComboBox ([see example](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/custom-rendering#toc-headers-and-footers)). * * @example * ```jsx * Header Content} /> * ``` */ header?: React.ReactNode; /** * Sets the footer component of the ComboBox ([see example](https://www.telerik.com/kendo-react-ui/components/dropdowns/combobox/custom-rendering#toc-headers-and-footers)). * * @example * ```jsx * Footer Content} /> * ``` */ footer?: React.ReactNode; /** * @hidden */ footerClassName?: string; /** * @hidden */ list?: any; /** * Configures the `size` of the ComboBox. * * The available options are: * - small * - medium * - large * * @default undefined (theme-controlled) * * @example * ```jsx * * ``` */ size?: 'small' | 'medium' | 'large'; /** * Configures the `roundness` of the ComboBox. * * The available options are: * - small * - medium * - large * - full * * @default undefined (theme-controlled) * * @example * ```jsx * * ``` */ rounded?: 'small' | 'medium' | 'large' | 'full' | 'none'; /** * Configures the `fillMode` of the ComboBox. * * The available options are: * - solid * - flat * - outline * * @default undefined (theme-controlled) * * @example * ```jsx * * ``` */ fillMode?: 'solid' | 'flat' | 'outline'; /** * Providing different rendering of the popup element based on the screen dimensions. * * @default `false` * * @example * ```jsx * * ``` */ adaptive?: boolean; /** * Specifies the text that is rendered as title in the adaptive popup(action sheet). * Applicable only when `adaptive` is set to `true`. * If not provided, the title will be the same as the label. * * @example * ```jsx * * ``` */ adaptiveTitle?: string; /** * Specifies the text that is rendered as subtitle in the adaptive popup(action sheet). * Applicable only when `adaptive` is set to `true`. * * @example * ```jsx * */ adaptiveSubtitle?: string; /** * Defines if ComboBox's disabled items will be skipped or focused when navigating through the list of items using a keyboard. Defaults to `true`. * * @example * ```jsx * * ``` * * @remarks * This property is related to accessibility. */ skipDisabledItems?: boolean; /** * Sets a custom prefix to the ComboBox component. * * @example * ```jsx * Prefix} /> * ``` */ prefix?: CustomComponent; /** * Sets a custom suffix to the ComboBox component. * * @example * ```jsx * Suffix} /> * ``` */ suffix?: CustomComponent; /** * @hidden */ unstyled?: DropDownsClassStructure; /** * Sets the HTML attributes of the inner focusable input element. * Attributes which are essential for certain component functionalities cannot be changed. * * @example * ```jsx * * ``` */ inputAttributes?: React.InputHTMLAttributes; /** * @hidden * This prop is provided by the withAdaptiveModeContext HOC to subscribe to AdaptiveModeContext. */ _adaptiveMode?: AdaptiveModeContextType; }