import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChange, SimpleChanges } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { ACLService } from '@lxlib/acl';
import { LxlibI18NService, LxlibLocaleService, LocaleData } from '@lxlib/theme';
import { LxlibFormConfig } from './config';
import { ErrorData } from './errors';
import { SFButton, SFLayout } from './interface';
import { FormProperty } from './model/form.property';
import { FormPropertyFactory } from './model/form.property.factory';
import { SFSchema } from './schema/index';
import { SFUISchema } from './schema/ui';
import { TerminatorService } from './terminator.service';
import { SchemaValidatorFactory } from './validator.factory';
export declare function useFactory(schemaValidatorFactory: SchemaValidatorFactory, options: LxlibFormConfig): FormPropertyFactory;
export declare class SFComponent implements OnInit, OnChanges, OnDestroy {
    private formPropertyFactory;
    private terminator;
    private options;
    private dom;
    private cdr;
    private localeSrv;
    private aclSrv;
    private i18nSrv;
    private unsubscribe$;
    private _renders;
    private _item;
    private _valid;
    private _defUi;
    private _inited;
    locale: LocaleData;
    rootProperty: FormProperty | null;
    _formData: {};
    _btn: SFButton;
    _schema: SFSchema;
    _ui: SFUISchema;
    /** 表单布局，等同 `nzLayout`，默认：horizontal */
    layout: SFLayout;
    /** JSON Schema */
    schema: SFSchema;
    /** UI Schema */
    ui: SFUISchema;
    /** 表单默认值 */
    formData: {};
    /**
     * 按钮
     * - 值为 `null` 或 `undefined` 表示手动添加按钮，但保留容器
     * - 值为 `none` 表示手动添加按钮，且不保留容器
     * - 使用 `spanLabelFixed` 固定标签宽度时，若无 `render.class` 则默认为居中状态
     */
    button: SFButton | 'none';
    /**
     * 是否实时校验，默认：`true`
     * - `true` 每一次都校验
     * - `false` 提交时校验
     */
    liveValidate: boolean;
    /** 指定表单 `autocomplete` 值 */
    autocomplete: 'on' | 'off';
    /** 立即显示错误视觉 */
    firstVisual: boolean;
    /** 是否只展示错误视觉不显示错误文本 */
    onlyVisual: boolean;
    /** 表单模式 */
    set mode(value: 'default' | 'search' | 'edit');
    get mode(): 'default' | 'search' | 'edit';
    private _mode;
    /**
     * Whether to load status，when `true` reset button is disabled status, submit button is loading status
     */
    loading: boolean;
    disabled: boolean;
    noColon: boolean;
    cleanValue: boolean;
    /** 数据变更时回调 */
    readonly formChange: EventEmitter<{}>;
    /** 提交表单时回调 */
    readonly formSubmit: EventEmitter<{}>;
    /** 重置表单时回调 */
    readonly formReset: EventEmitter<{}>;
    /** 表单校验结果回调 */
    readonly formError: EventEmitter<ErrorData[]>;
    /** 表单校验状态 */
    get valid(): boolean;
    /** 表单值 */
    get value(): {
        [key: string]: any;
    };
    /**
     * 根据路径获取表单元素属性
     * @param path [路径](https://ng-alain.com/form/qa#path)
     */
    getProperty(path: string): FormProperty | null;
    /**
     * 根据路径获取表单元素当前值
     * @param path [路径](https://ng-alain.com/form/qa#path)
     */
    getValue(path: string): any;
    /**
     * 根据路径设置某个表单元素属性值
     * @param path [路径](https://ng-alain.com/form/qa#path)
     * @param value 新值
     */
    setValue(path: string, value: any): this;
    onSubmit(e: Event): void;
    constructor(formPropertyFactory: FormPropertyFactory, terminator: TerminatorService, options: LxlibFormConfig, dom: DomSanitizer, cdr: ChangeDetectorRef, localeSrv: LxlibLocaleService, aclSrv: ACLService, i18nSrv: LxlibI18NService);
    protected fanyi(key: string): string;
    private inheritUI;
    private coverProperty;
    private coverButtonProperty;
    ngOnInit(): void;
    ngOnChanges(changes: {
        [P in keyof this]?: SimpleChange;
    } & SimpleChanges): void;
    private attachCustomRender;
    validator(options?: {
        emitError?: boolean;
        onlyRoot?: boolean;
    }): this;
    /**
     * 刷新 Schema，一般需要动态修改 Schema 某个值时可以方便调用
     */
    refreshSchema(newSchema?: SFSchema, newUI?: SFUISchema): this;
    /**
     * 重置表单
     * @param [emit] 是否触发 `formReset` 事件，默认：`false`
     */
    reset(emit?: boolean): this;
    private cleanRootSub;
    ngOnDestroy(): void;
}
