import { FeatureDescriptor, ContentDescriptor, SchemaItem } from '@vyuh/sanity-schema-core';
import * as sanity from 'sanity';
import { SchemaTypeDefinition, StringInputProps } from 'sanity';
import { ReactElement } from 'react';

declare const system: FeatureDescriptor;

declare class CardDescriptor extends ContentDescriptor {
    static schemaType: string;
    constructor(props: Partial<ContentDescriptor>);
}

declare class GroupDescriptor extends ContentDescriptor {
    static schemaType: string;
    items: SchemaItem[];
    constructor(props: Partial<GroupDescriptor>);
}

declare class PortableTextDescriptor extends ContentDescriptor {
    static schemaType: string;
    annotations: SchemaTypeDefinition[];
    blocks: SchemaItem[];
    constructor(props: Partial<PortableTextDescriptor>);
}

declare class ConditionalDescriptor extends ContentDescriptor {
    static schemaType: string;
    items: SchemaItem[];
    constructor(props: Partial<ConditionalDescriptor>);
}

declare class AccordionDescriptor extends ContentDescriptor {
    static schemaType: string;
    items: SchemaItem[];
    constructor(props: Partial<AccordionDescriptor>);
}

declare class APIContentDescriptor extends ContentDescriptor {
    static schemaType: string;
    configurations: SchemaTypeDefinition[];
    constructor(props: Partial<APIContentDescriptor>);
}

declare class DividerDescriptor extends ContentDescriptor {
    static schemaType: string;
    constructor(props?: Partial<ContentDescriptor>);
}

declare class DocumentViewDescriptor extends ContentDescriptor {
    static schemaType: string;
    documentTypes: SchemaItem[];
    queryConfigurations: SchemaTypeDefinition[];
    items: SchemaItem[];
    constructor(props: Partial<DocumentViewDescriptor>);
}

declare class DocumentSectionDescriptor extends ContentDescriptor {
    static schemaType: string;
    configurations: SchemaTypeDefinition[];
    constructor(props: Partial<DocumentSectionDescriptor>);
}

declare class DocumentListDescriptor extends ContentDescriptor {
    static schemaType: string;
    queryConfigurations: SchemaTypeDefinition[];
    listItemConfigurations: SchemaTypeDefinition[];
    constructor(props: Partial<DocumentListDescriptor>);
}

declare class DocumentDescriptor extends ContentDescriptor {
    static schemaType: string;
    items: SchemaItem[];
    constructor(props: Partial<Omit<DocumentDescriptor, 'schemaType'>>);
}

declare const empty: {
    type: "object";
    name: "vyuh.empty";
} & Omit<sanity.ObjectDefinition, "preview"> & {
    preview?: sanity.PreviewConfig<{
        title: string;
    }, Record<"title", any>> | undefined;
};

declare class VideoDescriptor extends ContentDescriptor {
    static schemaType: string;
    constructor(props: Partial<ContentDescriptor>);
}

declare class RouteDescriptor extends ContentDescriptor {
    static schemaType: string;
    routeTypes: SchemaTypeDefinition[];
    regionItems: SchemaItem[];
    lifecycleHandlers: SchemaTypeDefinition[];
    constructor(props: Partial<Omit<RouteDescriptor, 'schemaType'>>);
}

declare class ConditionalRouteDescriptor extends ContentDescriptor {
    static schemaType: string;
    constructor(props: Partial<ConditionalRouteDescriptor>);
}

declare function PathInput(props: StringInputProps): ReactElement;

export { APIContentDescriptor, AccordionDescriptor, CardDescriptor, ConditionalDescriptor, ConditionalRouteDescriptor, DividerDescriptor, DocumentDescriptor, DocumentListDescriptor, DocumentSectionDescriptor, DocumentViewDescriptor, GroupDescriptor, PathInput, PortableTextDescriptor, RouteDescriptor, VideoDescriptor, empty, system };
