import { ComputedRef, InjectionKey, PropType, Ref, DefineComponent, ExtractPropTypes, VNode, RendererNode, RendererElement, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
import { CSSMotionProps } from '../../../_util/transition';
import { Key } from '../../../_util/type';
import { BuiltinPlacements, MenuClickEventHandler, MenuMode, MenuTheme, TriggerSubMenuAction } from '../interface';
export interface StoreMenuInfo {
    eventKey: string;
    key: Key;
    parentEventKeys: Ref<string[]>;
    childrenEventKeys?: Ref<string[]>;
    isLeaf?: boolean;
    parentKeys: Ref<Key[]>;
}
export interface MenuContextProps {
    rootClassName: Ref<string>;
    registerMenuInfo: (key: string, info: StoreMenuInfo) => void;
    unRegisterMenuInfo: (key: string) => void;
    prefixCls: ComputedRef<string>;
    openKeys: Ref<Key[]>;
    selectedKeys: Ref<Key[]>;
    selectedSubMenuKeys: Ref<Array<number | string>>;
    rtl?: ComputedRef<boolean>;
    inlineCollapsed: Ref<boolean>;
    theme?: ComputedRef<MenuTheme>;
    siderCollapsed?: Ref<boolean>;
    mode: Ref<MenuMode>;
    disabled?: ComputedRef<boolean>;
    overflowDisabled?: Ref<boolean>;
    activeKeys: Ref<Key[]>;
    changeActiveKeys: (keys: Key[]) => void;
    inlineIndent: ComputedRef<number>;
    motion?: ComputedRef<CSSMotionProps | null>;
    defaultMotions?: ComputedRef<Partial<{
        [key in MenuMode | 'other']: CSSMotionProps | ((name?: string) => CSSMotionProps);
    }> | null>;
    subMenuOpenDelay: ComputedRef<number>;
    subMenuCloseDelay: ComputedRef<number>;
    forceSubMenuRender: ComputedRef<boolean>;
    builtinPlacements?: ComputedRef<BuiltinPlacements>;
    triggerSubMenuAction?: ComputedRef<TriggerSubMenuAction>;
    expandIcon?: ComputedRef<(p?: {
        isOpen: boolean;
        [key: string]: any;
    }) => any>;
    onItemClick: MenuClickEventHandler;
    onOpenChange: (key: Key, open: boolean) => void;
    getPopupContainer: ComputedRef<(node: HTMLElement) => HTMLElement>;
}
declare const MenuContextKey: InjectionKey<MenuContextProps>;
declare const useProvideMenu: (props: MenuContextProps) => void;
declare const useInjectMenu: () => MenuContextProps | undefined;
export declare const useProvideForceRender: (forceRender: boolean) => void;
export declare const useInjectForceRender: () => boolean;
declare const MenuFirstLevelContextKey: InjectionKey<boolean>;
declare const useProvideFirstLevel: (firstLevel: boolean) => void;
declare const useInjectFirstLevel: () => boolean;
declare const MenuContextProvider: DefineComponent<ExtractPropTypes<{
    mode: {
        type: PropType<MenuMode>;
        default: undefined;
    };
    overflowDisabled: {
        type: BooleanConstructor;
        default: undefined;
    };
}>, () => VNode<RendererNode, RendererElement, {
    [key: string]: any;
}>[] | undefined, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly< ExtractPropTypes<{
    mode: {
        type: PropType<MenuMode>;
        default: undefined;
    };
    overflowDisabled: {
        type: BooleanConstructor;
        default: undefined;
    };
}>> & Readonly<{}>, {
    mode: MenuMode;
    overflowDisabled: boolean;
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
export { MenuContextKey, MenuContextProvider, MenuFirstLevelContextKey, useInjectFirstLevel, useInjectMenu, useProvideFirstLevel, useProvideMenu, };
export default useProvideMenu;
