import React, { type ChangeEvent, type ReactElement, type KeyboardEvent, type UIEvent, type MouseEvent, type ReactNode } from 'react'; import PropTypes from 'prop-types'; import Base, { type BaseState } from './base'; import type { DataSourceItem, ObjectItem, SelectProps, VisibleChangeType } from './types'; /** * 无障碍化注意事项: * 1. Select 无搜索情况下,不应该让 Input 可 focus,此时外层 wrap 必须可 focus,并且需要相应 focus 事件让外边框发生变化 * * TODO: hightLight 后续改造注意点 * 1. hightLight 跟随点击变化 (fixed) 2. 弹窗打开时根据 是否高亮第一个选项的 api 开关设置是否 hightLight 第一项 */ export interface SelectState extends BaseState { fixWidth?: boolean; } /** * Select */ declare class Select extends Base { static propTypes: { mode: PropTypes.Requireable; value: PropTypes.Requireable; defaultValue: PropTypes.Requireable; onChange: PropTypes.Requireable<(...args: any[]) => any>; dataSource: PropTypes.Requireable<(NonNullable; label: PropTypes.Requireable; disabled: PropTypes.Requireable; children: PropTypes.Requireable; }> | null | undefined> | null | undefined)[]>; hasBorder: PropTypes.Requireable; hasArrow: PropTypes.Requireable; showSearch: PropTypes.Requireable; onSearch: PropTypes.Requireable<(...args: any[]) => any>; onSearchClear: PropTypes.Requireable<(...args: any[]) => any>; hasSelectAll: PropTypes.Requireable>; fillProps: PropTypes.Requireable; useDetailValue: PropTypes.Requireable; cacheValue: PropTypes.Requireable; valueRender: PropTypes.Requireable<(...args: any[]) => any>; itemRender: PropTypes.Requireable<(...args: any[]) => any>; notFoundContent: PropTypes.Requireable; style: PropTypes.Requireable; searchValue: PropTypes.Requireable; tagInline: PropTypes.Requireable; tagClosable: PropTypes.Requireable; adjustTagSize: PropTypes.Requireable; maxTagCount: PropTypes.Requireable; maxTagPlaceholder: PropTypes.Requireable<(...args: any[]) => any>; hiddenSelected: PropTypes.Requireable; onRemove: PropTypes.Requireable<(...args: any[]) => any>; onFocus: PropTypes.Requireable<(...args: any[]) => any>; onBlur: PropTypes.Requireable<(...args: any[]) => any>; onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>; onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>; onKeyDown: PropTypes.Requireable<(...args: any[]) => any>; locale: PropTypes.Requireable; popupAutoFocus: PropTypes.Requireable; showDataSourceChildren: PropTypes.Requireable; autoClearSearchValue: PropTypes.Requireable; prefix: PropTypes.Requireable; size: PropTypes.Requireable; placeholder: PropTypes.Requireable; autoWidth: PropTypes.Requireable; label: PropTypes.Requireable; hasClear: PropTypes.Requireable; state: PropTypes.Requireable; readOnly: PropTypes.Requireable; disabled: PropTypes.Requireable; visible: PropTypes.Requireable; defaultVisible: PropTypes.Requireable; onVisibleChange: PropTypes.Requireable<(...args: any[]) => any>; popupContainer: PropTypes.Requireable; popupClassName: PropTypes.Requireable; popupStyle: PropTypes.Requireable; popupProps: PropTypes.Requireable; followTrigger: PropTypes.Requireable; popupContent: PropTypes.Requireable; menuProps: PropTypes.Requireable; filterLocal: PropTypes.Requireable; filter: PropTypes.Requireable<(...args: any[]) => any>; defaultHighlightKey: PropTypes.Requireable; highlightKey: PropTypes.Requireable; onToggleHighlightItem: PropTypes.Requireable<(...args: any[]) => any>; autoHighlightFirstItem: PropTypes.Requireable; useVirtual: PropTypes.Requireable; className: PropTypes.Requireable; children: PropTypes.Requireable; rtl: PropTypes.Requireable; popupComponent: PropTypes.Requireable; isPreview: PropTypes.Requireable; renderPreview: PropTypes.Requireable<(...args: any[]) => any>; }; static defaultProps: SelectProps; static displayName: string; selectAllYet: boolean; constructor(props: SelectProps); static getDerivedStateFromProps(nextProps: SelectProps, prevState: BaseState): {} | null; componentDidUpdate(prevProps: SelectProps, prevState: BaseState): void; componentDidMount(): void; ie9Hack(): void; useDetailValue(): boolean; hasSearch(): boolean; getTagSize(): "small" | "medium" | "large" | undefined; /** * Menu.Item onSelect */ handleMenuSelect(keys: string[], item: { props: { _key: string; }; }): false | void; handleItemClick(key: string): void; /** * 单选模式 */ handleSingleSelect(key: string, triggerType: VisibleChangeType): void; /** * 多选模式 multiple/tag */ handleMultipleSelect(keys: DataSourceItem[] | undefined, triggerType: VisibleChangeType, key?: string | null, keepSearchValue?: boolean): void; updateSelectAllYet(value?: unknown): void; handleSearchValue(value: string): void; /** * Handle search input change event */ handleSearch(value: string, e: ChangeEvent): void; handleSearchClear(triggerType?: string): void; handleSearchKeyDown(e: KeyboardEvent): void; chooseMultipleItem(key: string): void; chooseHighlightItem(proxy: unknown, e: UIEvent): false | undefined; /** * Handle Tag close event * @returns false return false to prevent auto close * ---- * It MUST be multiple mode, needn't additional judgement */ handleTagClose(item: ObjectItem): boolean; /** * Handle BACKSPACE key event * @param e - keyDown event * --- * It MUST be multiple mode */ handleDeleteTag(e: UIEvent): false | undefined; /** * Handle SelectAll span click event * @param e - click event */ handleSelectAll(e: UIEvent): void; handleVisibleChange(visible: boolean, type: VisibleChangeType): void; afterClose(): void; maxTagPlaceholder(selectedValues: ObjectItem[], totalValues: ObjectItem[]): string; /** * 如果用户是自定义的弹层,则直接以 value 为准,不再校验 dataSource * TODO: 2.0 中 value 接受 string/object\{value,label\} 两种类型的数据,自动做识别,可以避免用户去转换,也和 date-picker 对齐 * 此外 onChange 第一个参数根据 api 来控制类型是 [string] 还是 [object\{value,label\}] */ renderValues(): ReactNode; /** * 1. fix flash while click