import { JSONSchema, FormElement, DataSet, EditorComponentCatalogue } from '@tomino/dynamic-form';
import { IMSTMap, ISimpleType } from 'mobx-state-tree';
import { JSONSchemaBase } from '@tomino/dynamic-form';
import { SchemaRecord } from './editor_types';
declare type FormElementType = DataSet<FormElement & {
    id: string;
}>;
export interface FormDataSet<P = any, C = any, CH = any> extends FormElementType {
    elements: FormDataSet<CH, any>[];
    pages: FormDataSet[];
    props: P;
    controlProps: C;
    parent: FormDataSet<any, CH>;
    isSelected: boolean;
    moveElement(from: FormDataSet, to: FormDataSet, index?: number): void;
}
declare type SchemaElementType = DataSet<JSONSchemaBase>;
export interface SchemaDataSet extends SchemaElementType {
    id: string;
    required: string[];
    parent: SchemaDataSet;
    properties: IMSTMap<ISimpleType<SchemaDataSet>>;
    items: SchemaDataSet;
    definitions: IMSTMap<ISimpleType<SchemaDataSet>>;
    reference?: SchemaDataSet;
    imports: IMSTMap<ISimpleType<SchemaDataSet>>;
    oneOf: SchemaDataSet[];
    allOf: SchemaDataSet[];
    anyOf: SchemaDataSet[];
    not: SchemaDataSet;
    changeType(value: string, prev: string): void;
}
export declare type StateDataSet = {
    readonly selectedSchema: SchemaDataSet;
    readonly selectedSchemaName: string;
    readonly selectedElement: FormDataSet;
    readonly selectedForm: FormDataSet;
    readonly selectedLeftPane: LeftPane;
    setForm(element: FormDataSet): void;
    setSchema(schema: SchemaDataSet, name?: string): void;
    setElement(element: FormDataSet, schema: SchemaDataSet): void;
    deleteActiveSchema(): void;
    deleteActiveElement(): void;
    changeLeftPane(view: LeftPane): void;
};
declare type LeftPane = 'pages' | 'data' | 'components' | 'outline' | 'views' | 'all';
export interface ProjectDataSet {
    form: FormDataSet;
    schema: SchemaDataSet;
    state: StateDataSet;
    renameSchema(name: string, rootSchema: SchemaDataSet): string;
}
export declare function searchJsonSchema(func: (item: JSONSchema) => any, schema: JSONSchema): any;
export declare function searchSchema(schema: SchemaDataSet, func: (item: SchemaDataSet) => any): any;
export declare function searchForm(form: FormDataSet, func: (item: FormDataSet) => any): any;
declare type IState = {
    editorCatalogue: EditorComponentCatalogue;
    selectedParentSchema: SchemaDataSet;
    selectedSourcePath: string;
    recomputeDataBounce(): void;
    types: SchemaRecord[];
    schema: SchemaDataSet;
    form: FormDataSet;
    project: ProjectDataSet;
    state: StateDataSet;
};
export declare function prepareStores(context: IState): (form: FormElement<any, any>, schema: JSONSchema) => ProjectDataSet;
export {};
