import type React from "react";
import type { CSSProperties, ComponentPropsWithRef, ReactNode } from "react";
import type { MenuPositionerProps } from "@base-ui/react/menu";
import type { IconProps } from "../Icon";
export type MenuSide = NonNullable<MenuPositionerProps["side"]>;
export type MenuAlign = NonNullable<MenuPositionerProps["align"]>;
export type MenuPlacement = MenuSide | `${MenuSide} ${MenuAlign}`;
export interface BaseProps {
    /**
     * @deprecated Use `style` instead.
     * This is kept for backward compatibility on the composable Menu pieces.
     */
    readonly UNSAFE_style?: CSSProperties;
    /**
     * @deprecated Use `className` instead.
     * This is kept for backward compatibility on the composable Menu pieces.
     */
    readonly UNSAFE_className?: string;
    readonly style?: CSSProperties;
    readonly className?: string;
}
export type ComposableMenuTriggerRenderProps = ComponentPropsWithRef<"button">;
export type ComposableMenuTriggerRender = React.ReactElement | ((props: ComposableMenuTriggerRenderProps) => React.ReactElement);
export interface ComposableMenuProps extends BaseProps {
    readonly children: ReactNode;
    readonly open?: boolean;
    readonly defaultOpen?: boolean;
    readonly onOpenChange?: (isOpen: boolean) => void;
}
export interface ComposableMenuGroupProps extends BaseProps {
    readonly children: ReactNode;
    readonly ariaLabel?: string;
}
export interface ComposableMenuSubmenuProps extends BaseProps {
    readonly children: ReactNode;
    readonly open?: boolean;
    readonly defaultOpen?: boolean;
    readonly onOpenChange?: (isOpen: boolean) => void;
}
type MenuItemVariants = "destructive";
export interface ComposableMenuItemProps extends BaseProps {
    readonly variation?: MenuItemVariants;
    readonly children: ReactNode;
    readonly onClick?: (event?: React.MouseEvent) => void;
    readonly textValue?: string;
    readonly closeOnClick?: boolean;
    readonly href?: string;
    readonly target?: string;
    readonly rel?: string;
}
export interface ComposableMenuItemIconProps extends IconProps {
}
export interface ComposableMenuContentProps extends BaseProps {
    readonly children: ReactNode;
    readonly preferredPlacement?: MenuPlacement;
}
export interface ComposableMenuSubmenuContentProps extends BaseProps {
    readonly children: ReactNode;
}
interface ComposableMenuTriggerBaseProps extends BaseProps {
    readonly ariaLabel?: string;
}
interface ComposableMenuTriggerDefaultProps extends ComposableMenuTriggerBaseProps {
    readonly children: ReactNode;
    readonly render?: undefined;
}
interface ComposableMenuTriggerCustomRenderProps extends ComposableMenuTriggerBaseProps {
    readonly children?: ReactNode;
    readonly render: ComposableMenuTriggerRender;
}
export type ComposableMenuTriggerProps = ComposableMenuTriggerDefaultProps | ComposableMenuTriggerCustomRenderProps;
export interface ComposableMenuSubmenuTriggerProps extends BaseProps {
    readonly children: ReactNode;
    readonly textValue?: string;
}
export interface ComposableMenuSeparatorProps extends BaseProps {
}
export interface ComposableMenuItemLabelProps {
    readonly children: React.ReactNode;
}
export interface ComposableMenuGroupLabelProps extends BaseProps {
    readonly children: React.ReactNode;
}
export interface ComposableMenuItemPrefixProps extends BaseProps {
    readonly children: React.ReactNode;
}
export interface ComposableMenuItemSuffixProps extends BaseProps {
    readonly children: React.ReactNode;
}
export interface ComposableMenuRadioGroupProps extends BaseProps {
    readonly children: ReactNode;
    readonly value?: string;
    readonly defaultValue?: string;
    readonly onValueChange?: (value: string) => void;
}
export interface ComposableMenuRadioItemProps extends BaseProps {
    readonly children: ReactNode;
    readonly value: string;
    readonly textValue?: string;
    readonly closeOnClick?: boolean;
}
export {};
