import { Edge, Node } from 'react-flow-renderer';
export interface TypeSuggestItem {
    /** the title of the attribute type (used for display) */
    title: string;
    /**
     * based on the selected type, the kind can be
     * - related entity
     * - related entities
     * - alias
     * - storage
     */
    kind: catalog.AttributeKind;
    /**
     * the calculated kind holds the final value of the attribute kind property.
     * it is resolved based on the selected type.
     */
    calculatedKind: catalog.AttributeKind;
    /** the actual value of the type.
     * - can be a primitive type (date, number, bool, ...etc)
     * - can be a dataclass name or a collection name ( related attribute )
     * - can be a full path to an existing attribute. (alias)
     */
    value: string;
    /**
     * it holds to final value for the attributes type property. it is resolved based on the selected type.
     */
    calculatedType: string;
    /**
     * optional property defining the attribute behavior
     */
    behavior?: string;
}
export type TypeSuggestItems = TypeSuggestItem[];
export type ModelNode = Omit<Node, 'type' | 'data'> & {
    data: catalog.IDataClass;
    type: 'table';
    virtual?: boolean;
};
export type ModelEdge = Omit<Edge, 'data'> & {
    data: {
        sourceDataclass: string;
        sourceAttribute?: string;
        targetDataclass: string;
        targetAttribute?: string;
    };
};
export interface ServerModel {
    toJSON: boolean;
    extraProperties?: catalog.IModelProperties;
    dataClasses: catalog.IDataClass[];
}
export type DataclassScope = 'public' | 'publicOnServer';
export type AttributeScope = 'public' | 'publicOnServer' | 'protected' | 'private';
export type TIndexType = 'btree' | 'cluster' | 'auto' | undefined;
export declare enum EAttributeTypes {
    UUID = "uuid",
    STRING = "string",
    TEXT = "text",
    DATE = "date",
    TIME = "duration",
    BOOLEAN = "bool",
    BYTE = "byte",
    INTEGER = "word",
    LONG = "long",
    LONG64 = "long64",
    FLOAT = "number",
    BLOB = "blob",
    IMAGE = "image",
    OBJECT = "object"
}
export declare enum EAttributeKind {
    STORAGE = "storage",
    RELATEDENTITY = "relatedEntity",
    RELATEDENTITIES = "relatedEntities",
    CALCULATED = "calculated",
    COMPOSITION = "composition",
    ALIAS = "alias"
}
export declare const isValidPrimaryKey: (attribute: catalog.IAttribute) => boolean;
export declare const attributeKinds: {
    label: string;
    value: string;
}[];
export declare const primaryKeyAttributes: TypeSuggestItems;
export declare const attributeTypes: TypeSuggestItems;
export declare const dataclassScopes: {
    label: string;
    value: string;
}[];
export declare const attributeScopes: {
    label: string;
    value: string;
}[];
export declare const indexTypes: {
    label: string;
    value: string;
}[];
