import { ComponentRef, EventEmitter } from '@angular/core';
import { LfFieldMetadataConnectorService } from './lf-field-metadata-connector.service';
import { AdhocFieldInfo } from './lf-field-adhoc-container/lf-field-adhoc-container-types';
import { LfFieldViewDirective } from './lf-field-view.directive';
import { LfFieldComponent } from './field-components/lf-field/lf-field.component';
import { LfFieldMultivalueComponent } from './field-components/lf-field-multivalue/lf-field-multivalue.component';
import { LfFieldGroupComponent } from './field-components/lf-field-group/lf-field-group.component';
import { FieldValue, FieldValues, LfFieldInfo, LfFieldValue, TemplateFieldInfo } from './field-components/utils/lf-field-types';
import * as i0 from "@angular/core";
export declare abstract class LfFieldContainerDirective {
    /** @internal */
    metadataConnectorService: LfFieldMetadataConnectorService;
    fieldValuesChanged: EventEmitter<boolean>;
    /** @internal */
    lfFieldView: LfFieldViewDirective;
    /** @internal */
    componentRefs: ComponentRef<LfFieldComponent | LfFieldMultivalueComponent>[];
    /** @internal */
    groupComponentRefs: ComponentRef<LfFieldGroupComponent>[];
    /** @internal */
    allFieldInfos: (TemplateFieldInfo | LfFieldInfo | AdhocFieldInfo)[];
    /** @internal */
    allFieldValues: FieldValues;
    /** @internal */
    private readonly VALUE_ACCESSOR;
    /** @internal */
    constructor(
    /** @internal */
    metadataConnectorService: LfFieldMetadataConnectorService);
    /** @internal */
    abstract clearAsync(): Promise<void>;
    /** @internal */
    abstract onFieldValueChangedAsync(fieldValues: string[], lfFieldInfo: LfFieldInfo, indicesChanged?: number[]): Promise<void>;
    /** @internal */
    abstract renderFieldsAsync(fieldInfos: (TemplateFieldInfo | LfFieldInfo | AdhocFieldInfo)[]): Promise<void>;
    /** @internal */
    abstract multivalueComponentInitAsync(componentRef: ComponentRef<LfFieldMultivalueComponent>, fieldInfo: LfFieldInfo, stringValues: LfFieldValue[]): Promise<void>;
    /** @internal */
    abstract fieldComponentInitAsync(componentRef: ComponentRef<LfFieldComponent>, fieldInfo: LfFieldInfo, stringValues: LfFieldValue): Promise<void>;
    forceValidation: () => boolean;
    /**
     * @internal
     * Returns whether container is valid without forcing validation
     */
    isValid(): boolean;
    /** @internal */
    setFieldValue(fieldId: number, values: string[]): void;
    /** @internal */
    getOrCreateFieldValue(fieldId: number): FieldValue;
    /** @internal */
    protected initializeFieldComponentAsync(fieldComponentRef: ComponentRef<LfFieldComponent>, fieldInfo: LfFieldInfo, value: string): Promise<void>;
    /** @internal */
    protected initializeMultivalueComponentAsync(multivalueComponentRef: ComponentRef<LfFieldMultivalueComponent>, fieldInfo: LfFieldInfo, stringValues: string[]): Promise<void>;
    /** @internal */
    protected getValuesById(fieldId: number): string[];
    /** @internal */
    private createDefaultFieldValue;
    /** @internal */
    private createFieldValueFromFieldInfo;
    static ɵfac: i0.ɵɵFactoryDeclaration<LfFieldContainerDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<LfFieldContainerDirective, never, never, { "forceValidation": { "alias": "forceValidation"; "required": false; }; }, { "fieldValuesChanged": "fieldValuesChanged"; }, never, never, false, never>;
}
