import { ManyToManyRelation, type ManyToManyRelationConfig } from "./ManyToManyRelation";
import { ManyToOneRelation, type ManyToOneRelationConfig } from "./ManyToOneRelation";
import { OneToOneRelation, type OneToOneRelationConfig } from "./OneToOneRelation";
import { PolymorphicRelation, type PolymorphicRelationConfig } from "./PolymorphicRelation";
import { type RelationType, RelationTypes } from "./relation-types";
export * from "./EntityRelation";
export * from "./EntityRelationAnchor";
export * from "./RelationHelper";
export * from "./RelationMutator";
export * from "./RelationAccessor";
import { RelationField, type RelationFieldBaseConfig, type RelationFieldConfig, relationFieldConfigSchema } from "./RelationField";
export { OneToOneRelation, type OneToOneRelationConfig, ManyToOneRelation, type ManyToOneRelationConfig, ManyToManyRelation, type ManyToManyRelationConfig, PolymorphicRelation, type PolymorphicRelationConfig, RelationTypes, type RelationType, RelationField, relationFieldConfigSchema, type RelationFieldBaseConfig, type RelationFieldConfig, };
export declare const RelationClassMap: {
    readonly "1:1": {
        readonly schema: import("@sinclair/typebox").TObject<{
            required: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            mappedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            inversedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            sourceCardinality: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
            with_limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
            fieldConfig: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
                label: import("@sinclair/typebox").TString;
            }>>;
        }>;
        readonly cls: typeof OneToOneRelation;
    };
    readonly "n:1": {
        readonly schema: import("@sinclair/typebox").TObject<{
            required: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            mappedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            inversedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            sourceCardinality: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
            with_limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
            fieldConfig: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
                label: import("@sinclair/typebox").TString;
            }>>;
        }>;
        readonly cls: typeof ManyToOneRelation;
    };
    readonly "m:n": {
        readonly schema: import("@sinclair/typebox").TObject<{
            required: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            mappedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            inversedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            connectionTable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            connectionTableMappedName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        }>;
        readonly cls: typeof ManyToManyRelation;
    };
    readonly poly: {
        readonly schema: import("@sinclair/typebox").TObject<{
            required: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            mappedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            inversedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            targetCardinality: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
        }>;
        readonly cls: typeof PolymorphicRelation;
    };
};
export declare const RelationFieldClassMap: {
    readonly relation: {
        readonly schema: import("@sinclair/typebox").TObject<{
            default_value: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TAny>;
            required: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            label: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            fillable: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnsafe<"create" | "read" | "update" | "delete">>]>>;
            hidden: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TBoolean, import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnsafe<"form" | "table" | "create" | "read" | "update" | "delete" | "submit">>]>>;
            virtual: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
            reference: import("@sinclair/typebox").TString;
            target: import("@sinclair/typebox").TString;
            target_field: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            target_field_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<"text" | "integer">>;
            on_delete: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<"no action" | "restrict" | "cascade" | "set null" | "set default">>;
        }>;
        readonly field: typeof RelationField;
    };
};
