import { Role } from './internal/role.service';
export declare type UnAuthorizedVisibility = 'hidden' | 'disabled';
export declare enum Modes {
    EXPANDED = "expanded",
    EXPANDABLE = "expandable",
    MINI = "mini"
}
declare type MenuItemID = number | string;
export interface MenuItemBadge {
    label: string;
    classes: string;
}
export interface MenuItemBase {
    id?: MenuItemID;
    label: string;
    iconClasses?: string;
    badges?: MenuItemBadge[];
    roles?: Role[];
}
export interface MenuItemLeafRoute extends MenuItemBase {
    route: string;
    linkActiveExact?: boolean;
}
export interface MenuItemLeafURL extends MenuItemBase {
    url: string;
    target?: string;
}
export interface MenuItemHeader {
    id?: MenuItemID;
    header: string;
}
export interface MenuItemNode extends MenuItemBase {
    children: MenuItem[];
}
declare type Without<T, U> = {
    [P in Exclude<keyof T, keyof U>]?: never;
};
declare type XOR<T, U> = T | U extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;
export declare type MenuItem = XOR<MenuItemLeafRoute, XOR<MenuItemLeafURL, XOR<MenuItemHeader, MenuItemNode>>>;
export declare type Menu = MenuItem[];
export {};
