import { AsyncValidator, AsyncValidatorFn, ControlContainer, ControlValueAccessor, FormControl, NgControl, Validator, ValidatorFn } from '@angular/forms';
import { CrnkControl } from './crnk.expression.form.model.base';
export declare function normalizeValidator(validator: ValidatorFn | Validator): ValidatorFn;
export declare function normalizeAsyncValidator(validator: AsyncValidatorFn | AsyncValidator): AsyncValidatorFn;
export declare function looseIdentical(a: any, b: any): boolean;
export declare function isPresent(obj: any): boolean;
export declare function controlPath(name: string, parent: ControlContainer): string[];
export declare function setUpControl(control: FormControl, dir: CrnkControl): void;
export declare function composeValidators(validators: Array<Validator | Function>): ValidatorFn;
export declare function composeAsyncValidators(validators: Array<Validator | Function>): AsyncValidatorFn;
export declare function isPropertyUpdated(changes: {
    [key: string]: any;
}, viewModel: any): boolean;
export declare function isBuiltInAccessor(valueAccessor: ControlValueAccessor): boolean;
export declare function selectValueAccessor(dir: NgControl, valueAccessors: ControlValueAccessor[]): ControlValueAccessor;
export declare class TemplateDrivenErrors {
    static modelParentException(): void;
    static formGroupNameException(): void;
    static missingNameException(): void;
    static modelGroupParentException(): void;
}
