import type { Ref } from 'vue';
import type { GraceIntent } from './utils';
import type { FocusScopeProps } from '../FocusScope';
import type { RovingFocusGroupEmits } from '../RovingFocus';
import type { DismissableLayerEmits, DismissableLayerProps } from '../DismissableLayer';
import type { PopperContentProps } from '../Popper';
export interface MenuContentContext {
    onItemEnter(event: PointerEvent): boolean;
    onItemLeave(event: PointerEvent): void;
    onTriggerLeave(event: PointerEvent): boolean;
    searchRef: Ref<string>;
    pointerGraceTimerRef: Ref<number>;
    onPointerGraceIntentChange(intent: GraceIntent | null): void;
}
export declare const injectMenuContentContext: <T extends MenuContentContext | null | undefined = MenuContentContext>(fallback?: T | undefined) => T extends null ? MenuContentContext | null : MenuContentContext, provideMenuContentContext: (contextValue: MenuContentContext) => MenuContentContext;
export interface MenuContentImplPrivateProps {
    disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents'];
    /**
     * Whether scrolling outside the `MenuContent` should be prevented
     * (default: `false`)
     */
    disableOutsideScroll?: boolean;
    /**
     * Whether focus should be trapped within the `MenuContent`
     * (default: false)
     */
    trapFocus?: FocusScopeProps['trapped'];
}
export type MenuContentImplEmits = DismissableLayerEmits & Omit<RovingFocusGroupEmits, 'update:currentTabStopId'> & {
    'openAutoFocus': [event: Event];
    /**
     * Event handler called when auto-focusing on close.
     * Can be prevented.
     */
    'closeAutoFocus': [event: Event];
};
export interface MenuContentImplProps extends MenuContentImplPrivateProps, Omit<PopperContentProps, 'dir' | 'onPlaced'> {
    /**
     * Whether keyboard navigation should loop around
     * @defaultValue false
     */
    loop?: boolean;
}
export interface MenuRootContentProps extends Omit<PopperContentProps, 'dir' | 'onPlaced'> {
    /**
     * Whether keyboard navigation should loop around
     * @defaultValue false
     */
    loop?: boolean;
}
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
    loop: {
        type: import("vue").PropType<boolean>;
    };
    asChild: {
        type: import("vue").PropType<boolean>;
    };
    as: {
        type: import("vue").PropType<import('../Primitive').AsTag | import("vue").Component>;
    };
    align: {
        type: import("vue").PropType<"center" | "end" | "start">;
        default: "center" | "end" | "start";
    };
    disableOutsidePointerEvents: {
        type: import("vue").PropType<boolean>;
    };
    trapFocus: {
        type: import("vue").PropType<boolean>;
    };
    sticky: {
        type: import("vue").PropType<"partial" | "always">;
        default: "partial" | "always";
    };
    side: {
        type: import("vue").PropType<"right" | "left" | "bottom" | "top">;
        default: "right" | "left" | "bottom" | "top";
    };
    sideOffset: {
        type: import("vue").PropType<number>;
        default: number;
    };
    alignOffset: {
        type: import("vue").PropType<number>;
        default: number;
    };
    avoidCollisions: {
        type: import("vue").PropType<boolean>;
        default: boolean;
    };
    collisionBoundary: {
        type: import("vue").PropType<Element | (Element | null)[] | null>;
        default: () => never[];
    };
    collisionPadding: {
        type: import("vue").PropType<number | Partial<Record<"right" | "left" | "bottom" | "top", number>>>;
        default: number;
    };
    arrowPadding: {
        type: import("vue").PropType<number>;
        default: number;
    };
    hideWhenDetached: {
        type: import("vue").PropType<boolean>;
        default: boolean;
    };
    updatePositionStrategy: {
        type: import("vue").PropType<"always" | "optimized">;
        default: "always" | "optimized";
    };
    prioritizePosition: {
        type: import("vue").PropType<boolean>;
        default: boolean;
    };
    disableOutsideScroll: {
        type: import("vue").PropType<boolean>;
    };
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
    escapeKeyDown: (event: KeyboardEvent) => void;
    pointerDownOutside: (event: import('../DismissableLayer').PointerDownOutsideEvent) => void;
    focusOutside: (event: import('../DismissableLayer').FocusOutsideEvent) => void;
    interactOutside: (event: import('../DismissableLayer').PointerDownOutsideEvent | import('../DismissableLayer').FocusOutsideEvent) => void;
    dismiss: () => void;
    openAutoFocus: (event: Event) => void;
    closeAutoFocus: (event: Event) => void;
    entryFocus: (event: Event) => void;
}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
    loop: {
        type: import("vue").PropType<boolean>;
    };
    asChild: {
        type: import("vue").PropType<boolean>;
    };
    as: {
        type: import("vue").PropType<import('../Primitive').AsTag | import("vue").Component>;
    };
    align: {
        type: import("vue").PropType<"center" | "end" | "start">;
        default: "center" | "end" | "start";
    };
    disableOutsidePointerEvents: {
        type: import("vue").PropType<boolean>;
    };
    trapFocus: {
        type: import("vue").PropType<boolean>;
    };
    sticky: {
        type: import("vue").PropType<"partial" | "always">;
        default: "partial" | "always";
    };
    side: {
        type: import("vue").PropType<"right" | "left" | "bottom" | "top">;
        default: "right" | "left" | "bottom" | "top";
    };
    sideOffset: {
        type: import("vue").PropType<number>;
        default: number;
    };
    alignOffset: {
        type: import("vue").PropType<number>;
        default: number;
    };
    avoidCollisions: {
        type: import("vue").PropType<boolean>;
        default: boolean;
    };
    collisionBoundary: {
        type: import("vue").PropType<Element | (Element | null)[] | null>;
        default: () => never[];
    };
    collisionPadding: {
        type: import("vue").PropType<number | Partial<Record<"right" | "left" | "bottom" | "top", number>>>;
        default: number;
    };
    arrowPadding: {
        type: import("vue").PropType<number>;
        default: number;
    };
    hideWhenDetached: {
        type: import("vue").PropType<boolean>;
        default: boolean;
    };
    updatePositionStrategy: {
        type: import("vue").PropType<"always" | "optimized">;
        default: "always" | "optimized";
    };
    prioritizePosition: {
        type: import("vue").PropType<boolean>;
        default: boolean;
    };
    disableOutsideScroll: {
        type: import("vue").PropType<boolean>;
    };
}>> & {
    onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
    onPointerDownOutside?: ((event: import('../DismissableLayer').PointerDownOutsideEvent) => any) | undefined;
    onFocusOutside?: ((event: import('../DismissableLayer').FocusOutsideEvent) => any) | undefined;
    onInteractOutside?: ((event: import('../DismissableLayer').PointerDownOutsideEvent | import('../DismissableLayer').FocusOutsideEvent) => any) | undefined;
    onDismiss?: (() => any) | undefined;
    onOpenAutoFocus?: ((event: Event) => any) | undefined;
    onCloseAutoFocus?: ((event: Event) => any) | undefined;
    onEntryFocus?: ((event: Event) => any) | undefined;
}, {
    align: "center" | "end" | "start";
    sticky: "partial" | "always";
    side: "right" | "left" | "bottom" | "top";
    sideOffset: number;
    alignOffset: number;
    avoidCollisions: boolean;
    collisionBoundary: Element | (Element | null)[] | null;
    collisionPadding: number | Partial<Record<"right" | "left" | "bottom" | "top", number>>;
    arrowPadding: number;
    hideWhenDetached: boolean;
    updatePositionStrategy: "always" | "optimized";
    prioritizePosition: boolean;
}, {}>, {
    default?(_: {}): any;
}>;
export default _default;
type __VLS_WithTemplateSlots<T, S> = T & {
    new (): {
        $slots: S;
    };
};
