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; }