import { Observable } from 'rxjs';
import { BaseEntity } from '../base.entity';
import { PaintedEvent, ParentChangeEvent, SelectionEvent } from '../interfaces/event.interface';
export declare class BaseModel<E extends BaseEntity = BaseEntity> extends BaseEntity {
    protected readonly _type: string;
    protected parent$: import("../state/state").ValueState<E>;
    protected selected$: import("../state/state").ValueState<boolean>;
    protected hovered$: import("../state/state").ValueState<boolean>;
    protected painted$: import("../state/state").ValueState<boolean>;
    constructor(type?: string, id?: string, logPrefix?: string);
    serialize(): {
        type: string;
        id: string;
        locked: boolean;
    };
    getParent(): E;
    setParent(parent: E): void;
    parentChanges(): Observable<ParentChangeEvent<E>>;
    getPainted(): boolean;
    setPainted(painted?: boolean): void;
    getHovered(): boolean;
    setHovered(painted?: boolean): void;
    selectHovered(): Observable<boolean>;
    paintChanges(): Observable<PaintedEvent>;
    getType(): string;
    getSelected(): boolean;
    selectSelected(): Observable<boolean>;
    setSelected(selected?: boolean): void;
    selectionChanges(): Observable<SelectionEvent>;
    getSelectedEntities(): BaseModel[];
}
