import * as React from 'react'; import { CustomRender, DataObject, CustomEventHandler } from '../../commonTypes'; import { PartialGlobalDefaultTheme } from '../../utils/useTheme'; import { COMPONENTS_NAMESPACES } from '../../constants'; export declare type Value = DataObject | string | number; export interface ClickEvent extends React.MouseEvent { component: { name?: string; value: T; }; } export interface ChangeEvent extends React.ChangeEvent { component: { name: string; value: T; }; } export interface DropDownLinkProps extends Omit, 'onChange'> { /** Additional component classes */ className?: string; /** * Data to display in list. * If array of objects is passed, you need to specify "textField" - field of object that contains data to be displayed in list * and "valueField" (optional), if in "onChange" needs to transmit data from another field of object (for example "id") */ data: DataObject[] | string[]; /** Forced opening of list */ isOpen?: boolean; /** Function for customizing value and appearance of drop-down list item. Called when element is about to be rendered */ itemRender?: CustomRender; /** Component name */ name?: string; /** Element selection handler */ onChange: (event: ChangeEvent) => void; /** Ref */ ref?: React.Ref; /** Object's field name from which data will be rendered as list items */ textField?: T extends object ? string : never; /** Theme for component */ theme?: PartialGlobalDefaultTheme[typeof COMPONENTS_NAMESPACES.dropDownLink]; /** Function for customizing current value */ titleRender?: CustomRender; /** Sets current value */ value: T; } export interface DropDownLinkItemProps { className?: string; item: Value; itemRender?: CustomRender; name?: string; onClick: CustomEventHandler; textField: string; } export declare type DropDownLinkType = React.FC & { Item?: React.FC; }; export interface ItemProps { children?: React.ReactNode; className?: string; onClick?: CustomEventHandler>; } export interface TitleProps { children?: React.ReactNode; className?: string; } export interface DropDownLinkRefCurrent { wrapper: HTMLElement | null; }