import { normalizeField } from '../base/helper';
import { DBTableBrief, FieldItem, ModelItem, RelationShipItem, ExtraField } from '../type';
import { Rect } from './Rect';
import { Manager } from './Manager';
import { Line } from './Line';
import { RelationFieldItem } from '../plugin/relation/RelationField';
import { AddRelationEventContext } from './Event';
export type RelationShipDetail = RelationShipItem & {
    model: ModelStore;
    targetModel: ModelStore;
    field?: FieldItem;
    placeholder: FieldItem;
};
export declare const updateSystemField: (data: ModelItem, type: 'saveTimestamp' | 'saveOperator', oper: 'deletedBy' | 'deletedAt' | 'createdBy' | 'createdAt' | 'updatedBy' | 'updatedAt', flag: 'isCreateDate' | 'isUpdateDate' | 'isDeleteDate' | 'isCreateUser' | 'isUpdateUser' | 'isDeleteUser', systemFieldKeyMap?: {
    [propName: string]: string;
} | undefined) => void;
export declare const normalizeSystemField: (data: ModelItem, type: 'saveTimestamp' | 'saveOperator', oper: 'deletedBy' | 'deletedAt' | 'createdBy' | 'createdAt' | 'updatedBy' | 'updatedAt', flag: 'isCreateDate' | 'isUpdateDate' | 'isDeleteDate' | 'isCreateUser' | 'isUpdateUser' | 'isDeleteUser') => void;
export declare class ModelStore {
    readonly manager: Manager;
    readonly data: ModelItem;
    elem?: HTMLDivElement | null;
    layer?: HTMLDivElement | null;
    header?: HTMLDivElement | null;
    unmountCallbacks: Array<() => void>;
    startX: number;
    startY: number;
    moved: boolean;
    startInfo?: {
        x: number;
        y: number;
    };
    lines: Array<Line>;
    x: number;
    y: number;
    width: number;
    height: number;
    dragging: boolean;
    errors: import("mobx").IObservableArray<{
        [propName: string]: any;
        type: string;
        msg: string;
    }>;
    dbTableBrief: DBTableBrief;
    prinstine: ModelItem;
    expanded: boolean;
    constructor(manager: Manager, data: ModelItem);
    get id(): string;
    get plainData(): ModelItem;
    get modified(): boolean;
    get store(): import("./MainStore").MainStore;
    get creatable(): boolean;
    get editable(): boolean;
    get others(): ModelStore[];
    get removable(): boolean;
    toggleExpanded(): void;
    fixReference(): void;
    savePrinstine(): void;
    isFieldEditable(field: FieldItem): boolean;
    isFieldKeyEditable(field: FieldItem): boolean;
    isFieldRemovable(field: FieldItem): boolean;
    isFieldVisible(field: FieldItem): boolean;
    isFieldInsertable(field: FieldItem): boolean;
    isFieldUpdateable(field: FieldItem): boolean;
    isFieldSortable(field: FieldItem, ignoreField?: boolean): boolean;
    isFieldFilterable(field: FieldItem, ignoreField?: boolean): boolean;
    isFieldSearchable(field: FieldItem, ignoreField?: boolean): boolean;
    isRelationField(field: FieldItem): boolean;
    isRelationToRelationShip(field: FieldItem): boolean | undefined;
    /**
     * 是否为能平铺展开的字段，通常对一的关系，关系表中的字段都能平铺展开
     * @param field
     * @returns
     */
    canFlatRelationField(field: FieldItem): boolean;
    get primaryFields(): FieldItem[];
    get primaryField(): FieldItem;
    get nameField(): FieldItem | null | undefined;
    get systemFields(): FieldItem[];
    get foreignFields(): FieldItem[];
    get normalFields(): FieldItem[];
    get fieldsCount(): number;
    get collapsable(): boolean;
    get fields(): FieldItem[];
    get relations(): any[];
    get isTree(): boolean;
    get valid(): boolean;
    getInverseRelation(relation: RelationShipItem): RelationShipDetail | null | undefined;
    validate(errorsReturn?: Array<string>): Promise<boolean>;
    clearErrors(): void;
    /**
     * 获取所有字段，同时把能够平铺展开的字段也获取到
     */
    get availableFields(): FieldItem[];
    /**
     * 获取所有可查询子表和深层对一关系字段
     */
    get availableFieldsDeep(): ExtraField[];
    recursiveLoopFields(model: ModelStore, cache: WeakMap<ModelStore, boolean>, stack: {
        field?: FieldItem | RelationFieldItem | undefined;
        relation?: RelationShipDetail | undefined;
    }[] | undefined, fields: ExtraField[]): ExtraField[];
    buildFieldDetail(field: FieldItem): FieldItem;
    buildFieldsDetail(fields: Array<FieldItem>): FieldItem[];
    getFieldById(id: string): FieldItem | undefined;
    getRelationById(id: string): RelationShipItem | undefined;
    getRelationDetail(idOrKey: string): RelationShipDetail | undefined;
    updateData(data: ModelItem): void;
    addLine(line: Line): void;
    normalizeModel(data: ModelItem): ModelItem;
    normalizeRelation(relation: RelationShipItem): RelationShipItem;
    addFields(value: Array<FieldItem> | FieldItem): void;
    updateField(value: FieldItem): void;
    removeField(value: FieldItem): void;
    validateRelation(relation: RelationShipItem, bindFormField?: boolean): any;
    addRelation(value: RelationShipItem, options?: {
        placeholderId?: string;
        placeholderIndex?: number;
    }, context?: AddRelationEventContext): void;
    updateRelation(value: RelationShipItem): void;
    removeRelation(value: RelationShipItem): void;
    updateFieldsOrder(order: Array<FieldItem>): void;
    attachDom(dom: HTMLDivElement | null): void;
    resizeSensor?: Function;
    /**
     * Diagram 组件 didMount 回调
     */
    mount(): void;
    update(): void;
    /**
     * Diagram 组件 willUnmount 回调
     */
    unmount(): void;
    get rect(): Rect;
    setPosition(x: number, y: number): void;
    handleClick(e: MouseEvent): void;
    handleMouseDown(e: MouseEvent): void;
    handleMouseMove(e: MouseEvent): void;
    handleMouseUp(e: MouseEvent): void;
    syncRectData(): void;
    syncRectToView(): void;
    syncRectToThumb(): void;
    highlightLines(id: string): void;
    thumb: HTMLDivElement | null;
    attachThumbDom(thumb: HTMLDivElement | null): void;
}
export { normalizeField };
