import { TemplateRef } from '@angular/core';
import { FieldSize } from '../field-size';
import { FieldType } from '../field-type';
import { AbstractControl } from '@angular/forms';
import { FormField } from '../../form-field';
export interface FieldConfig {
    defaultValue?: any;
    required?: () => boolean;
    visible?: () => boolean;
    id?: string;
    name: string;
    label: string;
    infoSign?: string;
    tooltip?: string;
    placeholder?: string;
    showClear?: boolean;
    type?: FieldType;
    size?: FieldSize;
    representedBy?: "radio" | "switch";
    errorMessages?: () => ({}) | {};
    bottomTemplate?: TemplateRef<Element>;
    footer?: {
        help?: {
            text: string;
            visible?: (options: {
                abstractControl: AbstractControl;
                formField: FormField;
            }) => boolean;
        };
        link?: {
            label: string;
            onClick: (options: {
                abstractControl: AbstractControl;
                formField: FormField;
            }) => void;
            visible?: (options: {
                abstractControl: AbstractControl;
                formField: FormField;
            }) => boolean;
        };
    };
    CustomFieldClass?: unknown;
    CustomFieldComponentClass?: unknown;
    displayTimeInfoSign?: number;
    sortableColumnName?: string;
    useInfoSignFocusedInputRef?: boolean;
    /**
     * In some cases DynamicFormField use a custom field that alredy exists, this happen in CustomFields when convert 'Integer, Double & Money' types to 'Custom' this create two labels. activate this property hide the parent label.
     */
    ignoreLabel?: boolean;
}
export declare abstract class Field {
    required?: () => boolean;
    visible?: () => boolean;
    id?: string;
    name: string;
    label: string;
    infoSign?: string;
    tooltip?: string;
    placeholder?: string;
    showClear?: boolean;
    type?: FieldType;
    size: FieldSize;
    defaultValue?: any;
    representedBy?: "radio" | "switch";
    errorMessages?: () => ({}) | {};
    bottomTemplate?: TemplateRef<Element>;
    CustomFieldClass?: unknown;
    CustomFieldComponentClass?: unknown;
    displayTimeInfoSign?: number;
    sortableColumnName?: string;
    footer?: {
        help?: {
            text: string;
            visible?: (options: {
                abstractControl: AbstractControl;
                formField: FormField;
            }) => boolean;
        };
        link?: {
            label: string;
            onClick: (options: {
                abstractControl: AbstractControl;
                formField: FormField;
            }) => void;
            visible?: (options: {
                abstractControl: AbstractControl;
                formField: FormField;
            }) => boolean;
        };
    };
    useInfoSignFocusedInputRef: boolean;
    ignoreLabel?: boolean;
    constructor(config: FieldConfig);
    get gridClass(): string[];
}
