import { ReactNode } from 'react';
import { MenuItemProps, PopoverProps, Key, Selection } from 'react-aria-components';
export type MenuTriggerProps = {
    children: ReactNode;
    /**
     * Override the default pill-shaped primary button styling. Pass any
     * Tailwind / utility classes to fully restyle the trigger (e.g. an
     * avatar pill or icon-only button). When omitted, the default
     * `--primary` rounded-full button is used.
     */
    className?: string;
    testId?: string;
};
export type MenuLinkProps = {
    href: string;
    children: ReactNode;
    /** Leading icon — pass any element; sized to 17px (e.g. `<User />`). */
    icon?: ReactNode;
    /** Mark as the current page — accent bar + tint, `aria-current="page"`. */
    isCurrent?: boolean;
    /** `danger` renders the row in the error color (e.g. "Log out"). */
    variant?: 'default' | 'danger';
    testId?: string;
};
export type MenuProps = {
    children: ReactNode;
    /**
     * Where the popover opens relative to the trigger — e.g. `'top end'` for a
     * menu in a sidebar footer. Mirrors React Aria's Popover. @default 'bottom end'
     */
    placement?: PopoverProps['placement'];
    /** Controlled open state. Mirrors React Aria's MenuTrigger. */
    isOpen?: boolean;
    /** Uncontrolled initial open state. */
    defaultOpen?: boolean;
    /** Fires when the menu opens or closes. */
    onOpenChange?: (isOpen: boolean) => void;
    /**
     * Cap the popover height in px. Without it the menu still caps itself to
     * the available viewport space (React Aria) — either way the item list
     * scrolls while the identity header stays pinned. Mirrors React Aria.
     */
    maxHeight?: number;
};
export type MenuButtonProps = {
    id: string;
    children: ReactNode;
    onClick: () => void;
    /** Leading icon — pass any element; sized to 17px (e.g. `<LogOut />`). */
    icon?: ReactNode;
    /** `danger` renders the row in the error color (e.g. "Log out"). */
    variant?: 'default' | 'danger';
    testId?: string;
};
export type MenuThemeToggleProps = {
    theme?: 'light' | 'dark' | null;
    onThemeChange: (theme: 'light' | 'dark') => void;
    lightLabel?: string;
    darkLabel?: string;
};
export type MenuSectionProps = {
    /** Uppercase eyebrow label above the section's items (e.g. "Language"). */
    label?: string;
    children: ReactNode;
    /**
     * Make the section selectable — selected `Menu.Option`s get a check mark.
     * Mirrors React Aria's section-level selection.
     */
    selectionMode?: 'single' | 'multiple';
    /** Controlled selection (the set of active option `id`s). */
    selectedKeys?: Iterable<Key>;
    /** Uncontrolled initial selection. */
    defaultSelectedKeys?: Iterable<Key>;
    /** Mirrors React Aria: `Selection` is `'all' | Set<Key>`. */
    onSelectionChange?: (keys: Selection) => void;
    /** Forbid clearing the last selected option — "exactly one". */
    disallowEmptySelection?: boolean;
    /**
     * Whether picking an option closes the menu. Set `false` for pickers the
     * user may want to compare (e.g. themes) without reopening. Mirrors React
     * Aria. @default true
     */
    shouldCloseOnSelect?: boolean;
    className?: string;
};
export type MenuOptionProps = {
    /** Identity within the selectable section — reported in `selectedKeys`. */
    id: string;
    children: ReactNode;
    /** Disable just this option. */
    isDisabled?: boolean;
    /** Plain-text value for typeahead when `children` isn't plain text. */
    textValue?: string;
    testId?: string;
};
export type MenuSeparatorProps = {
    className?: string;
};
interface MenuHeaderSlotProps {
    children?: ReactNode;
    className?: string;
}
declare const _default: (({ children, placement, isOpen, defaultOpen, onOpenChange, maxHeight }: MenuProps) => import("react").JSX.Element) & {
    Trigger: {
        ({ children, className, testId }: MenuTriggerProps): import("react").JSX.Element;
        displayName: string;
    };
    Chevron: {
        ({ className }: {
            className?: string;
        }): import("react").JSX.Element;
        displayName: string;
    };
    Link: ({ icon, isCurrent, variant, children, testId, ...rest }: MenuLinkProps & MenuItemProps) => import("react").JSX.Element;
    Button: (props: MenuButtonProps & MenuItemProps) => import("react").JSX.Element;
    Section: {
        ({ label, children, className, ...selection }: MenuSectionProps): import("react").JSX.Element;
        displayName: string;
    };
    Option: {
        ({ id, children, isDisabled, textValue, testId }: MenuOptionProps): import("react").JSX.Element;
        displayName: string;
    };
    Separator: {
        ({ className }: MenuSeparatorProps): import("react").JSX.Element;
        displayName: string;
    };
    ThemeToggle: ({ theme, onThemeChange, lightLabel, darkLabel, }: MenuThemeToggleProps) => import("react").JSX.Element;
    Header: {
        ({ children, className }: MenuHeaderSlotProps): import("react").JSX.Element;
        displayName: string;
    } & {
        Name: {
            ({ children, className }: MenuHeaderSlotProps): import("react").JSX.Element;
            displayName: string;
        };
        Email: {
            ({ children, className }: MenuHeaderSlotProps): import("react").JSX.Element;
            displayName: string;
        };
        Role: {
            ({ children, className }: MenuHeaderSlotProps): import("react").JSX.Element;
            displayName: string;
        };
    };
};
export default _default;
//# sourceMappingURL=Menu.d.ts.map