import React, { ReactNode, CSSProperties, HTMLAttributes } from 'react';
import { TriggerProps } from '../trigger';
import { TooltipProps } from '../tooltip';
/**
* @title Menu
*/
export interface MenuProps extends Omit, 'className'> {
children?: ReactNode;
style?: CSSProperties;
prefixCls?: string;
className?: string | string[];
isMenu?: boolean;
inDropdown?: boolean;
items?: ItemType[];
valueField?: string;
/**
* 菜单风格
* @defaultValue light
*/
theme?: 'light' | 'dark';
/**
* 菜单类型,目前支持垂直(vertical)、水平菜单(horizontal)、弹出(pop)
* @defaultValue vertical
*/
mode?: 'vertical' | 'horizontal' | 'pop' | 'popButton';
/**
* 层级之间的缩进量
* @en Indentation between levels
*/
levelIndent?: number;
/**
* 用于定制图标
*/
icons?: {
horizontalArrowDown?: ReactNode | null;
popArrowRight?: ReactNode | null;
collapseDefault?: ReactNode | null;
collapseActive?: ReactNode | null;
};
/**
* 默认展开所有多级菜单
*/
autoOpen?: boolean;
/**
* 是否水平折叠收起菜单
*/
collapse?: boolean;
/**
* 开启手风琴效果
*/
accordion?: boolean;
/**
* 菜单选项是否可选
* @defaultValue true
*/
selectable?: boolean;
/**
* 水平菜单是否自动溢出省略
* @defaultValue true
*/
ellipsis?: boolean | {
text?: ReactNode;
};
/**
* 是否自动滚动选中项目到可见区域
*/
autoScrollIntoView?: boolean;
/**
* 是否内置折叠按钮
*/
hasCollapseButton?: boolean;
/**
* 初始选中的菜单项 key 数组
*/
defaultSelectedKeys?: string[];
/**
* 初始展开的子菜单 key 数组
*/
defaultOpenKeys?: string[];
/**
* 选中的菜单项 key 数组(受控模式)
*/
selectedKeys?: string[];
/**
* 展开的子菜单 key 数组(受控模式)
*/
openKeys?: string[];
/**
* 点击菜单项的回调
*/
onClickMenuItem?: (key: string, event: any, keyPath: string[]) => any;
/**
* 点击子菜单标题的回调
*/
onClickSubMenu?: (key: string, openKeys: string[], keyPath: string[]) => void;
/**
* 折叠状态改变时的回调
*/
onCollapseChange?: (collapse: boolean) => void;
/**
* 水平菜单自动超出省略发生变化时的回调
*/
onEllipsisChange?: (status: {
lastVisibleIndex: number;
overflowNodes: ReactNode[];
}) => void;
/**
* 滚动到可见区域的配置项,接收所有[scroll-into-view-if-needed](https://github.com/stipsan/scroll-into-view-if-needed)的参数
*/
scrollConfig?: {
[key: string]: any;
};
/**
* 弹出模式下可接受所有 `Trigger` 的 `Props`
*/
triggerProps?: Partial;
/**
* 弹出模式下可接受所有 `ToolTip` 的 `Props`
*/
tooltipProps?: Partial;
showSearch?: boolean;
isGroup?: boolean;
}
export declare type ItemType = {
label: string;
key: string | number;
icon?: ReactNode;
children?: ItemType[];
disabled?: boolean;
onClick?: (item: ItemType) => {};
} | (MenuSubMenuProps | MenuItemGroupProps | MenuItemProps) | {
[params: string]: string;
};
/**
* @title Menu.SubMenu
*/
export interface MenuSubMenuProps extends Omit, 'title' | 'className'> {
children?: ReactNode;
style?: CSSProperties;
className?: string | string[];
level?: number;
_key?: string | string;
/**
* 子菜单的标题
*/
title?: string | ReactNode;
/**
* 图标
*/
icon?: ReactNode;
/**
* 唯一标志
*/
key: string | number;
/**
* 是否将多级菜单头也作为一个菜单项,支持点击选中等状态。
*/
selectable?: boolean;
/**
* 是否强制使用弹出模式,`level` 表示当前子菜单的层级
*/
popup?: boolean | ((level: number) => boolean);
/**
* 弹出模式下可接受所有 `Trigger` 的 `Props`
*/
triggerProps?: Partial;
}
/**
* @title Menu.ItemGroup
*/
export interface MenuItemGroupProps {
children?: ReactNode;
style?: CSSProperties;
className?: string | string[];
level?: number;
_key?: string;
/**
* 菜单组的标题
*/
title?: string | ReactNode;
/**
* 图标
*/
icon?: ReactNode;
}
/**
* @title Menu.Item
*/
export interface MenuItemProps extends Omit, 'className'> {
children?: ReactNode;
style?: CSSProperties;
className?: string | string[];
level?: number;
_key?: string | string;
onClick?: (e: any) => void;
/**
* 唯一标志
*/
key: string | number;
/**
* 图标
*/
icon?: ReactNode;
/**
* 菜单项禁止选中
*/
disabled?: boolean;
/**
* 配置最外层标签,可以是 html 标签或是组件
* @defaultValue div
*/
wrapper?: string | React.FC | React.ComponentClass;
/**
* 菜单折叠时,指定在 Tooltip 中展示的菜单项节点
*/
renderItemInTooltip?: () => ReactNode;
}