import { IEventEmitter } from '@breadstone/mosaik-elements';
import { CustomElement } from '../../../Abstracts/CustomElement';
import type { IToggableCheckedEvent, IToggableCheckedEventDetail } from './Events/ToggableCheckedEventDetail';
import type { IToggableIndeterminateEvent, IToggableIndeterminateEventDetail } from './Events/ToggableIndeterminateEventDetail';
import type { IToggableUncheckedEvent } from './Events/ToggableUncheckedEventDetail';
import type { IToggableElementEvents } from './IToggableElementEvents';
import type { IToggableElementProps } from './IToggableElementProps';
declare const ToggableElement_base: import("../../../../../Index").ControlBehaviorReturn<typeof CustomElement, import("../../../../Behaviors/Focusable").IFocusableProps>;
/**
 * The {@link ToggableElement} is a abstract base class for a toggable behaviour.
 *
 * @fires checked - Called when the element is checked.
 * @fires unchecked - Called when the element is unchecked.
 * @fires indeterminate - Called when the element is indeterminate.
 *
 * @keyhandle Space - Toggles the element.
 * @keyhandle Enter - Toggles the element.
 *
 *
 * @public
 * @abstract
 */
export declare class ToggableElement extends ToggableElement_base implements IToggableElementProps, IToggableElementEvents {
    private readonly _checked;
    private readonly _unchecked;
    private readonly _indeterminate;
    private readonly _keyboardController;
    private _isChecked;
    private _isThreeState;
    constructor();
    /**
     * Returns the `{@link is}` property.
     * The `{@link is}` property represents natural name of this element.
     *
     * @public
     * @static
     * @readonly
     */
    static get is(): string;
    /**
     * Indicates whether the `{@link ToggableElement}` is checked.
     *
     * @public
     * @attr
     */
    get isChecked(): boolean | null;
    set isChecked(value: boolean | null);
    /**
     * The `isThreeState` property determines whether the `{@link ToggableElement}` supports two or three states.
     * `isChecked` property can be set to `null` as a third state when `isThreeState` is `true`
     *
     * @public
     * @attr
     */
    get isThreeState(): boolean;
    set isThreeState(value: boolean);
    /**
     * Called when the `isChecked` property is `true`.
     * Provides reference to the `{@link IToggableCheckedEventDetail}` as event argument.
     *
     * @public
     * @eventProperty
     * @readonly
     */
    get checked(): IEventEmitter<IToggableCheckedEventDetail>;
    /**
     * Called when the `isChecked` property is `false`.
     * Provides reference to the `{@link IToggableCheckedEventDetail}` as event argument.
     *
     * @public
     * @eventProperty
     * @readonly
     */
    get unchecked(): IEventEmitter<IToggableCheckedEventDetail>;
    /**
     * Called when the `isChecked` property is `null`.
     * Provides reference to the `{@link IToggableIndeterminateEventDetail}` as event argument.
     *
     * @public
     * @eventProperty
     * @readonly
     */
    get indeterminate(): IEventEmitter<IToggableIndeterminateEventDetail>;
    /**
     * @public
     * @override
     */
    connectedCallback(): void;
    /**
     * @public
     */
    check(): void;
    /**
     * @public
     */
    uncheck(): void;
    /**
     * @public
     */
    toggle(): void;
    /**
     * This method is invoked when the `isChecked` property is changed.
     *
     * @protected
     */
    protected onIsCheckedChanged(_prev: boolean | null, newValue: boolean | null): void;
    /**
     * Returns the next possible state based on the current state.
     *
     * @private
     */
    private nextPossibleState;
}
/**
 * @public
 */
declare global {
    interface HTMLElementEventMap {
        checked: IToggableCheckedEvent;
        unchecked: IToggableUncheckedEvent;
        indeterminate: IToggableIndeterminateEvent;
    }
}
export {};
//# sourceMappingURL=ToggableElement.d.ts.map