import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
import { QueryOperatorDirective } from './query-operator.directive';
import { QueryFieldDirective } from './query-field.directive';
import { QueryEntityDirective } from './query-entity.directive';
import { QuerySwitchGroupDirective } from './query-switch-group.directive';
import { QueryButtonGroupDirective } from './query-button-group.directive';
import { QueryInputDirective } from './query-input.directive';
import { QueryRemoveButtonDirective } from './query-remove-button.directive';
import { QueryEmptyWarningDirective } from './query-empty-warning.directive';
import { QueryArrowIconDirective } from './query-arrow-icon.directive';
import { ButtonGroupContext, Entity, Field, SwitchGroupContext, EntityContext, FieldContext, InputContext, LocalRuleMeta, OperatorContext, Option, QueryBuilderClassNames, QueryBuilderConfig, RemoveButtonContext, ArrowIconContext, Rule, RuleSet, EmptyWarningContext } from './query-builder.interfaces';
import { ChangeDetectorRef, OnChanges, OnInit, QueryList, SimpleChanges, TemplateRef, ElementRef } from '@angular/core';
export declare const CONTROL_VALUE_ACCESSOR: any;
export declare const VALIDATOR: any;
export declare class QueryBuilderComponent implements OnInit, OnChanges, ControlValueAccessor, Validator {
    private changeDetectorRef;
    fields: Field[];
    filterFields: Field[];
    entities: Entity[];
    defaultClassNames: QueryBuilderClassNames;
    defaultOperatorMap: {
        [key: string]: string[];
    };
    disabled: boolean;
    data: RuleSet;
    onChangeCallback: () => void;
    onTouchedCallback: () => any;
    allowRuleset: boolean;
    allowCollapse: boolean;
    emptyMessage: string;
    classNames: QueryBuilderClassNames;
    operatorMap: {
        [key: string]: string[];
    };
    parentValue: RuleSet;
    config: QueryBuilderConfig;
    parentArrowIconTemplate: QueryArrowIconDirective;
    parentInputTemplates: QueryList<QueryInputDirective>;
    parentOperatorTemplate: QueryOperatorDirective;
    parentFieldTemplate: QueryFieldDirective;
    parentEntityTemplate: QueryEntityDirective;
    parentSwitchGroupTemplate: QuerySwitchGroupDirective;
    parentButtonGroupTemplate: QueryButtonGroupDirective;
    parentRemoveButtonTemplate: QueryRemoveButtonDirective;
    parentEmptyWarningTemplate: QueryEmptyWarningDirective;
    parentChangeCallback: () => void;
    parentTouchedCallback: () => void;
    persistValueOnFieldChange: boolean;
    treeContainer: ElementRef;
    buttonGroupTemplate: QueryButtonGroupDirective;
    switchGroupTemplate: QuerySwitchGroupDirective;
    fieldTemplate: QueryFieldDirective;
    entityTemplate: QueryEntityDirective;
    operatorTemplate: QueryOperatorDirective;
    removeButtonTemplate: QueryRemoveButtonDirective;
    emptyWarningTemplate: QueryEmptyWarningDirective;
    inputTemplates: QueryList<QueryInputDirective>;
    arrowIconTemplate: QueryArrowIconDirective;
    private defaultTemplateTypes;
    private defaultPersistValueTypes;
    private defaultEmptyList;
    private operatorsCache;
    private inputContextCache;
    private operatorContextCache;
    private fieldContextCache;
    private entityContextCache;
    private removeButtonContextCache;
    private buttonGroupContext;
    constructor(changeDetectorRef: ChangeDetectorRef);
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    validate(control: AbstractControl): ValidationErrors | null;
    get value(): RuleSet;
    set value(value: RuleSet);
    writeValue(obj: any): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setDisabledState(isDisabled: boolean): void;
    getDisabledState: () => boolean;
    findTemplateForRule(rule: Rule): TemplateRef<any>;
    findQueryInput(type: string): QueryInputDirective;
    getOperators(field: string): string[];
    getFields(entity: string): Field[];
    getInputType(field: string, operator: string): string;
    getOptions(field: string): Option[];
    getClassNames(...args: any[]): string;
    getDefaultField(entity: Entity): Field;
    getDefaultOperator(field: Field): string;
    addRule(parent?: RuleSet): void;
    removeRule(rule: Rule, parent?: RuleSet): void;
    addRuleSet(parent?: RuleSet): void;
    removeRuleSet(ruleset?: RuleSet, parent?: RuleSet): void;
    transitionEnd(e: Event): void;
    toggleCollapse(): void;
    computedTreeContainerHeight(): void;
    changeCondition(value: string): void;
    changeOperator(rule: Rule): void;
    coerceValueForOperator(operator: string, value: any, rule: Rule): any;
    changeInput(): void;
    changeField(fieldValue: string, rule: Rule): void;
    changeEntity(entityValue: string, rule: Rule, index: number, data: RuleSet): void;
    getDefaultValue(defaultValue: any): any;
    getOperatorTemplate(): TemplateRef<any>;
    getFieldTemplate(): TemplateRef<any>;
    getEntityTemplate(): TemplateRef<any>;
    getArrowIconTemplate(): TemplateRef<any>;
    getButtonGroupTemplate(): TemplateRef<any>;
    getSwitchGroupTemplate(): TemplateRef<any>;
    getRemoveButtonTemplate(): TemplateRef<any>;
    getEmptyWarningTemplate(): TemplateRef<any>;
    getQueryItemClassName(local: LocalRuleMeta): string;
    getButtonGroupContext(): ButtonGroupContext;
    getRemoveButtonContext(rule: Rule): RemoveButtonContext;
    getFieldContext(rule: Rule): FieldContext;
    getEntityContext(rule: Rule): EntityContext;
    getSwitchGroupContext(): SwitchGroupContext;
    getArrowIconContext(): ArrowIconContext;
    getEmptyWarningContext(): EmptyWarningContext;
    getOperatorContext(rule: Rule): OperatorContext;
    getInputContext(rule: Rule): InputContext;
    private calculateFieldChangeValue;
    private checkEmptyRuleInRuleset;
    private validateRulesInRuleset;
    private handleDataChange;
    private handleTouched;
}
