import { ComponentPropsWithoutRef, ChangeEvent, ReactElement } from 'react';
import { LayoutUtilProps, Svg } from '../../../types';
import { HelperProps } from '../../../internal/components';
import { RadioState } from '../types';
/**
 * Props for the Radio component
 * @extends Omit<ComponentPropsWithoutRef<"input">, "onChange">
 * @extends LayoutUtilProps
 */
export type RadioProps = Omit<ComponentPropsWithoutRef<"input">, "onChange"> & LayoutUtilProps & {
    /**
     * Controlled state
     * @default false
     */
    checked?: boolean;
    /**
     * Uncontrolled state
     * @default false
     */
    defaultChecked?: boolean;
    /**
     * Callback when radio is changed
     */
    onChange?: (e: ChangeEvent<HTMLInputElement>, state?: RadioState) => void;
    /**
     * Label for Radio
     * @remarks This should either be a string or have text content inside for accessibility
     */
    label?: ReactElement | string;
    /**
     * Error state for the radio
     * @default false
     */
    error?: boolean;
    /**
     * Icon overrides for checked and unchecked states
     */
    icons?: {
        /**
         * Icon to display when radio is checked
         */
        checked?: Svg;
        /**
         * Icon to display when radio is unchecked
         */
        unchecked?: Svg;
    };
    /**
     * Description text to display below the radio
     */
    description?: HelperProps["description"];
    /**
     * When true, hides the radio for visual users
     * @default false
     */
    hideRadio?: boolean;
    /**
     * Additional className applied to the label wrapper span
     */
    labelWrapperClassName?: string;
};
/**
 * Radio component for single selection from a group of options.
 *
 * Features:
 * - Supports both controlled and uncontrolled modes
 * - Customizable icons for checked and unchecked states
 * - Error state with visual indicators
 * - Description text support
 * - Accessibility support with proper ARIA attributes
 * - Layout utility props for positioning and spacing
 * - Optional radio hiding for visual users
 * - Flexible labeling options
 * - Group support via Radio.Group
 *
 * @example
 * <Radio
 *   label="Option 1"
 *   value="option1"
 *   checked={selectedValue === "option1"}
 *   onChange={(e, state) => setSelectedValue(state?.value)}
 * />
 *
 * @example
 * <Radio
 *   label="Custom styled option"
 *   value="custom"
 *   icons={{
 *     checked: CustomCheckedIcon,
 *     unchecked: CustomUncheckedIcon
 *   }}
 *   description="This option has custom styling"
 * />
 *
 * @example
 * <Radio.Group legend="Choose your preference" required>
 *   <Radio label="Option A" value="a" />
 *   <Radio label="Option B" value="b" />
 *   <Radio label="Option C" value="c" />
 * </Radio.Group>
 */
export declare const Radio: import('react').ForwardRefExoticComponent<Omit<Omit<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "onChange"> & LayoutUtilProps & {
    /**
     * Controlled state
     * @default false
     */
    checked?: boolean;
    /**
     * Uncontrolled state
     * @default false
     */
    defaultChecked?: boolean;
    /**
     * Callback when radio is changed
     */
    onChange?: (e: ChangeEvent<HTMLInputElement>, state?: RadioState) => void;
    /**
     * Label for Radio
     * @remarks This should either be a string or have text content inside for accessibility
     */
    label?: ReactElement | string;
    /**
     * Error state for the radio
     * @default false
     */
    error?: boolean;
    /**
     * Icon overrides for checked and unchecked states
     */
    icons?: {
        /**
         * Icon to display when radio is checked
         */
        checked?: Svg;
        /**
         * Icon to display when radio is unchecked
         */
        unchecked?: Svg;
    };
    /**
     * Description text to display below the radio
     */
    description?: HelperProps["description"];
    /**
     * When true, hides the radio for visual users
     * @default false
     */
    hideRadio?: boolean;
    /**
     * Additional className applied to the label wrapper span
     */
    labelWrapperClassName?: string;
} & import('react').RefAttributes<HTMLInputElement>>;
