import { ListBoxItemProps, ListBoxProps, ListBoxSectionProps } from 'react-aria-components/ListBox';
import { PopoverProps as AriaPopoverProps } from 'react-aria-components/Popover';
import { SelectProps as AriaSelectProps } from 'react-aria-components/Select';
import { AsyncLoadable, FocusableRefValue, GlobalDOMAttributes, HelpTextProps, LoadingState, SpectrumLabelableProps } from '@react-types/shared';
import { ContextValue } from 'react-aria-components/slots';
import { StyleProps } from './style-utils';
import React, { ReactNode } from 'react';
export interface PickerStyleProps {
    /**
     * The size of the Picker.
     *
     * @default 'M'
     */
    size?: 'S' | 'M' | 'L' | 'XL';
    /**
     * Whether the picker should be displayed with a quiet style.
     */
    isQuiet?: boolean;
}
type SelectionMode = 'single' | 'multiple';
export interface PickerProps<T extends object, M extends SelectionMode = 'single'> extends Omit<AriaSelectProps<T, M>, 'children' | 'style' | 'className' | 'render' | 'allowsEmptyCollection' | keyof GlobalDOMAttributes>, PickerStyleProps, StyleProps, SpectrumLabelableProps, HelpTextProps, Pick<ListBoxProps<T>, 'items' | 'dependencies'>, Pick<AriaPopoverProps, 'shouldFlip'>, Pick<AsyncLoadable, 'onLoadMore'> {
    /** The contents of the collection. */
    children: ReactNode | ((item: T) => ReactNode);
    /**
     * Direction the menu will render relative to the Picker.
     *
     * @default 'bottom'
     */
    direction?: 'bottom' | 'top';
    /**
     * Alignment of the menu relative to the input target.
     *
     * @default 'start'
     */
    align?: 'start' | 'end';
    /** Width of the menu. By default, matches width of the trigger. Note that the minimum width of the dropdown is always equal to the trigger's width. */
    menuWidth?: number;
    /** The current loading state of the Picker. */
    loadingState?: LoadingState;
    /**
     * Custom renderer for the picker value. Allows one to provide a custom element to render selected items.
     *
     * @note The returned ReactNode should not have interactable elements as it will break accessibility.
     */
    renderValue?: (selectedItems: T[]) => ReactNode;
}
export declare const PickerContext: React.Context<ContextValue<Partial<PickerProps<any, "single">>, FocusableRefValue<HTMLButtonElement, HTMLButtonElement>>>;
export declare let menu: (props: {
    size: "L" | "M" | "S" | "XL" | "XS" | undefined;
} | {
    [x: string]: any;
}) => import("../style/types").StyleString<"boxSizing" | "display" | "fontFamily" | "fontSize" | "gridAutoRows" | "gridTemplateColumns" | "maxHeight" | "outlineStyle" | "overflow" | "padding" | "width">;
/**
 * Pickers allow users to choose a single option from a collapsible list of options when space is limited.
 */
export declare const Picker: <T extends object, M extends SelectionMode = "single">(props: PickerProps<T, M> & React.RefAttributes<FocusableRefValue<HTMLButtonElement, HTMLButtonElement>>) => React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
export interface PickerItemProps extends Omit<ListBoxItemProps, 'children' | 'style' | 'className' | 'render' | 'onClick' | keyof GlobalDOMAttributes>, StyleProps {
    children: ReactNode;
}
export declare function PickerItem(props: PickerItemProps): ReactNode;
export interface PickerSectionProps<T extends object> extends Omit<ListBoxSectionProps<T>, 'style' | 'className' | 'render' | keyof GlobalDOMAttributes> {
}
export declare function PickerSection<T extends object>(props: PickerSectionProps<T>): ReactNode;
export {};
