import React from 'react';
import PropTypes from 'prop-types';
import RadioFoundation, { RadioAdapter } from '@douyinfe/semi-foundation/lib/es/radio/radioFoundation';
import { RadioChangeEvent } from '@douyinfe/semi-foundation/lib/es/radio/radioInnerFoundation';
import { strings } from '@douyinfe/semi-foundation/lib/es/radio/constants';
import '@douyinfe/semi-foundation/lib/es/radio/radio.css';
import BaseComponent from '../_base/baseComponent';
import RadioInner from './radioInner';
import { RadioContextValue, RadioMode } from './context';
export type RadioDisplayMode = 'vertical' | '';
export type RadioType = typeof strings.TYPE_DEFAULT | typeof strings.TYPE_BUTTON | typeof strings.TYPE_CARD | typeof strings.TYPE_PURECARD;
export type RadioProps = {
    autoFocus?: boolean;
    checked?: boolean;
    children?: React.ReactNode;
    defaultChecked?: boolean;
    value?: string | number | boolean;
    disabled?: boolean;
    prefixCls?: string;
    displayMode?: RadioDisplayMode;
    onChange?: (e: RadioChangeEvent) => void;
    onMouseEnter?: (e: React.MouseEvent<HTMLLabelElement>) => void;
    onMouseLeave?: (e: React.MouseEvent<HTMLLabelElement>) => void;
    mode?: RadioMode;
    extra?: React.ReactNode;
    style?: React.CSSProperties;
    className?: string;
    addonStyle?: React.CSSProperties;
    addonClassName?: string;
    type?: RadioType;
    'aria-label'?: React.AriaAttributes['aria-label'];
    addonId?: string;
    extraId?: string;
    name?: string;
    preventScroll?: boolean;
};
export interface RadioState {
    hover?: boolean;
    addonId?: string;
    extraId?: string;
    focusVisible?: boolean;
    checked?: boolean;
}
export type { RadioChangeEvent };
declare class Radio extends BaseComponent<RadioProps, RadioState> {
    static contextType: React.Context<RadioContextValue>;
    static propTypes: {
        autoFocus: PropTypes.Requireable<boolean>;
        checked: PropTypes.Requireable<boolean>;
        defaultChecked: PropTypes.Requireable<boolean>;
        value: PropTypes.Requireable<any>;
        style: PropTypes.Requireable<object>;
        className: PropTypes.Requireable<string>;
        disabled: PropTypes.Requireable<boolean>;
        prefixCls: PropTypes.Requireable<string>;
        displayMode: PropTypes.Requireable<RadioDisplayMode>;
        onChange: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
        mode: PropTypes.Requireable<"" | "advanced">;
        extra: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        addonStyle: PropTypes.Requireable<object>;
        addonClassName: PropTypes.Requireable<string>;
        type: PropTypes.Requireable<"default" | "button" | "card" | "pureCard">;
        'aria-label': PropTypes.Requireable<string>;
        preventScroll: PropTypes.Requireable<boolean>;
    };
    static defaultProps: Partial<RadioProps>;
    static elementType: string;
    radioEntity: RadioInner;
    context: RadioContextValue;
    foundation: RadioFoundation;
    addonId: string;
    extraId: string;
    constructor(props: RadioProps);
    componentDidUpdate(prevProps: RadioProps): void;
    get adapter(): RadioAdapter;
    isInGroup(): {
        value?: string | number;
        isButtonRadio?: any;
        disabled?: boolean;
        prefixCls?: string;
        name?: string;
        onChange?: (e: RadioChangeEvent) => void;
        buttonSize?: "small" | "large" | "middle";
        isCardRadio?: boolean;
        isPureCardRadio?: boolean;
    };
    focus(): void;
    blur(): void;
    onChange: (e: RadioChangeEvent) => void;
    handleMouseEnter: (e: React.MouseEvent<HTMLLabelElement>) => void;
    handleMouseLeave: (e: React.MouseEvent<HTMLLabelElement>) => void;
    handleFocusVisible: (event: React.FocusEvent) => void;
    handleBlur: (event: React.FocusEvent) => void;
    render(): React.JSX.Element;
}
export default Radio;
