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; export type MenuAlign = NonNullable; 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 {};