import { App } from 'vue';
import { ComponentOptionsMixin } from 'vue';
import { ComponentProvideOptions } from 'vue';
import { DefineComponent } from 'vue';
import { JSONSchema7TypeName } from 'json-schema';
import { PublicProps } from 'vue';

declare type __VLS_Props = {
    modelValue: ExtendedSchemaProperty | JsonSchema_2;
    isRootLevel?: boolean;
};

declare type ExtendedSchemaProperty = SchemaProperty_2 & {
    items?: SchemaProperty_2;
};

export declare const install: (app: App) => void;

export declare interface JsonSchema {
    type: 'object';
    title?: string;
    description?: string;
    properties: Record<string, SchemaProperty_2>;
    required?: string[];
}

declare type JsonSchema_2 = {
    type: 'object';
    properties: Record<string, SchemaProperty_2>;
    required?: string[];
    $schema?: string;
    $id?: string;
    $comment?: string;
    title?: string;
    description?: string;
};

export declare const JsonSchemaForm: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
    "update:model-value": (value: ExtendedSchemaProperty | JsonSchema_2) => any;
}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{
    "onUpdate:model-value"?: ((value: ExtendedSchemaProperty | JsonSchema_2) => any) | undefined;
}>, {
    isRootLevel: boolean;
}, {}, {}, {}, string, ComponentProvideOptions, false, {
    formRef: unknown;
}, HTMLDivElement>;

declare const plugin: {
    install: (app: App) => void;
    component: DefineComponent<{
        modelValue: ( SchemaProperty_2 & {
            items?: SchemaProperty_2;
        }) | JsonSchema_2;
        isRootLevel?: boolean;
    }, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
        "update:model-value": (value: ( SchemaProperty_2 & {
            items?: SchemaProperty_2;
        }) | JsonSchema_2) => any;
    }, string, PublicProps, Readonly<{
        modelValue: ( SchemaProperty_2 & {
            items?: SchemaProperty_2;
        }) | JsonSchema_2;
        isRootLevel?: boolean;
    }> & Readonly<{
        "onUpdate:model-value"?: ((value: ( SchemaProperty_2 & {
            items?: SchemaProperty_2;
        }) | JsonSchema_2) => any) | undefined;
    }>, {
        isRootLevel: boolean;
    }, {}, {}, {}, string, ComponentProvideOptions, false, {
        formRef: unknown;
    }, HTMLDivElement>;
};
export default plugin;

export declare type SchemaProperty = {
    type: JSONSchema7TypeName;
    title?: string;
    description?: string;
    properties?: Record<string, SchemaProperty_2>;
    required?: string[];
} & ({
    type: 'array';
    items: SchemaProperty_2;
} | {
    type: Exclude<JSONSchema7TypeName, 'array'>;
    items?: never;
});

declare interface SchemaProperty_2 {
    type: JSONSchema7TypeName;
    title?: string;
    description?: string;
    properties?: Record<string, SchemaProperty_2>;
    items?: SchemaProperty_2;
    required?: string[];
}

export { }
