import { MosxTracker, IMosxTracker, IMosxTrackerParams } from "./internal";
import { DefinitionType } from "./decorators";
declare const mosx: unique symbol;
export interface IMeta {
    type?: string;
    props?: IMetaProperty[];
    hidden?: boolean;
}
export interface IMetaProperty {
    key: string;
    type: DefinitionType;
    hidden?: boolean;
    getter?: boolean;
}
export declare abstract class Mosx {
    static $mx: IMeta;
    private [mosx];
    constructor(owner?: Mosx, tags?: string | string[]);
    static [Symbol.hasInstance](instance: any): any;
    static inject(target: any, owner?: any, tags?: string | string[]): Mosx;
    static new(Class: new (...args: any[]) => any, parent?: any, tags?: any): (...args: any[]) => any;
    static isParent(target: any, parent: any): boolean;
    static getParent(target: any): Mosx | null;
    static setParent(target: any, owner?: any): void;
    static getSnapshot(target: any, tags?: string | string[], spy?: boolean): any;
    static createTracker<T>(target: T, params?: IMosxTrackerParams): IMosxTracker<T>;
    static getTracker(target: any): MosxTracker | null;
    static getTags(target: any): Set<string> | null;
    static addTag(target: any, tags: string | string[]): void;
    static deleteTag(target: any, id: string): void;
    static meta(target: any): IMeta;
    static destroy(target: any): void;
}
export {};
