import * as i0 from '@angular/core';
import { OnInit, DoCheck, OnChanges, EventEmitter, ElementRef, Renderer2, SimpleChanges } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { InputDirective } from '@eui/components/shared';
import { BooleanInput } from '@angular/cdk/coercion';

/**
 * @description
 * Checkbox input field that allows users to select or deselect a boolean value.
 * Supports standard checked state, disabled and readonly modes, validation feedback, and an optional indeterminate (mixed) state.
 *
 * Angular component that provides a custom checkbox input implementation.
 * Extends {@link InputDirective} and implements form control functionality.
 *
 * @usageNotes
 * ### Basic Usage
 * ```html
 * <input euiInputCheckBox id="terms" [(ngModel)]="acceptTerms" />
 * <label for="terms">I accept the terms and conditions</label>
 * ```
 *
 * ### With Indeterminate State
 * ```typescript
 * <input euiInputCheckBox [indeterminate]="someItemsSelected" />
 * ```
 *
 * ### Accessibility
 * - Always associate checkbox with a label using `for` attribute or wrap in `<label>`
 * - Component automatically provides `aria-label` based on checked state
 * - Supports keyboard interaction (Space key to toggle)
 * - Use `isInvalid` to communicate validation errors to screen readers
 *
 * ### Notes
 * - Indeterminate state is automatically cleared when checkbox is clicked
 * - Works seamlessly with Angular Forms (both template-driven and reactive)
 * - Readonly state prevents interaction but maintains visual appearance
 *
 * @component
 * @selector input[euiInputCheckBox]
 * @implements {@link OnInit}
 * @implements {@link DoCheck}
 * @implements {@link OnChanges}
 * @implements {@link ControlValueAccessor}
 */
declare class EuiInputCheckboxComponent extends InputDirective implements OnInit, DoCheck, OnChanges, ControlValueAccessor {
    /**
     * Gets the CSS classes for the checkbox component.
     * Combines base classes with validation state classes.
     *
     * @returns {string} Space-separated list of CSS classes
     */
    get cssClasses(): string;
    /**
     * Event emitter that fires when the indeterminate state changes.
     *
     * @event indeterminateChange
     * @type {EventEmitter<boolean>}
     */
    readonly indeterminateChange: EventEmitter<boolean>;
    /**
     * Controls the indeterminate (mixed) state of the checkbox.
     * When true, the checkbox appears in an indeterminate state.
     * This state is automatically cleared when the checkbox is clicked.
     *
     * @property {boolean} indeterminate
     */
    get indeterminate(): boolean;
    set indeterminate(value: BooleanInput);
    /**
     * Controls the invalid state of the checkbox. Used for displaying validation errors.
     *
     * @property {boolean} isInvalid
     */
    get isInvalid(): boolean;
    set isInvalid(state: any);
    protected _isInvalid: boolean;
    protected type: string;
    /**
     * Controls the checked state of the checkbox.
     *
     * @property {boolean} checked
     */
    get checked(): boolean;
    set checked(value: BooleanInput);
    /**
     * Attaches an aria-label attribute based on the checked state.
     *
     * @property {string} ariaLabel
     */
    get ariaLabel(): string;
    protected ngControl: NgControl;
    protected _elementRef: ElementRef<HTMLInputElement>;
    protected _renderer: Renderer2;
    protected _checked: boolean;
    private _indeterminate;
    constructor();
    /**
     * Lifecycle hook that is called after data-bound properties are initialized.
     * Sets the default control value if needed.
     */
    ngOnInit(): void;
    /**
     * Lifecycle hook that performs custom change detection.
     * Updates invalid state based on control status.
     */
    ngDoCheck(): void;
    /**
     * Lifecycle hook that is called when data-bound properties change.
     * Handles changes to checked and readonly states.
     *
     * @param {SimpleChanges} changes - Object containing changed properties
     */
    ngOnChanges(changes: SimpleChanges): void;
    /**
     * Implements ControlValueAccessor writeValue method.
     * Updates the checked state of the checkbox.
     *
     * @param {boolean} obj - The value to write
     */
    writeValue(obj: boolean): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setDisabledState?(isDisabled: boolean): void;
    /**
     * Event handler for checkbox change events.
     *
     * @param {boolean} checked - The new checked state
     * @protected
     */
    protected onChanged(checked: boolean): void;
    /**
     * Event handler for space key press.
     * Prevents space key action when checkbox is readonly.
     *
     * @param {KeyboardEvent} event - The keyboard event
     * @protected
     */
    protected onSpacePressed(event: KeyboardEvent): void;
    protected onChange: <T>(_: T) => void;
    protected onBlur: (_: any) => void;
    /**
     * Sets the invalid state of the checkbox.
     *
     * @param {any} state - The invalid state to set (true/false)
     * @protected
     */
    protected setInvalid(state?: boolean): void;
    /**
     * Sets the indeterminate state of the checkbox. This is also known as "mixed" mode and can be used to
     * represent a checkbox with three states, e.g. a checkbox that represents a nested list of
     * check-able items.
     *
     * @param value
     */
    private _syncIndeterminate;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiInputCheckboxComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiInputCheckboxComponent, "input[euiInputCheckBox]", never, { "indeterminate": { "alias": "indeterminate"; "required": false; }; "isInvalid": { "alias": "isInvalid"; "required": false; }; "checked": { "alias": "checked"; "required": false; }; }, { "indeterminateChange": "indeterminateChange"; }, never, never, true, never>;
}

declare const EUI_INPUT_CHECKBOX: readonly [typeof EuiInputCheckboxComponent];

export { EUI_INPUT_CHECKBOX, EuiInputCheckboxComponent };
//# sourceMappingURL=eui-components-eui-input-checkbox.d.ts.map
