import type { PropType, ExtractPropTypes, Ref, ComputedRef, StyleValue } from 'vue';
import { IExpandData } from './types';
import type { IFormItem, IFormData, IExtraData, IFieldData, IFormLayout, ILabelAlign, IFormType, IAuthConfig } from './types';
import type { Arrayable, ComponentSize, JSXElement, ValueOf } from '../../_utils/types';
export declare const _props: {
    items: {
        type: PropType<IFormItem[]>;
        required: boolean;
        default: () => never[];
    };
    size: {
        type: PropType<ComponentSize>;
        validator: (val: string) => boolean;
    };
    initialValues: {
        type: PropType<IFormData<string | number, string | number | (string | number)[] | undefined>>;
        default: () => {};
    };
    initialExtras: {
        type: PropType<IExtraData>;
        default: () => {};
    };
    layout: {
        type: PropType<IFormLayout>;
        default: string;
    };
    cols: {
        type: NumberConstructor;
    };
    labelWidth: {
        type: PropType<string | number>;
        default: number;
        validator: (val: string | number) => boolean;
    };
    labelAlign: {
        type: PropType<ILabelAlign>;
        default: string;
    };
    labelWrap: {
        type: BooleanConstructor;
    };
    formType: {
        type: PropType<IFormType>;
        default: string;
    };
    disabled: {
        type: BooleanConstructor;
    };
    uniqueKey: {
        type: StringConstructor;
    };
    defaultRows: {
        type: NumberConstructor;
        default: number;
    };
    defaultExpand: {
        type: BooleanConstructor;
    };
    searchButtonCols: {
        type: NumberConstructor;
    };
    scrollToFirstError: {
        type: BooleanConstructor;
        default: boolean;
    };
    authConfig: {
        type: PropType<IAuthConfig>;
    };
    isAutoFocus: {
        type: BooleanConstructor;
        default: boolean;
    };
    isCollapse: {
        type: BooleanConstructor;
        default: boolean;
    };
    isFieldsDefine: {
        type: BooleanConstructor;
        default: undefined;
    };
    isSearchBtn: {
        type: BooleanConstructor;
        default: boolean;
    };
    isSubmitBtn: {
        type: BooleanConstructor;
    };
    fieldsChange: {
        type: PropType<(items: IFormItem[]) => void>;
    };
    class: {
        type: PropType<string | Arrayable<Record<string, boolean>>>;
    };
    style: {
        type: PropType<StyleValue>;
    };
};
export declare const _emits: {
    valuesChange: (changedValues: IFormData, initialValues: IFormData) => boolean;
    fieldsChange: (changedFields: IFieldData[], allFields: IFieldData[]) => boolean;
    finish: (values: IFormData) => boolean;
    finishFailed: (errorFields: any[]) => boolean;
    reset: () => boolean;
    collapse: (collapse: boolean) => boolean;
};
export type FormProps = ExtractPropTypes<typeof _props>;
export type FormItemProps = IFormItem;
export type FormEmits = typeof _emits;
export type FormInstance = {
    SET_FIELDS_VALUE: (values: IFormData) => void;
    GET_FIELDS_VALUE: (fields?: string[]) => IFormData;
    GET_FORM_DATA: () => Promise<[any, any]>;
    VALIDATE_FIELDS: (fields?: string[]) => Promise<any[]>;
    CLEAR_VALIDATE: (fields?: string[]) => void;
    SET_FIELDS_EXTRA: (values: IExtraData) => void;
    GET_FIELDS_EXTRA: (fields?: string[]) => IExtraData;
    SUBMIT_FORM: () => void;
    RESET_FORM: () => void;
    CREATE_FOCUS: (fieldName: string) => void;
    SET_FORM_ITEM: (fieldName: string, option: Record<string, any>, forceUpdate?: boolean) => void;
};
export type FormInject = {
    formData: Ref<IFormData>;
    other: Ref<IFormData>;
    expand: Ref<IExpandData>;
    isOnlyShow: ComputedRef<boolean>;
    isFilterType: ComputedRef<boolean>;
    setFormValue: (fieldName: string, value: ValueOf<IFormData>) => void;
    setViewValue: (fieldName: string, value?: string) => void;
    getViewValue: (fieldName: string) => string;
    setExpandHandle: (value: boolean) => void;
    getOriginItems: () => IFormItem[];
    getFormItemLabel: (label: string | JSXElement | IFormItem) => string;
    renderFormLabel: (label: string | JSXElement | IFormItem, tip?: string) => JSXElement | string;
    renderFormItemExtra: (option: IFormItem['extra'] & {
        fieldName: string;
    }) => JSXElement;
    renderFormItemButton: (fieldName: string, buttonAfter: IFormItem['buttonAfter']) => JSXElement | undefined | null;
    getBlockDerivedItems: () => any[];
    SUBMIT_FORM: () => void;
    SET_FIELDS_VALUE: (values: IFormData) => void;
    SET_FIELDS_EXTRA: (values: IExtraData) => void;
    GET_FIELDS_VALUE: (fields?: string[]) => IFormData;
};
