import { Store } from '@ngxs/store';
import { SmzDialogFeature } from '../../modules/smz-dialogs/models/smz-dialogs';
import { DefaultPrimeNgFilterMatchMode, SmzControlTypes } from '../../modules/smz-forms/models/control-types';
import { SimpleNamedEntity } from '../../common/models/simple-named-entity';
import { SmzTemplate } from '../../common/models/templates';
export declare function convertFormCreationFeature(entityName: string, store: Store, entity?: {
    [key: string]: any;
}, options?: InputConversionOptions): SmzDialogFeature;
export declare function convertFormUpdateFeature(entityName: string, store: Store, entity?: {
    [key: string]: any;
}, options?: InputConversionOptions): SmzDialogFeature;
export declare function convertFormFeature(entityName: string, store: Store, entity?: {
    [key: string]: any;
}, options?: InputConversionOptions): SmzDialogFeature;
export declare function convertFormFeatureFromInputData(groups: any[], entity: {
    [key: string]: any;
}, options: InputConversionOptions, store: Store): SmzDialogFeature;
export interface FormDefinitionData {
    create: FormGroupConfig[];
    update: FormGroupConfig[];
}
export interface FormGroupConfig {
    controls: InputConfig[];
}
export interface InputConfig {
    controlType: SimpleNamedEntity;
    dataSource?: SimpleNamedEntity;
    propertyName: string;
    sourceName?: string;
    name: string;
    defaultValue?: any;
    group?: string;
    dependsOn?: string;
    textAreaRows?: number;
    mask?: string;
    unmask?: boolean;
    characterPattern?: string;
    fileAccept?: string;
    showFilter?: boolean;
    filterMatchMode?: DefaultPrimeNgFilterMatchMode | any;
    required: boolean;
    minLength?: number;
    maxLength?: number;
    data?: SimpleNamedEntity[];
    isVisible: boolean;
    excludeFromResponse?: boolean;
    entityLabelPropertyName?: string;
    linkedPropertyName?: string;
    linkedDisplayName?: string;
}
export interface InputConversionOptions {
    fieldsToIgnore?: string[];
    fieldsToConvert?: {
        originalName: string;
        newName: string;
    }[];
    fieldsToUseSelectors?: {
        propertyName: string;
        selector: any;
    }[];
    fieldsToOverwriteOrder?: string[];
    fieldsWithLayoutTemplates?: {
        propertyName: string;
        template: SmzTemplate;
    }[];
    fieldsToOverwriteControl?: {
        propertyName: string;
        callback: (control: SmzControlTypes) => void;
    }[];
}
