import React, { Key } from "react";
import { ComboBoxState } from "@react-stately/combobox";
import { SelectState } from "@react-stately/select";
import { Node } from "@react-types/shared";
type LoaderProps = {
    size?: Size;
    /** Additional classes that will be spread over the Loader. Avoid changing the Loader visually. */
    className?: string;
};
type SeparatorProps = {
    /** An HTML ID attribute that will be attached to the the rendered component. Useful for targeting it from tests */
    id?: string;
    /** This Separator's orientation */
    orientation?: "vertical" | "horizontal";
    /** Additional classes that will be spread over the Separator. Avoid changing the Separator visually. */
    className?: string;
};
type Size = "xxs" | "xs" | "sm" | "md" | "lg" | "xl";
export declare function Separator({ id, orientation, className, }: SeparatorProps): React.JSX.Element;
export declare function Loader({ size, className }: LoaderProps): React.JSX.Element;
/**
 * A ListBox is an abstraction over components that render a list of options that are individually selectable.
 *
 * Currently, `Select` & `ComboBox` are `ListBox`es
 */
/** Value for a single Option inside this Select */
export type ListBoxOption<OptionKey extends Key> = {
    /** A string that uniquely identifies this option */
    key: OptionKey;
    /** The main text to display within this option */
    title: string;
    /** An icon to show before the title */
    description?: string;
};
type ListBoxOverlayProps<OptionKey extends Key> = {
    /** An HTML ID attribute that will be attached to the the rendered component. Useful for targeting it from tests */
    id?: string;
    /** A string describing what this ListBox represents */
    label: string;
    /** Ref of the ListBox container. This is used to position the overlay */
    containerRef: React.RefObject<HTMLElement>;
    /** A ref object that will be attached to the Options container */
    listBoxRef?: React.RefObject<HTMLUListElement>;
    /** A ref object that will be attached to the overlay element */
    overlayRef?: React.RefObject<HTMLDivElement>;
    /** The ListBox's global state */
    state: SelectState<ListBoxOption<OptionKey>> | ComboBoxState<ListBoxOption<OptionKey>>;
    dark?: boolean;
    /** An optional footer to render within the Overlay, after the Body */
    footer?: React.ReactElement;
    loading?: boolean;
    /** Additional props that will be spread over the overlay component */
    listBoxProps?: any;
};
/** An overlay that renders individual ListBox Options */
export declare function ListBoxOverlay<OptionKey extends Key = string>({ id, label, containerRef, listBoxRef: _listBoxRef, overlayRef: _overlayRef, state, dark, footer, loading, listBoxProps: otherProps, }: ListBoxOverlayProps<OptionKey>): React.JSX.Element;
type ListBoxSectionProps<OptionKey extends Key> = {
    /** Title for this Section */
    title: string;
    /** A group of similar options, only visual */
    section: Node<ListBoxOption<OptionKey>>;
    /** The global Select state */
    state: SelectState<ListBoxOption<OptionKey>> | ComboBoxState<ListBoxOption<OptionKey>>;
    dark?: boolean;
};
/** A single ListBox Section. This is usually used to (visually) group similar `ListBoxOption`s together */
export declare function ListBoxSection<OptionKey extends Key = string>({ title, section, state, dark, }: ListBoxSectionProps<OptionKey>): React.JSX.Element;
type ListBoxOptionProps<OptionKey extends Key> = {
    /** The option to render */
    option: Node<ListBoxOption<OptionKey>>;
    /** The global Select state */
    state: SelectState<ListBoxOption<OptionKey>> | ComboBoxState<ListBoxOption<Key>>;
    dark?: boolean;
};
/** A single `ListBox` Option */
export declare function ListBoxOption<OptionKey extends Key = string>({ option, state, dark, }: ListBoxOptionProps<OptionKey>): React.JSX.Element;
export declare function ListBoxLoadingOption(): React.JSX.Element;
type ListBoxErrorOptionProps = {
    children?: string;
};
export declare function ListBoxErrorOption({ children, }: ListBoxErrorOptionProps): React.JSX.Element;
type ListBoxEmptyOptionProps = {
    children?: string;
};
export declare function ListBoxEmptyOption({ children, }: ListBoxEmptyOptionProps): React.JSX.Element;
type ListBoxFooterProps = React.PropsWithChildren<{
    onPress?: () => void;
}>;
/** A static footer */
export declare function ListBoxFooter({ children, onPress }: ListBoxFooterProps): React.JSX.Element;
export {};
