import AppModule from '../app-modules/app-module.js';
import Editor from '../editor/editor.js';
export interface ICategory {
    name: string;
    id: string;
    colour: string;
}
export interface IMetaRenderer {
    renderToolboxEntry(entry: MetaModule, whitelist: string[] | null): ICategory | null;
    disposeToolboxEntry(entry: ICategory): void;
}
export interface IMetaDefinition {
    id?: string;
    symbols?: IMetaDefinition[];
    name: string;
    type: 'module' | 'variable' | 'function' | 'parameter' | 'blockly';
    color?: string;
    verbose?: string;
    returnType?: any;
    typeScriptDefinition?: string;
    parameters?: IMetaDefinition[];
    default?: any;
    enum?: [string, string][];
    blockly?: any;
    toolbox?: boolean;
    getter?: boolean;
    setter?: boolean;
    disabled?: boolean;
}
export interface IAPIDefinition extends IMetaDefinition {
    onInstall?(editor: Editor, mod: AppModule): void;
}
export interface IAPIFunctionDefition {
    (editor: Editor): IAPIDefinition;
    type: 'module';
}
export declare type IAPIJointDefinition = (IAPIDefinition | IAPIFunctionDefition);
export declare class Meta {
    def: IMetaDefinition;
    parent?: Meta;
    symbols?: Meta[];
    constructor(def: IMetaDefinition, parent?: Meta);
    disable(): void;
    build(): void;
    getNameChain(sep?: string, prev?: string): string;
    getColor(): string;
    getVerboseDisplay(): string;
    getRoot(): Meta;
}
export declare class MetaParameter extends Meta {
    getReturnType(): any;
}
export declare class MetaVariable extends Meta {
    getReturnType(): any;
}
export declare class MetaModule extends Meta {
}
interface IParameters extends IMetaDefinition {
}
interface IFunctionDefinition extends IMetaDefinition {
    parameters: IParameters[];
}
export declare class MetaFunction extends Meta {
    parameters: MetaParameter[];
    def: IFunctionDefinition;
    constructor(def: IFunctionDefinition, parent?: Meta);
    getReturnType(): any;
    getParameters(): MetaParameter[];
}
export default MetaModule;
