import { VNodeChild } from 'vue';
import { Render, TargetType, VueNode, WithFalse } from "../typings";
import { AppMenuProps } from "./index";
import { MenuDataItem as MenuData } from '@antd-vue/hooks';
/**
 * 菜单主题颜色
 */
export declare type MenuTheme = 'light' | 'dark';
/**
 * 菜单类型
 */
export declare type MenuMode = 'vertical' | 'horizontal' | 'inline' | string;
/**
 * 菜单信息
 */
export interface MenuInfo {
    key: string | number;
    keyPath: string[] | number[];
    item: VNodeChild | any;
    domEvent: MouseEvent;
}
/**
 * 选中菜单信息
 */
export interface SelectInfo extends MenuInfo {
    selectedKeys: string[];
}
export declare type OpenEventHandler = (keys: string[] | {
    key: string;
    item: VNodeChild;
    trigger: string;
    open: boolean;
}) => void;
export declare type CollapseType = 'clickTrigger' | 'responsive';
/**
 * 菜单数据
 */
export interface MenuDataItem extends MenuData {
    /**
     * @description 菜单ID
     */
    id: string;
    /**
     * @description 父菜单ID
     */
    pid?: string;
    /**
     * @description 菜单名称
     */
    name: string;
    /**
     * @description 菜单图标
     */
    icon?: VueNode;
    /**
     * @description 菜单链接地址
     */
    href?: string;
    /**
     * @description 用于标记链接地址是否外链
     */
    external?: boolean;
    /**
     * @description  是外链是打开链接的位置
     */
    target?: TargetType;
    /**
     * @description 菜单隐藏类型
     * all 在菜单中隐藏自己和子节点
     * self 隐藏自己，并将子节点提升到与自己平级
     * children 在菜单中隐藏子节点
     * @default false
     */
    hidden?: WithFalse<'all' | 'children' | 'self'>;
    /**
     * @description 禁用菜单
     */
    disable?: boolean;
    /**
     * @description 在其前后是否插入分隔符
     */
    divider?: WithFalse<'before' | 'after' | 'all'>;
    /**
     * @description 子菜单
     */
    children?: MenuDataItem[];
    /**
     * @description 仅用于前端标记当前菜单是否已经注册路由,已注册则添加路由跳转，否则仅用于渲染 dom 节点
     */
    registeredRoute?: boolean;
    /**
     * @description 点击事件
     */
    onClick?: (...args: any[]) => void;
    /**
     * @description 组件属性参数
     */
    props?: Record<string, any>;
    [key: string]: any;
}
/**
 * 菜单头部渲染,渲染 logo 和 title
 */
export declare type MenuHeaderRender<P = any> = Render<P>;
/**
 * 折叠按钮渲染
 */
export declare type CollapsedButtonRender = (collapsed: boolean) => VueNode;
/**
 * 菜单内容渲染
 */
export declare type MenuContentRender<P = any> = (props: P, defaultDom: VueNode) => VueNode;
/**
 * 侧边栏菜单底部渲染
 */
export declare type MenuFooterRender<P = any> = (props: P) => VueNode;
/**
 * 自定义头右部的 render 方法
 */
export declare type MenuRightContentRender<P = any> = (props: P) => VueNode;
/**
 * 菜单额外内容渲染
 */
export declare type MenuExtraRender<P = any> = (props: P) => VueNode;
export interface IMenu extends AppMenuProps, IMenuEvent {
    /**
     * @description 头部的高度
     */
    headerHeight?: number;
    /**
     * @description 侧边栏宽度
     */
    sideWidth?: number;
    /**
     * @description 侧边栏折叠后的宽度
     */
    collapsedWidth?: number;
    /**
     * @description 是否固定
     * @default false
     */
    fixed?: boolean;
    /**
     * @description 折叠按钮渲染
     */
    collapsedButtonRender?: WithFalse<CollapsedButtonRender>;
    /**
     * @description 菜单头部渲染 logo & title
     */
    menuHeaderRender?: WithFalse<MenuHeaderRender>;
    /**
     * 菜单内容渲染
     */
    menuContentRender?: WithFalse<MenuContentRender>;
}
export interface IMenuEvent {
    /**
     * menu 菜单的头部点击事件
     * @param e MouseEvent
     */
    onMenuHeaderClick?: (e: MouseEvent) => void;
}
export declare type FormatMessage = (message: string) => string;
