import { Scheduler } from "./Scheduler";
import { ITree, Tree } from "./Tree";
type TOptions = {
    readonly key?: string;
    readonly ref?: ((inst: any) => void) | string;
};
export type TCoreComponent = CoreComponent<CoreComponentProps, CoreComponentContext>;
type TPrivateComponentData = {
    parent: CoreComponent | undefined;
    treeNode: Tree;
    context: {
        scheduler: Scheduler;
        globalIterateId: number;
    };
    children: object;
    childrenKeys: string[];
    prevChildrenArr: object[];
    updated: boolean;
    iterateId: number;
};
export type CoreComponentProps = Record<string, unknown>;
export type CoreComponentContext = Record<string, unknown>;
export type ComponentDescriptor<Props extends CoreComponentProps = CoreComponentProps, Context extends CoreComponentContext = CoreComponentContext> = {
    props: Props;
    options: TOptions;
    klass: Constructor<CoreComponent<Props, Context>>;
};
export declare class CoreComponent<Props extends CoreComponentProps = CoreComponentProps, Context extends CoreComponentContext = CoreComponentContext> implements ITree {
    $: object;
    context: Context;
    props: Props;
    protected __comp: TPrivateComponentData;
    get zIndex(): number;
    set zIndex(index: number);
    get renderOrder(): number;
    constructor(props: Props, parent?: CoreComponent);
    isIterated(): boolean;
    performRender: () => void;
    getParent(): CoreComponent | undefined;
    setContext<K extends keyof Context>(context: Pick<Context, K>): void;
    protected unmount(): void;
    protected render(): void;
    protected updateChildren(): void | ComponentDescriptor[];
    protected setProps<K extends keyof Props>(_: Pick<Props, K>): void;
    private __unmount;
    iterate(): boolean;
    protected __updateChildren(): void;
    private __unmountChildren;
    static create<Props extends CoreComponentProps, Context extends CoreComponentContext>(this: Constructor<CoreComponent<Props, Context>>, props?: Props, options?: TOptions): ComponentDescriptor<Props, Context>;
    static mount<Props extends CoreComponentProps, Context extends CoreComponentContext>(Component: Constructor<CoreComponent<Props, Context>>, props?: Props): CoreComponent<Props, Context>;
    static unmount(instance: any): void;
}
export {};
