import { NumberInput } from '@angular/cdk/coercion';
import * as i0 from '@angular/core';
import { OnChanges, AfterViewInit, OnDestroy, ElementRef, ChangeDetectorRef, InjectionToken } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { CssClassBuilder, Nullable } from '@fundamental-ngx/cdk/utils';
import * as i2 from '@fundamental-ngx/core/content-density';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { FormItemControl } from '@fundamental-ngx/core/form';

type stateType = 'success' | 'error' | 'warning' | 'default' | 'information';
declare class RadioButtonComponent<T = any> implements OnChanges, AfterViewInit, CssClassBuilder, ControlValueAccessor, OnDestroy, FormItemControl {
    private changeDetectionRef;
    readonly _contentDensityObserver: ContentDensityObserver;
    /** @hidden */
    inputElement: ElementRef<HTMLInputElement>;
    /** Sets the `aria-label` attribute to the element. */
    ariaLabel: Nullable<string>;
    /** Sets the `aria-labelledby` attribute to the element. */
    ariaLabelledBy: Nullable<string>;
    /** Sets the `aria-describedby` attribute to the element. */
    ariaDescribedBy: Nullable<string>;
    /** sets radio tooltip */
    title: string;
    /**
     * Includes the radio in the page tab sequence.
     */
    set tabIndex(value: NumberInput);
    get tabIndex(): NumberInput;
    /** The field to set state of radio button using:
     * 'success' | 'error' | 'warning' | 'default' | 'information'
     * by default value is set to 'default'
     */
    state?: stateType;
    /** The field is used to tell if radio button should be disabled
     * Value: true or false
     * by default disabled state is set to false
     */
    disabled: boolean;
    /** The field is used to tell if radio button should be read only */
    readOnly: boolean;
    /** The field should be only used with reactive forms
     * Its purpose is to pass a current selected value from froumGroup
     * The field is mandatory when working with reactive forms
     */
    set selectedValue(val: T);
    /** The name of the radio button
     * The field is mandatory
     */
    name: string;
    /**
     * uniqueId to a radio button
     */
    id: string;
    /** Value field stores information about holding value by radio button
     * The field is mandatory
     */
    value: T;
    /** If it is a mandatory field */
    required: boolean;
    /** Whether the control is a standalone. */
    standalone: boolean;
    /** Whether input label should be wrapped */
    wrapLabel: boolean;
    /** Vertical position of the label compared to the radio button */
    valignLabel: 'top' | 'middle';
    /** Whether the radio button is checked. */
    get checked(): boolean;
    /** @hidden */
    class: string;
    /** @hidden */
    currentValue: T;
    /** @hidden */
    private _tabIndex;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    constructor(changeDetectionRef: ChangeDetectorRef, _contentDensityObserver: ContentDensityObserver);
    /** This method is responsible for building a css class based on current state
     *  It is implementation of CssClassBuilder interface and
     *  should be used with @applyCssClass decorator
     */
    buildComponentCssClass(): string[];
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    ngOnChanges(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    onChange: (value: T) => void;
    /** @hidden */
    onTouched: () => void;
    /** @hidden */
    registerOnChange(fn: (value: T) => void): void;
    /** @hidden */
    registerOnTouched(fn: () => void): void;
    /** @hidden */
    setDisabledState(isDisabled: boolean): void;
    /** @hidden */
    setReadonlyState(isReadonly: boolean): void;
    /** @hidden */
    writeValue(value: T): void;
    /** @hidden */
    get elementRef(): ElementRef;
    /** @hidden */
    labelClicked(event: MouseEvent | KeyboardEvent, applyFocus?: boolean): void;
    /** @hidden */
    valueChange(value: T, emitEvent?: boolean): void;
    /** @hidden */
    private _checkMandatoryFields;
    /** @hidden */
    private _setFocusOnNativeElement;
    /** @hidden */
    private _setNativeElementCheckedState;
    static ɵfac: i0.ɵɵFactoryDeclaration<RadioButtonComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<RadioButtonComponent<any>, "fd-radio-button", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; }; "title": { "alias": "title"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "state": { "alias": "state"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "selectedValue": { "alias": "selectedValue"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "value": { "alias": "value"; "required": false; }; "required": { "alias": "required"; "required": false; }; "standalone": { "alias": "standalone"; "required": false; }; "wrapLabel": { "alias": "wrapLabel"; "required": false; }; "valignLabel": { "alias": "valignLabel"; "required": false; }; }, {}, never, ["*"], true, never>;
    static ngAcceptInputType_wrapLabel: unknown;
}

/**
 * @deprecated
 * Use direct import of `RadioButtonComponent`.
 */
declare class RadioModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<RadioModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<RadioModule, never, [typeof RadioButtonComponent, typeof i2.ContentDensityModule], [typeof RadioButtonComponent, typeof i2.ContentDensityModule]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<RadioModule>;
}

declare const FD_RADIO_BUTTON_COMPONENT: InjectionToken<unknown>;

export { FD_RADIO_BUTTON_COMPONENT, RadioButtonComponent, RadioModule };
export type { stateType };
