import { TemplateRef } from '@angular/core';
import { AbstractControl } from '@angular/forms';
import { FileDto } from '@seniorsistemas/angular-components/file-upload';
import { AddonConfig } from './addon-config';
import { BooleanOptionsLabel } from './configurations/fields/boolean-field';
import { FieldSize } from './configurations/field-size';
import { FieldType } from './configurations/field-type';
import { CalendarLocaleOptions, NumberLocaleOptions } from '@seniorsistemas/angular-components/locale';
import { NumberAlignmentOption } from '@seniorsistemas/angular-components/number-input';
import { AlignmentOptions } from '@seniorsistemas/ng2-currency-mask';
export declare class FormField {
    id?: string;
    /**
     * Tells whether the field is required or not
     */
    required?: () => boolean;
    name: string;
    sortableColumnName?: string;
    type?: FieldType;
    label?: string;
    /**
     * Labels of a Radio Button, only used to FieldType Boolean
     */
    optionsLabel?: BooleanOptionsLabel;
    tooltip?: string;
    /**
     * Mask pattern.
     */
    mask?: ((options?: {
        value: unknown;
    }) => string) | string;
    /**
     * Message to display when there are no results for a query.
     */
    emptyMessage?: string;
    cols?: number;
    rows?: number;
    placeholder?: string;
    options?: any;
    calendarLocaleOptions?: CalendarLocaleOptions;
    numberLocaleOptions?: NumberLocaleOptions;
    multiple?: boolean;
    appendTo?: string;
    browserAutocomplete?: boolean;
    showClear?: boolean;
    showOnFocus?: boolean;
    style?: {
        [klass: string]: any;
    };
    representedBy?: 'radio' | 'switch';
    /**
     * Whether the `RadioButton` should be displayed on the vertical or not.
     *
     * @default false
     */
    verticalAlignment?: boolean;
    /**
     * Field max length
     */
    precision?: Function | number;
    /**
     * Number of decimal places
     */
    scale?: Function | number;
    /**
     * @deprecated Using FieldType.Number this attribute is unnecessary
     */
    alignTo?: NumberAlignmentOption | AlignmentOptions;
    gridClass?: string | string[] | Set<string> | {
        [klass: string]: any;
    };
    size?: FieldSize;
    multipleSelectedLabel?: string;
    inputType?: string;
    accept?: string;
    files?: FileDto[];
    autocompleteForceSelection?: boolean;
    /**
     * The minimum selectable date.
     */
    minDate?: Date;
    /**
     * The maximum selectable date.
     */
    maxDate?: Date;
    /**
     * Set the date to highlight on first opening if the field is blank.
     */
    defaultDate?: Date;
    /**
     * Text or icon to be grouped in the left of an input.
     */
    leftAddon?: AddonConfig;
    /**
     * Text or icon to be grouped in right of an input.
     */
    rightAddon?: AddonConfig;
    /**
     * InfoSign para a label do input.
     */
    infoSign?: string;
    /**
     * Expression to restricts user input
     */
    keyFilter?: RegExp;
    /**
     * Default value for field
     */
    defaultValue?: any;
    /**
     * Customized FormField error message
     */
    errorMessages?: () => {} | {};
    visible?: () => boolean;
    /**
     * Callback to invoke when the field loses focus
     */
    onBlur?: (event: FocusEvent) => void;
    /**
     * Callback to invoke when the field receives focus
     */
    onFocus?: (event: FocusEvent) => void;
    onComplete?: (event: any) => void;
    onInput?: (event: any) => void;
    onChange?: (event: boolean) => void;
    onSelect?: (event: any) => void;
    /**
     * Callback to invoke on component click.
     */
    onClick?: (event: any) => void;
    onClose?: (event: any) => void;
    onTodayClick?: (event: any) => void;
    onClearClick?: (event: any) => void;
    onMonthChange?: (event: any) => void;
    onYearChange?: (event: any) => void;
    /**
     * Callback to invoke when a value is added.
     */
    onAdd?: (event: any) => void;
    /**
     * Callback to invoke when a value is removed.
     */
    onRemove?: (event: any) => void;
    /**
     * Callback to invoke when a chip is clicked.
     */
    onChipClick?: (event: any) => void;
    /**
     * Callback to invoke when a slider is released
     */
    onSlideEnd?: (event: any) => void;
    CustomFieldClass?: any;
    CustomFieldComponentClass?: any;
    /**
     * @deprecated You should use footer attribute instead.
     */
    bottomTemplate?: TemplateRef<Element>;
    autoClear?: boolean;
    displayTimeInfoSign?: number;
    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;
    width?: number;
    /**
     * 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 | undefined;
    constructor(config: any);
}
export declare class Option {
    label: string;
    value?: any;
    constructor(label: string, value: any);
}
