import { Provider } from '@angular/core';
import { ValidatorFn, FormControl } from '@angular/forms';
export declare enum TdDynamicType {
    Text = "text",
    Boolean = "boolean",
    Number = "number",
    Array = "array",
    Date = "date",
}
export declare enum TdDynamicElement {
    Input = "input",
    Datepicker = "datepicker",
    Password = "password",
    Textarea = "textarea",
    Slider = "slider",
    SlideToggle = "slide-toggle",
    Checkbox = "checkbox",
    Select = "select",
    FileInput = "file-input",
    TextEditor = "text-editor",
    ColorPicker = "color-picker",
    TimePicker = "time-picker",
    DateTimePicker = "date-time-picker",
    Organization = "organization",
    GallerySelector = "gallery-selector",
    TreeSelector = "tree-selector",
    EditableTable = "editable-table",
    ChipSelector = "chip-selector",
}
export declare enum Visibility {
    None = -1,
    All = 0,
    Add = 1,
    Edit = 2,
}
export interface ITdDynamicElementValidator {
    validator: ValidatorFn;
}
export interface ITdDynamicElementConfig {
    label?: string;
    name: string;
    type: TdDynamicType | TdDynamicElement;
    required?: boolean;
    disabled?: boolean;
    hidden?: boolean;
    min?: any;
    max?: any;
    minLength?: any;
    maxLength?: any;
    step?: number;
    selections?: string[] | {
        value: any;
        label: string;
    }[];
    default?: any;
    flex?: number;
    validators?: ITdDynamicElementValidator[];
    visibility?: Visibility;
    selectComplex?: boolean;
    selectMultiple?: boolean;
    searchable?: boolean;
    translate?: boolean;
    treeItems?: any;
    action?: (value?: any) => Promise<any>;
    schema?: any;
    draggable?: any;
    extras?: any;
    extraFields?: string[];
    chips?: {
        value: any;
        label: string;
        active: boolean;
    }[];
}
export declare const DYNAMIC_ELEMENT_NAME_REGEX: RegExp;
export declare class TdDynamicFormsService {
    /**
    * Method to validate if the [name] is a proper element name.
    * Throws error if name is not valid.
    */
    validateDynamicElementName(name: string): void;
    /**
    * Gets component to be rendered depending on [TdDynamicElement | TdDynamicType]
    * Throws error if it does not exists or not supported.
    */
    getDynamicElement(element: TdDynamicElement | TdDynamicType, translate?: boolean): any;
    /**
    * Creates form control for element depending [ITdDynamicElementConfig] properties.
    */
    createFormControl(config: ITdDynamicElementConfig): FormControl;
    /**
    * Creates form validationdepending [ITdDynamicElementConfig] properties.
    */
    createValidators(config: ITdDynamicElementConfig): ValidatorFn;
}
export declare function DYNAMIC_FORMS_PROVIDER_FACTORY(parent: TdDynamicFormsService): TdDynamicFormsService;
export declare const DYNAMIC_FORMS_PROVIDER: Provider;
