import type { Placement } from '@popperjs/core';
import type React from 'react';
import type { PopperProps } from '../Popper';
import type { RenderTagsProps } from './types';
import { AutoCompleteCloseReason } from './types';
/**
* 自动补全组件变更原因
*/
export declare enum AutoCompleteChangeReason {
/**
* 选中选项
*/
selectOption = "select-option",
/**
* 创建选项。用于`freeSolo`模式。
*/
createOption = "create-option",
/**
* 删除选项
*/
removeOption = "remove-option",
/**
* 清除
*/
clear = "clear",
/**
* 失去焦点
*/
blur = "blur"
}
/**
* 自动填充组件属性类型
*/
export interface Props {
/**
* 渲染输入框。
*
* //TODO: 输入框属性类型
*/
renderInput: (props: any) => React.ReactElement;
/**
* 值
*
* //TODO: 值的类型
*/
value?: any;
/**
* 指定值变更的回调函数。
*
* @param value 新的值
* @param reason 引起值变更的原因
*/
onChange?: (value: any, reason: AutoCompleteChangeReason) => void;
/**
* 指定选项
*/
options: any[];
/**
* 用于确定给定选项的标签
*/
getOptionLabel: (option: any) => string;
/**
* 选项渲染方式
*/
renderOption?: (option: any) => React.ReactNode;
/**
* 自定义分组数据的渲染
*/
renderGroup?: (option: any) => React.ReactNode;
/**
* 指定分组依据
*/
groupBy?: (option: any) => string;
/**
* 设置为`true`时,按下Escape键,关闭选项弹窗。默认为`true`。
*/
closeOnEscape?: boolean;
/**
* 用于定位弹窗的组件。默认为`Popper`。
*/
PopperComponent?: React.ElementType;
/**
* 弹窗图标。默认为``。
*/
popupIcon?: React.ReactNode;
/**
* 设置为`true`,则会强制显示弹窗图标。默认为`auto`。
*/
forcePopupIcon?: 'auto' | boolean;
/**
* 设置为`true`,则会在输入框文本为空时,清空`value`。默认为`true`。
*/
clearable?: boolean;
/**
* 设置清除图标。默认为``。
*/
clearIcon?: React.ReactNode;
/**
* 设置为`true`,则按下Escape键时,清空`value`。默认为`false`。
*/
clearOnEscape?: boolean;
/**
* 设置为`true`,则在获取焦点时出现弹窗
*/
openOnFocus?: boolean;
/**
* 指定弹窗出现时的效果组件
*/
TransitionComponent?: React.ElementType;
/**
* 如果为`true`,则支持多选
*/
multiple?: boolean;
/**
* 选中选项时,是否关闭弹窗,默认为`true`
*/
closeOnSelect?: boolean;
/**
* 按`Home`键和`End`键是否高亮选项,默认为`true`
*/
handleHomeEndKeys?: boolean;
/**
* 指定标签形态
*/
tagVariant?: 'outlined' | 'standard';
/**
* 设置为`true`,则点击选项标签时打开选项弹窗。在多选模式下,默认为`true`。
*/
openOnClickTags?: boolean;
/**
* 渲染选项标签。
*/
renderTags?: (props: RenderTagsProps) => React.ReactNode;
/**
* 如果设置为`true`,则为freeSolo模式。默认为`false`
*/
freeSolo?: boolean;
/**
* 如果设置为`true`,则为密集模式
*/
dense?: boolean;
/**
* 设置多选时显示的标签数
*/
limitTags?: number;
/**
* 是否将弹出内容以传送门的方式渲染。默认为`false`。
*/
portal?: boolean;
/**
* 错误状态
*/
error?: boolean;
/**
* 不可用状态
*/
disabled?: boolean;
/**
* 只读状态
*/
readOnly?: boolean;
/**
* 宽度自适应
*/
autoWidth?: boolean;
/**
* 失去焦点时关闭弹窗,默认为`true`
*/
closeOnBlur?: boolean;
/**
* 控制选项打开状态
*/
open?: boolean;
/**
* 打开选项的回调函数
*/
onOpen?: (state: boolean) => void;
/**
* 关闭选项的回调函数
*/
onClose?: (reason: AutoCompleteCloseReason) => void;
/**
* 输入框引用
*/
textInputRef?: React.Ref;
/**
* 弹出层元素引用
*/
popperRef?: React.Ref;
/**
* 指定弹出层位置
*/
placement?: Placement;
/**
* 弹出元素属性
*/
popperComponentProps?: Partial;
/**
* 是否允许弹层获取焦点。默认为`false`。
*/
popperFocusable?: boolean;
/**
* 是否允许删除,默认为true
*/
allowClear?: boolean;
/**
* 是否允许显示title提示,默认为false
*/
allowShowTitle?: boolean;
/**
* 指定渲染选项列表的容器组件
*/
ListboxComponent?: React.ElementType;
/**
* 自定义样式类
*/
className?: string;
/**
* 如果设置为`true`,则显示加载中图标
*/
loading?: boolean;
}
/**
* 自动补全组件。
*
* @param props 组件属性。
*/
export default function AutoComplete(props: Props): JSX.Element;