import { JSONSchema, JSONSchemaType, JSONSchemaTypeName } from "@vertesia/common";
import { ErrorObject, ValidateFunction } from "ajv";
export declare class Schema {
    schema: JSONSchema;
    properties: Record<string, PropertySchema>;
    _validator?: ValidateFunction;
    constructor(schema?: JSONSchema);
    get validator(): ValidateFunction<unknown>;
    private load;
    hasProperties(): boolean;
    get title(): any;
    get description(): string | undefined;
    private loadProperty;
    get type(): JSONSchemaTypeName;
    validate(value: any): ErrorObject<string, Record<string, any>, unknown>[] | null;
    addProperty(name: string, typeOrSchema: JSONSchemaTypeName | JSONSchema, isRequired?: boolean): PropertySchema;
    removeProperty(name: string): void;
    getProperty(name: string): PropertySchema;
    get editor(): any;
}
export declare class PropertySchema extends Schema {
    parent: Schema;
    name: string;
    constructor(parent: Schema, name: string, schema: JSONSchema);
    get isMulti(): boolean;
    get isReadOnly(): boolean;
    set isReadOnly(value: boolean);
    get defaultValue(): JSONSchemaType | undefined;
    set defaultValue(value: JSONSchemaType | undefined);
    get enum(): JSONSchemaType[] | undefined;
    set enum(values: JSONSchemaType[] | undefined);
    get isRequired(): boolean;
    set isRequired(value: boolean);
    get type(): JSONSchemaTypeName;
    set type(value: JSONSchemaTypeName);
    remove(): void;
    get isBoolean(): boolean;
    get isString(): boolean;
    get isNumber(): boolean;
    get isObject(): boolean;
}
export declare class ArrayPropertySchema extends PropertySchema {
    arraySchema: JSONSchema;
    constructor(parent: Schema, name: string, schema: JSONSchema);
    get isMulti(): boolean;
}
//# sourceMappingURL=schema.d.ts.map