import { ReactNode, MouseEventHandler, SyntheticEvent } from 'react'; import { MenuPopper, MenuPopperProps, MenuItemId } from '@befe/brick-comp-menu'; import { ConfiguredComponent } from '@befe/brick-core'; export type DropMenuOptionValue = MenuItemId; export declare const DROP_MENU_SIZES: readonly ["xs", "sm", "md", "lg"]; type DropMenuSize = (typeof DROP_MENU_SIZES)[number]; /** * @public */ export interface DropMenuOptionObject { /** * 选项的值 * 亦是选项的唯一标识 */ value: DropMenuOptionValue; /** * 选项显示内容 */ label?: ReactNode; /** * 点击回调 */ onClick?: MouseEventHandler; /** * 是否禁用 */ disabled?: boolean; /** * 选项组类型 * 如不设置,则跟随 DropMenu `props.groupType` * * 同一个 DropMenu 下,暂不提供不同类型 type 混用 * @private */ type?: 'group' | 'popper'; /** * popper menu 触发类型, * 如不设置则跟随 DropMenu `props.triggerType` */ popperTriggerType?: 'hover' | 'click'; /** * 子选项 */ children?: DropMenuOptionObject[]; } export type DropMenuValue = null | DropMenuOptionValue | DropMenuOptionValue[] | DropMenuOptionObject | DropMenuOptionObject[]; type PropsFromMenuPopper = Pick; export interface DropMenuProps extends PropsFromMenuPopper { /** * 自定义 class */ className?: string; /** * 菜单列表 */ options?: DropMenuOptionObject[]; /** * 触发方式 */ triggerType: 'click' | 'hover'; /** * 尺寸 * use config context `baseSize` as default */ size?: DropMenuSize; /** * 选中默认值 * 单选模式 "未选择" 值为 null * 多选模式 "未选择" 值为 [] */ defaultValue?: DropMenuValue; /** * 选中控制值 * 单选模式区分 `null` 与 `undefined` * - `null` 为控制值 "未选择" * - `undefined` 为不配置,即不控制 value * * 多选模式 * - "未选择" 控制值为 [] * - 不控制 value 为 undefined */ value?: DropMenuValue; /** * 值变化时的回调 */ onChange?: (value: DropMenuValue) => void; /** * 选择模式 */ mode?: 'single' | 'multiple'; /** * mode 'multiple' 下是否配备 "全选" */ withSelectAll?: boolean; /** * 是否禁用 */ disabled?: boolean; /** * 选项分组类型 */ groupType?: DropMenuOptionObject['type']; /** * menu popper 是否显示 */ menuPopperVisible?: boolean; /** * menuPopperVisible 改变时的回调 */ onChangeMenuPopperVisible?: (visible: boolean, e?: Event | SyntheticEvent) => void; /** * (暂定) * @private */ renderOptions?: (options?: DropMenuOptionObject[]) => ReactNode; /** * (暂定) * @private */ renderTargetNode?: () => ReactNode; } interface DropMenuState { value: DropMenuValue; menuPopperVisible: boolean; } export declare class DropMenu extends ConfiguredComponent { static displayName: string; static defaultProps: { className: string; mode: string; triggerType: string; withSelectAll: boolean; groupType: string; }; static getDerivedStateFromProps(nextProps: DropMenuProps): Partial | null; refMenuPopper: import("react").RefObject; constructor(props: DropMenuProps); get className(): string; get isMultiple(): boolean; get size(): "xs" | "sm" | "md" | "lg"; get triggerType(): "hover" | "click"; get submenuPopperTriggerType(): "hover" | "click"; get selectedIds(): MenuItemId[]; get isSelectedAll(): boolean | undefined; get menuPopperProps(): { matchMinWidthToTarget?: boolean | undefined; placement?: import("@popperjs/core").Placement | undefined; mouseEnterDelay?: number | undefined; focusDelay?: number | undefined; mouseLeaveDelay?: number | undefined; blurDelay?: number | undefined; refPopperWrap?: import("react").Ref | undefined; withArrow?: boolean | undefined; className: string; targetNode: import("react").ReactElement> | null; onChange: (menuPopperVisible: boolean, e?: Event | SyntheticEvent | undefined) => void; type: "hover" | "click"; visible: boolean; ref: import("react").RefObject; size: "xs" | "sm" | "md" | "lg"; }; renderOptions: (options?: DropMenuOptionObject[]) => import("react/jsx-runtime").JSX.Element[] | null; handleChangeSelectedIds: (selectedIds: DropMenuOptionValue[]) => void; changeValue(value: DropMenuValue): void; renderPopper: () => import("react/jsx-runtime").JSX.Element | null; renderTargetNode: () => import("react").ReactElement> | null; handlerPopperVisibleChange: (menuPopperVisible: boolean, e?: Event | SyntheticEvent) => void; handleClickSelectAll: () => void; renderSelectAllOption(): import("react/jsx-runtime").JSX.Element | null; render(): import("react/jsx-runtime").JSX.Element; } export {};