import { ReactiveController, ReactiveControllerHost } from 'lit';
export interface IRadioSelectionControllerHost extends ReactiveControllerHost, HTMLElement {
    checked?: boolean;
    required?: boolean;
    disabled?: boolean;
    name?: string;
    value?: string;
    readonly form: HTMLFormElement | null;
}
/**
 * A controller that groups radios by name and manages selection of a radio input in a group.
 *
 * A group is defined as:
 * - radio inputs with the same name associated with the same form
 * - radio inputs with the same name not associated with any form
 *
 * The radio input must call the `handleSelection()` method on this controller to manage the selection
 * in the group.
 */
export declare class RadioSelectionController implements ReactiveController {
    private readonly element;
    constructor(element: IRadioSelectionControllerHost);
    hostConnected(): void;
    hostDisconnected(): void;
    /**
     * Selects the current element and deselects other elements in the group.
     */
    handleSelection(): void;
    /**
     * A handler for the keydown event. Changes the selection (when there's a selection in the group).
     */
    handleKeyDown(e: KeyboardEvent): void;
    selectNext(): void;
    selectPrevious(): void;
    findNextInput(group: IRadioSelectionControllerHost[], current: IRadioSelectionControllerHost): IRadioSelectionControllerHost | null;
    findPreviousInput(group: IRadioSelectionControllerHost[], current: IRadioSelectionControllerHost): IRadioSelectionControllerHost | null;
    private _findGroup;
    /**
     * @param name The name of the input
     * @param form The associated form
     * @returns Ordered list of input group for the same form.
     */
    private _findFormGroup;
    /**
     * @param element The element to find its group
     * @returns Ordered list of inputs with the same name that don't belong to any form.
     */
    private _findDocumentGroup;
    /**
     * When multiple inputs within the same group have the `required` attribute
     * then the validation is reported incorrectly on inputs where the `tabindex` was removed from.
     * This triggers a console error (not an error in a sense of stopping JS execution) that
     * the form control is not focusable.
     * This removes the `required` attribute from the input when there's another radio button that has the
     * required attribute.
     */
    clearRequired(): void;
    /**
     * Removes the tabindex attribute from the input when there's another input with
     * `tabindex` within the same group. This way the user can `tab` to the next input instead
     * of tabbing through all inputs in the group.
     *
     * Note, tabindex values within a group may be different but it has no semantic or logical
     * meaning as navigation within a group happens with arrows and not tab.
     *
     */
    clearTabindex(): void;
    protected _readTabIndex(element: HTMLElement): number;
}
//# sourceMappingURL=RadioSelectionController.d.ts.map