import { ColumnProps, IObject } from 'ng-lib-tsx';
import React, { ComponentClass, FunctionComponent } from 'react';
import { LabelPosition, Layout } from '../interface';
export interface CONF_INFO {
    form?: {
        [propskey: string]: FORM_ENTRY;
    };
    fieldSetForm?: {
        desTitle: string;
        id?: string;
        itemId?: string;
        fieldSets: Array<FORM_ENTRY>;
        [propskey: string]: any;
    };
    grid?: {
        [propskey: string]: {};
    };
    tabPanel: {
        id: string;
        desTitle: string;
        items: Array<TabPanelItem>;
    };
}
export interface TabPanelItem {
    /**
     * @description   标签页Id
     */
    id: string;
    /**
     * @description   标签页标题
     */
    title: string;
    /**
     * @description   标签页内容组件
     */
    xtype?: React.ReactNode;
    /**
     * @description   是否强制渲染
     * @default       false
     */
    forceRender?: boolean;
    height?: number | string;
}
interface COMMON_LAYOUT_ENTRY {
    id?: string;
    name?: string;
    label?: React.ReactNode;
}
export declare type FORM_ENTRY = {
    /**
     * @description   标签宽度
     * @default       85
     */
    labelWidth?: number | string;
    /**
     * @description   绑定的数据库表名
     */
    bindtable?: string;
    /**
     * @description   表单条目配置
     */
    children: Array<FIELD_PROPERTYS>;
    /**
     * @description   标签位置
     * @default       right
     */
    labelPosition?: LabelPosition;
    /**
     * @description   表格表单
     */
    bordered?: boolean;
    /**
     * @description   表格列数
     */
    colspan?: number | Array<number> | {
        [propsKey: number]: number;
    };
    layout?: Layout;
    [propskey: string]: any;
} & COMMON_LAYOUT_ENTRY;
export declare type FIELD_PROPERTYS = {
    /**
     * @description   组件类型
     * @default       NGInput
     */
    xtype?: COMP_TYPE;
    /**
     * @description   跨列
     * @default       1
     */
    colspan?: number;
    /**
     * @description   提示
     */
    placeholder?: string;
    /**
     * @description   是否必填
     */
    required?: boolean;
    /**
     * @description   是否禁用
     */
    disabled?: boolean;
    /**
     * @description   表填条目组件私有属性
     */
    antProps?: object;
    /**
     * @description   多语言的key值
     */
    langKey?: string;
    /**
     * @description   子元素
     */
    children?: FIELD_PROPERTYS[];
    /**
     * @description   子元素，元数据配置中原ext配置
     */
    items?: FIELD_PROPERTYS[];
    /**
     * @description 额外的提示信息
     */
    extra?: React.ReactNode;
    /**
     * @description   其他属性，根据xtype进行配置
     */
    [propskey: string]: any;
} & Partial<DataItemType> & COMMON_LAYOUT_ENTRY;
export declare type CONF_INFO_KEY = keyof CONF_INFO;
export declare type COMP_TYPE = 'ngFormPanel' | 'container' | 'NGCheckBoxGroup' | 'NGInput' | 'NGInputNumber' | 'NGSelect' | 'NGDatePicker' | 'NGDateTimePicker' | 'NGTimePicker' | 'NGSingleHelp' | 'NGMultipleHelp' | 'NGPassword' | 'NGButton' | 'NGTextArea' | 'NGRadio' | 'NGRadioGroup' | String | React.ComponentType<any>;
export declare type DataItemType = {
    value?: string;
    label?: React.ReactNode;
    children?: Array<DataItemType>;
    [propskey: string]: any;
};
export interface Common_Property {
    type: string;
    defaultValue?: any;
    editor: ComponentClass<any, any> | FunctionComponent<any>;
    writeable: boolean;
    cnLabel?: string;
}
export declare type Comp_Props = {
    [propskey: string]: Common_Property;
};
export interface COMP_ENTRY {
    instance: React.ComponentType<any> | string;
    defaultProps?: IObject;
    props?: Comp_Props;
    children?: any;
    listener?: {
        [propskey: string]: string;
    };
}
export interface COMP_CONF {
    [xtype: string]: COMP_ENTRY;
}
export interface treeNode {
    value: any;
    name: string;
    label: React.ReactNode;
    children: Array<treeNode> | null;
}
declare type Lay_Config_Props = Comp_Props | {
    childItem?: Comp_Props;
};
export declare type Config_Props = {
    grid: Lay_Config_Props;
    tabPanel: Lay_Config_Props;
    fieldSetForm: Lay_Config_Props | {
        childItem: Lay_Config_Props;
    };
    form: Lay_Config_Props;
};
export declare namespace formConfProps {
    type FormFieldSet = Array<FIELD_PROPERTYS> | FORM_ENTRY;
    type FormLayout = FormFieldSet;
    type FormSet = Array<FORM_ENTRY> | {
        children: Array<FORM_ENTRY>;
        [propskey: string]: any;
    };
    type GridView = {
        children: Array<ColumnProps>;
        [propskey: string]: any;
    } | Array<ColumnProps>;
    type TabPanel = Array<TabPanelItem>;
}
export {};
