import React from "react";
import { Portal } from "../../../portal";
import { DismissableLayer } from "../dismissablelayer/DismissableLayer";
import { Floating } from "../floating/Floating";
import { FocusBoundary } from "../focus-boundary/FocusBoundary";
import { type RovingFocusProps } from "./parts/RovingFocus";
import { type SlottedDivElementRef, type SlottedDivProps } from "./parts/SlottedDivElement";
type CheckedState = boolean | "indeterminate";
interface MenuProps {
    children?: React.ReactNode;
    open?: boolean;
    onOpenChange?: (open: boolean) => void;
    modal?: boolean;
}
interface MenuComponent extends React.FC<MenuProps> {
    Anchor: typeof MenuAnchor;
    Portal: typeof MenuPortal;
    Content: typeof MenuContent;
    Group: typeof MenuGroup;
    Item: typeof MenuItem;
    CheckboxItem: typeof MenuCheckboxItem;
    RadioGroup: typeof MenuRadioGroup;
    RadioItem: typeof MenuRadioItem;
    Divider: typeof MenuDivider;
    Sub: typeof MenuSub;
    SubTrigger: typeof MenuSubTrigger;
    SubContent: typeof MenuSubContent;
    ItemIndicator: typeof MenuItemIndicator;
}
declare const Menu: MenuComponent;
type MenuAnchorProps = React.ComponentPropsWithoutRef<typeof Floating.Anchor>;
declare const MenuAnchor: React.ForwardRefExoticComponent<MenuAnchorProps & React.RefAttributes<HTMLDivElement>>;
type MenuContentProps = MenuContentInternalTypeProps;
declare const MenuContent: React.ForwardRefExoticComponent<MenuContentInternalTypeProps & React.RefAttributes<HTMLDivElement>>;
type FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusBoundary>;
type DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;
type MenuContentInternalPrivateProps = {
    initialFocus?: FocusScopeProps["initialFocus"];
    onDismiss?: DismissableLayerProps["onDismiss"];
    disableOutsidePointerEvents?: DismissableLayerProps["disableOutsidePointerEvents"];
};
interface MenuContentInternalProps extends MenuContentInternalPrivateProps, Omit<React.ComponentPropsWithoutRef<typeof Floating.Content>, "dir" | "onPlaced"> {
    returnFocus?: FocusScopeProps["returnFocus"];
    onEntryFocus?: RovingFocusProps["onEntryFocus"];
    onEscapeKeyDown?: DismissableLayerProps["onEscapeKeyDown"];
    onPointerDownOutside?: DismissableLayerProps["onPointerDownOutside"];
    onFocusOutside?: DismissableLayerProps["onFocusOutside"];
    onInteractOutside?: DismissableLayerProps["onInteractOutside"];
    safeZone?: DismissableLayerProps["safeZone"];
}
type MenuContentInternalTypeProps = Omit<MenuContentInternalProps, keyof MenuContentInternalPrivateProps>;
type MenuItemElement = MenuItemInternalElement;
interface MenuItemProps extends Omit<MenuItemInternalProps, "onSelect"> {
    onSelect?: (event: Event) => void;
}
declare const MenuItem: React.ForwardRefExoticComponent<MenuItemProps & React.RefAttributes<HTMLDivElement>>;
type MenuItemInternalElement = SlottedDivElementRef;
interface MenuItemInternalProps extends SlottedDivProps {
    disabled?: boolean;
    "data-submenu-trigger"?: boolean;
}
type MenuGroupProps = SlottedDivProps;
declare const MenuGroup: React.ForwardRefExoticComponent<SlottedDivProps & React.RefAttributes<HTMLDivElement>>;
type PortalProps = React.ComponentPropsWithoutRef<typeof Portal>;
type MenuPortalProps = PortalProps & {
    children: React.ReactElement;
};
declare const MenuPortal: React.ForwardRefExoticComponent<Omit<import("../../../portal").PortalProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
    children: React.ReactElement;
} & React.RefAttributes<HTMLDivElement>>;
interface MenuRadioGroupProps extends MenuGroupProps {
    value?: string;
    onValueChange?: (value: string) => void;
}
declare const MenuRadioGroup: React.ForwardRefExoticComponent<MenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
type MenuItemIndicatorProps = SlottedDivProps;
declare const MenuItemIndicator: React.ForwardRefExoticComponent<SlottedDivProps & React.RefAttributes<HTMLDivElement>>;
interface MenuRadioItemProps extends MenuItemProps {
    value: string;
}
declare const MenuRadioItem: React.ForwardRefExoticComponent<MenuRadioItemProps & React.RefAttributes<HTMLDivElement>>;
interface MenuCheckboxItemProps extends MenuItemProps {
    checked?: CheckedState;
    onCheckedChange?: (checked: boolean) => void;
}
declare const MenuCheckboxItem: React.ForwardRefExoticComponent<MenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>>;
type MenuDividerProps = SlottedDivProps;
declare const MenuDivider: React.ForwardRefExoticComponent<SlottedDivProps & React.RefAttributes<HTMLDivElement>>;
interface MenuSubProps {
    children?: React.ReactNode;
    open?: boolean;
    onOpenChange?: (open: boolean) => void;
}
declare const MenuSub: React.FC<MenuSubProps>;
type MenuSubTriggerProps = MenuItemInternalProps;
declare const MenuSubTrigger: React.ForwardRefExoticComponent<MenuItemInternalProps & React.RefAttributes<HTMLDivElement>>;
type MenuSubContentProps = Omit<MenuContentInternalProps, keyof MenuContentInternalPrivateProps | "onCloseAutoFocus" | "onEntryFocus" | "side" | "align">;
declare const MenuSubContent: React.ForwardRefExoticComponent<MenuSubContentProps & React.RefAttributes<HTMLDivElement>>;
export { Menu, MenuAnchor, MenuCheckboxItem, MenuContent, MenuDivider, MenuGroup, MenuItem, MenuItemIndicator, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSub, MenuSubContent, MenuSubTrigger, type MenuAnchorProps, type MenuCheckboxItemProps, type MenuContentProps, type MenuDividerProps, type MenuGroupProps, type MenuItemElement, type MenuItemIndicatorProps, type MenuPortalProps, type MenuProps, type MenuRadioGroupProps, type MenuRadioItemProps, type MenuSubContentProps, type MenuSubProps, type MenuSubTriggerProps, };
