import { AfterViewInit, ElementRef, OnChanges, SimpleChanges } from '@angular/core';
import { ValidationMessageService } from '../../core/validation-message.service';
import { FormGroupHelper } from '../../shared/form-group.helper';
import { FormControlBase } from "../form-control-base";
import { FormGroup } from '@angular/forms';
import { ClickableElement } from '../../shared/directives/click-area-for/click-area-for.directive';
export declare type CheckboxState = 'unchecked' | 'indeterminate' | 'checked';
export declare class CheckboxComponent extends FormControlBase implements AfterViewInit, ClickableElement, OnChanges {
    protected validationMessageService: ValidationMessageService;
    protected formGroupHelper: FormGroupHelper;
    /**
     * The name of the checkbox input element
     */
    name: string;
    /**
     * A FormGroup containing FormControls who can only have a value of true or false.
     * The FormGroup should be flat (i.e. it should have no nested FormGroups).
     *
     * For example:
     * dependentCheckboxesGroup = new FormGroup({child1: new FormControl(false), child2: new FormControl(false), child3: new FormControl(false)})
     */
    dependentCheckboxesGroup?: FormGroup;
    /**
     * Determines whether to ignore or include disabled dependent checkboxes in the check to determine the checkbox state.
     */
    ignoreDisabledDependents: boolean;
    /**
     * Reference to the checkbox input control
    */
    protected inputElement: ElementRef;
    /**
     * If the checkbox is a master checkbox (i.e. it has a dependentCheckboxesGroup),
     * indeterminate is true if there are some checked dependents and some unchecked dependents.
     */
    indeterminate: boolean;
    private ignoreCall;
    /** Fired whenever the dependent checkboxes are changed to clear out subscriptions to the previous dependents */
    private resetDependentSubscriptions;
    constructor(validationMessageService: ValidationMessageService, formGroupHelper: FormGroupHelper);
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    dispatchEvent(event: Event): void;
    /**
     * Create watchers that allow the master and dependent checkbox states to stay in sync as the user interacts with them.
     * Dependents can update the master when their values change and the master updates dependents when the value changes.
     */
    private setupDependents;
    /**
     * If all dependents are true, the master should be true and determinate.
     * If all dependents are false, the master should be false and determinate.
     * If some dependents are true and some dependents are false, the master should be false and indeterminate.
     *
     * If ignoreDisabledDependents is true, does not include the disabled dependents when checking values
    */
    private updateMasterState;
}
