import { Component, CSSProperties, PropType, StyleValue } from 'vue';
import { NavigationFailure, RouteLocationRaw } from 'vue-router';
import { MenuItemClicked } from './types.js';
export type MenuMode = "horizontal" | "vertical";
export type MenuTrigger = "hover" | "click";
export type MenuPopperEffect = "dark" | "light" | string;
export type MenuIcon = string | Component;
export type MenuDataItemType = "item" | "submenu" | "group";
export interface MenuDataItem {
    index: string;
    label: string;
    type?: MenuDataItemType;
    children?: MenuDataItem[];
    disabled?: boolean;
    route?: RouteLocationRaw;
    icon?: MenuIcon;
    badge?: string | number;
    extraText?: string;
    hidden?: boolean;
    permission?: string | string[];
}
export type MenuPermissionChecker = (permission: string | string[] | undefined, item: MenuDataItem) => boolean;
export type MenuSelectEvent = (index: string, indexPath: string[], item: MenuItemClicked, routerResult?: Promise<void | NavigationFailure>) => void;
export type MenuOpenEvent = (index: string, indexPath: string[]) => void;
export type MenuCloseEvent = (index: string, indexPath: string[]) => void;
export type MenuActiveIndexChangeHandler = (value: string) => void;
export type MenuOpenedMenusChangeHandler = (value: string[]) => void;
export type MenuItemClickHandler = (item: MenuItemClicked) => void;
export interface MenuProps {
    mode?: MenuMode;
    defaultActive?: string;
    defaultOpeneds?: string[];
    activeIndex?: string;
    openedMenus?: string[];
    uniqueOpened?: boolean;
    router?: boolean;
    menuTrigger?: MenuTrigger;
    collapse?: boolean;
    items?: MenuDataItem[];
    permissionChecker?: MenuPermissionChecker;
    backgroundColor?: string;
    textColor?: string;
    activeTextColor?: string;
    closeOnClickOutside?: boolean;
    collapseTransition?: boolean;
    ellipsis?: boolean;
    popperOffset?: number;
    ellipsisIcon?: MenuIcon;
    popperEffect?: MenuPopperEffect;
    popperClass?: string;
    popperStyle?: StyleValue;
    showTimeout?: number;
    hideTimeout?: number;
    persistent?: boolean;
}
export interface MenuExposes {
    open: (index: string) => void;
    close: (index: string) => void;
    handleResize: () => void;
    updateActiveIndex: (index: string) => void;
}
export declare const MENU_MORE_INDEX = "__xy_menu_more__";
export declare const DEFAULT_MENU_MORE_WIDTH = 64;
export declare const menuProps: {
    readonly mode: {
        readonly type: StringConstructor;
        readonly default: "vertical";
    };
    readonly defaultActive: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly defaultOpeneds: {
        readonly type: PropType<string[]>;
        readonly default: () => never[];
    };
    readonly activeIndex: {
        readonly type: StringConstructor;
        readonly default: undefined;
    };
    readonly openedMenus: {
        readonly type: PropType<string[]>;
        readonly default: undefined;
    };
    readonly uniqueOpened: {
        readonly type: BooleanConstructor;
        readonly default: false;
    };
    readonly router: {
        readonly type: BooleanConstructor;
        readonly default: false;
    };
    readonly menuTrigger: {
        readonly type: StringConstructor;
        readonly default: "hover";
    };
    readonly collapse: {
        readonly type: BooleanConstructor;
        readonly default: false;
    };
    readonly items: {
        readonly type: PropType<MenuDataItem[]>;
        readonly default: undefined;
    };
    readonly permissionChecker: {
        readonly type: PropType<MenuPermissionChecker>;
        readonly default: undefined;
    };
    readonly backgroundColor: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly textColor: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly activeTextColor: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly closeOnClickOutside: {
        readonly type: BooleanConstructor;
        readonly default: false;
    };
    readonly collapseTransition: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    readonly ellipsis: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
    readonly popperOffset: {
        readonly type: NumberConstructor;
        readonly default: 6;
    };
    readonly ellipsisIcon: {
        readonly type: readonly [StringConstructor, ObjectConstructor, FunctionConstructor];
        readonly default: "mdi:dots-horizontal";
    };
    readonly popperEffect: {
        readonly type: StringConstructor;
        readonly default: "dark";
    };
    readonly popperClass: {
        readonly type: StringConstructor;
        readonly default: "";
    };
    readonly popperStyle: {
        readonly type: readonly [StringConstructor, ObjectConstructor, ArrayConstructor];
        readonly default: undefined;
    };
    readonly showTimeout: {
        readonly type: NumberConstructor;
        readonly default: 300;
    };
    readonly hideTimeout: {
        readonly type: NumberConstructor;
        readonly default: 300;
    };
    readonly persistent: {
        readonly type: BooleanConstructor;
        readonly default: true;
    };
};
export declare const menuEmits: {
    readonly "update:activeIndex": (_value: string) => boolean;
    readonly "update:openedMenus": (_value: string[]) => boolean;
    readonly select: (_index: string, _indexPath: string[], _item: MenuItemClicked, _routerResult?: Promise<void | NavigationFailure>) => boolean;
    readonly open: (_index: string, _indexPath: string[]) => boolean;
    readonly close: (_index: string, _indexPath: string[]) => boolean;
};
export declare function resolveMenuCssVars(props: Readonly<MenuProps>): CSSProperties;
