import { EventEmitter, QueryList, ChangeDetectorRef, OnInit } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { InputBoxComponent } from './box';
/** box group value type */
export interface BoxGroupValue {
    /** current changed box value */
    currentValue: any;
    /** all box group value, usually an array */
    value: any[];
}
/** box group item type */
export interface BoxGroupItem {
    value: string | number;
    text: string;
    checked?: boolean;
    disabled?: boolean;
    [key: string]: any;
}
/**
 * Box Group Component
 */
export declare class BoxGroupComponent implements ControlValueAccessor, OnInit {
    private _cd;
    /**
     * when box group value change, emit a change event with the `BoxGroupValue`, which contains
     * the `currentValue` and `value` property
     */
    change: EventEmitter<BoxGroupValue>;
    /**
     * box group type, either 'checkbox' or 'radio'
     * @default checkbox
     */
    type: 'radio' | 'checkbox';
    /**
     * Whether the box group is disabled
     * @default false
     */
    disabled: boolean;
    /**
     * box group datasource, when datasource exists, the inner boxes will be overwrited
     */
    datasource: BoxGroupItem[];
    /**
     * @docs-private
     */
    disabledChange: EventEmitter<boolean>;
    /**
     * the value associated with the box group
     */
    value: any;
    /**
     * the unique name of the box group
     * @docs-private
     */
    uuid: string;
    /** children box components */
    _contentBoxList: QueryList<InputBoxComponent>;
    /**
     * button toggle view children
     */
    _viewBoxList: QueryList<InputBoxComponent>;
    constructor(_cd: ChangeDetectorRef);
    ngOnInit(): void;
    /**
     * select some value, according to the type, change sub box component behavior
     *
     * @param {any} value - box value
     * @docs-private
     */
    select(value: any): void;
    /**
     * The method to be called in order to update ngModel.
     * Now `ngModel` binding is not supported in multiple selection mode.
     */
    private _onModelChange;
    /**
     * Registers a callback that will be triggered when the value has changed.
     * Implemented as part of ControlValueAccessor.
     * @param fn On change callback function.
     */
    registerOnChange(fn: Function): void;
    /** onTouch function registered via registerOnTouch (ControlValueAccessor). */
    private _onTouch;
    /**
     * Registers a callback that will be triggered when the control has been touched.
     * Implemented as part of ControlValueAccessor.
     * @param fn On touch callback function.
     */
    registerOnTouched(fn: Function): void;
    /**
     * Sets the model value. Implemented as part of ControlValueAccessor.
     * @param value Value to be set to the model. It must be an array.
     */
    writeValue(value: (string | number)[]): void;
    /**
     * force update box group value
     *
     * @param {any[]} value
     * @returns
     */
    _forceUpdateValue(value: (string | number)[]): void;
    /**
     * Toggles the disabled state of the component. Implemented as part of ControlValueAccessor.
     * @param isDisabled Whether the component should be disabled.
     */
    setDisabledState(isDisabled: boolean): void;
    /**
     * update form model value and mark for check
     */
    _updateFormModel(): void;
    _getBoxList(): QueryList<InputBoxComponent>;
    /**
     * reset box group value
     */
    reset(): void;
}
