import type * as React from 'react';
import { UseLabelPropsProps } from '../Label/useLabelProps';
import { UseHintProps } from '../Hint/useHint';
import { UseInlineErrorProps } from '../InlineError/useInlineError';
export type DropdownSize = 'small' | 'medium';
export type DropdownValue = number | string;
export interface DropdownChangeObject {
    target: {
        value: string;
        name: string;
    };
    currentTarget: {
        value: string;
        name: string;
    };
}
export interface DropdownOption extends React.HTMLAttributes<'option'> {
    label: React.ReactNode;
    value: DropdownValue;
}
export interface DropdownOptGroup extends React.HTMLAttributes<'optgroup'> {
    label: React.ReactNode;
    options: DropdownOption[];
}
export interface BaseDropdownProps {
    /**
     * Sets the focus on the dropdown when it is first added to the document.
     */
    autoFocus?: boolean;
    /**
     * Sets the initial selected state. Use this for an uncontrolled component;
     * otherwise, use the `value` property.
     */
    defaultValue?: DropdownValue;
    /**
     * Disables the entire field.
     */
    disabled?: boolean;
    /**
     * Additional classes to be added to the root element.
     */
    className?: string;
    /**
     * Additional classes to be added to the dropdown button element
     */
    fieldClassName?: string;
    /**
     * A unique ID to be used for the `button` element. If one isn't provided, a unique ID will be generated.
     * Additional hint text to display
     */
    id?: string;
    /**
     * Access a reference to the `button` element
     */
    inputRef?: React.Ref<any> | React.MutableRefObject<any>;
    /**
     * Set to `true` to apply the "inverse" color scheme
     */
    inversed?: boolean;
    /**
     * The field's `name` attribute
     */
    name: string;
    onBlur?: (...args: any[]) => any;
    onChange?: (change: DropdownChangeObject) => any;
    /**
     * Text showing the requirement ("Required", "Optional", etc.). See [Required and Optional Fields](https://design.cms.gov/patterns/Forms/forms/#required-and-optional-fields).
     */
    requirementLabel?: React.ReactNode;
    /**
     * Sets the max-width of the input either to `'small'` or `'medium'`.
     */
    size?: DropdownSize;
    /**
     * Sets the field's `value`. Use this in combination with `onChange`
     * for a controlled component; otherwise, set `defaultValue`.
     */
    value?: DropdownValue;
    /**
     * Customize the default status messages announced to screen reader users via
     * aria-live during certain interactions.
     * @deprecated This option is not currently supported.
     * @hide-prop [Deprecated]
     */
    getA11yStatusMessage?: any;
    /**
     * Customize the default status messages announced to screen reader users via
     * aria-live when a selection is made.
     * @deprecated This option is not currently supported.
     * @hide-prop [Deprecated]
     */
    getA11ySelectionMessage?: any;
}
type OptionsOrChildren = {
    children?: undefined;
    /**
     * The list of options to be rendered. Each item must have a `label` and `value`.
     */
    options: Array<DropdownOption | DropdownOptGroup>;
} | {
    /**
     * Used to define custom dropdown options (i.e. option groups). Alternative to `options` prop.
     */
    children: React.ReactNode;
    options?: undefined;
};
export type DropdownProps = BaseDropdownProps & OptionsOrChildren & Omit<React.ComponentPropsWithRef<'button'>, keyof BaseDropdownProps> & Omit<UseLabelPropsProps & UseHintProps & UseInlineErrorProps, 'id' | 'inversed'>;
/**
 * For information about how and when to use this component,
 * [refer to its full documentation page](https://design.cms.gov/components/dropdown/).
 */
export declare const Dropdown: React.FC<DropdownProps>;
export default Dropdown;
