import type { MenuProps, MenuTheme } from 'antd';
import type { ItemType } from 'antd/lib/menu/hooks/useItems';
import React from 'react';
import type { PureSettings } from '../../defaultSettings';
import type { MenuDataItem, MessageDescriptor, Route, RouterTypes, WithFalse } from '../../typings';
import type { PrivateSiderMenuProps } from './SiderMenu';
export type MenuMode = 'vertical' | 'vertical-left' | 'vertical-right' | 'horizontal' | 'inline';
export type BaseMenuProps = {
    className?: string;
    /** 默认的是否展开，会受到 breakpoint 的影响 */
    defaultCollapsed?: boolean;
    collapsed?: boolean;
    splitMenus?: boolean;
    isMobile?: boolean;
    menuData?: MenuDataItem[];
    mode?: MenuMode;
    onCollapse?: (collapsed: boolean) => void;
    openKeys?: WithFalse<string[]> | undefined;
    handleOpenChange?: (openKeys: string[]) => void;
    iconPrefixes?: string;
    /** 要给菜单的props, 参考antd-menu的属性。https://ant.design/components/menu-cn/ */
    menuProps?: MenuProps;
    style?: React.CSSProperties;
    theme?: MenuTheme;
    formatMessage?: (message: MessageDescriptor) => string;
    /**
     * @name 处理父级菜单的 props，可以复写菜单的点击功能，一般用于埋点
     * @see 子级的菜单要使用 menuItemRender 来处理
     *
     * @example 使用 a 标签跳转到特殊的地址 subMenuItemRender={(item, defaultDom) => { return <a onClick={()=> history.push(item.path) }>{defaultDom}</a> }}
     * @example 增加埋点 subMenuItemRender={(item, defaultDom) => { return <a onClick={()=> log.click(item.name) }>{defaultDom}</a> }}
     */
    subMenuItemRender?: WithFalse<(item: MenuDataItem & {
        isUrl: boolean;
    }, defaultDom: React.ReactNode, menuProps: BaseMenuProps) => React.ReactNode>;
    /**
     * @name 处理菜单的 props，可以复写菜单的点击功能，一般结合 Router 框架使用
     * @see 非子级的菜单要使用 subMenuItemRender 来处理
     *
     * @example 使用 a 标签 menuItemRender={(item, defaultDom) => { return <a onClick={()=> history.push(item.path) }>{defaultDom}</a> }}
     * @example 使用 Link 标签 menuItemRender={(item, defaultDom) => { return <Link to={item.path}>{defaultDom}</Link> }}
     */
    menuItemRender?: WithFalse<(item: MenuDataItem & {
        isUrl: boolean;
        onClick: () => void;
    }, defaultDom: React.ReactNode, menuProps: BaseMenuProps & Partial<PrivateSiderMenuProps>) => React.ReactNode>;
    /**
     * @name 处理 menuData 的方法，与 menuDataRender 不同，postMenuData处理完成后会直接渲染，不再进行国际化和拼接处理
     *
     * @example 增加菜单图标 postMenuData={(menuData) => { return menuData.map(item => { return { ...item, icon: <Icon type={item.icon} /> } }) }}
     */
    postMenuData?: (menusData?: MenuDataItem[]) => MenuDataItem[];
} & Partial<RouterTypes<Route>> & Omit<MenuProps, 'openKeys' | 'onOpenChange' | 'title'> & Partial<PureSettings>;
export declare class MenuUtil {
    constructor(props: BaseMenuProps);
    props: BaseMenuProps;
    getNavMenuItems: (menusData: MenuDataItem[] | undefined, isChildren: boolean) => ItemType[];
    /** Get SubMenu or Item */
    getSubMenuOrItem: (item: MenuDataItem, isChildren: boolean) => ItemType;
    getIntlName: (item: MenuDataItem) => string | undefined;
    /**
     * 判断是否是http链接.返回 Link 或 a Judge whether it is http link.return a or Link
     *
     * @memberof SiderMenu
     */
    getMenuItemPath: (item: MenuDataItem) => React.ReactNode;
    conversionPath: (path: string) => string;
}
declare const BaseMenu: React.FC<BaseMenuProps & PrivateSiderMenuProps>;
export default BaseMenu;
