import { SyntheticEvent, ReactNode, KeyboardEvent } from 'react'; import { Menu, MenuPopper, MenuPopperProps, MenuProps } from '@befe/brick-comp-menu'; import { ConfiguredComponent } from '@befe/brick-core'; import { SelectSelectionProps } from './select-selection'; import { SelectOptionObject, SelectOptionValue, SelectValue } from './common'; type PropsFromSelectSelection = Pick; export interface SelectProps extends PropsFromSelectSelection { /** * 自定义 class */ className?: string; /** * 选择模式 */ mode?: 'single' | 'multiple'; /** * 选中控制值 * 单选模式区分 `null` 与 `undefined` * - `null` 为控制值 "未选择" * - `undefined` 为不配置,即不控制 value * * 多选模式 * - "未选择" 控制值为 [] * - 不控制 value 为 undefined */ value?: SelectValue; /** * 选中默认值 * 单选模式 "未选择" 值为 null * 多选模式 "未选择" 值为 [] */ defaultValue?: SelectValue; /** * 选项列表 */ options?: SelectOptionObject[]; /** * 最大选择个数 * `mode` 为 `multiple` 时有效 */ maxNumber?: number; /** * 选项列表弹出位置 */ placement?: MenuPopperProps['placement']; /** * 值变化时的回调 */ onChange?: (value: SelectValue) => void; /** * 多项选择的分隔符 * 使用 config context `selectedSeparator` 作为默认值 * 一个主题下应是统一的,所以不应滥用此配置项 * @private */ selectedSeparator?: string; /** * 已选择渲染器 * * 注意,返回的 ReactNode 必须是 inline element,以保证 selection 框内的 ellipsis 样式 */ renderSelected?: ((selectedOptions: SelectOptionObject[]) => ReactNode) | ((selectedOption: SelectOptionObject | null) => ReactNode); /** * 是否使用清除按钮,只对 mode single 有效 * 多选模式的整体清除入口为内置行为:有已选值且未禁用时自动显示,不受此 prop 控制 */ withClear?: boolean; /** * 是否使用全选,只对 mode multiple 有效 */ withSelectAll?: boolean; /** * 已选择"全部"展示文字 */ allSelectedLabel?: string; /** * 将选项列表的宽度固定为 selection 宽度 */ fixDropdownWidth?: MenuPopperProps['matchWidthToTarget']; } export interface SelectState { value: SelectValue; menuPopperVisible: boolean; } declare function optionValuePropChecker(props: SelectProps, propName: string, componentName: string): Error | null; export declare class Select extends ConfiguredComponent { static displayName: string; static propTypes: { value: typeof optionValuePropChecker; defaultValue: typeof optionValuePropChecker; }; static defaultProps: SelectProps; state: SelectState; componentLocale: import("@befe/brick-core").ComponentLocale<{ en_us: { all_selected: string; no_options: string; }; zh_cn: { all_selected: string; no_options: string; }; }>; refSelect: import("react").RefObject; refClearBtn: import("react").RefObject; refMenu: import("react").RefObject; refMenuPopper: import("react").RefObject; constructor(props: SelectProps); static getDerivedStateFromProps(nextProps: SelectProps, prevState: SelectState): Partial | null; get className(): string; get size(): SelectProps['size']; get selectedSeparator(): string; get withMaxNumber(): boolean; get selectedStats(): string | undefined; get isFull(): boolean; get menuPopperProps(): { ref: import("react").RefObject; className: string; size: "xs" | "sm" | "md" | "lg" | undefined; visible: boolean; targetNode: import("react/jsx-runtime").JSX.Element; onChange: (popperVisible: boolean, e?: Event | SyntheticEvent | undefined) => void; placement: import("@popperjs/core").Placement | undefined; matchWidthToTarget: boolean | undefined; type: string; emptyHint: string; }; get withClear(): boolean; get options(): SelectOptionObject[]; get flatAvailableOptions(): SelectOptionObject[]; get isSelectedAll(): boolean; get allSelectedLabel(): string; get isMultiple(): boolean; get isReachMax(): boolean; get selectedIds(): import("@befe/brick-comp-menu").MenuItemId[]; get selectedOptions(): SelectOptionObject[]; get sortedSelectedOptions(): SelectOptionObject[]; handlePopperVisibleChange: (popperVisible: boolean, e?: Event | SyntheticEvent) => void; handleChangeSelectedIds: (selectedIds: SelectOptionValue[]) => void; changeValue(value: SelectValue): void; handleClickSelectAll: () => void; handleClickClear: () => void; handleMouseDownPopperMenu: MenuProps['onMouseDown']; handleKeyDown: (e: KeyboardEvent) => void; findOption(value: SelectOptionValue, options: SelectOptionObject[] | null): SelectOptionObject | null; normalizeOptions(children: ReactNode): SelectOptionObject[]; moveMenuCursor(step: number): void; selectInCursor(): void; renderSelected(): string; renderSelection(): import("react/jsx-runtime").JSX.Element; renderTarget(): import("react/jsx-runtime").JSX.Element; renderOptions: (options?: SelectOptionObject[] | null) => {} | null; renderSelectAllOption(): import("react/jsx-runtime").JSX.Element | null; renderPopper(): import("react/jsx-runtime").JSX.Element | null; render(): import("react/jsx-runtime").JSX.Element; } export {};